基于 AT89C51 单片机的数字时钟设计与仿真
摘要:文章介绍一种以AT89C51 单片机为核心的数字时钟设计,它利用 12864 液晶屏来显示时钟信息,并能自动对闰年进行处理。该设计具有日期、时间和闹钟显示功能,使用两个按键来实现对日期、时间、闹钟时间的设置以及闹钟状态的设定,还可以自动检测输入数字的合法性。作者利用 Proteus 电路仿真软件验证了该设计的可行性。
关键词:MCU;数字时钟;仿真.
0 引言
数字时钟在现实生活中的运用非常广泛,同时数字时钟因为涉及到中断和显示,所以在促进初学者掌握单片机程序设计的方法与技巧方面具有积极的作用。
Proteus 电路仿真软件可以对带有单片机的设计实现电路和程序的仿真。通过仿真的电路和程序在真实硬件环境下可以基本不需要修改就能正常运行。利用该软件可以大幅度提高设计效率,减少因为设计失误带来的元器件和PCB损失。
1 硬件设计
基于 AT89C51 单片机的数字时钟电路原理图如图 1 所示,它主要包括以 AT89C51 芯片为核心的单片机最小系统、12864 液晶显示模块、喇叭、按键等元器件。添加 RP1 上拉电阻增加 P0 口的驱动能力,使用 9013 三极管驱动喇叭,利用设置键和调整键设置时间、日期、闹钟和改变闹钟状态。 2 软件设计软件包含:主程序、T0 定时中断服务子程序、T1 中断服务子程序和设置模块。主程序实现了按键扫描并判断的功能;T0 中断模块实现“秒+1”时间的叠加;T1 中断实现了闹铃的发声;设置模块实现了日期、时间和闹钟的设置工作。
2.1 主程序
单片机初始化后,进入 while 循环,扫描键盘并判断闹钟是否开启:
如果闹钟状态开启,判断当前时间是否等于设定闹钟时间。如果等于,闹钟开始闹铃,并判断是否有键按下。如果有键按下,闹钟停止闹铃,进入闹钟状态关闭状态。否则判断闹铃时间是否超过 30s,如果超过 30s,闹钟停止闹铃,进入闹钟关闭状态。 如果闹钟状态关闭,首先判断设置键是否按下,如果按下并超过 1s,则进入设置日期、时间和闹钟模式。然后判断调整键是否按下,如果按下并超过 1s,则改变闹钟开启状态。 2.2 T0 定时中断服务子程序Timer0 中断实现时钟的计时,每 50ms一次中断,产生 20次中断后,秒加 1。秒等于 60 的时刻,秒变为 0,分加 1。当分等于 60 的时刻,分变为 0,时加 1;当时等于 24 的时刻,时变为 0,日期加 1(此时判断:当月份为 1、3、5、7、8、10、12、日期等于 32 的时刻,日期变为 0,月份加 1;当月份为 4、6、9、11 日期等于 31 的时刻,日期变为 0,月份加 1;当为闰年的 2 月、日期等于 30 的时刻,日期变为 0,月份加 1;当为非闰年的 2 月、日期等于 29 的时刻,日期变为 0,月份加 1);当月份等于 13 的时刻,月份变为 1,年份加 1。
2.3 其它模块
设置模块:按下设置键大于 1 秒时,进入设置时间模式,依次设置日期、闹钟与时间。设置的参数闪烁显示,反复按设置键选择要调整的参数,按调整键可以改变参数的数值。在改变数值时,程序自动提供可供选择的数值以避免出现不合法性输入。设置完毕后退出,数字时钟正常运行。设置按下调整键大于 1 秒时,改变闹钟开启状态,液晶屏上闹钟标志对应的出现或消失,如图 3 所示。 T1 中断服务子程序:当闹钟准备闹铃时,启动timer1 定时中断,使得P1.0 口输出一个频率为 800Hz的方波信号,驱动喇叭发出声音,此时按下任何一个键,闹铃停止。
3 结语
作者通过Proteus软件实现了基于AT89C51 单片机的数字时钟设计,并验证了本设计的可行性。该设计的数字时钟具有显示时间、日期和闹铃,以及闹铃提醒的功能。该数字时钟在时间精度上存在一定误差,由于中断响应需要 3~8 个机器周期,因此可以采取定时初值补偿的方法来减小计时的误差。
参考文献:
[1] 郭天祥.新概念 51 单片机 C 语言教程:入门、提高、开发、拓展全攻略[M].北京:电子工业出版社,2009
[2] 杨欣.51单片机应用实例详解[M].北京:清华大学出版社,2010
[3] 陈忠平.基于 Proteus 的 PIC 单片机 C 语言程序设计与仿真[M].北京:电子工业出版社,2013作者简介:曾力(1991-),男,重庆人,硕士,研究方向为信号检测与信息处理;刘炜(1963-),男,宁夏银川人,副教授,硕士研究生导师,研究方向为智能仪器;曹龙(1990-),男,河南三门峡人,硕士,研究方向为信号检测与信息处理。