任务四-键控流水灯和LED数码管显示课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《任务四-键控流水灯和LED数码管显示课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 任务 键控 流水 LED 数码管 显示 课件
- 资源描述:
-
1、LEDLED显示的原理显示的原理 数码管的每段笔画其实就是一个单独的发光二极管,内部有两数码管的每段笔画其实就是一个单独的发光二极管,内部有两种不同的连接方式,若将各二极管的阳极都连在一起引出个公共种不同的连接方式,若将各二极管的阳极都连在一起引出个公共端端称共阳数码管,如图(称共阳数码管,如图(a a);若将各二极管的阴极都连在一);若将各二极管的阴极都连在一起引出个公共端起引出个公共端称共阴数码管如图(称共阴数码管如图(b b);使用时将共阴数码);使用时将共阴数码管公共端接低电平,若某笔画端接高电平则对应笔画点亮,共阳管公共端接低电平,若某笔画端接高电平则对应笔画点亮,共阳反之。所以购买
2、和使用时必须高清是共阳还是共阴的。反之。所以购买和使用时必须高清是共阳还是共阴的。4.1 LED显示 LED LED的显示可分静态和动态显示。静态显示是各只数码管单的显示可分静态和动态显示。静态显示是各只数码管单独用一只显示译码器,单片机与显示器的连接如下图如示:独用一只显示译码器,单片机与显示器的连接如下图如示:当某只数当某只数码管要显示某码管要显示某一数或字符时一数或字符时单片机向该管单片机向该管的锁存端发允的锁存端发允许写入电平,许写入电平,并向并向P1P1口发出口发出显示的十六进显示的十六进制数,其余管制数,其余管不允许写入,不允许写入,接着发锁存信接着发锁存信号。号。共阳数码管组成的
3、动态扫描电路LEDLED显示动态显示的原理显示动态显示的原理 静态显示的优点显示稳定,不存在闪烁。与静态显示的优点显示稳定,不存在闪烁。与CPUCPU并行工作。并行工作。但从静态显示的硬件可以看出,当选用的数码管越多,译码器的但从静态显示的硬件可以看出,当选用的数码管越多,译码器的数量也随之增多,这样会增加硬件的开销。为此人们采用动态显数量也随之增多,这样会增加硬件的开销。为此人们采用动态显示。如图所示示。如图所示位选口字型口动态显示的原理动态显示的原理 某一时刻位选先选通其中一位,如对图中的共阳数码管,要某一时刻位选先选通其中一位,如对图中的共阳数码管,要使最左边位能点亮,则令使最左边位能点
4、亮,则令P2.0为为0,其余位选位均为,其余位选位均为1;这时在字;这时在字型口输出该位要显示的数字(或字符)的型口输出该位要显示的数字(或字符)的字型字型,亮,亮1ms左右;接左右;接着位选选通另一位,其余位选关闭,字型口输出该位要显示的数着位选选通另一位,其余位选关闭,字型口输出该位要显示的数字(或字符)的字(或字符)的,虽然这时前一位位选已关闭,但基于眼睛,虽然这时前一位位选已关闭,但基于眼睛的惰性,前一位显示的数字或字型还留在眼中,依次一位位循环的惰性,前一位显示的数字或字型还留在眼中,依次一位位循环显示下去,直至最后一位显示完毕,一个动态扫描显示过程结束。显示下去,直至最后一位显示完
5、毕,一个动态扫描显示过程结束。可见动态扫描显示是在执行动态扫描显示程序的。要连续显示可见动态扫描显示是在执行动态扫描显示程序的。要连续显示必须反复的必须反复的去执行动态扫描显示程序。一般可把动态扫描显示编动态扫描显示程序。一般可把动态扫描显示编成个子函数,主函数反复去调用它。人眼的惰性有一定时间,一成个子函数,主函数反复去调用它。人眼的惰性有一定时间,一般般10ms左右左右,超过这一时间再去执行显示程序,它就会闪烁,所超过这一时间再去执行显示程序,它就会闪烁,所以以LED的位数不能太多。的位数不能太多。动态扫描具体实现方法:显示缓冲区显示缓冲区 首先在内部数据存储器的若干连续单元中开辟一个显示
6、缓冲区首先在内部数据存储器的若干连续单元中开辟一个显示缓冲区数组,每个单元顺序对应一个数码管,在调用动态扫描子函数以数组,每个单元顺序对应一个数码管,在调用动态扫描子函数以前,先在数组中写入各数码管要显示的数字和字符在字型表中离前,先在数组中写入各数码管要显示的数字和字符在字型表中离开表头位置的值,这样当动态扫描显示程序要向字型口输出字型开表头位置的值,这样当动态扫描显示程序要向字型口输出字型时,只要读得该对应缓冲区内的值,通过查字型表获得输出字型。时,只要读得该对应缓冲区内的值,通过查字型表获得输出字型。注意不是把缓冲单元的值直接输出。注意不是把缓冲单元的值直接输出。待显示信息数组待显示信息
7、数组动态扫描子程序流程图:动态扫描子程序流程图:P1TABa1TABa1P3ri00r01r01a1dtidtir=0 x20?或或i=6ii+1i+1r r 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 code TAB_Font=0 xC0,0 xF9,0 xA4,
8、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;/从显示缓冲区数组取出该位显示信息 P0=TAB_Fonta;/查字型表,输出字型
9、 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 code TAB_Font=0 xC0,0
10、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)/6个数码管没全扫完,继续扫描 P3=r;/
11、选通某位 a=dti;/显示缓冲区去该位要显示的内容 P0=TAB_Fonta;/查字型表向字型口输出字型 delay1(1);/延时1ms r8;/定时时间10ms 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()
12、/LED动态扫描显示子函数 unsigned char r=0 xfe;unsigned char a,j=0;r=0 xfe;/1位选通,要根据数码管类型和硬件电路决定,若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)unsi
13、gned int i,j;for(i=0;ims;i+)for(j=0;j8;TL0=-10000;count-;4 42 2 查键程序查键程序 键盘作为单片机应用系统最常见的输入设备,在一般键盘作为单片机应用系统最常见的输入设备,在一般的应用系统中都是必须的。键个数比较少时,可采用独立式的应用系统中都是必须的。键个数比较少时,可采用独立式键盘,即每个键单独与单片机的一个键盘,即每个键单独与单片机的一个I/OI/O口相连,如图所示口相连,如图所示 XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P
14、0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51X1CRYSTALC130pC230pR110kR1010kR1110kK0R910kR1210kK1K2K3C
15、310uF 当键的个数较多时,可采用非独立式键盘(行列当键的个数较多时,可采用非独立式键盘(行列矩阵式),如图所示。矩阵式),如图所示。键盘的抖动和消抖键盘的抖动和消抖独独立立式式键键盘盘键键判判断断和和处处理理流流程程XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/I
16、NT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51X1CRYSTALC130pC230pR110kR1010kR1110kK0R910kR1210kK1K2K3C310uF案例案例1、P1口分别接口分别接K0、K1、K2和和K3四个按四个按键,键,P2.0、P2.1、P2.2和和P2.3分别接着分别接着LDE0、LED1、LED2、LED3四个发光二四个发光二极管,试编程极管,试编程 要求四
17、个按键按下后使对应要求四个按键按下后使对应的的LED点亮(其余不亮,按键释放后一直亮点亮(其余不亮,按键释放后一直亮着)。着)。P1=0 xff;key=P1|0 xf0;if(key!=0 xff)delay1(10);key=P1|0 xf0;if(key!=0 xff)根据不同键值转各自处理 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(unsign
18、ed int);/延时子函数原型说明 display();/动态扫描子函数原型说明 main()while(1)key=P1|0 xf0;/读入键状态 if(key!=0 xff)delay1(10);key=P1|0 xf0;/再次读入键状态 if(key!=0 xff)/确有键输入 if(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=
19、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 unsigned 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;/再次读
20、入键状态 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键按下,处理 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、
21、K1、K2和和K3四个按键,四个按键,P0口接着口接着8盏流水灯。试编程要求四个按键按下盏流水灯。试编程要求四个按键按下后使对应:后使对应:1、使流水灯循环左移一位(只亮一盏灯)、使流水灯循环左移一位(只亮一盏灯)2、使流水灯循环右移一位(只亮一盏灯)、使流水灯循环右移一位(只亮一盏灯)3、使流水灯循环左移一位(逐点点亮)、使流水灯循环左移一位(逐点点亮)4、使流水灯循环左移一位(逐点点亮)、使流水灯循环左移一位(逐点点亮)#include bit flage=0;void delay1(unsigned int);display();main()unsigned key;P0=0 x00;j
22、1=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;break;default:P0=0 xff;while(P1
展开阅读全文