第07章单片机应用系统中的按键与显示习题解答_第1页
第07章单片机应用系统中的按键与显示习题解答_第2页
第07章单片机应用系统中的按键与显示习题解答_第3页
第07章单片机应用系统中的按键与显示习题解答_第4页
第07章单片机应用系统中的按键与显示习题解答_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第7章 单片机应用系统中的按键与显示 习题解答一、填空题 1键盘抖动可以使用 硬件和软件 两种办法消除。2液晶显示的优点是: 液晶显示的优点是:与数码管相比,显示内容多,可显示数字、字符,甚至汉字和图形 。3键盘中断扫描方式的特点是 提高了CPU的工作效率 。4数字5的共阴极七段LED显示代码是 6DH ,数字5的共阳极七段LED显示代码是 92H 。5液晶显示模块(LCM)是指将 液晶显示模块(LCM)是指将控制器、驱动器、显示器 集成在一起的器件。二、简答题1.何谓LED静态显示?何谓LED动态显示?两种显示方式各有何优缺点?答:LED静态显示是指数码管显示某一字符时,相应的发光二极管恒定

2、导通或恒定截止,公共端恒定接地(共阴极)或接正电源(共阳极)。LED动态显示是一位一位地轮流点亮各位数码管的显示方式,每位数码管点亮的时间大约在lms左右。但由于LED具有余辉特性以及人眼也有视觉暂留特性,使人看起来就好像在同时显示不同的字符一样。静态显示的优点是,显示控制程序简单,显示亮度大,节约单片机工作时间。静态显示的缺点是,在显示位数较多时,静态显示占用的I/O口线较多,或者需要增加额外的硬件电路,硬件成本较高。动态显示的优点是,可以大大简化硬件线路。动态显示的缺点是,要循环执行显示程序,对各个数码管进行动态扫描,消耗单片机较多的运行时间;在显示器位数较多或刷新间隔较大时,会有一定的闪

3、烁现象,显示亮度较暗。2.简述用RS触发器消除按键抖动的基本原理。答:RS触发器消除按键抖动的常用电路如图7-3所示。图中用两个与非门构成一个RS触发器。当按键未被按下而处于A处时,触发器输出为“1”。当按键按下处于B处时,输出为“0”。此时即使由于按键的机械弹性,因抖动产生瞬间断开,只要按键不返回原始状态A,双稳态电路的状态就不改变,输出保持为“0”,不会产生抖动。3.设有一个单片机应用系统用三个LED数码管显示运行结果,电路如图7-22所示。显示数据的显示代码已分别存储在内部RAM32H30H中(百位在32H)。编写程序,实现静态显示。 图7-22 简答题3的图答:汇编语言参考答案:(此图

4、中,请将74164的Q0Q7接数码管的Dpa,或对显示内容从高到低逐位转换) ORG 0000H ;在0000H单元存放转移指令 SJMP MAIN ;转移到主程序 ORG 0030H ;程序从0030H开始MAIN: MOV 32H,#5 ;百位 MOV 31H,#4 ;十位 MOV 30H,#3 ;个位 MOV SCON,#00H ;初始化串行口方式0START: MOV DPTR,#TAB ;字形表的入口地址 MOV R0,#30H ;显示数的初始地址LOOP: MOV A,R0 ;取待显示数据 MOVC A,A+DPTR ;查表获取字型码 MOV SBUF,A ;送串口显示 JNB T

5、I,$ ;等待发送完毕 CLR TI ;清发送标志 INC R0 ;地址加一,准备取下一个待显示数 CJNE R0,#33H,LOOP ;判断3个数据是否显示完 SJMP $ ;显示结束TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;段码表 ; 0 1 2 3 4 5 6 7 8 9 对应内容 END ;程序结束C语言参考答案:#include /预处理命令,定义SFR的头文件char code TAB10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /段码表unsigned

