找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3286|回复: 0
打印 上一主题 下一主题
收起左侧

开机显示PC机时分秒的时钟1302

[复制链接]
跳转到指定楼层
楼主

实例92 开机显示PC机时分秒的时钟1302LED数码管显示)

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

时钟显示除了用LCD显示,还可以用LED显示。

电路设计

设计时钟DS1302LED数码管显示电路如图7-8所示,电路分成两部分:左半部分是时钟DS1302读写控制电路,右半部分是LED数码管动态显示电路。




时钟DS1302读写控制电路

时钟DS1302读写控制电路与实例9091中相同,晶振32768HzDS1302 X1X2端连接;VCC2为主电源,接+5V电源;VCC1备用电源,接3.6V锂电池;串行数据输入/输出端I/O、串行时钟脉冲输入端SCLK和复位/片选端分别与80C51 P1.7P1.6P1.5连接。

LED数码管动态显示电路

LED数码管动态显示电路与实例6566717273中相同,80C51 P1.2P1.0138译码输入端CBAA为低位)连接;译码输出端(低电平有效)作为位码,选通6位共阴型LED数码管;138片选端E1+5V接地,始终有效;80C5174LS377时钟端CLKP2.7接门控端P0口接数据输入端D0D7377 Q0Q7输出段码,与数码管笔段a~gDp连接。

74LS37774LS138特性已分别在实例34实例58中介绍,此处不再重复。

程序设计

7-8电路,要求开机即能直接显示PC时分秒数据,时分秒数据间用小数点分隔,其中秒数据闪烁(亮600ms,暗400ms),并不断更新






需要说明的是,T0 4ms中断有3个作用:一是用于动态扫描显示,每隔4ms更换显示位;二是用于秒闪烁,4ms计数,前600ms亮,后400ms暗;三是用于在接近1秒(0.996秒)时突发读时钟。然后隔4ms再读一次,即在0.996s1s两个时点突发读时钟。若在这两个时点发现秒数据更新,就更新显示值,尔后4ms计数重新开始。既做到及时更新,又避免在T0每一次4ms中断时均去突发读时钟。为什么不在4ms计数1秒时一次性去突发读时钟呢?主要考虑4ms计数与1302实时时钟可能(多数)存在时差,若4ms计数1秒小于1302实时时钟1秒,实时时钟显示滞后将超过1秒,而且这种“滞后”几乎会一直保持下去(需累计时差大于一秒后才“正确”一次)。但若在0.996s1s两个时点突发读时钟,有时差时,“滞后”只有一次,第二次即被更正,而且这种“正确”几乎会一直保持下去(需累计时差大于4ms后才再“滞后”一次)。

Keil调试

本题Keil调试同上例。因涉及外围元件DS1302,在Keil软件调试中无法得到外围元件的有效信号。因此,仅在Keil中,按实例1所述步骤,编译链接,语法纠错,自动生成Hex文件,并在变量观察窗口Watch页中设置(设置方法参阅8-30)全局变量b(时钟数据数组)和d(时钟显示数组),获得数组b[]d[]的首地址(分别为0x080x0f,用于在Proteus仿真中观测)。

需要注意的是,引用实例903个子函数必须插入,否则Keil调试将显示出错。

Proteus仿真

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







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

全速运行后,LED显示屏显示PC时分秒实时数据,中间用小数点分隔,秒数据闪烁。

按暂停按钮,打开80C51片内RAM(主菜单“Debug”→“80C51 CPU”→“InternalIDATAMemory -U1”),可看到08H0EH0FH14H已经依次存放了时钟数据数组b[]和显示字段码数组d[]的即时数据,如7-10所示。

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

思考与练习

本例程序中,T0 4ms中断有什么作用?


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表