基于52单片机电子时钟日历系统的设计
时间:2022-08-03 17:19:00
该系统日历芯片为基础的52单片机DSl2887是核心时钟系统。完成的功能如下:显示年、月、日、周、小时、分钟、秒,1OO年日历,具有掉电不丢失性,可通过按钮调整时间。DS12887内置锂电池,掉电时可工作10年。
一、芯片简介
读取或写入C语言程序中的数据非常简单,只需要一个句子。在汇编语言中是正确的MOVX语句时序分析。DS英特尔读周期时序如上图所示:
最后简单介绍一下DS控制字定义:
上面提到的DSl2887内部有128字节的存储空间。前14字节为特殊定义区(具体定义见PDF),后114字节为随机存储区。
字节特别定义区的具体定义如上表所示。其中0x7f00~0x7f0D是因为在这个系统中选择单片机P2.7引脚接CS端所决定。这些地址的最高位为0,对应P2.7引脚在写入或读取过程中会使用P2.7引脚碰巧产生低电平,选择芯片,完成英特尔总线时序。假如我们把单片机P2.6引脚接CS端,地址范围为:0xbf00~0xbf0D,b的二进制是1011,对应会使P2.6引脚产生低电平片选脉冲。用户可以读取并写入0~9号地址为年月等寄存器。10~13号地址是控制寄存器,寄存器D只读,寄存器A~C具体定义如下(下表)
●UlP:只读状态标志;
●DV0~2:控制芯片内部晶振位,010组合开启晶振正常工作;
●RS0~3:设置中断率和SQW方波输出;
●SET:读写控制位,初始时钟日历字节历字节;
●PIE、AIE、UIE:允许位置分别为周期、闹钟和更新结束;
●PF、AF、MF:中断标志位分别为周期、闹钟和更新
●IRQF:中断要求标志位,IRQF=PF·PlE AF·AlE MF·UIE;
●SQWE:方波输出允许位;
●DM:二进制(1)或BCD(0)码格式;
●24/12:时钟24,小时格式门2小时格式;DSE:白天,放0。
地址
内容
说明
00x7f00
Seconds
0-59秒寄存器
10x7f01
SecondsAlarm
O-59秒闹钟
20x7f02
MinUteS
0-59分寄存器
3Ox7f03
MinutesAlarm
O-59分闹钟
4Ox7f04
Hours
0-23时寄存器
50x7f05
HoursAlam
O-23时闹钟
60x7f06
DayOftheWeek
1-7星期几
70x7f07
DateOftheMonth
1-31几号
80x7f08
Month
1-12月份
90x7f09
Year
0-99年数
100x7f0A
REGISTERA
控制寄存器A
110x7f0B
REGISTERB
控制寄存器B
120x7f0C
REGISTERC
控制寄存器C
130x7f0D
REGISTERD
控制寄存器D
控制寄存器
BIT7
BIT6
BIT5
BlT4
BIT3
BIT2
BIT1
BIT0
REGISTERA
UIP
DV2
DV1
DV0
RS3
RS2
RS1
RS0
REGISTERB
SET
PIE
AIE
UIE
SQWE
DM
24/12
DSE
REGISTERC
IRQF
PF
AF
MF
0
0
O
O
二、实物制作
原理图如上图所示。实际制作的电子日历系统PCB如下图所示。在下图中WR、RD、INTO、GND和VCC标号处的焊盘采用飞线,这里是单面板,工艺只能达到15mil厚度,所以飞线有很多地方。笔者认为ZLG7289只用于控制系统中的8个按钮,有些浪费,读者可以直接挂在单片机上I/O嘴上,但别忘了按钮抖,但是使用液晶还是很有必要的,因为日历上有很多信息,只用8个数字管就不方便了。考虑到调试过程中测试方便,图中用排针引出单片机各端口。安装完成后,将程序写入并口芯片调试。
图中组件参数列表如下:
AT89S52、DS12887、ZLG7289、LCDl602各一;C1、C2、C4、C5、C6:30pF瓷片电容;C3:1μF电解电容;C7:100μF电解电容;C8:1000μF电解电容;C9:10μF电解电容;R1、R4、R6:10kΩ欧姆电阻;R5、R7:1欧姆电阻;R2:2.2kΩ欧姆电阻;R3:1OO欧姆电阻;R11:100kΩ欧姆电阻;104、104J:100kΩ排阻;1602:16脚排针;P0,P1,P2,P3:8脚排针;SPI:6脚排针;D1:红色LED指示电源;LS1:蜂鸣器;Q1:PNP三极管9012;S1~S8:双脚封装按钮;Y1、Y2:12MHz晶振;
三、程序设计
下面是DS12887的驱动程序和调时程序。
在主程序开始时,我们开始设置初始化DS12887函数写入使晶体振动打开和设置初始时间的命令。调试成功后,应删除初始化函数,以便在单片机断电并重新启动后无需重新设置时间。
以上程序是删除初始化函数后的样子。这样,它就完成了断电后不会丢失时间的功能,这对时钟日历来说是一个非常实用的功能。
在主程序中,人机交互可以通过编程完成调整DS12887内部时间的程序,还可以设定闹钟,完成报时功能。
举例如下:
打开和关闭晶振。