曲 豪, 谷保平
(河南广播电视大学 信息工程系, 河南 郑州 450008)
电子技术的飞速发展给人们的工作和生活带来了巨大的变化, 各种使用简单、 功能强大的电子产品层出不穷,给人们的生活和工作带来了极大的方便。电子万年历可以显示时间、日期和温度等人们普遍比较关心的重要信息,目前已被广泛使用于家庭、办公室、公共交通等诸多场所中, 常见的同类产品均采用多个数码管来直观显示当前的时间、日期和温度等信息,具有成本高、结构复杂且功耗大,一旦出现问题也不容易维修等缺点。本文采用低成本低功耗单片机, 仅驱动四个数码管来分时交替显示时间、日期和温度等万年历的主要数据, 具有低成本、低功耗、走时准确、操作简单、简便易用等特点,满足了人们对电子万年历经久耐用、方便维护的需求。
电子万年历大多能实时显示时间、日期和温度等数据信息,本设计采用四个较大尺寸的高亮度数码管,分时交替显示当前的时间、日期和环境温度等数据,可悬挂于公共场所方便人们在较远距离观看。 系统的硬件部分主要由主控单片机AT89C2051、 实时时钟DS1302 模块、温度传感器模块、数码管驱动及显示模块和人机交互的按键模块等五部分组成。 采用的实时时钟芯片经编程设置后可提供日期和时间等时钟数据,同时可外接备用的纽扣锂电池,以保证在系统掉电的情况下仍然保持时钟数据累加并不致丢失; 环境温度数据依靠数字温度传感器将采样的温度转化为数字信息并存储在内部存储器中,以备主控单片机读取;主控单片机的软件设计基于嵌入式软件的设计模式,采用分时采样数字温度传感器的温度数据、 时钟芯片内部的日期和时间等数据的方案, 并将采样的数据分时传给数码管驱动及显示模块,完成数据显示功能;按键模块可以在时间出现误差时由用户对其进行调整修正。系统电路框图如图1 所示。
图1 简易万年历系统结构框图
本简易万年历的主控单片机采用美国ATMEL公司的低功耗AT89C2051 微控制器,芯片内置通用8 位中央处理器和Flash 存储单元, 功能强大, 有15个可编程I/O 口线,2个16 位定时/计数器,6个中断源,仅有20个 引 脚[1],十 分 适 合低成本低功耗的智能测控产品设计需求。主控单片机负责完成对实时时钟芯片和数字温度传感器的数据读取、驱动数码管显示模块、以及响应按键事件并进行相应的处理。
本文万年历的计时功能采用硬件计时方式。DS1302 是美国DALLAS 公司推出的一种高性能、低功耗、带RAM 的实时时钟芯片,它可以对年、月、日、周、时、分、秒等进行计时,并且具有闰年补偿功能,工作电压宽达2.5~5.5V。 采用三线接口与CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM 数据。提供了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力, 且电路的接口简单、价格低廉、使用方便,可为系统提供精确可靠的时间数据[2]。DS1302 模块的电路设计原理图如图2 所示,使用纽扣锂电池B1 作为备用电源,在系统掉电后仍能为时钟芯片提供供电电源, 保证时间的可靠连续性。实时时钟芯片的复位/片选端口RST、串行数据输入输出端口I/O 和串行时钟端口SCLK,分别经10K 电阻上拉后连接至单片机的P1.2、P1.3 和P1.4 引脚。
图2 DS1302 模块电路原理图
图3 显示单元的电路原理图
对环境温度的采集采用单总线数字温度传感器DS18B20,测温范围为-55~+125℃,固有测温分辨率为0.5℃,采用1-Wire 的单总线接口方式,与主控单片机连接时仅需要一条口线即可实现单片机的双向通信。单总线是串行通信总线的一种,采用单根信号线,既可传输时钟,又能传输数据,而且数据传输是双向的,因而具有线路简单,硬件开销少,成本低廉,便于总线扩展和维护、使用方便等优点,适合于多种环境的现场温度测量[3]。本文将DS18B20 的数据端口DQ 经5KΩ 电阻上拉后接至单片机的P3.4 引脚。
显示单元包括数码管及其驱动模块,万年历数据的显示采用了4个尺寸较大的1.8 英寸7 段数码管, 可以交替显示时间数据“XX:XX”、日期数据“XX XX”和温度数据“XX℃”,具有成本低、显示美观等特点。每个数码管均采用一个独立的74HC595 进行驱动。74HC595 是一款具有三态输出功能的CMOS 型8 位串入并出移位寄存器, 本设计采用了串行输出方式控制下一级级联芯片,实现了4 位数码管静态稳定显示的需求。显示单元的电路设计图如图3 所示, 将4个74HC595 的数据输入时钟11 端口和输出存储器锁存时钟12 端口分别连接至单片机的P1.5 和P1.7 引脚, 并将驱动高位数码管的74HC595(U4)的数据端口14 连接至单片机的P1.6引脚,剩余3个74HC595 的数据端口14 均连接至前一个595 的串行数据输出9 端口, 从而实现了4个74HC595 串行级联输出驱动4个数码管。
为简化设计, 本万年历仅设置了两个按键,即“MOD”模式按键和“ADD”累加按键,用以实现对日期、时间等数据的调整。模式按键“MOD”可以切换电子万年历需要调整的内容,如小时、分钟、月份、日期等,累加按键“ADD”可对选中的内容进行加减调整。本设计的单片机在中断中完成对按键的响应和扫描,并对按键事件进行处理。按键模块的电路设计原理图如图4 所示, 两个按键经电阻上拉后连接至由二极管组成的二输入与门, 同时再分别连接至单片机的P1.0 和P1.1 端口,与门的输出被连接至单片机的外部中断INT 端口P3.2(已被上拉),当有按键被按下时即可触发单片机的中断事件, 单片机在中断中再查询是哪个按键被按下。
图4 按键模块电路设计原理图
本设计的电子万年历文采用常见的AC 220V/DC5V、500~1000MA 的直流开关电源均可给所有模块进行供电,简化了电源部分的设计,具有使用方便、维护简单的优点。
系统主控单片机AT89C2051 单片机的嵌入式软件采用C 语言进行程序设计,C 语言具有容易理解,易于维护,方便模块化设计和功能扩展等特点,有效保证了软件的开发效率[4]。
系统的软件设计采用模块化设计方法, 各模块之间相互独立。整个软件设计包括主程序、时钟芯片DS1302读写子程序、数字温度传感器DS18B20 读写子程序、按键处理中断服务子程序等。每个程序模块功能如下:
主程序设计流程图参照图5 所示。 单片机定时轮流采样时钟数据和温度数据,并交替显示在数码管上,如果用户需要调整万年历的时钟数据, 可以通过按键触发单片机的中断服务程序来实现对相关数据的修改和存储。
主控单片机通过驱动3个I/O 端口 和1个I/O 端口, 分别来模拟时钟芯片DS1302 和数字温度传感器DS18B20 的读写时序来实现其驱动程序的设计, 从而完成了对万年历时钟数据和温度数据的实时采样。
图5 主程序设计流程图
当用户触发按键对万年历显示的数据进行调整时,主控单片机即进入中断服务子程序,首先扫描判断是哪个按键被按下,初次按下“MOD”模式按键则进入小时调整模式,此时万年历仅显示小时数据等待调整,用户按下“ADD”累加按键可对小时进行加1 调整,小时累加到23 时能自动回零。根据以上所述原理,模式按键在第二次、第三次和第四次被按下时可分别进入分钟、月份和日期的调整状态,所有调整过的数据在第五次按下模式按键时被写入DS1302 的数据存储器,万年历从调整后的数据开始计时并显示。
本文介绍的简易万年历, 利用AT89C2051 单片机、时钟芯片DS1302、数字温度传感器DS18B20 和4个数码管,实现了常用的时间、日期和温度等数据的采样和显示功能, 给出了硬件设计结构图和软件设计的实现方法, 是一款简单实用的电子产品, 具有走时准确、调整方便、断电后时钟数据不丢失且方便悬挂使用等优点。
[1]AT89C2051Datasheets[EB/OL].http://www.atmel.com/literature.
[2]于复生,宋现春,艾兴.时钟芯片DS1302 及其在数据记录中的应用[J].电子技术应用,2000,(3).
[3]DS18B20 Datasheets[EB/OL].http://www.dalsemi.com.
[4]曲豪,史梁.基于GSM 短消息的燃气检漏报警器设计与实现[J].河南广播电视大学学报,2012,(3).