6、code dis_code3=0x5,0x4,0x3; /待显示数据main() int i,dis; /定义变量i,dis SCON=0x00; /初始化串行口方式0 for(i=2;i=0;i-) /3位显示循环 dis= dis_codei; /取待显示位数SBUF=TABdis; /取待显示数的字型码while(TI=0); /等待发送完毕TI=0; /清发送标志 while(1); /显示结束 Proteus仿真图如下所示:4设有一个LED数码管动态显示电路如图7-23所示。已知显示代码存储在内部RAM30H开始的8个单元中,编写程序,动态显示给定的信息。图7-23 简答题4的图答:

7、汇编语言参考答案:(用Proteus仿真画图的时候,P0口需接上拉电阻) ORG 0000H ;在0000H单元存放转移指令 SJMP MAIN ;转移到主程序 ORG 0030H ;程序从0030H开始MAIN: MOV 30H,#00H ;给内部RAM30H开始的8个单元内容赋值 MOV 31H,#01H MOV 32H,#02H MOV 33H,#03H MOV 34H,#04H MOV 35H,#05H MOV 36H,#06H MOV 37H,#07H MOV DPTR,#TAB ;共阴字形表的入口地址LOOP: MOV R0,#30H ;待显示数的首地址 MOV R1,#00H ;

8、控制位选信号LOOP1: MOV P1,R1 ;送位选信号 MOV A,R0 ;取待显示数 MOVC A,A+DPTR ;取待显示数据的字型码 CLR P2.7 ;选通74LS377允许控制端 MOV P0,A ;送字形 LCALL DELAY ;调用延时 INC R1 ;选通下一位 INC R0 ;地址加一,准备取下一个待显示数 CJNE R0,#38H,LOOP1 ;判断8个数据是偶显示完 SJMP LOOP ;重新开始显示DELAY: MOV R5,#10 ;延时程序,给R5赋值DEL0: MOV R6,#1 ;给R6赋值DEL1: MOV R7,#20 ;给R7赋值DEL2: DJNZ

9、 R7,DEL2 ;R7减1不等于0继续执行该行 DJNZ R6,DEL1 ;R6减1不等于0跳到DEL1处 DJNZ R5,DEL0 ;R5减1不等于0跳到DEL0处 RET ;子程序返回TAB: DB 3FH,06H,05BH,04FH,66H,6DH,7DH,07H ;段码表 ; 0 1 2 3 4 5 6 7 对应内容 DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ; 8 9 A B C D E FEND C语言参考答案:#include /预处理命令,定义SFR的头文件sbit P2_7=P27;char code TAB16=0x3f,0x06,0x5b,0

10、x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71; /段码表unsigned code dis_code8=0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7; /待显示数据void delay1ms(void) /延时1ms函数 unsigned char temp=249; /声明变量temp,并赋值249 while(-temp); /temp是否减到0,否则继续执行该行 temp=249;/给变量temp赋值 while(-temp);/temp是否减到0,否则继续执行该行void main(v

11、oid) /主函数 int i,dis; /定义变量i的数据类型 do/do while组成循环 unsigned char dsSe1=0x00; /定义变量dsSe1,并赋值0 for(i=0;i8;i+) /8位显示循环 P1=dsSe1; /送字位 dis=dis_codei; /取待显示数 P2_7=0;/选通74LS377允许控制端 P0=TABdis; /取待显示数的字形 delay1ms(); /延时1ms dsSe1+; /字位加1,选送下一位 while(1); Proteus仿真图如下所示:5.有一个单片机显示电路如图7-24所示。图中4511是BCD码锁存/七段LED译

12、码器/驱动器,当其输入为BCD码时,输出为七段LED数码管显示代码。设要显示的BCD码数据存储在内部RAM30H32H中。编写程序,实现指定数据的静态显示。图7-24 简答题5的图答:汇编语言参考答案: ORG 0000H ;在0000H单元存放转移指令 SJMP MAIN ;转移到主程序 ORG 0030H ;程序从0030H开始MAIN: MOV 32H,#5 ;百位 MOV 31H,#4 ;十位 MOV 30H,#3 ;个位 LOOP: MOV A,30H ;取个位 ORL A,#0E0H ;清P1.4位,选通个位显示 MOV P1,A ;送个位显示 MOV A,31H ;取十位 ORL

