任务四键控流水灯和LED数码管显示.ppt

上传人:牧羊曲112 文档编号:6547723 上传时间:2023-11-11 格式:PPT 页数:49 大小:778KB
返回 下载 相关 举报
任务四键控流水灯和LED数码管显示.ppt_第1页
第1页 / 共49页
任务四键控流水灯和LED数码管显示.ppt_第2页
第2页 / 共49页
任务四键控流水灯和LED数码管显示.ppt_第3页
第3页 / 共49页
任务四键控流水灯和LED数码管显示.ppt_第4页
第4页 / 共49页
任务四键控流水灯和LED数码管显示.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《任务四键控流水灯和LED数码管显示.ppt》由会员分享,可在线阅读,更多相关《任务四键控流水灯和LED数码管显示.ppt(49页珍藏版)》请在三一办公上搜索。

1、任务四 键控流水灯和LED数码管显示,LED显示的原理,数码管的每段笔画其实就是一个单独的发光二极管,内部有两种不同的连接方式,若将各二极管的阳极都连在一起引出个公共端称共阳数码管,如图(a);若将各二极管的阴极都连在一起引出个公共端称共阴数码管如图(b);使用时将共阴数码管公共端接低电平,若某笔画端接高电平则对应笔画点亮,共阳反之。所以购买和使用时必须高清是共阳还是共阴的。,4.1 LED显示,LED的显示可分静态和动态显示。静态显示是各只数码管单独用一只显示译码器,单片机与显示器的连接如下图如示:,当某只数码管要显示某一数或字符时单片机向该管的锁存端发允许写入电平,并向P1口发出显示的十六

2、进制数,其余管不允许写入,接着发锁存信号。,共阳数码管组成的动态扫描电路,LED显示动态显示的原理 静态显示的优点显示稳定,不存在闪烁。与CPU并行工作。但从静态显示的硬件可以看出,当选用的数码管越多,译码器的数量也随之增多,这样会增加硬件的开销。为此人们采用动态显示。如图所示,位选口,字型口,动态显示的原理 某一时刻位选先选通其中一位,如对图中的共阳数码管,要使最左边位能点亮,则令P2.0为0,其余位选位均为1;这时在字型口输出该位要显示的数字(或字符)的字型,亮1ms左右;接着位选选通另一位,其余位选关闭,字型口输出该位要显示的数字(或字符)的字型,虽然这时前一位位选已关闭,但基于眼睛的惰

3、性,前一位显示的数字或字型还留在眼中,依次一位位循环显示下去,直至最后一位显示完毕,一个动态扫描显示过程结束。可见动态扫描显示是在执行动态扫描显示程序的。要连续显示必须反复的去执行动态扫描显示程序。一般可把动态扫描显示编成个子函数,主函数反复去调用它。人眼的惰性有一定时间,一般10ms左右,超过这一时间再去执行显示程序,它就会闪烁,所以LED的位数不能太多。,动态扫描具体实现方法:,显示缓冲区,首先在内部数据存储器的若干连续单元中开辟一个显示缓冲区数组,每个单元顺序对应一个数码管,在调用动态扫描子函数以前,先在数组中写入各数码管要显示的数字和字符在字型表中离开表头位置的值,这样当动态扫描显示程

4、序要向字型口输出字型时,只要读得该对应缓冲区内的值,通过查字型表获得输出字型。注意不是把缓冲单元的值直接输出。,待显示信息数组,动态扫描子程序流程图:,P1TABa1,P3r,i0r01,a1dti,r=0 x20?或i=6,ii+1r r1,调用延时1MS子函数,TAB=0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x67。0 x71;,#include unsigned char code dt=0 x01,0 x02,0 x03,0 x04,0 x05,0 x06;/待显示的信息在显示缓冲区数组;unsigned char

5、 code TAB_Font=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x83,0 xF8,0 x80,0 x90,0 x88,0 x83,0 xC6,0 xA1,0 x86,0 x8E,0 x8C,0 xFF,0 x89;/共阳字型表数组unsigned r=1;/位输出口初值,选中最左位LEDvoid delay1(unsigned int);/延时1ms子函数原型说明main()/主函数 unsigned chaar i=0,a;/定义变量i 显示缓冲区数组元素,指针,a某位待输出信息 while(1)P2=r;/选中某一位 a=dti;/从显示缓冲区数

