基于STC89C51单片机的数字时钟设计 | ![]() |
数字时钟与机械时钟相比, 有着定时准确、观察直观、成本低廉、使用寿命长等诸多优点[1]。进入21世纪以来, 不断发展的高新技术带来了电子设备等领域更进一步的突破和发展。
目前主流的数字时钟设计, 主要有通过小规模的集成电路实现计时效果、使用专用的电子钟芯片配合外围电路, 或者用单片机作为主控制器实现等[2]。其中使用小规模的集成电路, 在后续的功能扩展上困难且设计复杂。使用专用的电子钟芯片, 不仅价格昂贵, 而且维护困难。而使用单片机来完成, 通过控制单片机定时计数器就可以达到时、分、秒的计数[3], 不仅设计简单方便, 而且编程控制灵活, 成本也更低、且更易维护[4]。
单片机是当下主流的小型电子设备的核心, 其自诞生以来便以体积小、面向控制、高性价比等优点在工控领域扮演着重要角色[5]。当前单片机正向着低噪声、高可靠性、大容量等方向发展并逐渐成为了研究的重点[6]。
在本次设计中, 采用STC89C51系列单片机作为主控制器芯片, 可以提升整体的计算性能和功能性, 同时具备价格低廉、运算速度快、抗干扰能力强的优点[7]。采用内部实现的方式完成数字时钟的计时, 设置了复位电路和外置的物理按键增加实用性, 其中键盘是一组开关的组合, 是单片机中最常见的输入设备之一[8]。最后采用数码管来实现时钟的时间效果显示, 具备低功耗、寿命长、体积小、显示内容丰富、价格低、接口控制方便等优点[9]。在软件程序设计中, 使用Keil C51软件进行单片机的C语言编程, 代码生成效率高, 作为项目开发极其理想[10]。
1 硬件设计概述本次时钟设计的单片机主控制器, 使用STC89C51, 然后设置电源、复位、晶振、数码管、指示灯、按键等模块完成功能。
系统结构框图如图 1所示。
![]() |
图 1 系统结构框图 |
设计核心是用单片机作为主控制器和内部时钟电路;电源模块提供能量用以驱动时钟系统的运行;晶振电路和复位电路分别用来辅助产生时钟信号和使系统复位;数码管驱动模块使得系统可以从视觉上正常显示时间;指示灯模块保证系统在切换时制时有一个清晰明了的提示效果;按键模块是为了系统可以正常的调时和归零。
相比于传统的数字时钟, 该设计可以通过控制按键对时钟实现灵活的调时和复位功能, 而数码管可以使时钟拥有更好的显示效果。
1.1 STC89C51单片机51系列单片机是目前最为广泛使用的几种单片机之一, 具有结构简单、易于操作、功能完备的特点, 在工业控制领域占有重要位置。其拥有强大的运算能力和实用性, 易于编程, 配合软件程序可以实现极其丰富的效果。
1.2 晶振电路为了让时钟产生相应的时钟信号, 需要设置晶振电路, 从而完成对于时间的计时和时分秒的累加, 这是时钟最基础的功能。
在本次设计中, 采用内部时钟实现方法实现时钟信号。这样做的好处是可以减少芯片的使用, 节约成本, 通过单片机内部的定时计数器就可以达到时钟的计时效果。
其原理如图 2所示。
![]() |
图 2 STC89C51内部时钟电路 |
核心原理在于激发单片机内部的振荡电路, 具体方法是在芯片的XTAL1(18)和XTAL2(19)两个引脚上加入相应的晶振来产生一个时钟信号。
而加入一个电容的作用, 则是使芯片在正常工作时频率稳定, 从而使系统整个工作平稳快速。
1.3 复位电路设置复位电路的目的, 一是为了给主控制器芯片提供一个默认的初始运行环境, 二是当时钟系统的时间显示出现问题时, 可以通过简单的复位, 来重置系统的时间。
复位电路有多种实现方法: 比如设置专用的电路来完成复位功能;或是通过物理方式, 也即是通过触发相应的实体按钮来产生一个电平信号, 实现复位。本次设计的复位电路部分, 采用第一种方法实现。
本方法中, 系统的复位由独立的复位电路来完成。方法是设置一个带电容的独立电路, 当电路正常运行时, 电容会产生充放电过程, 这就会产生相应的电平信号, 从而实现所需要的复位效果。
1.4 数码管驱动模块本次设计在最终的时钟时间视觉显示上采用了外接数码管的方式, 其可以实现极其丰富的显示效果。
数码管采用直流驱动的方式, 对于数码管的每一个独立的视觉显示部分, 都单独划分一个单片机的输入/输出口来控制, 因此需要外接一个驱动芯片。
采用74HC573芯片做为数码管驱动芯片, 它通过内部的缓存器来实现对信号的输入和输出, 可以加强数码管的视觉显示效果。
它的工作原理如下:
当芯片开始工作的时候, SCK上升沿接受到电平信号, 然后芯片将相应的数据输入到芯片内部的位移缓存器, 然后从输出接口输出, 从而完成一个运行周期。
数码管驱动电路如图 3所示。
![]() |
图 3 数码管驱动电路 |
1.5 指示灯模块
指示灯模块主要包括LED和限流电阻。LED显示的优点在于其物理性能可靠, 可以在很大程度上防止摔落和冲击造成的影响, 且LED模块的工作电压低, 需要的工作电流小, 运行稳定可靠。
LED显示电路如图 4所示。
![]() |
图 4 LED显示电路 |
1.6 按键模块
物理按键采用了独立按键的接法。该方法主要是利用单片机输入/输出口所接受到的电平信息来判定物理按键是否被按下, 然后再调用相应的程序。
同时考虑到因按键而导致的电平不稳定现象, 要对按键电路模块做去抖动处理。常用的有硬件去抖动和软件去抖动, 前者通过外加电路实现, 后者则是通过内置程序来产生一个延迟处理, 通过延迟来屏蔽电平信号不稳定而对整个系统产生的影响。
本次设计中, 采用软件去抖动的方法来使系统更加稳定。方法是通过内置程序来产生一个延迟, 通过延迟来屏蔽电平信号不稳定对整个系统产生的影响。
其实现方法是通过软件程序来监测按键的输入输出口, 当监测到有低电平通过的时候, 先延时一段时间, 待延时结束后重新检查该接口的电平值, 若数值为1, 则表明该次触发为无效信息, 可以屏蔽, 否则视为正常操作, 从而调用相应的程序。
2 软件程序设计软件程序设计的主要任务是, 在完成整体的硬件设计的基础上, 为了完成或达到最终想要的系统效果和功能, 或是为了将系统的各个硬件部分组成一个整体, 从而从软件层次上对系统进行控制和操作的时候, 我们需要设置一段或若干段程序。通过这些程序来协助我们分配、划分和管理整个系统的各种硬件资源和软件资源, 从而统筹系统的各个模块, 将系统的所有硬件部分连成一个整体, 从而实现我们需要或预期的效果。
软件程序设计如图 5所示。
![]() |
图 5 软件程序流程图 |
在软件程序设计中, 使用了Keil C51软件进行单片机的C语言编程。该软件提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案, 简单易用。
在代码编写上, 因为使用单片机内部的定时器计时, 所以先要设计一个主程序, 用于初始化定时器。然后在单片机内部存储器分别设置三个字节, 存放时钟的时、分、秒信息。
利用定时器与软件结合实现1 s定时中断, 每产生一次中断, 存储器内相应的秒值加1;若秒值达到60, 则将其清零, 并将相应的分字节值加1;若分值达到60, 则清零分字节, 并将时字节值加1;若时值达到24, 则将时字节清零。同时因为加入了物理按键, 所以当按键被触发后, 系统也会执行上述操作。
3 系统调试与仿真在本次系统调试与仿真中, 需要使用仿真软件来完成工作, 本次设计选用软件proteus。
使用软件仿真的优势在于可以提前确定系统的最终运行状况, 从而检验系统方案的正确性和可行性。如果系统在设计上存在不足, 也可以提前排查和修复, 从而极大的节省硬件资源。
在仿真软件操作上, 先在系统界面选择相应的电路元器件并连接组成电路, 完成整个电路后, 点击开始按钮进行仿真。
当然, 在这个过程中还需要将相应的电路程序写入其中, 最后加载, 否则系统是无法运行的。
因为在软件程序设计时使用的C语言, 所以需要先将C语言程序进行编译以生成需要的.hex文件, 将这个文件导入proteus, 然后等待运行结果并由此判断系统设计的正确性。
最终仿真结果如图 6所示。
![]() |
图 6 系统仿真结果 |
4 结论
本设计以单片机为核心, 针对传统的数字时钟在设备构成、走时效率和误差等问题上进行了改进, 在实现了和传统的数字时钟相同的计时效果的基础上, 整体设计更加简单、功能性更加丰富。依靠软件编程和物理按键, 实现了对时钟更加灵活的调时和复位设置, 独立的显示模块也使得时钟的视觉效果更好。
在本次设计中, 依托于单片机内部的定时计数器, 可以高效率的实现时钟系统正常的计时效果, 未来可以考虑通过加入独立的时钟芯片, 来对系统的时间精度进行进一步的升级。
在时钟的功能性上, 除了已经完成的传统的计时效果外, 我们还可以根据实际场景下的具体要求, 对电子时钟加入定点闹钟提示或者秒表等功能, 进一步增加数字电子时钟的实用性和功能性。
[1] |
陈刚, 张天鹏. 数字电子钟的分析与设计[J]. 办公自动化(综合版), 2009(3): 30-31. DOI:10.3969/j.issn.1007-001X-B.2009.03.012 |
[2] |
翁子寒. 单片机控制系统通信模型探析[J]. 微型电脑应用, 2019, 35(1): 138-141. DOI:10.3969/j.issn.1007-757X.2019.01.042 |
[3] |
王锐. 基于单片机的万年历设计[J]. 信息技术, 2014(9): 213-216. DOI:10.3969/j.issn.1009-2552.2014.09.056 |
[4] |
王涛, 屈高龙, 殷蘖均, 等. 基于单片机的定时插座设计[J]. 电子测试, 2014(19): 5. DOI:10.3969/j.issn.1000-8519.2014.19.004 |
[5] |
徐然, 项小东. PC机与多单片机串行通信系统[J]. 科学技术与工程, 2005, 5(12): 815-818. DOI:10.3969/j.issn.1671-1815.2005.12.016 |
[6] |
王冠军. 基于Flowcode的单片机编程方法研究[J]. 现代科学仪器, 2018(5): 76-79. |
[7] |
庞涛. 基于单片机的定时插座设计[J]. 微型机与应用, 2014(21): 25-37. DOI:10.3969/j.issn.1674-7720.2014.21.009 |
[8] |
卫勇, 王满仓, 闫洪, 等. 可编程多用途倒计时系统的设计[D]. 天津: 天津农学院, 2007.
|
[9] |
鲁刚强. 基于液晶显示器的单片机系统设计[J]. 科技咨询, 2009(1): 22. |
[10] |
柳晔者. 面向展项的单片机控制电路的设计与实现[D]. 武汉: 华中科技大学, 2014.
|