在本刊今年第7期《袖珍型电子日历及八路长时间定时控制器》一文中笔者介绍了一种使用单片机的简单电子日历,尽管简单可靠,但有一个致命的缺点,就是一旦掉电,时间就不准了。本文再介绍一个使用达拉斯半导体公司的DS12887万年历专用芯片制作的超级万年历。该芯片内含锂电池,不怕掉电,可连续工作10年。
电路概述
电路见图1。单片机89S51使用4个按键作数据输入及调整,输出则通过8155可编程输入/输出芯片驱动13位共阴LED数码管组成的模块进行显示。DS12887为万年历专用芯片,因使用的I/O线较多,这里使用了8155进行扩展。

8155为多功能的可编程接口芯片,内部包含有256字节RAM,两个可编程8位并行口、一个6位并行口和一个14位的计数器。8155是8051单片机应用系统中最适用的外围器件。数据存储器是256×8位静态RAM。I/O由三个通用口组成,其中的6位口可编程为状态控制信号。可编程的14位计数器/定时器用于给单片机系统提供方波或计数脉冲。
本系统中,DS12887进行时钟计时,而单片机AT89S51则完成将数据转换处理并驱动LED数码管进行显示的任务。8155的A口、B口、C口作输出使用,用以驱动13位共阴LED数码管构成的显示模组,显示屏的组成参见图2。该系统中,DS12887的片选地址为8000H~BFFFH,这里取8000H。8155的片选地址为4000H~7FFFH,这里取7000H。

当AT89S51的P2.6为低电平而P2.7为高电平时,选中DS12887,此时ALE脚的下降沿信号将P0口送出的低8位地址锁存进DS12887内部的地址锁存器,在ALE恢复高电平时,P0口向DS12887传送数据进行读/写(由/RD或/WR控制)。由于DS12887的MOT端接地,因此选用INTEL总线时序。同理,AT89S51的P2.7为低电平而P2.6为高电平时,选中的是8155。8155的IO/M脚接高电平,因此8155在此作输入/输出使用。
软件设计思路及方案
编程思路为:先从DS12887读取当前时间供用户参考,然后扫描键盘以取得用户输入的更改值。接下来根据标志将更改值写入DS12887更新时间或从DS12887读出时间用以显示。按set_inc或set_dec键可进入时间更新状态(调整时间),此时小数点亮的数码管所显示的时间,表示可进行更改,按下inc或dec键即可进行调整。本系统的源程序及程序核心部分的分析见本期配刊光盘。
文/周兴华