6、组取出该位显示信息 P0=TAB_Fonta;/查字型表,输出字型 delay1(1);/延时1ms r=1;/扫描位左移(在实际图中即右移)i+;/指针加1 if(r=0 x40)r=1;/6 位扫描结束判断 i=0;/结束后指针复位,/延时程序1 void delay1(unsigned int ms)unsigned int i,j;for(i=0;ims;i+)for(j=0;j60;j+);,动态显示作为子函数的程序设计#include unsigned char code dt=0 x01,0 x02,0 x03,0 x04,0 x05,0 x06;unsigned char co

7、de TAB_Font=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x83,0 xF8,0 x80,0 x90,0 x88,0 x83,0 xC6,0 xA1,0 x86,0 x8E,0 x8C,0 xFF,0 x89;unsigned r=1;unsigned i=0,a;void delay1(unsigned int);display();,main()while(1)display();display()/LED动态扫描显示子函数 r=1;/1位选通,要根据数码管类型和硬件电路决 定,若0选通应该为r=0 xfe;i=0;while(r!=0 x40)/

8、6个数码管没全扫完,继续扫描 P3=r;/选通某位 a=dti;/显示缓冲区去该位要显示的内容 P0=TAB_Fonta;/查字型表向字型口输出字型 delay1(1);/延时1ms r=1;i+;/移位选中下一数码管,指针修正 P0=0 xff;/字型口送熄灭符,Proteus演示硬件图,4位数码管动态显示实例,笔画1点亮的LED字型TAB=0 x3FH,0 x06,0 x5B,0 x4F,0 x66.0 x6D,(显示:0 1 2 3 4 5 0 x7D,0 x07,0 x7F,0 x67,0 x77,0 x7C,0 x39,0 x5E,0 x79,0X71,6 7 8 9 A B C D

9、 E F 0X73,0X76,0X00,0X6E;(显示:P H 熄灭 Y),笔画0点亮的LED字型表TAB=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x83,(显示:0 1 2 3 4 5 6 0 xF8,0 x80,0 x90,0 x88,0 x83,0 xC6,0 xA1,0 x86,0 x8E,7 8 9 A B C D E F 0 x8C,0 x89,0 xFF,0 x91;(显示:P H 熄灭 Y),Proteus演示硬件图,练习:1、画出单片机控制6共阳LED数码管显示的电路图1,P0和P3口分别为字型口和位选口。2、用主子函数结构调试6管LED

10、动态扫描程序3、在图1的基础上,将其改为6位共阴数码管,P2和P3分别为位选和字型口。编程调试。,练习2 将显示年月日“(140416)、”班级学号”(A3-05)、“P”(P后面5个空格)和“H-”四种不同的显示方式,在同一程序中以2S轮流循环显示。练习3 编程将unsigned char a=567892的值在6位LED中显示出来。,unsigned char code dt=1,4,0,4,1,6,10,3,0 x14,0 x14,0,2,0 x10,0 x12,0 x12,0 x12,0 x12,0 x12,0 x11,0 x14,0 x14,0 x14,0 x14,0 x14;uns

11、igned char code TAB_Font=0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x67,0 x77,0 x3D,0 x39,0 x5E,0 x79,0X71,0X73,0X76,0X00,0X6E,0 x40;void delay1(unsigned int);display();unsigned char i;/unsigned char count=200;/,main()ET0=1;/T0允许中断 EA=1;/CPU允许中断 TMOD=0 x11;/T0定时方式1 TH0=-100008;/定时时间10ms

12、 TL0=-10000;TR0=1;/定时器启动开始定时 P0=0 x00;/字型熄灭 P3=0 xff;/位选关闭 i=0;/显示缓冲区取数指针复零 while(1)if(count=0)/如果定时2S时间到 count=200;/外部定时计数器置初值 i=i+6;/显示缓冲区调整到下一显示区,if(i=24)/四种显示内容都显示完毕,指针重新调整到第 i=0;/一显视区 display();/调用显示子函数 display()/LED动态扫描显示子函数 unsigned char r=0 xfe;unsigned char a,j=0;r=0 xfe;/1位选通,要根据数码管类型和硬件电路

13、决定,若0选通应该为 r=0 xfe;while(j6)/6个数码管没全扫完,继续扫描 P3=r;/选通某位 a=dti+j;/显示缓冲区去该位要显示的内容 P0=TAB_Fonta;/查字型表向字型口输出字型 delay1(1);/延时1ms r=1;r|=1;/移位选中下一数码管,指针修正 j+;P0=0 x00;/6个数码管没全完,输出熄灭字型。,/*延时程序*/void delay1(unsigned int ms)unsigned int i,j;for(i=0;i8;TL0=-10000;count-;,42 查键程序 键盘作为单片机应用系统最常见的输入设备,在一般的应用系统中都是

14、必须的。键个数比较少时,可采用独立式键盘,即每个键单独与单片机的一个I/O口相连,如图所示,当键的个数较多时,可采用非独立式键盘(行列矩阵式),如图所示。,键盘的抖动和消抖,独立式键盘键判断和处理流程,案例1、P1口分别接K0、K1、K2和K3四个按键,P2.0、P2.1、P2.2和P2.3分别接着LDE0、LED1、LED2、LED3四个发光二极管,试编程 要求四个按键按下后使对应的LED点亮(其余不亮,按键释放后一直亮着)。,P1=0 xff;key=P1|0 xf0;if(key!=0 xff)delay1(10);key=P1|0 xf0;if(key!=0 xff)根据不同键值转各自

15、处理 while(P1|0 xf0)!=0 xff)delay1(10);,/输出接口用位输出编程#include unsigned key;sbit p2_0=P20;sbit p2_1=P21;sbit p2_2=P22;sbit p2_3=P23;/定义各位输出接口void delay1(unsigned int);/延时子函数原型说明 display();/动态扫描子函数原型说明 main()while(1)key=P1|0 xf0;/读入键状态 if(key!=0 xff)delay1(10);,key=P1|0 xf0;/再次读入键状态 if(key!=0 xff)/确有键输入 i

16、f(key=0 xfe)/K0键按下,处理 p2_0=0;p2_1=1;p2_2=1;p2_3=1;else if(key=0 xfd)/K1键按下,处理 p2_0=1;p2_1=0;p2_2=1;p2_3=1;if(key=0 xfe)/K2键按下,处理 p2_0=1;p2_1=1;p2_2=0;p2_3=1;else if/K3键按下,处理 p2_0=1;p2_1=1;p2_2=1;p2_3=0;while(P1|0 xf0)!=0 xff);/等待按键释放 delay1(10);/延时10ms消抖,/输出接口用字节输出编程,分支语句用switch_case#include unsigne

17、d key_value;void delay1(unsigned int);/延时子函数原型说明 display();/动态扫描子函数原型说明 main()while(1)key_value=P1|0 xf0;/读入键状态 if(key!=0 xff)delay1(10);,key=P1|0 xf0;/再次读入键状态 if(key!=0 xff)/确有键输入 swictch(key)case 0 xfe:P2=0 xfe;break;/K0键按下,处理 case 0 xfd:P2=0 xfd;break;/K1键按下,处理 case 0 xfb:P2=0 xfb;break;/K2键按下,处理

18、 case 0 xf7:P2=0 xf7;break;/K3键按下,处理 default:P2=0 xff;while(P1|0 xf0)!=0 xff);/等待按键释放 delay1(10);/延时10ms消抖 本例中键值key与P2输出值刚好一致,不必判断可直接输出。,练习1、P1口分别接K0、K1、K2和K3四个按键,P0口接着8盏流水灯。试编程要求四个按键按下后使对应:1、使流水灯循环左移一位(只亮一盏灯)2、使流水灯循环右移一位(只亮一盏灯)3、使流水灯循环左移一位(逐点点亮)4、使流水灯循环左移一位(逐点点亮),#include bit flage=0;void delay1(un