13、 A,#0D0H ;清P1.5位,选通十位显示 MOV P1,A ;送十位显示 MOV A,32H ;取百位 ORL A,#0B0H ;清P1.6位,选通白位显示 MOV P1,A ;送百位显示 SJMP $ ;等待 END ;程序结束 C语言参考答案:#include /预处理命令,定义SFR的头文件unsigned code dis_code3=0x5,0x4,0x3; /待显示数据void main(void) /主函数 P1=dis_code2|0xe0; / 显示个位 P1=dis_code1|0xd0; / 显示十位 P1=dis_code0|0xb0; / 显示百位 while(

14、1); Proteus仿真图如下所示:三、Proteus仿真1. 在Proteus下,仿真实现7.7节内容。答:全自动洗衣机洗衣流程Proteus仿真 设洗衣机洗衣流程有三道程序:进水、洗涤、甩干。按下“启动”键,开始洗衣流程。首先进水,“进水”指示灯亮,用LED发光二极管指示;定时10秒,用2位LED数码管显示。然后洗涤,“洗涤”指示灯亮,定时10秒。最后甩干,“甩干”指示灯亮,定时10秒。洗衣流程结束后,扬声器发声提示。电路如图7-20 所示。图7-20 洗衣流程控制原理汇编语言参考程序如下:ORG 0000H ;在0000H单元存放转移指令 LJMP MAIN ;转移到主程序ORG 00

15、0BH ;定时/计数器T0的中断入口地址LJMP Time0 ;转到定时/计数器T0的中断服务程序Time0ORG 0100H ;主程序从0100H开始MAIN: JB P1.7,MAIN ;判按键是否按下,为0即按下,顺序执行,否则等待。 LCALL DISPLAY ;有键按下,延时去抖动 JB P1.7,MAIN ;再判有键按下 MOV P1,#0EH ;确定键按下,A灯亮,开始放水定时 MOV R0,#00H ;R0放3个阶段的工作标志 MOV R1,#00H ;R1放定时器的中断计数 SETB EA ;开中断总开关 SETB ET0 ;开定时/计数器T0 MOV TMOD,#01H ;

16、设定时/计数器T0工作方式1 MOV TH0,#3CH ;定时50ms高8位初值 MOV TL0,#0B0H ;定时50ms低8位初值 SETB TR0 ;启动定时/计数器T0 SJMP $ ;等待定时 ;定时/计数器T0中断服务程序Time0: CJNE R0,#00H,L1 ;R0的内容为标志,若R0=0,执行第1阶段定时(放水功能) INC R1 ;R1内容加1 MOV A,R1;R1的内容送到A MOV B,#20;B寄存器送立即数20 DIV AB;计算时间秒 MOV B,#10;B寄存器送立即数10 DIV AB;秒分成个位和十位 MOV DPTR,#DTAB ;字形表头地址送DP

17、TR MOVC A,A+DPTR ;秒十位查字形码 MOV P0,A;十位字形送P0口显示 MOV A,B ;秒个位送A寄存器 MOVC A,A+DPTR ;秒个位查字形码 MOV P2,A;个位字形送P2口显示 CJNE R1,#200,L4 ;若累计满200次,即计时满10s MOV P1,#0DH ;A灯灭,结束放水,B灯亮,开始洗涤 MOV R1,#00H ;R1内容清0,重新从0开始计数 INC R0 ;R0内容加1,准备第2阶段的定时 SJMP L4 ;转L4,送初值,中断返回L1: CJNE R0,#01H,L2 ;若R0=1,执行第2阶段定时(洗涤功能) INC R1 ;R1内

