APP下载

基于51单片机的电子钟系统设计与仿真

2018-11-14江海职业技术学院机电汽车学院张丽红张国祥

电子世界 2018年20期
关键词:电子钟数码管按键

江海职业技术学院机电汽车学院 张丽红 张国祥

本文围绕51单片机设计了电子钟控制系统,利用8位数码管显示“时”“分”“秒”,利用DS1302时钟芯片、DS18B20温度传感器等芯片,实现了具有声光报时、按键调时、闹钟响铃、实时测温的功能。本文电子钟控制系统设计硬件结构简单,软件编程思路清晰明了,通过硬件的调试仿真,达到了设计要求。此电子钟人机界面简单、功能全,时间精准、稳定性高、性价比高,易于市场推广。

电子钟已是生活中很常见的必需品(https://baike.baidu.com/ite m/%E7%94%B5%E5%AD%90%E9%92%9F/5999091?fr=aladdin),与传统时钟相比,具有准确性、直观性、寿命长等特点。现市场上大部分电子钟产品都是由计数器、译码器等数字电路搭建而成的硬件产品。本文设计了利用廉价的51单片机作为控制器,简化硬件结构,利用C51编程实现了软硬件电子钟产品。

图1 硬件框图

1 硬件电路设计

1.1 设计方案

此电子钟的硬件电路,是基于每年举行的全国蓝桥杯大赛单片机设计与开发项目指定的单片机开发板搭建的电路,即CT107D单片机综合实训平台。此平台上的单片机是IAP15F2K61S2单片机,此单片机是与51系列的AT89C51单片机兼容的。其电子钟控制系统硬件框图如图1所示,以IAP15F2K61S2单片机为核心控制器,外围电路包括由共阳极8位数码管组成的数码管显示模块;由LED指示灯和扬声器组成的声光报时模块;由4个独立按键组成的按键控制模块;由时钟芯片DS1302和32.768KHz晶振组成的时钟模块;由温度传感器DS18B20组成的温度测量模块。

1.2 电路原理图

电子钟控制系统的电路原理图如图2所示,8位数码管的段码和位码都接到P0口上,段码的选通地址是P2=0xE0,位码的选通地址是P2=0xC0;指示灯LED也由P0口提供信号,其地址是P2=0x80;扬声器通过三极管接到P1.0口;4个独立按键分别连接在P3.0、P3.1、P3.2、P3.3上;时钟芯片DS1302的CE引脚接P1.3口,I/O引脚接P2.3口,SCLK引脚接P1.7口;温度采集芯片DS18B20的数据DQ引脚接P1.4口。本次设计的电子钟具有时钟设置、闹钟设置、温度显示等功能。

2 软件设计

图2 电路原理图

基于51单片机的电子钟系统软件程序编制采用的是C语言,遵循模块化的编程思想(史永哲.计算机编程思想分析[J].陕西师范大学学报(自然科学版),2008,36(S1):179-181),以方便系统的调试、维护和升级,能够保障程序的稳定性,提高程序的设计效率。编程思路如图3所示,其中把具有独立功能的程序段编制成一个函数,如显示、按键读取、按键处理等功能模块,分别编制了显示函数、按键读取函数、按键处理函数,逐步编写调试,易于阅读修改。此程序用了T0和T1两个定时/计数器,数码管动态显示、独立按键的键值读入、温度的采集都用定时器T0进行定时溢出中断扫描,数码管1毫秒动态扫描一次,按键10毫秒键盘扫描一次,温度100毫秒读一次,采用中断方式以节省CPU的时间,时钟设置与闹钟设置时的0.2秒的闪烁用定时器T1实现,其它时间的定时用软件实现,读时钟DS1302、读温度传感器DS18B20分别用单独的C文件实现。

3 电子钟系统调试与仿真结果

3.1 数码管显示调试结果

根据电子钟的控制系统要求,先搭建程序框架,包括初始化、定时计数器的初值设定,主函数、显示函数等。根据电路图,采用存储器编程方式,数码管的段码地址是0xC000,位码地址是0xE000,共阳极数码管的段码先存放于数组中,把要显示的数据也放于全局缓存数组里,这样显示函数与其它函数的通信就可通过缓存数组实现,显示函数就可成为一个独立模块。如图4所示为数码管显示程序的调试结果,8位数码管动态显示12-00-02。

图3 主函数流程图

图4 数码管显示调试结果

3.2 读DS1302时钟信号调试结果

DS1302是美国的Dallas公司推出的一种高性能、低功耗、带RAM的实时时钟芯片(黄明强.DS1302在单片机系统中的应用[J].保定师范专科学校学报,2004(02):30-33)。DS1302的应用比较多,广泛地应用于各种数字时钟中(杨阳,李华.基于DS1302芯片的数字时钟设计[J].无线互联科技,2017(03):77-78)。本程序根据电子钟控制系统的要求及硬件电路,编制了读取时钟信号的程序,以文件的形式加入控制系统中,DS的驱动代码可直接在网上查到,只要用它的读写函数。初始化的写函数如下:

读函数是:Read_Ds1302(0x85);Read_Ds1302(0x83);Read_Ds1302(0x82);

读DS1302时钟信号程序调试结果如5所示,按“时”“分”“秒”显示。

图5 时钟信号读取结果

3.3 读DS18B20温度值调试结果

根据DS18B20的温度寄存器格式(齐婉玉.用DS18B20进行温度检测的方法与技巧[A].中国仪器仪表学会.首届信息获取与处理学术会议论文集[C].中国仪器仪表学会,2003:2),分两个字节,高8位和低8位。读取数据时需放到两个8位的变量中。实际使用时,需给DS18B20发出指令代码(吴嘉颖.基于单片机的地铁低压设备触点温度监测系统的设计与实现[D].西南交通大学,2017),用以确定它的工作状态,其中分ROM指令和RAM指令,如果跳过ROM,则约定代码为0xCC;RAM指令中,温度变换约定代码是0x44,可启动DS18B20进行温度转换,结果存入内部RAM中,读RAM约定代码是0xBE,可读出RAM中的数据内容。所以读取温度数据的代码如下所示。

然后在主函数里调用rd_temperature()函数,送显示即可,如:wendu=rd_temperature();

读DS18B20温度值程序调试结果如图6所示,采集温度值是室温实时温度为15摄氏度。

图6 读DS18B20温度值调试结果

3.4 电子钟控制系统调试结果

根据电子钟的控制系统要求,先搭建了程序框架,包括初始化、定时计数器的初值设定,主函数等,然后逐步实现显示功能、按键读取功能、按键处理功能、时钟读取功能、温度采集功能的调试,最终达到电子钟的控制系统要求,调试结果如图7所示,左图是电子钟的初始状态,显示0时、0分、0秒的同时,进行整点的声光报时,右图是通过按键进行调时。

图7 基于51单片机的电子钟调试结果

4 总结

本文设计的基于51单片机的电子钟控制系统通过2个月的试运行,时间误差不到20秒,达到设计要求,此控制系统硬件设计结构简单、成本低,软件程序设计清晰明了,此电子钟人机界面简单,方便闹钟时间的调整,功能全,系统准确、稳定性高,易于市场推广。

猜你喜欢

电子钟数码管按键
基于有限状态机的按键检测程序设计
电子钟被拆之后
“果蔬电池”求真趣
Arduino编程
基于STC80C51的电子钟研制
MC9S08FL16单片机数码管静态显示分析
单片机控制的四位数码管动态显示编程
基于Qt的数码管数字编码系统的设计与实现
Design and establishment of a multi-function stop watch
一种多方向导光按键结构设计