熊 刚,胡启迪,陈高峰,刘 晨
(杨凌职业技术学院 机电工程分院,陕西 杨凌 712100)
基于单片机的多功能时钟设计
熊 刚,胡启迪,陈高峰,刘 晨
(杨凌职业技术学院 机电工程分院,陕西 杨凌 712100)
本文结合单片机技术,以AT89S52为核心控制器,通过硬件及软件设计,制作了一款多功能数字时钟。测试结果表明,该数字时钟操作简单,工作稳定可靠,具有实时显示、闹钟设置、参数调整等功能,同时还具有体积小、功耗低、性价比高、易于携带、经济实惠等特点,具有较高的应用价值。
单片机;数字时钟;数码管;多功能
时钟在日常生产生活中有很多的应用,例如一些智能化的仪器仪表、自动化控制系统以及家用的空调,冰箱,微波炉等都需要时钟功能。传统的时钟大多数成本高、功能少、结构复杂,而数字电子时钟则有体积小、重量轻、精度高等优点,是时钟发展的主流方向[1-3]。
目前,有很多的方式可以实现数字时钟的设计,如数字电路、单片机等。随着计算机技术和电子技术的发展,采用单片机开发电路则具有可靠性高、扩展性能好、经济实惠等优点,可以极大的降低硬件电路的复杂性。所以,本设计采用单片机为控制核心,制作一款具有实时时钟显示和闹钟控制的多功能数字时钟。
本设计硬件部分采用模块化设计方式,包括单片机模块、显示器模块、放大电路模块、报警电路模块及按键设置模块等。
单片机采用Atmel公司生产的AT89S52,该单片机具有8 k字节在系统可编程Flash存储器、三级加密程序存储器、3个16位定时器/计数器、8个中断源、看门狗定时器等功能,指令和引脚上与MCS-51单片机完全兼容,在众多嵌入式控制应用系统中有广泛应用[4-6]。
在硬件电路设计中采用P0口作为6位LED数码管的驱动接口,同时外接限流电阻,数码管的驱动采用PNP型三极管作为放大电路与单片机的P2.2~P2.7相连;通过4个独立式按键进行参数设置,分别与单片机的P1.0~P1.3连接;具体电路如图1所示。
软件设计采用模块化设计方法,根据任务要求,首先把任务划分为相对独立的功能模块,系统模块可以分为主程序、LED显示子程序、查表子程序、时钟设置子程序、闹钟设置子程序、定时器中断子程序等功能模块。
2.1 主程序
主程序完成系统初始化,包括I/O端口、时钟、闹钟初始参数及初始标志及定时/计数器初始状态的设定;调用相应的子程序进行更新显示时间、循环扫描按键、根据按键分别进行闹钟和时钟的设置管理等操作。流程图如图2所示。
2.2 LED显示子程序
首先将显示数据存储单元的数据逐个的送到P0口,其中中所用到的显示时间数据首地址均为个、十位分离后的数据首地址。同时依次选中各数码管,实现6位LED的动态显示功能,并同时进行矩阵键盘扫描,若有按键按下,则在最后一位LED数码管显示完毕后再进行一次该键的检测(相当于按键去抖),并存入键值到相应位置。
图1 系统硬件电路图Fig.1 Circuit diagram of the hardware system
图2 主程序流程图Fig.2 Flow chart the main program
2.3 查键值子程序
该子程序读取相应地址的键值,键值为#00H则调用时钟设置子程序,键值为#06H则调用闹钟设置子程序,若键值为#07H并且当前闹铃标志位为1则将标志位清零,否则反转闹铃开关标志位,并根据开关状态在数码管最高位显示0.5 s的‘N’(闹钟开)或‘F’(闹钟关),其余键值为则返回。
2.4 时钟设置子程序
该子程序首先关闭定时器,“时”、“分”修改标志位均清零,调用LED时间显示子程序,然后读取键值,若为04H则“秒”加1,若为05H则“秒”减1,若“秒”为59,则加完结果为00,若“秒”为00,则减完结果为59,完成后再次调用LED时间显示子程序并读取键值;若键值为01H则“时”修改标志位置1,“分”修改标志位清零,此时再次调用LED时间显示子程序并读取键值,若为04H则“时”加1,若为05H则“时”减1,若“时”为23,则加完结果为00,若“时”为00则减完结果为23,完成后再次调用LED时间显示子程序并读取键值[7];若键值为02H则“分”修改标志位置1,“时”修改标志位清零,此时再次调用LED时间显示子程序并读取键值,若为04H则“分”加1,若为05H则“分”减1,若“分”、为59,则加完结果为00,若“分”为00,则减完结果为59,完成后再次调用LED时间显示子程序并读取键值;若键值为03H则 “时”、“分”修改标志位均清零,此时再次调用LED时间显示子程序并读取键值,若为04H则“秒”加1,若为05H则“秒”减1,若“秒”为 59,则加完结果为 00,若“秒”为 00,则减完结果为59,完成后再次调用LED时间显示子程序并读取键值;若键值为#00H键则退出时间参数设置模式,返回至正常计时模式;若为其它键值则再次调用LED时间显示子程序并读取键值。
2.5 闹钟判断子程序
该子程序首先查看闹钟是否开启,若开启则将当前时间与闹钟设定时间进行“时”、“分”、“秒”比对来判断闹钟启闹时间是否已到,若时间到,则启动闹铃,流程图如图3所示。
图3 闹钟判断子程序流程图Fig.3 Subprogram flow chart of the alarm judging
2.6 定时器中断程序
定时器中断程序命名为 CLOCK子程序,该中断程序每50 ms响应一次,20个50 ms判断为1 s到,60个1 s判断为1分钟到,60个1分判断为1一个小时定时时间到,该子程序主要用于定时修改存放时钟数据的地址单元中的数据,具体流程如图4所示。
2.7 资源分配与程序设计
在完成各模块流程设计后,最后根据每个细化的流程图逐个编写子程序模块,再根据系统主程序的流程进行各功能的子程序模块调用,最终生成系统可执行的程序。
在程序编写前,先要对流程中涉及到的一些变量做一个合理的分配,并对相应的地址单元用EQU进行命名,这样会使编程过程更为清晰,可读性也会提高,便于后面的查错与调试工作的顺利进行。
图4 定时器中断子程序Fig.4 Subprogram flow chart of the timer interrupt
系统调试包括硬件调试和软件调试两部分,硬件调试一般需要利用调试软件来进行,软件调试也需要通过对硬件的测试和控制来进行,因此软、硬件调试是不可能绝对分开的。
3.1 硬件调试
1)设计测试软件,使P1、P0口输出55H或AAH,同时读P2口。运行程序后,用万用表检查相应端口电平是否一高一低,在仿真器中检查读入的P2口低2为是否为1,如果结果如上所述则说明并行端口工作正常。
2)设计一个测试LED显示函数的程序、使所有LED全显示“8.”的静态显示程序来检验LED的好坏[8]。如果运行测试结果与预期不符、则很容易根据故障现象判断故障原因,并采取针对性措施排除故障。
3.2 软件调试
1)先在主程序中屏蔽中断及其它函数调用,只保留LED显示函数,并在相应的存储单元中存入测试数据,观察是否能将测试数据正常显示,此过程调试通过后进行下一步的调试工作。
2)打开中断,观察系统是否能从00:00:00开始正确计时,调试至正确计时后,则将计时初值改为23:58:50,在运行程序,观察是否能正确进位,此步调试通过后进入下一步的调试工作。
3)打开时钟设置子程序调用,按下按键,观察系统是否能够正确响应时间设置过程中所涉及的各个按键,此步调试通过后进入下一步的调试工作。
4)打开闹钟时钟设置子程序调用,先看能否进入闹钟时间设置模式,若能进入则观察系统是否能够正确响应闹钟时间设置过程中所涉及的各个按键,此步调试通过后进入下一步的调试工作。
5)打开闹钟判断子程序调用,将闹钟时间设定在当前时间之后1分钟左右,耐心等待,看闹铃是否会在设定时间响起,若能响起[9],按下停止键#04看是否能关闭闹铃。
3.3 系统性能分析
在软、硬件调试成功后,可以将程序固化到AT89S52的Flash存储器中,上电脱机运行,进行整体测试。将该设计的电子钟和标准时钟的进行时间对比,每10 min记录一次数据,记录时间2个小时,数据如表1所示。
表1 时间数据记录结果Tab.1 Test result of time data record
测量数据显示,设计的电子时钟和标准时钟的时间在两个小时内有一定的偏差,最大误差2 s,计时误差较小,准确度较高,达到了设计要求,闹钟时间到达设定值时,闹铃正常工作。
本设计采用单片机作为智能控制核心,使系统结构大为简化,实现了电子钟的基本功能,同时也扩展了闹钟设置及时间校准功能。在实际测试中,计时准确度高,闹钟工作正常可靠,该数字时钟具有结构简单、体积小、功能多、性价比高、实用性强等特点,具有较高的应用价值。
[1]李娜,杨杰,牛晓飞.基于单片机的简易数字电子钟设计[J].河北北方学院学报:自然科学版,2014,30(6):15-18,33.
[2]罗佳.基于单片机的数字电子钟及其实现[J].常州信息职业技术学院学报,2010,9(2):17-22.
[3]王瑜.PCF8583在电子时钟设计中的应用[J].电子设计工程,2009,17(6):115-116.
[4]王琰,郭燕.基于C51单片机的智能循迹小车设计与实现[J].机电一体化,2013,8:72-76.
[5]郑棣,徐迎春,刘雨.基于51单片机的多色点阵显示系统设计[J].自动化技术与应用,2014,33(12)5:109-113.
[6]王瑾,袁战军,李小斌.交通灯控制系统的设计与仿真[J].海南大学学报:自然科学版,2014,32(4):334-339.
[7]张伟,陈锋,马军强,等.轨/姿控发动机脉冲后效冲量快速算法的研究及应用[J].火箭推进,2012(1):51-56.
[8]肖笑.基于BCC算法的多机系统PSS参数优化设计[J].陕西电力,2012(12):51-54.
[9]胡异丁,欧进发,钟滔.基于LabVIEW的无线心率测量系统的设计[J].电子设计工程,2015(7):43-45.
The design of multifunction clock based on single-chip microcomputer
XIONG Gang,HU Qi-di,CHEN Gao-feng,LIU Chen
(Department of Electromechanical,Yangling Vocational and Technical College,Yangling 712100,China)
In this paper,we made a multi-function digital clock which put AT89S52 as the core controller and combined with single-chip microcomputer technology,we also designed the hardware and software.Test results show that the operation of digital clock was simple,stable and reliable in work,it had function of real-time display,clock settings and parameter adjustment,it also had some features,such as small volume,low power dissipation,highly cost effective,easy carrying,economical and practical,it had a high application value.
single-chip microcomputer;digital clock;nixie light;multi-function1
TN409
A
1674-6236(2016)04-0164-04
2015-04-16 稿件编号:201504163
杨凌职业技术学院人文社科类研究基金项目(GJ1310)
熊 刚(1985—),男,河南信阳人,硕士,讲师。研究方向:电气自动化控制技术。