📄 万年历.asm
字号:
MOV 48H,week
MOV 78H,week
WAIT2: LCALL DISPLAY
JNB P1.4,WAIT2
AJMP SETG1
SETG2: SETB 0AH ;调月时闪标志
GWAIT3: LCALL DISPLAY
JNB P1.1,GWAIT3
SETG3: LCALL DISPLAY
JNB P1.1,SETGDAY
JNB P1.3,GADDMONTH
JNB P1.4,GDECMONTH
JNB P1.2,JUMPYEAR
JNB F0,SSSMONTH
CLR P1.0 ;闰月,则p1.1清0,指示灯亮
LJMP SETG3
SSSMONTH: SETB P1.0
AJMP SETG3
JUMPYEAR: LCALL DISPLAY
CLR 0AH
JNB P1.2,JUMPYEAR
AJMP SETG1
SETGDAY: AJMP SETG4
GADDMONTH: MOV R7,65H ;月加1
LCALL ADD1
MOV 65H,A
CJNE A,#13H,GADDMONTH1
MOV 65H,#01H
GADDMONTH1: LCALL GETWEEK ;月加1同时换算出星期
LCALL YMD ;转换农历月日
MOV DS1302_ADDR,#88H ;月值送1302
MOV DS1302_DATA,65H
LCALL WRITE
MOV DS1302_ADDR,#8AH ;星期值送1302
MOV DS1302_DATA,64H
LCALL WRITE
MOV R0,65H
LCALL DIVIDE ;月分离送显示缓冲
MOV 79H,R1
MOV 49H,R1
MOV 7AH,R2
MOV 4AH,R2
MOV R0,64H
LCALL DIVIDE ;星期分离送显示缓冲
MOV 48H,week
MOV 78H,week
WAIT4: LCALL DISPLAY
JNB P1.3,WAIT4
AJMP SETG3
GDECMONTH:MOV R7,65H ;月减1
LCALL DEC1
MOV 65H,A
CJNE A,#00H,GDECMONTH1
MOV 65H,#12H
GDECMONTH1: LCALL GETWEEK ;月减1同时换算出星期
LCALL YMD ;转换农历月日
MOV DS1302_ADDR,#88H ;月值送1302
MOV DS1302_DATA,65H
LCALL WRITE
MOV DS1302_ADDR,#8AH ;星期值送1302
MOV DS1302_DATA,64H
LCALL WRITE
MOV R0,65H
LCALL DIVIDE ;月分离送显示缓冲
MOV 79H,R1
MOV 49H,R1
MOV 7AH,R2
MOV 4AH,R2
MOV R0,64H
LCALL DIVIDE ;星期分离送显示缓冲
MOV 48H,week
MOV 78H,week
WAIT5: LCALL DISPLAY
JNB P1.4,WAIT5
AJMP SETG3
SETG4: SETB 0BH ;调日时闪标志
GWAIT6: LCALL DISPLAY
JNB P1.1,GWAIT6
SETG5: LCALL DISPLAY
JNB P1.1,SETGHOUR
JNB P1.3,GADDDAY
JNB P1.4,SETGDDAY
JNB P1.2,JUMPMONTH
JNB F0,SSSDATE
CLR P1.0 ;闰月,则p1.1清0,指示灯亮
LJMP SETG5
SSSDATE: SETB P1.0
AJMP SETG5
JUMPMONTH: LCALL DISPLAY
CLR 0BH
JNB P1.2,JUMPMONTH
AJMP SETG3
SETGHOUR: AJMP SETG6
SETGDDAY: AJMP GDECDAY
GADDDAY: MOV A,65H
CJNE A,#01H,FEB
LCALL MMONTH ;一月日加1
AJMP GADDDAY1
FEB: CJNE A,#02H,MARCH
MOV R3,66H ;二月日加1
LCALL ZH ;BCD码转换成HEX
MOV A,R3
JZ RFEB
MOV R7,63H ;平年二月有28天
LCALL ADD1
MOV 63H,A
CJNE A,#29H,FEB1
MOV 63H,#01
FEB1: AJMP GADDDAY1
RFEB: MOV R7,63H ;闰年二月有29天
LCALL ADD1
MOV 63H,A
CJNE A,#30H,FEB2
MOV 63H,#01
FEB2: AJMP GADDDAY1
MARCH: CJNE A,#03H,APRIL
LCALL MMONTH ;三月加1
AJMP GADDDAY1
APRIL: CJNE A,#04H,MAY
LCALL LMONTH ;四月加1
AJMP GADDDAY1
MAY: CJNE A,#05H,JUNE
LCALL MMONTH ;五月加1
AJMP GADDDAY1
JUNE: CJNE A,#06H,JULY
LCALL LMONTH ;六月加1
AJMP GADDDAY1
JULY: CJNE A,#07H,AUGUST
LCALL MMONTH ;七月加1
AJMP GADDDAY1
AUGUST: CJNE A,#08H,SEPTEMBER
LCALL MMONTH ;八月加1
AJMP GADDDAY1
SEPTEMBER:CJNE A,#09H,OCTOBER
LCALL LMONTH ;九月加1
AJMP GADDDAY1
OCTOBER: CJNE A,#10H,NOVEMBER
LCALL MMONTH ;十月加1
AJMP GADDDAY1
NOVEMBER: CJNE A,#11H,DECEMBER
LCALL LMONTH ;十一月加1
AJMP GADDDAY1
DECEMBER: CJNE A,#12H,ERROR
LCALL MMONTH ;十二月加1
AJMP GADDDAY1
ERROR: AJMP WAIT7
GADDDAY1: LCALL GETWEEK
LCALL YMD ;转换农历月日
MOV DS1302_ADDR,#86H ;日值送1302
MOV DS1302_DATA,63H
LCALL WRITE
MOV DS1302_ADDR,#8AH ;星期值送1302
MOV DS1302_DATA,64H
LCALL WRITE
MOV R0,63H
LCALL DIVIDE ;日分离送显示缓冲
MOV 76H,R1
MOV 46H,R1
MOV 77H,R2
MOV 47H,R2
MOV R0,64H
LCALL DIVIDE ;星期分离送显示缓冲
MOV 48H,week
MOV 78H,week
WAIT7: LCALL DISPLAY
JNB P1.3,WAIT7
AJMP SETG5
;*****************************************************************************************
GDECDAY: mov A,65H
CJNE A,#01H,DFEB
LCALL DMMONTH ;一月日减1
AJMP GDECDAY1
DFEB: CJNE A,#02H,DMARCH
MOV R3,66H ;二月日减1
LCALL ZH ;BCD码转换成HEX
MOV A,R3
JZ DRFEB
MOV R7,63H ;平年二月有28天
LCALL DEC1
MOV 63H,A
CJNE A,#00H,DFEB1
MOV 63H,#28H
DFEB1: AJMP GDECDAY1
DRFEB: MOV R7,63H ;闰年二月有29天
LCALL DEC1
MOV 63H,A
CJNE A,#00H,DFEB2
MOV 63H,#29H
DFEB2: AJMP GDECDAY1
DMARCH: CJNE A,#03H,DAPRIL
LCALL DMMONTH ;三月减1
AJMP GDECDAY1
DAPRIL: CJNE A,#04H,DMAY
LCALL DLMONTH ;四月减1
AJMP GDECDAY1
DMAY: CJNE A,#05H,DJUNE
LCALL DMMONTH ;五月减1
AJMP GDECDAY1
DJUNE: CJNE A,#06H,DJULY
LCALL DLMONTH ;六月减1
AJMP GDECDAY1
DJULY: CJNE A,#07H,DAUGUST
LCALL DMMONTH ;七月减1
AJMP GDECDAY1
DAUGUST:CJNE A,#08H,DSEPTEMBER
LCALL DMMONTH ;八月减1
AJMP GDECDAY1
DSEPTEMBER:CJNE A,#09H,DOCTOBER
LCALL DLMONTH ;九月减1
AJMP GDECDAY1
DOCTOBER:CJNE A,#10H,DNOVEMBER
LCALL DMMONTH ;十月减1
AJMP GDECDAY1
DNOVEMBER:CJNE A,#11H,DDECEMBER
LCALL DLMONTH ;十一减加1
AJMP GDECDAY1
DDECEMBER: CJNE A,#12H,DERROR
LCALL DMMONTH ;十二月减1
AJMP GDECDAY1
DERROR: AJMP WAIT8
GDECDAY1: LCALL GETWEEK
LCALL YMD ;转换农历月日
MOV DS1302_ADDR,#86H ;日值送1302
MOV DS1302_DATA,63H
LCALL WRITE
MOV DS1302_ADDR,#8AH ;星期值送1302
MOV DS1302_DATA,64H
LCALL WRITE
MOV R0,63H
LCALL DIVIDE ;日分离送显示缓冲
MOV 76H,R1
MOV 46H,R1
MOV 77H,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -