单片机学习小组
直播中

李辛华

7年用户 206经验值
私信 关注

80C51定时器与74LS595组成模拟电子钟


实例94 模拟电子钟(由80C51定时器产生秒时基)


摘自张志良编著《单片机实验实训100例》 ISBN 978-7-5124-1603-1,北航社出版


实例90实例93时钟采用了专用的实时时钟芯片DS1302,由80C51读出其时钟数据并驱动显示。本例由80C51定时器产生秒时基,再计数生成时分秒数据,与74LS595组成模拟电子钟。


电路设计


设计模拟电子钟电路如7-13所示,由80C51 RXD端与控制时十位输出显示的74HC595DS端连接,595串行输出端QS与下一片595串行输入端DS端连接,595并行输出端Q0Q7与数码管笔段agDp端连接,依次输出6位时分秒数据;80C51 TXD端与6595 CLK端连接      ,串行输出时钟脉冲,控制595串行移位;80C51P1.66595 RCK端连接,控制输出触发595片内缓冲寄存器中数据进入输出寄存器的正脉冲;80C51P1.5P1.4P1.3分别与时、分、秒595输出允许端端连接,控制6595输出显示;80C51P1.72组发光二极管(共4个)连接   ,控制秒闪烁;80C51 P1.2P1.0K0K2连接,控制时钟时分秒校正。


  


















74HC595特性已在实例44中介绍,此处不再赘述。


程序设计


fOSC=6MHz,按7-13电路,要求开机显示000秒,随后开始计时运行,2组发光二极管秒闪烁(亮暗各500ms。同时要求K0K1K2具有时钟校正功能,其控制过程为:按下K0(带锁),进入时钟修正;首先,时数据(包括时十位、时个位)快速闪烁(亮暗各131ms);按一次K1(不带锁),被修正数据(快速闪烁)按时、分、秒(同时包括十位、个位)次序右移(循环往复);按一次K2(不带锁),被修正数据整体加1(最大值不超过时钟规定值,超过复0);时钟修正期间,计时继续运行;释放K0,退出时钟修正。


秒时基产生:fOSC=6MHz时,由T0定时器方式2定时500ms。对500ms计数2000次,可得到1s时基;再对1s计数60次,可得1分;对1分计数60次,可得1小时;对1小时计数24次,可得1天。


T0初值=28 -500ms/2ms=256–250=6。因此,TH0 =TL0 = 06H


时钟修正位闪烁控制:由T1定时器方式1,不需设置和重装定时初值,最大定时可达131ms,正好用于时钟修正位闪烁。


  

  



  







Keil调试


本题Keil调试同上例。因涉及串行口外围元件,在Keil软件调试中无法得到外围元件的有效信号。因此,仅在Keil中,按实例1所述步骤,编译链接,语法纠错,自动生成Hex文件。




实例23所述Proteus仿真步骤,打开Proteus ISIS软件,按7-7选择和放置元器件,并连接线路,画出Proteus仿真电路如7-14所示。




  




  










鼠标左键双击Proteus ISIS仿真电路中AT89C51,装入Keil调试后自动生成的Hex文件。


全速运行后,6LED显示00:00:00,然后计时运行,4个发光二极管秒闪烁。


按下K0(锁定),进入时钟修正。


需要说明的是,本例选用的BUTTON按键有两种运行功能:有锁运行和无锁运行。作有锁运行时,鼠标左键单击按键图形中小红圆点,单击第一次闭锁,第二次开锁。作无锁运行时,鼠标左键单击按键图形中键盖帽“   ”,单击一次,键闭合后弹开一次,不闭锁。


首先2位时数据快速闪烁,表示时数据允许修正。此时每按一次K2(鼠标左键单击键图形中键盖帽“    ”,单击一次,键闭合后弹开一次,不闭锁),时显示数加1,但不超过最大值23,超过时复0


若按一次K1(不闭锁,方法同K2),被修正位(快速闪烁)移至分数据位,每按一次K2,分显示数加1,但不超过最大值59,超过时复位0


再按一次K1(不闭锁,方法同K2),被修正位(快速闪烁)移至秒数据位,每按一次K2,秒显示数加1,但不超过最大值59,超过时复位0


再按一次K1,回复到时数据修正(继续按K1,重复上述①~③过程)。


释放K0,退出时钟修正,恢复正常计时显示


终止程序运行,可按停止按钮。


思考与练习


秒时基是怎样产生的?













回帖(1)

残念哈

2019-12-20 09:46:08
你好,两个74ls595的话程序要怎么改啊,我们要单片机实验箱进行实测
举报

更多回帖

发帖
×
20
完善资料,
赚取积分