周 婷
(广东理工职业学院,广东广州 510030)
数字钟是可以实现时、分、秒计时的钟表,应用非常广泛,它与传统的机械时钟相比较,数字钟拥有更加直观、精度高且使用寿命更长等优点[1]。数字钟给人们的生活工作带来了非常多的便利,而且增加了很多实用功能,比如整点报时、按时打铃、各种家用电器的自启动等,所以研究数字钟有着非常重要的意义。
数字钟的设计方法有很多,可以使用数字电路中的触发器、计数器等组成数字钟,也可以采用专用的电子时钟芯片加上外围电路组成,还可以使用单片机实现,这些方法各有优势[2-3],由数字电路组成的数字钟主要由振荡器、分频器、计数器、译码显示电路、校时电路等组成,还可以增加扩展功能,如整点报时电路、倒计时电路等。本文采用单片机AT89C51 实现,单片机式数字钟编程更加灵活、功能也更方便扩展。
单片机设计的数字钟主要包括AT89C51 单片机、晶体振荡电路、数码显示电路和秒分时调整电路。AT89C51 能提供4k 字节,Flash 闪速存储器,256 字节片内数据存储器,三十二个IO 口,两个十六位定时/计数器,一个五向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。AT89C51 因其性能优良和价格低廉而被广泛应用,数字钟的整体原理方框图如图1 所示。
图1 数字钟的原理图
目前频率发生器主要分两种:(1)采用555 定时器构成的多谐振荡器作为数字钟的频率发生器,灵敏度非常高且稳定,同时对电源电压和环境温度的影响较小,但是不方便调节频率占空比,且频率一般不能太高;(2)采用石英晶体振荡器作为频率发生器。晶体振荡电路采用压电材料振动晶体的机械共振,创建给定频率的电信号,采用晶体振荡电路发出的频率非常稳定,且受温度影响小,所以本设计采用晶体振荡电路用于提供稳定的时钟信号。晶体振荡电路和复位上电电路如图2 所示。
图2 晶体振荡电路和复位上电电路
时钟显示电路模块采用八个共阳极八段数码管,其中P1.0~P1.7 控制数码管的八段LED 灯的亮灭,即输入段码;P3.0~P3.7 控制具体一位数码管显示,即输入位码,而AT89C51 对P3.0~P3.7 端口进行动态扫描。
当数字钟运行一段时间后,存在一定误差,采用按键电路可以分别对时、分、秒进行调节。本数字钟用P1.0、P1.1、P1.2 三个端口分别控制时、分、秒三个按键。当按键中某个端口输入低电平时,AT89C51 单片机读取此时按键状态,并采用软件去抖,时钟按键每按下一次时钟加一,当累加到二十四时,重新从零开始计数;分钟按键每按下一次时钟加一,当累加到六十时,重新从零开始计数;秒钟同理。
1.数字钟开机时,显示12:00:00 的时间开始计时。
2.校正功能:P0.0 控制“秒”的调整,每按一次加1 秒;P0.1 控制“分”的调整,每按一次加1 分;P0.2 控制“时”的调整,每按一次加1 小时。
1.初始化使显示时间的位全为12:00:00,其他都不点亮;首先建立两个数组,dispcode[]存放0~f 的段码,dispbitc ode[]存放位码,通过dispbuf[8]显示12:00:00。如果把dispbitcode[2]、dispbitcode[3]对应的16 改为X(10~15 中的一个),并将其指向dispcode[16]即0x00 改为dispcode[X]即0x40。时分秒的间隔就为“—”。
2.秒显示程序,每来一个脉冲信号,second 自加一,当second 等于60 时,重新计数,并且在数码管上分别显示秒的十位和个位。时钟和分钟也是类似的编写方式。
本文以PROTUES 作为仿真软件,在PROTUES 中搭建数字钟电路,再用Keil 仿真软件编写程序,导出.HEX 文件,再把.HEX 文件导入到PROTUES 仿真运行。Proteus 软件是英国Lab Center Electronics 公司出版的EDA 软件工具,它不仅具有其它EDA 工具软件的仿真功能,而且还能从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB 设计,真正实现了从概念到产品的完整设计[4-5]。
在仿真过程中要注意以下几点:
(1)要认真检查元器件型号、位置以及引脚是否正确;
(2)检查电源电压是否正确,常用的工作电压有5V、12V、15V 等;
(3)仿真时注意要修改晶振频率为12MHZ,否则可能不能运行。如图3 所示为数字钟仿真图。
图3 数字钟仿真图
本文基于Proteus 仿真软件和 Keil 开发环境设计出数字钟,在产品投入实验前,先用软件仿真,减少了成本,也提高了产品设计的工作效率,缩短了周期。数字钟在生活和工作中也非常常用,我们还可以给数字钟增加闹钟、整点报时等功能,增加数字钟的应用范围。