刘战峰
(太原科技大学,山西 太原 030024)
电子时钟是一种应用数字电路技术实现计时的装置,主要基于51单片机,通过延时程序产生一定的中断,用于一秒的计时,采用满60秒,分钟进一,秒清零,满六十分,时进一,分清零,满二十四小时,时清零,从而达到计时的功能。单片机技术已经深入到国民经济的各个领域,几乎每一个智能产品都集成了至少一片单片机,对每个行业的技术改造和产品更新换代起到了非常重要的作用[1]。数字式电子时钟采用集成电路,通过译码编译,数码管显示来实现计时功能,代替了指针机械式转动显示,减小了计时误差,提升了时钟的精准度,而且我们可以对时、分进行校对,片选的灵活度高。
在51单片机应用系统中,通过时钟芯片设计的时钟不仅时间精度高,而且还易控制,适用于精度要求高的场合[2];电子时钟拥有体积小、功能多、实时性好、可扩展性强等优点,受到人们的高度青睐,被广泛地应用于生活和工作中。本文主要介绍通过DS1302时钟芯片实现电子时钟的设计,本设计由硬件电路设计和C语言软件设计两部分组成,其中硬件设计以AT89S52单片机为核心,加上电源、数码管、温度检测器、蜂鸣器为辅助电路,构成一个简单的数字时钟系统。
本设计利用AT89S52单片机设计电子时钟,由LED四位共阴极数码管[3]显示时钟的日期、小时和分钟,周围的LED灯轮显实现秒的显示,温度检测器控制温度,蜂鸣器实现闹铃功能,用功能键(MODE)、加法键(PLUS)、复位键(REST)进行时间的调整和闹钟温度的设置。
图1 系统框图
本设计主要实现的功能有:
1) 具有时间显示和手动校对功能,24小时制;
2) 具有日期显示和手动校对功能;
3) 具有温度显示和手动校对功能;
4) 整点报时功能:当打开整点报时时,在8点至22点,每个整点都会报时(蜂鸣器响及LED显示变化);
5) 闹钟功能:当打开闹钟时,在时间到了设定的时间后就会响闹。按任意按键会停止响闹,响闹的时间长短可以设置;
6) 温度报警功能:当打开温度报警,并且环境的温度低于设定的最低温度或高于设定的最高温度时,在显示温度的过程中会不断闪烁,并且蜂鸣器会响[4]。
数字时钟以单片机为核心,由电源、温度检测电路、数码管驱动电路、复位电路、实时时钟电路、蜂鸣器驱动电路组成。通过四位数码管显示时间、日期、温度,给人以视觉丰富的视觉体验,用温度检测电路对温度进行控制,当温度超出设定的最高温度或低于设定的最低温度时,会发出报警,给人以提示。蜂鸣器用来实现闹铃功能,更好的方便人们的生活。各电路相互连接最终实现了电子时钟的实时性和多功能特性。
从外部引入5 V的直流电,为单片机、复位电路、温度检测电路、蜂鸣检测电路、实时时钟电路提供电源。
复位电路主要由型号为5 V电源,型号为104的贴片电容,10 k的电阻以及按键RST1构成,RST1接芯片的相应引脚RST,当开关按下时引脚RST1为高电平1,断开时引脚为低电平0。持续时间大于2个时钟周期的高电平,就可完成单片机的复位。
图2 程序下载接口图
如图2所示,由AT89S ISP构成的两排十针下载口,板图上有一个小方框,为1号引角;下载线的凸口为正方向,凸口的右侧边的第一个插孔为1号引角。通过此接口将keil生成的hex文件程序烧录到单片机中,从而控制时钟的运行。
AT89S52单片机是低电压高性能CMOS 8位单片机,片内含8K bytes的可反复擦写的Flash只读程序存储器和256bytes的随机数据存储器(RAM),器件采用ATMEL公司的高密度,非易失性存储技术生产,功能强大的AT89S52单片机适合于许多较为复杂控制应用场合[5]。
图3 AT89S52单片机的引脚图
如图3所示,AT89S52有40引脚,按功能可分为电源及时钟引脚、控制引脚、I/O口引脚,所用引脚功能如下:
1) VCC——运行时接+5 V。
2) GND——接地。
3) XTAL1——片内振荡器反相放大器及时钟发生器的输入端。
4) XTAL2——片内振荡器反相放大器的输出端。
5) RST——复位信号输入端,高电平有效,在此引脚上持续时间大于2个机器周期的高电平,就可以使单片机复位。
6) EA/VPP——外部程序存储器访问允许控制端。当EA接高电平,PC值不超过0FFFH时,单片机读片内程序存储器中的程序,当PC值超出范围时,将读取外部(1000H—FFFFH)存储器中的程序,当EA为低电平时,只读取外部存储器中(0000H—FFFFH)中的程序。
7) a) P0口(P0.0-P0.7)是一个8位漏极开路的双向I/O口,当单片机扩展外部存储器及I/O芯片时,P0口作为地址总线(低8位)和数据总线的分时复用端口。b)P1口(P1.0-P1.7)是具有内部上拉电阻的准双向I/O口,此口专为用户使用,可驱动四个LS型TTL负载。c) P2口(P2.0-P2.7)P2口是具有内部上拉电阻的8位双向I/O口,当AT89S52扩展外部存储器及I/O口时,P2口作为高8位地址地址总线用,输出8位地址。d) P3口(P3.0-P3.7)是带有上拉电阻的准双向口,可以进行串行数据输入、外部中断0、1输入、定时器0、1外部计时器输入、外部存储器读写输出。
系统的软件设计主要是系统功能的设计,单片机软件设计主要包括执行软件(完成各种功能)和监控软件(按键)的设计。本设计使用C语言编程[6],将系统分为主程序和子程序两大部分,其中子程序主要是针对时钟系统的功能模块设计的。
当给系统上电时,首先要进行初始化,设置秒钟的显示模式,初始化秒钟显示,然后开总中断,单片机依次开始调用LED显示子程序、按键子程序、DS1302子程序、DS18B20子程序,闹钟子程序、温度控制子程序,经过延时,返回程序开始循环执行。
主程序流程图如图4所示。
图4 时钟系统主程序流程图
1) 环境温度采集子程序设计
DS18B20是1-wire单线器件,它在一根数据线上实现数据的双向传输,而AT89S52单片机并不支持单线传输,这就需要操作DS18B20时必须遵循一定的规定。在单线DQ上,存在复位脉冲、应答脉冲、写“0”、写“1”、读“0”、读“1”几种信号类型。除了应答脉冲之外,均由主机产生,数据位的读写则通过读、写时序产生的。
写时序是由数据线从高电平拉到低电平产生的,有写“0”和写“1”两种类型的时序。所有写时序必须在60us以上,各个写时序必须保证最短1us的回复时间。DS18B20在DQ线变低后的15~60us的窗口对DQ进行采样,如果为高电平,则写“1”。当DQ被拉至低电平且至少60us时,则写“0”。
读时序是由数据线从高电平拉至低电平产生的,有读“0”和写“0”两种类型的时序。和写时序一样,所有的读时序最短保持60us,各个时序之间必须保证1us的恢复时间。在15us内,将DQ引脚置低电平,输出数据在读时序有效,则读“1”,当DQ引脚被拉至高电平时,则读“0”[7]。温度采集子程序流程图如图5所示。
图5 温度采集子程序流程图
2) 闹铃子程序设计
闹钟子程序是不断用时钟的分和时与设定的分和时进行比较,当满足相等条件时,闹钟启动,响铃10分钟,当复位键、模式键、加一键这三个键中有任一个键按下,或不满足相等条件时,闹钟不启动。
3) 实时时钟日历子程序设计
该程序主要实现对DS1302充电、写保护,对年、月、日、时、分等寄存器的读写操作。DS1302有12个寄存器,其中7个与时钟、日历有关。当对时钟、日历寄存器或片内RAM进行写时WP=0,进行读时WP=1。满充电寄存器的TCL位为控制慢充电的选择,当TCS=1010时才能开始慢充电。
在对DS1302写寄存器进行读写操作时,首先要解除写保护寄存器的“禁止”状态,当用多字节模式进行操作时,必须写够8字节。
4) 温度控制子程序设计
该子程序主要由两个判断语句组成,当有温度控制按键按下,并且当前温度低于设定的最低温度或高于设定的最高温度时,开始报警。
5) 数码管显示程序设计
数码管显示程序比较简单,用74LS164驱动LED数码管就可以显示电路。你要将要显示的数字编成对应的BCD码,逐步送入74LS164的A、B串行输入端,数码管将正常显示。本设计采用的数码管的动态显示,由位选线控制是哪一位数码管有效,有效的数码管则点亮。
Keil uvision4[8]是一款用于51单片机的集成开发环境,包含了功能强大的编辑器和调试器。用户可以在编辑器内编辑程序代码,编辑完成后可以调试代码,方便用户快速的检查和修改程序,此软件还有代码覆盖、历史跟踪等功能,操作简单,可扩展性强。这是一款集编辑、编译和项目管理于一身的基于窗口的软件开发环境,集成了C语言编译器、宏编译、链接/定位、以及HEX文件产生器。
在使用时,首先要新建一个工程,建立并编辑源文件,编译调试工程,在调试无错误的情况下生成目标文件,将目标文件下载到程序存储器中。检测程序能否实现预期效果,如果不能,则对程序进行分析修改,直到实现所需要的系统功能为止。本系统软件的测试如图6所示。
通过测试可知,程序调试正确,并成功生成hex文件。通过程序下载器将此hex文件烧录到单片机内,即可进行硬件电路的焊接。
图6 keil4测试系统结果
本文所设计的基于51单片机的LED电子时钟,把程序设计语言应用于时钟的系统构造中,实现了电子时钟的多功能设计。提高了智能电子时钟的实用性和功能性。基于单片机芯片的多功能时钟能够实现更多的功能,比如秒表计时、倒计时功能等等,这些都是我们将来要开发与研究的内容,而且随着科学技术的进步,电子技术的高速发展,会有越来越多功能齐全、设计个性的电子产品进入我们的生活,丰富我们的生活,给我们的生活带来了更多的方便和乐趣。