实例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并行输出端Q0~Q7与数码管笔段a~g、Dp端连接,依次输出6位时分秒数据;80C51 TXD端与6片595 CLK端连接 ,串行输出时钟脉冲,控制595串行移位;80C51P1.6与6片595 RCK端连接,控制输出触发595片内缓冲寄存器中数据进入输出寄存器的正脉冲;80C51P1.5、P1.4、P1.3分别与时、分、秒595输出允许端端连接,控制6片595输出显示;80C51P1.7与2组发光二极管(共4个)连接 ,控制秒闪烁;80C51 P1.2~P1.0与K0~K2连接,控制时钟时分秒校正。
74HC595特性已在实例44中介绍,此处不再赘述。
⒉ 程序设计
设fOSC=6MHz,按图7-13电路,要求开机显示0时0分0秒,随后开始计时运行,2组发光二极管秒闪烁(亮暗各500ms)。同时要求K0、K1和K2具有时钟校正功能,其控制过程为:按下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文件。
⑶ 全速运行后,6位LED显示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,退出时钟修正,恢复正常计时显示。
⑸ 终止程序运行,可按停止按钮。
⒌ 思考与练习
秒时基是怎样产生的?
|