第3讲LED显示.ppt

上传人:本田雅阁 文档编号:2566407 上传时间:2019-04-09 格式:PPT 页数:21 大小:471.51KB
返回 下载 相关 举报
第3讲LED显示.ppt_第1页
第1页 / 共21页
第3讲LED显示.ppt_第2页
第2页 / 共21页
第3讲LED显示.ppt_第3页
第3页 / 共21页
第3讲LED显示.ppt_第4页
第4页 / 共21页
第3讲LED显示.ppt_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《第3讲LED显示.ppt》由会员分享,可在线阅读,更多相关《第3讲LED显示.ppt(21页珍藏版)》请在三一文库上搜索。

1、主讲人:施保华,AVR单片机C程序设计,电子设计与创新实验室(32学时),2,LED 数码显示器的应用,LED 数码显示器是单片机嵌入式系统中经常使用的显示器件。一个“8”字型的显示模块用“a、b、c、d、e、f、g、h” 8 个发光二极管组合而成,如图6-12a 所示。每个发光二极管称为一字段。LED 数码显示器有共阳极和共阴极两种结构形式,电路设计时不要混淆。,3,4,例6.4 单个LED 数码管字符显示控制 我们以共阴极的数码管为例,先介绍如何控制一个8 段数码管显示“0”“F”16 个十六进制的数字。 1) 硬件电路设计: 很明显,用AVR 的一个I/O 口控制共阴极数码管的8 个段位

2、,分别置“1”或“0”,让某些段的LED 发光,其它的熄灭,就可以显示不同的字符和图符号,硬件电路如图6-13。,5,6,7,在单片机嵌入式系统软件设计中,经常要考虑二进制、十六进制、十进制、BCD 码、压缩BCD 码、八段码、ASCII 码之间的相互转换问题。人们计数习惯采用十进制,而单片机的计算、存储则为二进制形式最方便。此外传送字符用ASCII码,LED 数码显示要转化成相应的7 段码等等。因此对与各种不同数制的使用和相互转换在软件设计中尤其重要,设计使用得当,可以简化程序设计和优化程序代码。,8,#include #include flash char led_716=0x3F,0x0

3、6,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71; bit point_on = 0; void main(void) char i = 0; PORTA=0xFF; DDRA=0xFF; while (1) for (i=0;i=15;i+) PORTA = led_7i; if (point_on) PORTA |= 0x80; delay_ms(1000); point_on = point_on; ; ,9,多位LED 数码管的显示,多位LED 数码管显示电路按驱动方式可分为静态显示和动态显

4、示两种方法。 一个数码管要使用AVR 的8 个I/O 口线输出段码(共公端接GND)。当使用多个数码管时,显然采用这样的控制方式有些问题,因为AVR 是不能提供太多的I/O 控制引脚的。,10,图6-14 是一个采用串行传送数据的8 位数码管静态显示接口。设计中将8 片八位串行输入/并行输出移位寄存器74HC164 串接,数码管为共阳极型。MCU 将8 个要显示字符的段码字准备好,通过Data Out 引脚,在Clk Out 引脚产生的cp 移位脉冲的作用下,一位一位 地移入74HC164 的QAQH 端(串行输入)。QAQH 的输出(并行输出)直接作为数码管的 段位控制。由于左边74HC16

5、4 芯片的QH(最低位)和右边74HC164 芯片的数据串入端连, 经过Clk Out 时钟线64 个cp 脉冲后,要显示的8 个字符将会在8 个数码管上显示,最先发送的显示字符段码将显示在最右边。,11,12,例6.5 六位LED 数码管动态扫描控制显示设计(一) 1) 硬件设计电路: 图6-15 给出硬件接口电路图。图中仅采用了6 个共阴极的LED 数码管。所有数码管段位a 的引脚并接,由PA0 控制;段b 并接,由PA1 控制;因此类推。既仍然用ATmega16 的PA 口作为段码输出。ATmega16 的PC0PC5 分别与LED0LED5 的共公端COM 引脚连接,既 PC 口的低6

6、 位作为位扫描控制口。,13,14,根据硬件电路,我们可以看出,在任何一个时刻,PC0-PC5 中只能有一个I/O 口输出低电平,即只有一位数码管亮。而且,MCU 必须循环轮流控制PC0-PC5 中的一位输出“0”,同时PA 口要输出该位相应的段码值。即使显示的内容没有变化,MCU 也要进行不停的循环扫描处理。 软件的设计应保证从在外表看数码管显示的效果要连续(即在人眼里各个数码管全部亮),亮度均匀,同时没有拖尾现象。 通常,每个数码管点亮的持续时间为1-2ms。我们将每个数码管的点亮持续时间定为2ms,那么6 个数码管扫描一遍的时间为12ms,因此MCU 还有13ms 的时间处理其它事件,1

7、5,为了保证各个数码管的显示的效果不产生闪烁情况,表象上全部点亮的话,则首先必须在1 秒中内循环扫描6 个数码管的次数应大于25 次,这里是利用了人眼的影像滞留效应。 本例中我们选择40 次,既每隔1000/40=25ms 将6 个数码管循环扫描一遍。第二要考虑的是,在25ms 时间间隔中,要逐一轮流点亮6 个数码管,那么每个数码管点亮的持续时间要相同,这样亮度才能均匀。第三个要考虑的要点为每个数码管点亮的持续时间,这个时间长一些的话,数码管的亮度高一些,反之则暗一些。,16,#include #include flash char led_710=0x3F,0x06,0x5B,0x4F,0x

8、66,0x6D,0x7D,0x07,0x7F,0x6F; flash char position6=0xfe,0xfd,0xfb,0xf7,0xef,0xdf; char time3; / 时、分、秒计数 char dis_buff6; / 显示缓冲区,存放要显示的6 个字符的段码值 char time_counter; / 1 秒计数器 bit point_on; / 秒显示标志 void display(void) / 扫描显示函数,执行时间12ms char i; for(i=0;i=5;i+) ,17,PORTA = led_7dis_buffi; if (point_on ,18,v

9、oid main(void) PORTA=0x00; / PORTA 初始化 DDRA=0xFF; PORTC=0x3F; / PORTC 初始化 DDRC=0x3F; time2 = 23; time1 = 58; time0 = 55; / 时间初值23:58:55 time_to_disbuffer(); while (1) display(); / 显示扫描,执行时间12ms if (+time_counter = 40) ,19,time_counter = 0; / (4) point_on = point_on; / (5) if (+time0 = 60) time0 = 0; if (+time1 = 60) time1 = 0; if (+time2 = 24) time2 = 0; time_to_disbuffer(); delay_ms(13); / 延时13ms,可进行其它处理(6) ; ,20,21,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1