电子时钟日历
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子时钟日历
本实例基于51单片机为控制器,程序采用汇编语言编写。时钟芯片使用串行通信的DS1302、温度测量采用一线式总线的数字温度传感器DL18B20、显示模块用的是深圳耀宇公司的YM12864R内带字库、NE555用于闹钟时间到时驱动轰鸣器发声。按键用于时间和闹钟设置,进入或退出设置时需按住设置键3秒以上。
电路原理图如下:
实物照片
汇编源程序如下:
E BIT P1.0 ;使能端脉冲下降沿锁存数据
RW BIT P1.1 ;读写控制0写1读
RS BIT P1.2 ;指令数据选择0指令1数据
DQ BIT P3.3 ;DS18B20数据输出端
SZ BIT P2.0 ;设置及退出键
YW BIT P2.1 ;移位键
UP BIT P2.2 ;加一键
KAL BIT P2.3 ;闹钟消警键
LEDKG BIT P2.4 ;LCD背光控制开关
LED BIT P2.7 ;LCD背光灯
SCLK BIT P3.0 ;时钟线
IO BIT P3.1 ;数据线
RST BIT P3.2 ;复位线
FGAL4 BIT 20H.0 ;闹钟报警标志位
FLAG1 BIT 20H.1 ;DS18B20复位成功标志位
WCOMD EQU 21H ;存放需写入LCD 的指令
WDATA EQU 22H ;存放需写入LCD 的数据
TEMP_L EQU 23H ;从DS18B20中读出的温度值的低字节TEMP_H EQU 24H ;从DS18B20中读出的温度值的高字节TEMP EQU 25H ;温度值
TEMPBUF EQU 26H ;温度转换过程中的暂存单元
WDB EQU 27H ;温度显示的百位值
WDS EQU 28H ;温度显示的十位值
WDG EQU 29H ;温度显示的个位值
XQS EQU 2AH ;星期值显示的十位值
SECG EQU 2CH ;秒显示的个位值
SECS EQU 2DH ;秒显示的十位值
MING EQU 2EH ;分钟显示的个位值
MINS EQU 2FH ;分钟十位
HOUG EQU 30H ;小时个位
HOUS EQU 31H ;小时十位
DA TEG EQU 32H ;日个位
DA TES EQU 33H ;日十位
MONG EQU 34H ;月个位
MONS EQU 35H ;月十位
YERG EQU 36H ;年个位
YERS EQU 37H ;年十位
SHIF EQU 38H ;移位键值
WDATD EQU 39H ;写DS1302的数据缓存
XQ EQU 3AH ;设定星期值的缓存单元
SEC EQU 3BH ;秒
MIN EQU 3CH ;分
HOU EQU 3DH ;时
DA TE EQU 3EH ;日
MON EQU 3FH ;月
YER EQU 40H ;年
ALMIN EQU 41H ;从DS1302RAM区中读出的闹钟分值(用于设定闹钟后的比较)ALHOU EQU 42H ;从DS1302RAM区中读出的闹钟时值(用于设定闹钟后的比较)FGAL EQU 43H ;闹钟设定标志单元,“00H”表示未设定闹钟,“FFH”表示闹钟已设定ALMING EQU 44H ;闹钟设定时用于显示的分钟个位
ALMINS EQU 45H ;闹钟设定时用于显示的分钟十位
ALHOUG EQU 46H ;闹钟设定时用于显示的小时个位
ALHOUS EQU 47H ;闹钟设定时用于显示的小时十位
LZG EQU 48H ;闹钟设定时用于显示的开或关字
LZS EQU 49H ;闹钟设定时用于显示的开或关字
DR0 EQU 4AH ;
DR1 EQU 4BH ;用于定时子程序中的计数用
DR2 EQU 4CH ;用于定时子程序中的计数用
DR3 EQU 4DH ;用于一秒钟更新一次显示屏的显示
DR4 EQU 4EH ;用于定时子程序中的计数用
DRF EQU 4FH ;用于计数
JSQ1 EQU 50H ;用于显示字符个数的计数
ORG 0000H
MAIN: MOV 7FH,#0
CLR P3.7
MOV R0,#20H
CLR A
M1: MOV @R0,A
CJNE R0,#51H,M1
MOV P2,#0FFH
MOV WDATD,#0
MOV A,#8EH ;写控制寄存器,允许对DS1302进行读写操作
LCALL WDS1302 ;调DS1302写子程序
;MOV A,#80H ;初始化DS1302时才用,即全新的或断电后无备用电源供电的情况下才用来启动DS1302工着
;LCALL WDS1302
MOV A,#90H
MOV WDATD,#0ABH
LCALL WDS1302
;从此处开始的34行为初始化DS1302时才用,即全新的或断电后无备用电源供电的情况,否则DS1302内部寄存器的值将不确定
;MOV XQ,#01H ;向DS1302内部初值不能为0的寄存器写入初值
;MOV DATE,#01H
;MOV MON,#01H
;MOV YER,#10H
;MOV WDA TD,XQ
;MOV A,#8AH ;写星期
;LCALL WDS1302
;MOV WDA TD,MIN
;MOV A,#82H ;写分
;LCALL WDS1302
;MOV WDA TD,HOU
;MOV A,#84H ;写时
;LCALL WDS1302
;MOV WDA TD,DA TE
;MOV A,#86H ;写日
;LCALL WDS1302
;MOV WDA TD,MON
;MOV A,#88H ;写月
;LCALL WDS1302
;MOV WDA TD,YER
;MOV A,#8CH ;写年
;LCALL WDS1302
;MOV WDA TD,SEC
;MOV A,#80H ;写秒
;LCALL WDS1302
;MOV WDA TD,ALMIN
;MOV A,#0C0H ;写DS1302RAM 00H单元
;LCALL WDS1302
;MOV WDA TD,ALHOU
;MOV A,#0C2H ;写DS1302RAM 01H单元
;LCALL WDS1302
;MOV WDA TD,FGAL
;MOV A,#0C4H ;写DS1302RAM 02H单元
;LCALL WDS1302
LCALL INITLCD