数码管动态显示与实现方法.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数码管动态显示与实现方法

数码管动态显示及实现方法   摘 要 本文讲述利用74HC573锁存器和定时器来实现对数码管的动态显示,通过从左向右让六位数码管中的每一位每隔一秒依次显示123456来阐述数码管动态显示具体实现方法 【关键词】动态显示 数码管 锁存器 数码管由于价格便宜,使用简单,在电器特别是家电领域(比如空调、热水器和冰箱等)得到了极为广泛的应用。在高校电子信息类专业单片机的教学过程中,数码管动态显示及实现方法是学生普遍反映较难掌握的内容。鉴于此,本文通过实际案例详细阐述了数码管的动态显示特点及实现方法 1 系统整体设计 本系统是由AT89C52单片机、2个74HC573锁存器U3和U4,1个10K的电阻排,6个7段共阴极数码管、电源电路和复位电路组成 74HC573锁存器的锁存端LE是高电平的时候,它的输入端D0~D7和输出端Q0~Q7是直通的,此时输入端数据会直接输出给输出端。74HC573锁存器的锁存端LE是低电平的时候,输入端和输出端断开,输出端保持原来的数值 通过2个74HC573锁存器可以实现对数码管的段选和位选的选择。所谓段选是表示数码管中亮的内容(比如 1,2,3,4,5.......),而位选是表示让哪一个数码管亮,本系统中同时接入了6个数码管,通过对位选的赋值,可以选择让哪一个数码管亮 锁存器U3的输出WE1、WE2、WE3、WE4、WE5和WE6用来控制数码管的位选,锁存器U4的输出a、b、c、d、e、f、g和h用来控制数码管的段选,这两个锁存器的输入端全部接在了P0口上,P0口的内部无上拉电阻,需在它的外部加一个10K的上拉电阻排P1,这样的话,单片机一上电后,P0口就是高电平 2 数码管显示分析 如果想让哪个数码管亮,那么先将控制位选的锁存器U3的锁存端LE设为高电平,然后通过P0口送数值选择哪一位数码管亮,当这一位的数码管亮了以后,然后把锁存端LE设为低电平,锁存器的数据输出端的位选就保持住了,然后再把控制段选的锁存器U4的锁存端LE设置为高电平,然后通过P0口送数值,使数码管显示相应的数值,然后再把锁存器U4的锁存端LE设置为低电平,这时候段选和位选都赋上值了,数码管就亮了,并且显示相应的数值。这就是用一个P0端口通过两个锁存器U3和U4控制六位数码管 要在第一个数码管上显示数字1,可以这样操作:将锁存器U3的锁存端LE设为高电平,通过P0口送数0xfe,然后再将锁存端LE设为低电平,这时在锁存器U3的右端就保持住了0xfe这个数值,不管再怎么改变P0口的数值,锁存器U3右端的数值还是0xfe,不会发生变化;将锁存器U4的锁存端LE设为高电平,然后给P0口送数据0x06(0x06对应十进制数1),然后将锁存端LE设为低电平,这样就把段选数值锁存住了,这样的话在第一个数码管上就会显示十进制数字1 3 动态显示实现方法 通过编写“从左向右让六位数码管中的每一位每隔一秒依次显示123456”的程序来讲述数码管的动态显示实现方法 在程序中会用到共阴极数码管编码表{0x06,0x5b,0x4f,0x66,0x6d,0x7d },此编码表中的数值分别对应十进制数1,2,3,4,5,6,此编码表的表示可以使用数组biao[ ],将biao[ ]定义成编码的格式,利用biao[ ]数组将编码表{0x06,0x5b,0x4f,0x66,0x6d,0x7d}中的数值取出来。利用位选数组biaowe[ ]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}选择点亮六位数码管中的哪一位。在程序中,利用定时器和中断服务程序来控制数码管的显示时间实现了数码管的动态显示。部分程序如下所示: TMOD=0x01; //设置工作方式为16位定时/计数器 EA=1; //开总中断 ET0=1; //开定时器0中断 TR0=1; //启动定时器0 if(aa==40) { aa=0;numdu++; dula=1;P0=biao[numdu];dula=0; wela=1;P0=biaowe[numwe];wela=0; numwe++;} void timecalculate0() interrupt 1 //中断 { TH0=(65536-25000)/256; TL0=(65536-25000)%256; aa++;} 此程序是让6个数码管中的数值依次每隔1秒显示,现在稍微得加快数码管显示速度,通过将程序中的aa==40修改为aa==10让数码管中的数值依次每隔250毫秒显示,通过单片机仿真系统原理图,可以看出数码管显示速度加快;将数码管显示速度进一步加快,通过修改程序让数码管中的数值依次每隔5

文档评论(0)

linsspace + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档