第3讲LED显示_第1页
第3讲LED显示_第2页
第3讲LED显示_第3页
第3讲LED显示_第4页
第3讲LED显示_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、主讲人:施保华主讲人:施保华avr单片机c程序设计电子设计与创新实验室(电子设计与创新实验室(32学时)学时)2led 数码显示器的应用led led 数码显示器是单片机嵌入式系统中经常使数码显示器是单片机嵌入式系统中经常使用的显示器件。一个用的显示器件。一个“8”8”字型的显示模块用字型的显示模块用“a a、b b、c c、d d、e e、f f、g g、h” 8 h” 8 个发光二个发光二极管组合而成,如图极管组合而成,如图6-12a 6-12a 所示。每个发光所示。每个发光二极管称为一字段。二极管称为一字段。led led 数码显示器有共阳数码显示器有共阳极和共阴极两种结构形式,电路设计

2、时不要极和共阴极两种结构形式,电路设计时不要混淆。混淆。34例6.4 单个led 数码管字符显示控制我们以共阴极的数码管为例,先介绍如何控制我们以共阴极的数码管为例,先介绍如何控制一个一个8 8 段数码管显示段数码管显示“0”0”“f”16 f”16 个十六个十六进制的数字。进制的数字。 1) 1) 硬件电路设计:硬件电路设计:很明显,用很明显,用avr avr 的一个的一个i/o i/o 口控制共阴极数码口控制共阴极数码管的管的8 8 个段位,分别置个段位,分别置“1”1”或或“0”0”,让某,让某些段的些段的led led 发光,其它的熄灭,就可以显示发光,其它的熄灭,就可以显示不同的字符

3、和图符号,硬件电路如图不同的字符和图符号,硬件电路如图6-136-13。567在单片机嵌入式系统软件设计中,经常要考虑在单片机嵌入式系统软件设计中,经常要考虑二进制、十六进制、十进制、二进制、十六进制、十进制、bcd bcd 码、压缩码、压缩bcd bcd 码、八段码、码、八段码、ascii ascii 码之间的相互转换码之间的相互转换问题。人们计数习惯采用十进制,而单片机问题。人们计数习惯采用十进制,而单片机的计算、存储则为二进制形式最方便。此外的计算、存储则为二进制形式最方便。此外传送字符用传送字符用asciiascii码,码,led led 数码显示要转化成数码显示要转化成相应的相应的7

4、 7 段码等等。因此对与各种不同数制段码等等。因此对与各种不同数制的使用和相互转换在软件设计中尤其重要,的使用和相互转换在软件设计中尤其重要,设计使用得当,可以简化程序设计和优化程设计使用得当,可以简化程序设计和优化程序代码。序代码。8#include #include flash char led_716=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;bit point_on = 0;void main(void)char i = 0;porta=

5、0 xff;ddra=0 xff;while (1)for (i=0;i=15;i+)porta = led_7i;if (point_on) porta |= 0 x80;delay_ms(1000);point_on = point_on;9多位led 数码管的显示多位多位led led 数码管显示电路按驱动方式可分为静数码管显示电路按驱动方式可分为静态显示和动态显示两种方法。态显示和动态显示两种方法。一个数码管要使用一个数码管要使用avr avr 的的8 8 个个i/o i/o 口线输出段口线输出段码(共公端接码(共公端接gndgnd)。当使用多个数码管时,)。当使用多个数码管时,显然采

6、用这样的控制方式有些问题,因为显然采用这样的控制方式有些问题,因为avr avr 是不能提供太多的是不能提供太多的i/o i/o 控制引脚的。控制引脚的。10图图6-14 6-14 是一个采用串行传送数据的是一个采用串行传送数据的8 8 位数码管位数码管静态显示接口。设计中将静态显示接口。设计中将8 8 片八位串行输入片八位串行输入/ /并行输出移位寄存器并行输出移位寄存器74hc164 74hc164 串接,数码管串接,数码管为共阳极型。为共阳极型。mcu mcu 将将8 8 个要显示字符的段码个要显示字符的段码字准备好,通过字准备好,通过data out data out 引脚,在引脚,在

7、clk out clk out 引脚产生的引脚产生的cp cp 移位脉冲的作用下,一位一位移位脉冲的作用下,一位一位地移入地移入74hc164 74hc164 的的qaqaqh qh 端(串行输入)。端(串行输入)。qaqaqh qh 的输出(并行输出)直接作为数码管的输出(并行输出)直接作为数码管的的段位控制。由于左边段位控制。由于左边74hc164 74hc164 芯片的芯片的qhqh(最低(最低位)和右边位)和右边74hc164 74hc164 芯片的数据串入端连,芯片的数据串入端连,经过经过clk out clk out 时钟线时钟线64 64 个个cp cp 脉冲后,要显示脉冲后,要