19、signed int);display();main()unsigned key;P0=0 x00;j1=0;P3=0 xff;while(1)P1=0 xff;/输入端口先写1 key=P1|0 xf0;/读入开关状态(使高4位为1)if(key!=0 xff)/有键按下,key=P1|0 xf0;if(key!=0 xff)/switch(key)case 0 xfe:P0=1;P0|=0 x80;if(P0=0 xff)P0=0 x7f;break;case 0 xfb:P0=1;if(P0=0 x00)flage=!flage;if(flage=1)P0=0 x7f;flage=1;b

20、reak;,default:P0=0 xff;while(P1|0 xf0)!=0 xff);/等待按键释放 delay1(10);/*-延时程序1-*/void delay1(unsigned int ms)unsigned int i,j;for(i=0;ims;i+)for(j=0;j60;j+);,案例2、P1口分别接K0、K1、K2和K3四个按键,P0口和P3口分别为6位数码管的字型和位选口,试编程 要求K0、K1、K2和K3四个按键按下后,分别显示年月日(14xxxx)、时间(xx:xx,时和分)、班级和学号(A3-06)、和(P,最左边P其余熄灭符),键没按过显示(123456)

21、。,案例2的源程序,#include unsigned char code dt=1,4,0,4,1,6,10,3,0 x14,0,0,2,0 x10,0 x12,0 x12,0 x12,0 x12,0 x12,0 x11,0 x14,0 x14,0 x14,0 x14,0 x14;unsigned char code TAB_Font=0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x67,0 x77,0 x3D,0 x39,0 x5E,0 x79,0X71,0X73,0X76,0X00,0X6E,0 x40;unsigned

