电子时钟日历

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档