18、容加1 MOV A,R1;R1的内容送到A MOV B,#20;B寄存器送立即数20 DIV AB;计算时间秒 MOV B,#10;B寄存器送立即数10 DIV AB;秒分成个位和十位 MOV DPTR,#DTAB ;字形表头地址送DPTR MOVC A,A+DPTR ;秒十位查字形码 MOV P0,A;十位字形送P0口显示 MOV A,B ;秒个位送A寄存器 MOVC A,A+DPTR ;秒个位查字形码 MOV P2,A;个位字形送P2口显示 CJNE R1,#200,L4 ;若累计满200次,即计时满10s MOV P1,#0BH ;B灯灭,结束洗涤,C灯亮,开始甩干 MOV R1,#00

19、H ;R1内容清0,重新从0开始计数 INC R0 ;R0内容加1,准备第3阶段的定时 SJMP L4 ;转L4,送初值,中断返回L2: CJNE R0,#02H,L3 ;若R0=2,执行第3阶段定时(甩干功能) INC R1 ;R1内容加1 MOV A,R1;R1的内容送到A MOV B,#20;B寄存器送立即数20 DIV AB;计算时间秒 MOV B,#10;B寄存器送立即数10 DIV AB;秒分成个位和十位 MOV DPTR,#DTAB ;字形表头地址送DPTR MOVC A,A+DPTR ;秒十位查字形码 MOV P0,A;十位字形送P0口显示 MOV A,B ;秒个位送A寄存器

20、MOVC A,A+DPTR ;秒个位查字形码 MOV P2,A;个位字形送P2口显示 CJNE R1,#200,L4 ;若累计满200次,即计时满10s MOV R1,#00H ;将Countor清0,重新从0开始计数 INC R0 ;R0内容加1,准备第4阶段的工作L3: MOV P1,#07H ;灯全灭,洗衣机结束工作 CPL P3.7 ;扬声器提醒 MOV P2,#0C0H;个位显示清零 MOV P0,#0C0H;十位显示清零L4:MOV TH0,#3CH ;初值寄存器的高8位重新赋初值 MOV TL0,#0B0H ;初值寄存器的低8位重新赋初值 RETI ;中断返回DISPLAY:MO

21、V R7,#10;延时子程序,送外循环时间常数D1:MOV R6,#255;送内循环时间常数DJNZ R6,$;内循环接送判断DJNZ R7,D1;外循环接送判断RET;子程序返回DTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H, ;数码管字形码DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH END ;汇编结束 C语言参考程序如下:#include /包含51单片机寄存器定义的头文件#define uchar unsigned char /定义缩写字符ucharsbit P17=P17; /将P17位定义为P1.7引脚sbit

22、P37=P37; /将P37位定义为P3.7引脚unsigned char Countor,temp; /设置全局变量,储存定时器T0中断次数unsigned char f=0; /设置全局变量,作为区分不同阶段的定时uchar code ledvalue17=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6, 0xa1,0x86,0x8e;void delay1() /延时函数 int q; /定义变量q for(q=0;q500;q+); /循环500次void main(void) /主函数 if(P17=0

23、) /若P1.7=0,说明键按下,执行语句,否则一直等待。 delay1(); /有键按下,延时去抖动 if(P17=0) /再判有键按下 P1=0x0e; /A灯亮,开始放水定时 EA=1; /开总中断 ET0=1; /定时器T0中断允许 TMOD=0x01; /使用定时器T0的模式1 TH0=(65536-46083)/256; /定时器T0的高8位赋初值,定时50ms TL0=(65536-46083)%256; /定时器T0的低8位赋初值 TR0=1; /启动定时器T0 while(1); /无限循环等待中断 void Time0(void) interrupt 1 using 1 /interrupt声明函数为中断服务函数TL0=(65536-46083)%256; /定时器T0的低8位重新赋初值TH0=(65536-46083)/256; /定时器T0的高8位重新赋初值if(f=0) /f为标志变量, 若f=0,执行第1阶段定时(放水功能) Countor+; /Countor加1temp=Countor/20;/计算秒P2=le

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论