基于51单片机的数字时钟设计

2016-12-19 07:24韩雪松
数码世界 2016年11期
关键词:数码管C语言中断

韩雪松

渤海大学工学院

基于51单片机的数字时钟设计

韩雪松

渤海大学工学院

近年来,随着科技的发展,电子产品已经应用到我们生活的很多面面,在现代生活中,尤其是时间观念很强的现在,电子时钟是我们必需的物品,虽然市面上的时钟种类很多,功能也很多,但是数字电子时钟更具有应用价值,具有显示清晰,走时准确,易于调试等优点,将会在生活和工作中占有很大比重。

单片机 数字时钟 数码管

数字时钟在我们的日常生活中是必不可少的,除了家庭用的时钟之外,还有智能的仪器和仪表也都会用到,虽然实现时钟的方式有很多种,但最实用的,最方便的还是单片机。

1 电子时钟的功能

①自动计时;

②显示时间;

③时间校准;

④整点报时;

⑤定时闹钟。

2 方案设计

2.1 硬件的的选择与设计

硬件设计的核心部分就是单片机,单片机主要应用于控制方面,它集成了计算机中的大部分功能,本次设计采用的是AT89C51:具有4K的只读存储器;128*8bit内部随机存储器;还具有两个优先级别的5个中断源;而且具有片内振荡器(频率为1.2MHz-12MHz)和时钟电路;两个16位的计时器;1个串行I/O接口,可多机通信;拥有21个字节的特殊功能寄存器;低能耗;更突出的是它具有很强的位处理功能,更贴近这次设计的功能。

而软件计时使用的8个LED数码管显示,小时与分钟与秒之间用短线连接,非常清晰,一目了然,时钟采用的是12MHz的晶振,电路采用按键方式,方便操作。P0口作为段选码输出,P2口作位选码输出。除了单片机之外的电路还包括:时钟电路,复位电路,LED数码显示电路和按键电路。总体的设计框图如图1。

图1 软件计时LED显示时钟总体框图

2.2 程序设计

程序的的设计分为汇编程序设计和C语言程序设计:汇编程序具有执行快,功能强,指令短的特点,不管是在运算速度上还是存储空间上,效率都很高,但是应用范围不是很广;C语言有所不同,在单片机的很多开发设计中都被广泛应用,在汇编语言的功能基础上,它还具有良好的可移植性,更强的表达能力,可以直接操作计算机硬件,所以为了设计出性能优良的时钟,在这次设计中选择了C语言编程。

C语言的设计包括主程序和子程序,主程序包括参数初始化,按键和显示部分等(见图2),每个模块都用子程序,在主程序中调用。

软件的主要程序部分其实只有两大部分,也是两个重点就是数码管显示模块和中断计时模块。

图2 主程序流程图

显示部分使用的是 LED数码显示管,本次设计采用的是7段式,公共端共阳极,阴极端分开控制,需要亮的的二极管的阴极端接地。首先要选通数码管,然后可以给I/O线发送数字对应的字段码就可以显示字符,这样就会更简单方便的显示数字,但是需要的I/O线比较多。

计数部分使用的是计数器0,如果加法计数器TL0的低5位计数满时,就向定时加法计数器TH0进位,若TH0同样计数满的话,则溢出,但此时计数器并不会停止计数,而是从0开始进行加1计数,如果中断允许,可以提出中断请求。除此之外,还可以通过还可以通过溢出标志位TF0来判断是否溢出。

而单片机有一个最初始化的操作就是复位,复位的作用就是使中央处理器和其他部分保持在一个比较平稳的状态,使单片机能正常的运行,在单片机正常运行之后,复位端会在外部电路的作用下产生高电平,这时系统就会复位,当复位端变为低电平时,单片机开始执行程序。而片内的复位电路是用施密特触发器连接,用来控制噪声。复位还有一个作用,就是单片机的程序出现错误时,可以通过复位重新启动。

而在程序设计中有一个最重要部分的就是中断,时间的运行是通过定时中断子程序对时钟单元数值进行位调整来实现的。只有中断源有请求而且被允许的情况下才会有中断响应。首先,根据请求的中断源的优先级使触发器置“1”,然后现场保护,重置初值,进入下一个定时阶段,满60秒则分加1,满60分则小时加1,满24个小时之后再重复循环,就形成了时钟计时。

按键处理的部分设计比较人性化,时钟调时时,K0按键按一次,时钟暂停,可以调小时,再按第二次可以调分钟,再按一次,就回到正常运行了(可以通过K1进行调时调分加1操作,通过K2进行调时调分减1操作),但是,时钟正常运行时,K1、K2是不起作用的。流程图如图3。

图3 按键处理模块的流程

图4 数字电子时钟电路仿真图

这次设计的数字电子时钟还具有闹钟功能,只需在电路设计中加入蜂鸣器即可,通常使用的是电压式蜂鸣器,在与单片机的连接中有两种方法:一种是使用集电极开路输出反相驱动器7406,另一种则是使用三极管驱动,两种工作原理基本相同:当输出端口为高电平时,7406或三极管则输出低电平,蜂鸣器发声。

3 系统仿真

本次设计电路的仿真和程序编译采用的软件都是单片机设计中经常用的protues7.8和Keil C51。protues软件实现了单片机与电路仿真的结合,支持多种类型的单片机仿真,而且在仿真过程中可以看到单步的仿真情况,还支持比如Keil C51的程序编译,功能很丰富,使用也更加方便。而与protues搭配使用的Keil C51,它可以对程序进行编译,仿真,对C语言和汇编语言同样适用,并且可利用的库函数非常多,非常方便使用。仿真图如图4。

4 总结

通过这次的课题研究和实践,使我能更为熟练地使用protues仿真和Keil C51对C语言的编译,这次设计是理论与实践的结合,对以后的学习起到了很大帮助。本次设计比较成功,基本完成了电子时钟的功能需求,但是还有诸多不足,也会在以后的学习和实践中逐渐积累经验,使自己逐渐进步。如今,科技飞速发展,“互联网+”的理念更加深入人心,电子产品的应用也会越来越广,各种数码商品也会在市场中逐渐成为主流,而我们作为一名当代大学生,更应该充分利用自己所学的知识,为社会发展尽自己的一份绵薄之力。

[1]谢维成,杨加国.单片机原理与应用及C51程序设计(第三版).北京:清华大学出版社,2014

[2]孙涵芳.MCS-51系列单片机原理及应用[M] .北京航空航天大学出版社.1996-4

[3]谢维成,杨加国.单片机原理、接口及应用程序设计.北京:电子工业出版社,2011

[4]张培仁.基于C语言编程MCS-51单片机原理与应用.北京:清华大学出版社,2003

猜你喜欢
数码管C语言中断
物理项目教学设计,用单片机控制四位数码管显示
基于51单片机的分数计数器设计
基于Visual Studio Code的C语言程序设计实践教学探索
“单片机中断概述”微课教学设计
一种考虑GPS信号中断的导航滤波算法
Arduino编程
51单片机C语言入门方法
MC9S08FL16单片机数码管静态显示分析
Linux中断线程化分析及中断延时测试
基于C语言的计算机软件编程