- 1、本文档共54页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 2.LED 动态显示方式 扫描显示方式,即在某一时刻,只让某一位的位选线处于选通状态,而其它各位的位选线处于关闭状态,同时,段选线上输出相应位要显示字符的字型码,这样同一时刻,6位LED中只有选通的那一位显示出字符,而其它三位则是熄灭的。 由于人眼有视觉暂留现象,只要每位显示间隔足够短,则可造成多位同时亮的假象,达到显示的目的。 * LED显示器接口技术 ※要使LED显示器显示出字符,必须提供段选码和位选码。 ◎段选码(即字码)可以用硬件译码的方法获得,也可以用软件的方法获得。 ◎位选码 静态显示和动态显示。 下面介绍软件译码显示器接口方法。 * 一、静态显示接口 * 一、静态显示接口 1.静态显示器硬件电路 是一个采用串行传送数据的8 位数码管静态显示接口。设计中将8 片八位串行输入/并行输出移位寄存器74HC164 串接,数码管为共阳极型。 MCU 将8 个要显示字符的段码字准备好,通过Data Out 引脚,在Clk Out 引脚产生的cp 移位脉冲的作用下,一位一位地移入74HC164 的QA-QH 端(串行输入)。QA-QH 的输出(并行输出)直接作为数码管的段位控制。由于左边74HC164 芯片的QH(最低位)和右边74HC164 芯片的数据串入端连接,经过Clk Out 时钟线64 个cp 脉冲后,要显示的8 个字符将会在8 个数码管上显示,最先发送的显示字符段码将显示在最右边。 * 二、动态显示接口 * 二、动态显示接口 在任何一个时刻,PC0-PC5 中只能有一个I/O 口输出低电平,即只有一位数码管亮。 MCU 必须循环轮流控制PC0-PC5 中的一位输出“0”,同时PA 口要输出该位相应的段码值。 即使显示的内容没有变化,MCU 也要进行不停的循环扫描处理。 * 二、动态显示接口 软件的设计应保证从在外表看数码管显示的效果要连续(即在人眼里各个数码管全部亮),亮度均匀,同时没有拖尾现象。 为了保证各个数码管的显示的效果不产生闪烁情况,表象上全部点亮的话,则首先必须在1 秒中内循环扫描6 个数码管的次数应大于25 次,这里是利用了人眼的影像滞留效应。 本例中我们选择40 次,既每隔1000/40=25ms 将6 个数码管循环扫描一遍。第二要考虑的是,在25ms 时间间隔中,要逐一轮流点亮6 个数码管,那么每个数码管点亮的持续时间要相同,这样亮度才能均匀。第三个要考虑的要点为每个数码管点亮的持续时间,这个时间长一些的话,数码管的亮度高一些,反之则暗一些。 通常,每个数码管点亮的持续时间为1-2ms。我们将每个数码管的点亮持续时间定为2ms,那么6 个数码管扫描一遍的时间为12ms,因此MCU 还有13ms 的时间处理其它事件 * 二、动态显示接口 #include mega16.h #include delay.h char led_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; char position[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//任何时刻只有一个管亮,即只有一个I/O口输出为低 void display(void) // 扫描显示函数,执行时间12ms { char i; for(i=0;i=5;i++) { PORTA = led_7[dis_buff[i]]; PORTC = position[i]; delay_ms(2); // (2) PORTC = 0xff; // (3) } } * void time_to_disbuffer(void) // 时间值送显示缓冲区函数 { unsigned char i,j=0; for (i=0;i=2;i++) { dis_buff[j++] = time[i] % 10; dis_buff[j++] = time[i] / 10; } } void main(void) { PORTA=0x00; // PORTA初始化 DDRA=0xFF; PORTC=0x3F; // PORTC初始化 DDRC=0x3F; time[2] = 23; time[1] = 58; time[0] = 55; // 时间初值23:58:55 time_to_disbuffer(); * while (1) { display(); // 显示扫描,执行时间12ms if (++ti
文档评论(0)