基于AT89S52单片机的万年历设计 下载本文

洛阳师范学院课程设计说明书(2015)

附录二:程序

T_RST BIT P3.5 ;实时时钟复位线引脚 T_CLK BIT P3.6 ;实时时钟时钟线引脚 T_IO BIT P3.7 ;实时时钟数据线引脚

H_ADJ BIT P2.0 ;时/年调整 M_ADJ BIT P2.1 ;分/月调整 S_ADJ BIT P2.2 ;秒/日调整 DT_SET BIT P2.3 ;时间/日期选择 STR BIT P2.4 ;启动走时 SEC EQU 30H ;当前秒 MIN EQU 31H HOUR EQU 32H DAY EQU 33H MONTH EQU 34H WEEK2 EQU 35H YEAR EQU 36H A_BIT EQU 20H B_BIT EQU 21H C_BIT EQU 22H D_BIT EQU 23H E_BIT EQU 24H F_BIT EQU 25H G_BIT EQU 26H H_BIT EQU 27H

CD_BIT EQU 29H ;分/月 AB_BIT EQU 28H ;秒/日 EF_BIT EQU 2AH ;时/年 DS1302_ADDR EQU 5EH DS1302_DATA EQU 5FH

;//***********DS18B20引脚定义**************// ;*************DS18B20引脚控制*****************

DQ EQU P1.0

40

洛阳师范学院课程设计说明书(2015)

FLAG EQU 00H ;18B20存在标志位 ;//***********7219引脚定义**************//

DIN EQU P0.1 LOAD EQU P0.2 CLK EQU P0.3

;//**********************************//

ORG 0000H AJMP MAIN ORG 000BH LJMP TT0 ORG 0030H

MAIN: MOV SP,#64H

MOV TH0,#0B1H MOV TL0,#0E0H SETB EA SETB ET0

MOV YEAR,#15H MOV MONTH,#01H MOV DAY,#23H MOV HOUR,#12H MOV MIN,#50H MOV SEC,#55H LCALL DISIN0 MOV R7,#10 SETB TR0

MAIN1: LCALL KEY

JB F0,MAIN10 读。走时后读,不写。

LCALL WR1302 AJMP MAIN2

MAIN10: LCALL RD1302 MAIN2: JB 7FH,YMD

MOV EF_BIT,HOUR MOV CD_BIT,MIN

;上电预置日期、时间 ;2015 01 10 12:50:55 ;F0=1,开始走时。走时前写,不

41

洛阳师范学院课程设计说明书(2015)

MOV AB_BIT,SEC AJMP MAIN20

YMD: MOV EF_BIT,YEAR

MOV CD_BIT,MONTH MOV AB_BIT,DAY

MAIN20: AJMP MAIN1

;//*********************************

KEY: ;按键子程序 KEY_SET: JB DT_SET,KEY_H

JNB DT_SET,$ CPL 7FH AJMP RT

KEY_H: JB H_ADJ,KEY_M

JNB H_ADJ,$ AJMP H_ADD

KEY_M: JB M_ADJ,KEY_S

JNB M_ADJ,$ AJMP M_ADD

KEY_S: JB S_ADJ,KEY_ST

JNB S_ADJ,$ AJMP S_ADD

KEY_ST: JB STR,RT

JNB STR,$ AJMP K_STR

RT: RET

H_ADD: JB 7FH,Y_ADD ;7FH为日期/时间切换键标志。1为年月日。

MOV A,HOUR ADD A,#01H DA A

CJNE A,#24H,H_ADD1 MOV A,#0

H_ADD1: MOV HOUR,A

AJMP RT

42

洛阳师范学院课程设计说明书(2015)

Y_ADD: MOV A,YEAR

ADD A,#01H DA A

CJNE A,#20H,Y_ADD1 MOV A,#0

Y_ADD1: MOV YEAR,A

AJMP RT

M_ADD: JB 7FH,MO_ADD

MOV A,MIN ADD A,#01H DA A

CJNE A,#60H,M_ADD1 MOV A,#0

M_ADD1: MOV MIN,A

AJMP RT

MO_ADD: MOV A,MONTH

ADD A, #01H DA A

CJNE A,#13H,MO_ADD1 MOV A,#1

MO_ADD1: MOV MONTH,A

AJMP RT

S_ADD: JB 7FH,D_ADD

MOV A,SEC ADD A,#01H DA A

CJNE A,#60H,S_ADD1

S_ADD1: MOV SEC,A

AJMP RT

D_ADD: MOV A,DAY

ADD A,#01H DA A

CJNE A,#32H,D_ADD1 MOV A,#01H

43

洛阳师范学院课程设计说明书(2015)

D_ADD1: MOV DAY,A

AJMP RT

K_STR: MOV DS1302_ADDR,#80H ;开始振荡

MOV DS1302_DATA,SEC ;#00H LCALL WRITE

MOV DS1302_ADDR,#8EH ;禁止写入1302 WR1302: MOV DS1302_DATA,#80H LCALL WRITE CPL F0 AJMP RT

MOV DS1302_ADDR,#8EH

MOV DS1302_DATA,#00H LCALL WRITE

MOV DS1302_ADDR,#80H

MOV DS1302_DATA,#80H LCALL WRITE

MOV DS1302_ADDR,#8CH MOV DS1302_DATA,YEAR LCALL WRITE

MOV DS1302_ADDR,#88H MOV DS1302_DATA,MONTH LCALL WRITE

MOV DS1302_ADDR,#86H MOV DS1302_DATA,DAY LCALL WRITE

MOV DS1302_ADDR,#84H MOV DS1302_DATA,HOUR LCALL WRITE

MOV DS1302_ADDR,#82H MOV DS1302_DATA,MIN LCALL WRITE

MOV DS1302_ADDR,#82H MOV DS1302_DATA,MIN LCALL WRITE

44

;允许写1302 ;1302停止振荡 ;年写入1302 ;月写入1302 ;日写入1302 ;时写入1302 ;分写入1302 ;秒写入1302