📄 yaokongrili.asm
字号:
GWAIT:
LCALL DISPLAY
JNB MODE,GWAIT
SETG1:
LCALL DISPLAY
JNB MODE,SETGMON
JNB ADDNUM,GADDYEAR
JNB DECNUM,GDECYEAR
JNB DMODE,SETGEXIT
MOV R3,TIME_YEAR
LCALL ZH ;判断当前年是否为闰年
MOV A,B
JNZ SET_OFF_RNLED
CLR RNLED
AJMP SET_RYLED
SET_OFF_RNLED:
SETB RNLED
SET_RYLED:
JNB F0,SSSYEAR
CLR RYLED ;闰月,则p1.1清0,指示灯亮
LJMP SETG1
SSSYEAR:
SETB RYLED
AJMP SETG1
SETGMON:
AJMP SETG2
SETGEXIT:
LCALL DISPLAY
JNB DMODE,SETGEXIT
LJMP SETGOUT
GADDYEAR:
MOV R7,TIME_YEAR ;年加1
LCALL ADD1
MOV TIME_YEAR,A
GADDYEAR1:
LCALL GETWEEK ;年加1同时换算出星期
LCALL YMD ;转换农历月日
LCALL ADJ_TOTAL ;转总天数,周次处理程序
LCALL DX_MONTH ;转大小月判断程序
MOV DS1302_ADDR,#8CH ;年值送1302
MOV DS1302_DATA,TIME_YEAR
LCALL WRITE
MOV R0,TIME_YEAR
LCALL DIVIDE ;年分离送显示缓冲
MOV 79H,R1
MOV 59H,R1
MOV 7AH,R2
MOV 5AH,R2
MOV 76H,week ;星期分离送显示缓冲
MOV 56H,week
WAIT1:
LCALL DISPLAY
JNB ADDNUM,WAIT1
AJMP SETG1
GDECYEAR:
MOV R7,TIME_YEAR ;年减1
LCALL DEC1
MOV TIME_YEAR,A
LCALL GETWEEK ;年减1同时换算出星期
LCALL YMD ;转换农历月日
LCALL ADJ_TOTAL ;转总天数,周次处理程序
LCALL DX_MONTH ;转大小月判断程序
MOV DS1302_ADDR,#8CH ;年值送1302
MOV DS1302_DATA,TIME_YEAR
LCALL WRITE
MOV R0,TIME_YEAR
LCALL DIVIDE ;年分离送显示缓冲
MOV 79H,R1
MOV 59H,R1
MOV 7AH,R2
MOV 5AH,R2
MOV 76H,week ;星期分离送显示缓冲
MOV 56H,week
WAIT2:
LCALL DISPLAY
JNB DECNUM,WAIT2
AJMP SETG1
SETG2:
SETB YEARFLASH ;调月时闪标志
GWAIT3:
LCALL DISPLAY
JNB MODE,GWAIT3
SETG3:
LCALL DISPLAY
JNB MODE,SETGDAY
JNB ADDNUM,GADDMONTH
JNB DECNUM,GDECMONTH
JNB DMODE,JUMPYEAR
JNB F0,SSSMONTH
CLR RYLED ;闰月,则p1.1清0,指示灯亮
LJMP SETG3
SSSMONTH:
SETB RYLED
AJMP SETG3
JUMPYEAR:
LCALL DISPLAY
CLR YEARFLASH
JNB DMODE,JUMPYEAR
AJMP SETG1
SETGDAY:
AJMP SETG4
GADDMONTH:
MOV R7,TIME_MONTH ;月加1
LCALL ADD1
MOV TIME_MONTH,A
CJNE A,#13H,GADDMONTH1
MOV TIME_MONTH,#01H
GADDMONTH1:
LCALL GETWEEK ;月加1同时换算出星期
LCALL YMD ;转换农历月日
LCALL ADJ_TOTAL ;转总天数,周次处理程序
LCALL DX_MONTH ;转大小月判断程序
MOV DS1302_ADDR,#88H ;月值送1302
MOV DS1302_DATA,TIME_MONTH
LCALL WRITE
MOV R0,TIME_MONTH
LCALL DIVIDE ;月分离送显示缓冲
MOV 77H,R1
MOV 57H,R1
MOV 78H,R2
MOV 58H,R2
MOV 76H,week
MOV 56H,week
MOV A,78H
CJNE A,#0,WAIT4 ;按键调整中消除月高位0
MOV 78H,#0AH
MOV 58H,#0AH
WAIT4:
LCALL DISPLAY
JNB ADDNUM,WAIT4
AJMP SETG3
GDECMONTH:
MOV R7,TIME_MONTH ;月减1
LCALL DEC1
MOV TIME_MONTH,A
CJNE A,#00H,GDECMONTH1
MOV TIME_MONTH,#12H
GDECMONTH1:
LCALL GETWEEK ;月减1同时换算出星期
LCALL YMD ;转换农历月日
LCALL ADJ_TOTAL ;转总天数,周次处理程序
LCALL DX_MONTH ;转大小月判断程序
MOV DS1302_ADDR,#88H ;月值送1302
MOV DS1302_DATA,TIME_MONTH
LCALL WRITE
MOV R0,TIME_MONTH
LCALL DIVIDE ;月分离送显示缓冲
MOV 77H,R1
MOV 57H,R1
MOV 78H,R2
MOV 58H,R2
MOV 76H,week
MOV 56H,week
MOV A,78H
CJNE A,#0,WAIT5 ;按键调整中消除月高位0
MOV 78H,#0AH
MOV 58H,#0AH
WAIT5:
LCALL DISPLAY
JNB DECNUM,WAIT5
AJMP SETG3
SETG4:
SETB MONTHFLASH ;调日时闪标志
GWAIT6:
LCALL DISPLAY
JNB MODE,GWAIT6
SETG5:
LCALL DISPLAY
JNB MODE,SETGHOUR
JNB ADDNUM,GADDDAY
JNB DECNUM,SETGDDAY
JNB DMODE,JUMPMONTH
JNB F0,SSSDATE
CLR RYLED ;闰月,则p1.1清0,指示灯亮
LJMP SETG5
SSSDATE:
SETB RYLED
AJMP SETG5
JUMPMONTH:
LCALL DISPLAY
CLR MONTHFLASH
JNB DMODE,JUMPMONTH
AJMP SETG3
SETGHOUR:
AJMP SETG6
SETGDDAY:
AJMP GDECDAY
GADDDAY:
MOV A,TIME_MONTH
CJNE A,#01H,FEB
LCALL MMONTH ;一月日加1
AJMP GADDDAY1
FEB:
CJNE A,#02H,MARCH
MOV R3,TIME_YEAR ;二月日加1
LCALL ZH ;BCD码转换成HEX,判断是否为闰年
MOV A,R3
JZ RFEB
MOV R7,TIME_DAY ;平年二月有28天
LCALL ADD1
MOV TIME_DAY,A
CJNE A,#29H,FEB1
MOV TIME_DAY,#01
FEB1:
AJMP GADDDAY1
RFEB:
MOV R7,TIME_DAY ;闰年二月有29天
LCALL ADD1
MOV TIME_DAY,A
CJNE A,#30H,FEB2
MOV TIME_DAY,#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 ;转换农历月日
LCALL ADJ_TOTAL ;转总天数,周次处理程序
LCALL DX_MONTH ;转大小月判断程序
MOV DS1302_ADDR,#86H ;日值送1302
MOV DS1302_DATA,TIME_DAY
LCALL WRITE
MOV R0,TIME_DAY
LCALL DIVIDE ;日分离送显示缓冲
MOV 70H,R1
MOV 50H,R1
MOV 71H,R2
MOV 51H,R2
MOV 76H,week
MOV 56H,week
MOV A,71H
CJNE A,#0,WAIT7 ;按键调整中消除日高位0
MOV 71H,#0AH
MOV 51H,#0AH
WAIT7:
LCALL DISPLAY
JNB ADDNUM,WAIT7
AJMP SETG5
;**************** 日减1***********************************
GDECDAY:
mov A,TIME_MONTH
CJNE A,#01H,DFEB
LCALL DMMONTH ;一月日减1
AJMP GDECDAY1
DFEB:
CJNE A,#02H,DMARCH
MOV R3,TIME_YEAR ;二月日减1
LCALL ZH ;BCD码转换成HEX
MOV A,R3
JZ DRFEB
MOV R7,TIME_DAY ;平年二月有28天
LCALL DEC1
MOV TIME_DAY,A
CJNE A,#00H,DFEB1
MOV TIME_DAY,#28H
DFEB1:
AJMP GDECDAY1
DRFEB:
MOV R7,TIME_DAY ;闰年二月有29天
LCALL DEC1
MOV TIME_DAY,A
CJNE A,#00H,DFEB2
MOV TIME_DAY,#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 ;转换农历月日
LCALL ADJ_TOTAL ;转总天数,周次处理程序
LCALL DX_MONTH ;转大小月判断程序
MOV DS1302_ADDR,#86H ;日值送1302
MOV DS1302_DATA,TIME_DAY
LCALL WRITE
MOV R0,TIME_DAY
LCALL DIVIDE ;日分离送显示缓冲
MOV 70H,R1
MOV 50H,R1
MOV 71H,R2
MOV 51H,R2
MOV 76H,week
MOV 56H,week
MOV A,71H
CJNE A,#0,WAIT8 ;按键调整中消除日高位0
MOV 71H,#0AH
MOV 51H,#0AH
WAIT8:
LCALL DISPLAY
JNB DECNUM,WAIT8
AJMP SETG5
SETG6:
SETB DAYFLASH ;调小时时闪标志
GWAIT9:
LCALL DISPLAY
JNB MODE,GWAIT9
SETG9:
LCALL DISPLAY
JNB MODE,SETG10_10
JNB ADDNUM,GADDHOUR
JNB DECNUM,GDECHOUR
JNB DMODE,JUMPDATE
AJMP SETG9
SETG10_10:
AJMP SETG10
JUMPDATE:
LCALL DISPLAY
CLR DAYFLASH
JNB DMODE,JUMPDATE
AJMP SETG5
GADDHOUR:
MOV R7,HOUR ;小时加1
LCALL ADD1
MOV HOUR,A
CJNE A,#24H,GADDHOUR1
MOV HOUR,#00H
GADDHOUR1:
MOV DS1302_ADDR,#84H ;小时值送1302
MOV DS1302_DATA,HOUR
LCALL WRITE
MOV R0,HOUR
LCALL DIVIDE ;小时分离送显示缓冲
MOV 64H,R1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -