📄 万年历.asm
字号:
MOV IO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
NOP
CLR SCLK
NOP
NOP
DJNZ R4,READ1
MOV R4,#8
READ2: CLR SCLK
NOP
NOP
NOP
MOV C,IO
NOP
NOP
NOP
NOP
NOP
RRC A
NOP
NOP
NOP
NOP
SETB SCLK
NOP
DJNZ R4,READ2
MOV DS1302_DATA,A
CLR RST
RET
;*********************************
;* BCD码转换为十进制程序 *
;*********************************
BCD_10: MOV A,R0
ANL A,#0FH
MOV R1,A ;高位*10,加低位
MOV A,R0
SWAP A
ANL A,#0FH
MOV B,#10
MUL AB
ADD A,R1
MOV R0,A
RET
;********************************
;* 查一年数据程序 *
;********************************
CHECKMONTH: LCALL BCD_10
MOV A,R0
MOV B,#04
MUL AB
MOV R1,A
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV R7,A ;第1字节送R7
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV R6,A ;第2字节送R6
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV R5,A ;第3字节送R5
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV R4,A ;第4字节送R4
RET
;******************************
;* 自动更新农历 *
;******************************
GENGXIN: MOV R2,#00H
MOV R3,#00H
MOV A,MONTH
CJNE A,#01H,GM2
MOV R0,DAY ;当前月为1月
LCALL BCD_10 ;当前日转换为十进制,送R2
MOV A,R0
MOV R2,A
AJMP TIAOZHENG1
GM2: CJNE A,#02H,GM3
MOV R0,DAY ;当前月为2月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加31送R2
ADD A,#31
MOV R2,A
AJMP TIAOZHENG1
GM3: CJNE A,#03H,GM4
MOV R0,DAY ;当前月为3月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加59送R2
ADD A,#59
MOV R2,A
AJMP TIAOZHENG1
GM4: CJNE A,#04H,GM5
MOV R0,DAY ;当前月为4月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加90送R2
ADD A,#90
MOV R2,A
AJMP TIAOZHENG1
GM5: CJNE A,#05H,GM6
MOV R0,DAY ;当前月为5月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加120送R2
ADD A,#120
MOV R2,A
AJMP TIAOZHENG1
GM6: CJNE A,#06H,GM7
MOV R0,DAY ;当前月为6月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加151送R2
ADD A,#151
MOV R2,A
AJMP TIAOZHENG1
GM7: CJNE A,#07H,GM8
MOV R0,DAY ;当前月为7月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加181送R2
ADD A,#181
MOV R2,A
AJMP TIAOZHENG1
GM8: CJNE A,#08H,GM9
MOV R0,DAY ;当前月为8月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加212送R2
ADD A,#212
MOV R2,A
AJMP TIAOZHENG1
GM9: CJNE A,#09H,GM10
MOV R0,DAY ;当前月为9月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加243
CLR C
ADD A,#243
JC GGG
MOV R2,A ;A没溢出,送R2
AJMP TIAOZHENG1
GGG: MOV R3,#0FFH ;R3中送#0FFH
INC A ;A溢出,A加1送R2
MOV R2,A
AJMP TIAOZHENG1
GM10: CJNE A,#10H,GM11
MOV R0,DAY ;当前月为10月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加18送R2
ADD A,#18
MOV R2,A ;R3中送#0FFH
MOV R3,#0FFH
AJMP TIAOZHENG1
GM11: CJNE A,#11H,GM12
MOV R0,DAY ;当前月为11月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加49送R2
ADD A,#49
MOV R2,A ;R3中送#0FFH
MOV R3,#0FFH
AJMP TIAOZHENG1
GM12: MOV R0,DAY ;当前月为12月
LCALL BCD_10 ;当前日转换为十进制
MOV A,R0 ;再加79送R2
ADD A,#79
MOV R2,A
MOV R3,#0FFH ;R3中送#0FFH
AJMP TIAOZHENG1
TIAOZHENG1: MOV A,YEAR
MOV B,#04
DIV AB
MOV A,B
JNZ GGG1
MOV A,65H ;当前月是1
CJNE A,#01H,AAAA
AJMP GGG1 ;当前月是2
AAAA: CJNE A,#02H,BBBB
AJMP GGG1
BBBB: CJNE R2,#0FFH,GGG2
MOV R3,#0FFH ;当前月不是1和2
MOV R2,#01H ;R1和R2总和加1
AJMP GGG1
GGG2: INC R2
GGG1: MOV R0,YEAR ;查意一年数据
LCALL CHECKMONTH
MOV A,R2
CLR C
SUBB A,R7
MOV P1.6,C
CJNE A,#01H,GGG3
MOV R2,#01H
MOV A,R3
CJNE A,#00H,NEW1
MOV 57H,#01H ;R2和R3总和减R7
MOV 56H,#01H ;为0,则为春节
LJMP S_PLAY
GGG3: CJNE A,#00H,GGG6
MOV R2,A
AJMP OLD
GGG6: JNB P1.6,NEW2
MOV A,R7
CLR C
SUBB A,R2
MOV R7,A
CJNE R3,#0FFH,GGG5
MOV A,R3
CLR C
SUBB A,R7
MOV R2,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -