基于51单片机的电子时钟设计

许珂乐



摘 要: 利用Atmel公司的IEEE1149.7仿真器对电子时钟进行开发,用实验板实现时间、日期、定时及其设定功能,详细对软件编程流程以及调试进行说明,并对计时误差进行分析及校正,提出了定时音与显示相冲突问题及解决方案。由于单片机具有低成本、高性能等特点,在自动控制产品中得到了广泛的应用。整个电路结构简单,可靠性能高,易于推广和移植,具有广阔的应用前景。
关键词: 单片机; IEEE1149.7仿真器; 电子时钟; C语言
中图分类号: TN79?34 文献标识码: A 文章编号: 1004?373X(2017)13?0175?03
Abstract: The IEEE1149.7 simulator developed by Atmel Company is used to develop the electronic clock. The test board is adopted to realize the functions of time, date and timing, and their setting functions. The software programming flow and debugging are described in detail. The timing error is analyzed and corrected. The problem that the timing sound is conflicted with the display, and its solution are put forward. Since the single chip microcomputer (SCM) has the characteristics of low cost and high performance, it is widely used in the automatic control products. The whole design has the advantages of simple circuit structure and high reliability, is easy to popularize and transplant, and has broad application prospect.
Keywords: single chip microcomputer; IEEE1149.7 simulator; electronic clock; C programming language
0 引 言
在日常生活和工作中常常用到定时控制,如扩印过程中的曝光定时等。早期常用的一些时间控制单元都使用模拟电路设计制作,其定时准确性和重复精度不是很理想,现在基本上都是基于数字技术的新一代产品,随着单片机性价比的不断提高,新一代产品的应用也越来越广泛。其功能强大、体积小、质量轻、灵活好用,配以适当的接口芯片,可以构成各种各样、功能各异的微电子产品。
随着电子技术的飞速发展,家用电器和办公电子设备逐渐增多,不同的设备都有自己的控制器,使用起来很不方便。这些具有人们所需的智能化特性产品减轻了人的劳动,扩大了数字化的范围,为家庭数字化提供了可能。根据这种实际情况,设计了一个单片机多功能时钟系统,它有基本的时间功能,还有秒表、闹钟功能,也可扩展为定时对家电等电气产品的自动控制,可以避免多种控制器的混淆,利用一个控制器对多路电器进行控制;可增加温度传感器,进行实时温度显示,进一步扩展为利用不同的温度对某些电气产品进行自动控制。
1 系统功能及操作
1.1 系统功能的确定
系统具有时间、秒表、闹钟功能,并可以对时间、秒表、闹钟进行设置,闹钟使用蜂鸣器提醒。要求计时精度尽量提高。显示格式为:
时间:“时”(第1,2位),“分”(第3,4位),“秒”(第5,6位);
秒表:“时”(第1,2位),“分”(第3,4位),“秒”(第5,6位);
闹钟:“时”(第1,2位),“分”(第3,4位),“秒”(第5,6位)。
1.2 系统操作说明
(1) 按开始键自动进入时间显示,开始为0,按K1键进入更改时间,闪烁位为可更改位,按K2键调整更改位,K3键为自增键,K4键为自减键,修改成功之后按K1键确定修改成功;
(2) 按K2键进入秒表功能,再次按K2键秒表开始计时,K3键为秒表暂停键,继续则按K2键,K4键为清零键;
(3) 按K3键进入闹钟功能,进去之后闪烁位为可更改位,按K2键调整更改位,K3键为自增键,K4键为自减键。
2 系统硬件设计
2.1 实验板电路结构框图
实验板电路结构框图如图1所示。
2.2 数码显示电路
如图2所示为数码显示电路,仿真器使用了6个共阳极的数码管,P0口为段码信号线,AD0~AD7为段选,A8~A15为位选。
2.3 蜂鸣器电路
蜂鸣器电路的硬件原理图如图3所示。此电路用于定时发出提示音,可以让蜂鸣器发出不同的声音。此电路用于产生定时器提示音。
3 系统软件设计
3.1 数据单元分配
数据存储单元、标志单元的分配表见表1,表2。
3.2 计时时钟实现
时钟的最小计时单位是s,使用定时器的方式1,最大的定时时间也只能达到131 ms。可把定时器的定时时间定为50 ms,这样,计数溢出20次即可得到时钟的最小計时单位。计数20次可以用软件实现,对定时器溢出次数进行计数,计满20次即为1 s。从秒到分,从分到时都是通过软件累加并进行比较的方法实现的。
(1) 计时子程序模块的实现
当T0中断时,执行本程序,因T0设为50 ms中断,故中断20次为1 s。中断程序分别有20次计数(1 s),60次计数(1 min),60次计数(1 h),等于24时又重新开始。
(2) 时钟设定子程序模块的实现
当设定时间时,断开T0中断,秒单元清0,进入时、分单元设定。设定好后重装T0初值,开T0中断。
(3) 日期、定时设定子程序模块的实现
日期、定时的设定同时钟设定。定时设定时,把时钟的秒位换成定时标志位,“00”为当路定时关,“01”为当路定时开。
3.3 程序说明
(1) 程序初始化
程序初始化时,清相应内存单元(20H~4FH共48个单元),送时间(00时00分00秒),送定时器T0,T1初值,TH0=TH1=4CH,TL0=TL1=00H,特殊寄存器(SP=50H,TMOD=11H)值等。
(2) 误差分析及校正
当T0中断时,需重装定时初值,且要加上从断开T0中断到允许T0中断共有13个周期,以减小误差,故理论重装定时初值为(TH0)=4CH,(TL0)=13H。但该外接晶振电路的晶振频率可调,可能出现误差,所以实际不是这个值。
经调试,当定时初值为(TH0)=4CH,(TL0)=06H时,24 h约慢2 s,所以每当计时24 h之后,给秒单元(30H)送02H,使秒累加时从2加起,24 h就少加2 s,即可使时间得到校正。
(3) 实现闪动设定
闪动可选用段码送00H实现,也可禁止当前位显示,选通位送0实现。本设计选用后者实现闪动,用定时器T1进行控制。
(4) 实现连续加1
先判断键是否松开,若松开,则只执行一次加1程序段,进行单次加1;若未松开,则连续执行加1程序段,实现连续加1。每执行一次加1程序段就调用显示子程序进行延时,对调节速度进行控制。本系统以5 Hz的速度连续加1,这样能快速对时间、闹钟、蜂鸣器进行设定。
(5) 定时音与显示相冲突问题及解决方案
由于蜂鸣器响时P3.2口的电平呈高频变化,频率1~2 kHz,其间隙时间为0.5~1 ms,小于6 ms,因显示时每个数码管显示1 ms,至少需要6 ms,故蜂鸣器响时无法进行显示。为解决此问题,可增加锁存器,采用静态显示;也可增加一语音芯片,既可解决此问题,也可把定时音换成音乐或语音提示,或增加其他功能,使系统功能更强。
4 系统调试
该时钟程序的功能模块先后实现的顺序为:主程序→时间模块→显示模块→时间设定及其显示模块→闹钟及其显示模块→闹钟设定及其显示模块→定时提示音及与显示相冲突的协调模块。每完成一个模块就与前一个已完成的模块结合起来调试,直至实现相应功能再编写下一模块程序。在与主程序衔接时,主程序和各子程序也需做相应的改动,以便与子程序更好的衔接,特别是显示子程序需做较大改动,以便对不同内容进行显示。
程序用C语言程序编写,该软件还可进行软件仿真。用C语言编好程序后,先编译,把C语言编译成二进制代码和十六进制代码。若编译无法进行,说明程序有语法错误,需进行修改。编译成功后则可进行软件仿真,仿真可单步运行,也可连续运行。仿真时应调出数据窗口,看各单元数据是否正确,这是软件仿真的目的。当然,有些错误软件仿真不容易发现,看是否正常,若不正常,再根据出错的地方返回软件仿真,查看相应的数据单元,再修改程序,这样反复调试,直至程序可用,在实验板上能正常运行,至此完成系统调试。
5 结 论
该系统经验证,满足设计要求。由于加入了计时修正,在精度方面已经相当准确,还可以达到更高精度,需要精确计算定时器T0中断次数的误差,再予以修正;在软件的定时部分可以进行改进,用循环程序实现,每次循环只需更改相应单元即可,这样会使该设计系统更精简。
参考文献
[1] 肖广兵.ARM嵌入式开发实例?基于STM32的系统设计[M].北京:电子工业出版社,2013.
[2] 王永虹.STM32系列ARM CortexM3微控制器原理与实践[M].北京:北京航空航天大学出版社,2008.
[3] 郭天祥.51单片机C语言教程[M].北京:电子工业出版社,2008.
[4] 谭浩强.C程序设计[M].4版.北京:清华大学出版社,2011.
[5] 徐晓平,程传胜.PCB设计标准教程[M].北京:北京邮电大学出版社,2008.
[6] 何立民.单片机应用系统设计[M].北京:北京航空航天大学出版社,2013.
[7] 李广弟.单片机基础[M].北京:北京航空航天大学出版社,2014.
[8] 何希才.新型实用电子电路400例[M].北京:电子工业出版社,2014.
[9] 徐爱钧.Keil C51单片机高级语言应用编程与实践[M].北京:电子工业出版社,2013.
[10] 杜树春.基于Proteus和Keil C51的单片机设计与仿真[M].北京:电子工业出版社,2012.
[11] 许维蓥,郑荣焕.Proteus电子电路设计及仿真[M].北京:中国电力出版社,2014.
[12] 张毅刚.基于Proteus的单片机课程的基础实验与课程设计[M].北京:人民邮电出版社,2012.
[13] LOUDON Kyle.算法精解:C语言描述[M].肖翔,陈舸,译.北京:机械工业出版社,2012.
[14] 中尾真治.活学活用PIC单片机C语言编程[M].卢伯英,译.北京:科学出版社,2012.
[15] 內格尔.C#高级编程:C# 5.0 & .NET 4.5.1[M].李铭,译.9版.北京:清华大学出版社,2014.