22、char code TAB_bit=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf;unsigned char count=100;unsigned char j1;/四种显示形式的取数指针bit flage=0;/为使没键按下过不显示任何信息设位标志,main()unsigned key;P0=0 x00;j1=0;P3=0 xff;while(1)P1=0 xff;/输入端口先写1 key=P1|0 xf0;/读入开关状态(使高4位为1)if(key!=0 xff)/有键按下 flage=1;display();display();/用调用显示子函数来软件延时 ke

23、y=P1|0 xf0;if(key!=0 xff)/再次读入键值,switch(key)case 0 xfe:j1=0;break;case 0 xfd:j1=6;break;case 0 xfb:j1=12;break;case 0 xf7:j1=18;break;default:j1=0;while(P1|0 xf0)!=0 xff)display();/等待按键释放 display();display();void delay1(unsigned int ms)unsigned int i,j;for(i=0;ims;i+)for(j=0;j60;j+);,display()/LED动态

24、扫描显示子函数 unsigned i=0,a;while(i6)/6个数码管没全扫完,继续扫描 P3=TAB_biti;/选通某位 a=dtj1+i;/显示缓冲区去该位要显示的内容 P0=TAB_Fonta;/查字型表向字型口输出字型 delay1(1);/延时1ms i+;/移位选中下一数码管,指针修正 P0=0 x00;/6个数码管没全完,输出熄灭字型。,非独立式键盘的键扫描原理,有无键按下判断:所有的行都输出为低电平0,读入列的值,若4位为全1,则无键按下,反之有键按下。何健按下的判断:可采用逐行扫描的办法来实现。,0,0,0,0,1,1,1,0,1,1,1,1,1,键码的确定:只要能使

25、各键有不重复的键码用任何方法获得都行。如这里我们用R1行扫描寄存器,R2作为列读入数据寄存器,只要将R1与F0H,R2与0FH,再相或。就可得各不相同的键码。,XEH,XDH,XBH,X7H,EXH,DXH,BXH,7XH,EEH,EDH,EBH,E7H,DEH,DDH,DBH,D7H,BEH,BDH,BBH,B7H,7EH,7DH,7BH,77H,R1,R2,0,1,4,2,3,5,6,7,8,9,10,11,12,13,14,15,如何使无序的键码变成有序的键值?查表的方法是解决此类问题的最佳的选择。就是把无序的键码按有序的键值存放在ROM的表中,将某键按下后获得的键码与表中顺序比较,并用

26、计数器记录,当查到与键码相同时,此时计数器的值就是该键对应的键值。,键码 D7 EE DE BE ED DD BD EB DB BB E7 7E 7D 7B B7 77键值 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15,OM,键扫描和键分析程序流程 进入键扫描程序后,首先要判断有否键按下,若没有则继续检测(若键扫描作为一个子程序,则转结束返回),若有键按下,软件延时消抖后重新检测,确有键按下,则转入键扫描和键值获得程序以及各键处理。在结束前一般要检测键是否释放?若没释放继续检测,释放后还要过抖动期后再转相应入口。键扫描若与LED动态显示一起编程,为使检测等待时不使LED熄灭,可用LED动态显示作为软件延时。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号