1 引 言
倒计时系统的任务, 就是对某一设定日期进行倒数, 并在显示屏显示当前至设定日期的时间, 以增强人们的关注度和紧迫感。开发实践表明: 以时钟芯片DS12C887为时钟模块、单片机AT89C51为控制模块的高精度倒计时系统具有精度高、能够长时间连续稳定地工作、使用方便的特点, 可较好满足实际需要。系统的硬件设计和软件设计如下。
2 系统的硬件设计
系统的控制模块由AT89C51单片机构成, 用于完成对串行口控制器的初始化和数据读写, 并对接收的各种数据进行识别、转储及显示。时钟芯片DS12C887提供高精度的年、月、日、时、分、秒时间,校准后直接与单片机相连。倒计时显示模块由LED数码管,74HC595芯片和74LS245芯片组成。
系统总体框图如图1所示。
系统总体结构图
图1 系统总体结构图
2. 1 时钟模块及其与单片机的连接
时钟模块用于对时、分、秒、年、月、日和星期的计时, 由美国DALLAS 公司生产的时钟日历芯片DS12C887构成, 该芯片集成度高, 可提供年、月、日、时、分、秒, 设定每一时刻产生中断, 并且其外围电路设计简单, 性能好, 计时准确性高。DS12C887带有128字节RAM, 其中有11字节RAM 用来存储时间信息, 4字节RAM用来存储DS12C887的控制信息,为控制寄存器。用户可以在任何时候对其进行访问以对DS12C887进行控制操作, 有113字节的通用RAM 供用户使用。用户还可对DS12C887进行编程以实现多种方波的输出, 并对内部的三路中断通过软件进行控制。DS12C887为双列直插式封装, 与单片机的连接为: AD0~ AD7双向地址/数据复用线与单片机的P0口相联, 用于向单片机交换数据; AS地址选通输入脚与单片机的ALE 相联用于对地址锁存, 实现地址数据的复用; CS片选线与单片机的P2. 6相联, 用于选通时钟芯片; DS数据选通读输入引脚与单片机的读选通引脚相联, 用于实现对芯片数据的读控制; R /W读/写输入与单片机的写选通引脚相联, 用于实现对时钟芯片的写控制;MOT 直接接地, 选用INTEL 时序; IRQ 引脚与单片机的INT1相连, 用于为时间的采集提供时间基准。
2. 2 显示模块的设计
单片机将读入的DS12C887时间信息经过程序处理, 输出显示信号到P1口, 显示信息包括倒计时信息(当前距离设定时间的天数)和当前时间的星期、时、分、秒信息。显示电路主要由9个LED 数码管, 9 片74HC595 芯片和一片74LS245芯片组成。
设计采用动态显示方式, 即将所有位的段选线并联在一起由一个8位I /O 口控制。74HC595是硅结构的高速CMOS器件, 内置8 位移位寄存器和一个存储器, 具有三态输出功能, 当使能端OE 为低电平时, 将存储寄存器的数据输出到总线。利用74HC595并行输出端具有的输出锁存功能, 采用74HC595芯片的串入并出方式控制数码管的显示,具体的连接方式为: 芯片的Q7引脚和SER 引脚级联, 通过三个I/O口与单片机连接。74HC595的14脚( SER)为串行输入端, 12脚( RCLR) 为移位时钟端, 时钟上升沿将14脚数据移入寄存器; 11脚( SRCLR )为锁存时钟端, 时钟上升沿锁存数据; 8脚( E )为3态输出控制端, 接低电平时输出数据。输出数据和移位时钟均由单片机输出: 单片机P1. 0口输出数据, 在移位脉冲上升沿到来时数据移出进入74HC595; P1. 1 口输出移位脉冲; P1. 2口输出锁存脉冲。出现在并行输出端上的数据经74LS245驱动数码管显示, 由于数据已被锁存, 在传送下一组数据时, 前一组数据的内容不变, 以此方式进行数据的传送和显示, 故在显示模块软件中将P1. 0、P1. 1、P1. 2均定义为模拟串行口。调整键盘的接口有 4个键: 1个设定/确认键、1个修改+ 1键、1个修改- 1键、1个移位键。对应秒、分、时、倒计时、星期, 有5 个LED。LED亮, 表示对应的秒或分或星期或倒计时数据可按修改键修改。在设定时间状态, 首先移位为秒位, 对应秒移位LED亮, 按下移位键, 移位LED灯按秒→分→时→倒计时→星期逐次循环; 按下修改+ 1键或修改- 1 键可对相应位的数据进行+ 1或- 1操作。
3 系统的软件设计
系统的主程序包括: 对单片机串行口的设置以及初始化→读取DS12C887时钟芯片→判断是否计算倒计时→显示。初始化12887为24小时制, BCD码, 不允许中断, 分配12887的始地址为B000H, A寄存器的地址为B00AH, B 寄存器的地址为B00BH, C寄存器的地址为B00CH, D寄存器的地址为B00DH, DS12887的内部分配如表1所示。
表1 DS12887的内部分配。
DS12887的内部分配
显示子程序首先通过模拟串行口读取DS12C887的数据, 然后利用74HC595 对数据进行显示。具体步骤为: 显示子程序将P1. 0 置位 将P1. 0送入段码 将P1. 1送入移位脉冲 将P1. 2送入锁存脉冲 返回主程序。倒计时子程序首先由单片机读DSl2C887的时间单元, 并将其存放在以69H 为起始的单元中, 操作时先读取月份, 然后利用查表方法计算其下月份到预定时间的天数, 再利用查表方式判断其月份是31天、30天, 28天或29天,将查表得到的天数减去读取日期, 将二个天数相加就可得到实际天数。进行时、分、秒计算时, 可以直接利用预定时、分、秒减去读取的时、分、秒得到相差的时、分、秒, 完成后返回主程序。
4 结束语
综上, 所设计的倒计时系统由DS12C887构成时钟模块, 单片机AT89C51 对系统进行控制, 设定从模拟串行口读取DS12C887 的数据后, 再利用74HC595将数据送入数码管显示。系统经调试和参数整定后运行稳定可靠, 连续长期运行积累误差为零, 为高精度的倒计时系统。实践开发表明, 基于上述技术的倒计时系统具有结构紧凑、简单, 价格低廉, 可靠性高等特点, 便于实际应用。