DIY编程器网
标题:
一种基于AT89C51控制的高精度倒计时系统
[打印本页]
作者:
liyf
时间:
2012-1-16 17:24
标题:
一种基于AT89C51控制的高精度倒计时系统
???? 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的内部分配。
显示子程序首先通过模拟串行口读取DS12C887的数据, 然后利用74HC595 对数据进行显示。具体步骤为: 显示子程序将P1. 0 置位 将P1. 0送入段码 将P1. 1送入移位脉冲 将P1. 2送入锁存脉冲 返回主程序。倒计时子程序首先由单片机读DSl2C887的时间单元, 并将其存放在以69H 为起始的单元中, 操作时先读取月份, 然后利用查表方法计算其下月份到预定时间的天数, 再利用查表方式判断其月份是31天、30天, 28天或29天,将查表得到的天数减去读取日期, 将二个天数相加就可得到实际天数。进行时、分、秒计算时, 可以直接利用预定时、分、秒减去读取的时、分、秒得到相差的时、分、秒, 完成后返回主程序。
4? 结束语
综上, 所设计的倒计时系统由DS12C887构成时钟模块, 单片机AT89C51 对系统进行控制, 设定从模拟串行口读取DS12C887 的数据后, 再利用74HC595将数据送入数码管显示。系统经调试和参数整定后运行稳定可靠, 连续长期运行积累误差为零, 为高精度的倒计时系统。实践开发表明, 基于上述技术的倒计时系统具有结构紧凑、简单, 价格低廉, 可靠性高等特点, 便于实际应用。
欢迎光临 DIY编程器网 (http://diybcq.com/)
Powered by Discuz! X3.2