8、显示的的8 8 个字符将会在个字符将会在8 8 个数码管上显示,最先个数码管上显示,最先发送的显示字符段码将显示在最右边。发送的显示字符段码将显示在最右边。1112例6.5 六位led 数码管动态扫描控制显示设计(一)1) 1) 硬件设计电路:硬件设计电路:图图6-15 6-15 给出硬件接口电路图。图中仅采用了给出硬件接口电路图。图中仅采用了6 6 个共阴极的个共阴极的led led 数码管。所有数码管段位数码管。所有数码管段位a a 的引脚并接,由的引脚并接,由pa0 pa0 控制;段控制;段b b 并接,由并接,由pa1 pa1 控制;因此类推。既仍然用控制;因此类推。既仍然用atmeg

9、a16 atmega16 的的pa pa 口作为段码输出。口作为段码输出。atmega16 atmega16 的的pc0pc0pc5 pc5 分分别与别与led0led0led5 led5 的共公端的共公端com com 引脚连接引脚连接, ,既既pc pc 口的低口的低6 6 位作为位扫描控制口。位作为位扫描控制口。1314根据硬件电路,我们可以看出,在任何一个时刻,根据硬件电路,我们可以看出,在任何一个时刻,pc0-pc5 pc0-pc5 中只能有一个中只能有一个i/o i/o 口输出低电平,即只有口输出低电平,即只有一位数码管亮。而且,一位数码管亮。而且,mcu mcu 必须循环轮流控制

10、必须循环轮流控制pc0-pc0-pc5 pc5 中的一位输出中的一位输出“0”0”,同时,同时pa pa 口要输出该位相口要输出该位相应的段码值。即使显示的内容没有变化,应的段码值。即使显示的内容没有变化,mcu mcu 也要也要进行不停的循环扫描处理。进行不停的循环扫描处理。软件的设计应保证从在外表看数码管显示的效果要连软件的设计应保证从在外表看数码管显示的效果要连续(即在人眼里各个数码管全部亮),亮度均匀,续(即在人眼里各个数码管全部亮),亮度均匀,同时没有拖尾现象。同时没有拖尾现象。通常,每个数码管点亮的持续时间为通常,每个数码管点亮的持续时间为1-2ms1-2ms。我们将。我们将每个数

11、码管的点亮持续时间定为每个数码管的点亮持续时间定为2ms2ms,那么,那么6 6 个数个数码管扫描一遍的时间为码管扫描一遍的时间为12ms12ms,因此,因此mcu mcu 还有还有13ms 13ms 的时间处理其它事件的时间处理其它事件15为了保证各个数码管的显示的效果不产生闪烁情况,为了保证各个数码管的显示的效果不产生闪烁情况,表象上全部点亮的话,则首先必须在表象上全部点亮的话,则首先必须在1 1 秒中内循环秒中内循环扫描扫描6 6 个数码管的次数应大于个数码管的次数应大于25 25 次,这里是利用次,这里是利用了人眼的影像滞留效应。了人眼的影像滞留效应。本例中我们选择本例中我们选择40

12、40 次,既每隔次,既每隔1000/40=25ms 1000/40=25ms 将将6 6 个个数码管循环扫描一遍。第二要考虑的是,在数码管循环扫描一遍。第二要考虑的是,在25ms 25ms 时间间隔中,要逐一轮流点亮时间间隔中,要逐一轮流点亮6 6 个数码管,那么每个数码管,那么每个数码管点亮的持续时间要相同,这样亮度才能均个数码管点亮的持续时间要相同,这样亮度才能均匀。第三个要考虑的要点为每个数码管点亮的持续匀。第三个要考虑的要点为每个数码管点亮的持续时间,这个时间长一些的话,数码管的亮度高一些,时间,这个时间长一些的话,数码管的亮度高一些,反之则暗一些。反之则暗一些。16#include

13、#include flash char led_710=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;flash char position6=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf;char time3; / 时、分、秒计数char dis_buff6; / 显示缓冲区,存放要显示的6 个字符的段码值char time_counter; / 1 秒计数器bit point_on; / 秒显示标志void display(void) / 扫描显示函数,执行时间12mschar i;for(i=0;i=5;i+)17porta = led_7dis_buffi;if (point_on & ( i=2 | i=4 ) porta |= 0 x80; / (1)portc = positioni;delay_ms(2); / (2)portc = 0 xff; / (3)void time_to_disbuffer(void) / 时间值送显示缓冲区函数

温馨提示

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

评论

0/150

提交评论