📄 万年历最终版.asm
字号:
LCALL DIVIDE
MOV 7BH,R1
MOV 4BH,R1
MOV 7CH,R2
MOV 4CH,R2
MOV 78H,WEEK
MOV 48H,WEEK
MOV R0,MONTH ;月分离,送显示缓存
LCALL DIVIDE
MOV 79H,R1
MOV 49H,R1
MOV 7AH,R2
MOV 4AH,R2
MOV R0,DAY ;日分离,送显示缓存
LCALL DIVIDE
MOV 76H,R1
MOV 46H,R1
MOV 77H,R2
MOV 47H,R2
MOV R0,HOUR ;小时分离,送显示缓存
LCALL DIVIDE
MOV 74H,R1
MOV 44H,R1
MOV 75H,R2
MOV 45H,R2
MOV R0,MINTUE ;分分离,送显示缓存
LCALL DIVIDE
MOV 72H,R1
MOV 42H,R1
MOV 73H,R2
MOV 43H,R2
MOV R0,SECOND ;秒分离,送显示缓存
LCALL DIVIDE
MOV 70H,R1
MOV 40H,R1
MOV 71H,R2
MOV 41H,R2
LCALL DISPLAY
LCALL GENGXIAN ;更新农历程序
JNB P1.0,SETG
;JNB F0,SSS
;CLR P1.3 ;闰月,则p1.3清0,指示灯亮
LJMP MAIN1
;SSS: ;SETB P1.3 ;非闰月,则p1.3置位,指示灯灭
;LJMP MAIN1
;*******************************
;* 公历设置程序 *
;*******************************
SETG:
CLR 2EH.1 ;清秒闪
MOV 3AH,#0H ;清秒闪记数
SETB TR1
SETB ET1
CLR 08H
CLR 09H
CLR 0AH
CLR 0BH
CLR 0CH
CLR 0DH
CLR 0EH
CLR 0FH
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#00H ;允许写1302
LCALL WRITE
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#80H ;1302停止振荡
LCALL WRITE
JB 2FH.4,GWAIT
JB 2FH.1,SETG2
JB 2FH.0,ZHUAN1
AJMP FLAG0
ZHUAN1: LJMP SETG8
FLAG0: AJMP SETGOUT
GWAIT: LCALL DISPLAY
JNB P1.0,GWAIT
SETG1: LCALL DISPLAY
JNB P1.0,ZHUAN2
AJMP FLAG2
ZHUAN2: LJMP SETGOUT
FLAG2: JNB P1.1,GADDYEAR
JNB P1.2,GDECYEAR
JNB P1.3,ZHUAN3
AJMP FLAG3
ZHUAN3: LJMP SETGOUT
FLAG3:
AJMP SETG1
GDECYEAR: MOV R7,66H ;年-1
LCALL DEC1
CJNE A,#0FFH,GDECYEAR1
MOV A,#99H
GDECYEAR1:
ADD A,#00H
DA A
MOV 66H,A
AJMP GADDYEAR1
GADDYEAR: MOV R7,66H ;年加1
LCALL ADD1
MOV 66H,A
CJNE A,#0FFH,GADDYEAR1
MOV 66H,#01H
GADDYEAR1: MOV DS1302_ADDR,#8CH ;年值送1302
MOV DS1302_DATA,66H
LCALL WRITE
MOV R0,66H
LCALL DIVIDE ;年分离送显示缓冲
MOV 4BH,R1
MOV 7BH,R1
MOV 4CH,R2
MOV 7CH,R2
WAITT1: LCALL DISPLAY
JNB P1.2,WAITT1
JNB P1.1,WAITT1
AJMP SETG1
SETG2: SETB 0AH ;调月时闪标志
GWAIT2: LCALL DISPLAY
JNB P1.0,GWAIT2
SETG3: LCALL DISPLAY
JNB P1.0,SETG4
JNB P1.1,GADDMONTH
JNB P1.2,GDECMONTH
JNB P1.3,ZHUAN4
AJMP FLAG4
ZHUAN4: LJMP SETGOUT
FLAG4:
AJMP SETG3
GDECMONTH:MOV R7,65H
LCALL DEC1
MOV 65H,A
CJNE A,#0H,GADDMONTH1
MOV 65H,#12H
AJMP GADDMONTH1
GADDMONTH: MOV R7,65H ;月加1
LCALL ADD1
MOV 65H,A
CJNE A,#13H,GADDMONTH1
MOV 65H,#01H
GADDMONTH1: MOV DS1302_ADDR,#88H ;月值送1302
MOV DS1302_DATA,65H
LCALL WRITE
MOV R0,65H
LCALL DIVIDE ;月分离送显示缓冲
MOV 79H,R1
MOV 49H,R1
MOV 7AH,R2
MOV 4AH,R2
WAITT2: LCALL DISPLAY
JNB P1.2,WAITT2
JNB P1.1,WAITT2
AJMP SETG3
SETG4: SETB 0BH ;调日时闪标志
GWAIT4: LCALL DISPLAY
JNB P1.0,GWAIT4
SETG5: LCALL DISPLAY
JNB P1.0,SETG6
JNB P1.1,GADDDAY
JNB P1.2,GDECDAY
JNB P1.3,ZHUAN5
AJMP FLAG5
ZHUAN5: LJMP SETGOUT
FLAG5:
AJMP SETG5
GDECDAY: MOV R7,63H
LCALL DEC1
MOV 63H,A
CJNE A,#00H,GADDDAY1
MOV 63H,#31H
AJMP GADDDAY1
GADDDAY: MOV R7,63H ;日加1
LCALL ADD1
MOV 63H,A
CJNE A,#32H,GADDDAY1
MOV 63H,#01H
GADDDAY1: MOV DS1302_ADDR,#86H ;日值送1302
MOV DS1302_DATA,63H
LCALL WRITE
MOV R0,63H
LCALL DIVIDE ;日分离送显示缓冲
MOV 76H,R1
MOV 46H,R1
MOV 77H,R2
MOV 47H,R2
WAITT3: LCALL DISPLAY
JNB P1.2,WAITT3
JNB P1.1,WAITT3
AJMP SETG5
SETG6: SETB 0CH ;调星期时闪标志
GWAIT6: LCALL DISPLAY
JNB P1.0,GWAIT6
SETG7: LCALL DISPLAY
JNB P1.0,ZHUAN6
AJMP FLAG6
ZHUAN6: LJMP SETGOUT
FLAG6:
JNB P1.1,GADDWEEK
JNB P1.2,GDECWEEK
JNB P1.3,ZHUAN7
AJMP FLAG7
ZHUAN7: LJMP SETGOUT
FLAG7:
AJMP SETG7
GDECWEEK: MOV R7,64H ;星期-1
LCALL DEC1
MOV 64H,A
CJNE A,#00H,GADDWEEK1
MOV 64H,#07H
AJMP GADDWEEK1
GADDWEEK: MOV R7,64H ;星期加1
LCALL ADD1
MOV 64H,A
CJNE A,#08H,GADDWEEK1
MOV 64H,#01H
GADDWEEK1: MOV DS1302_ADDR,#8AH ;星期值送1302
MOV DS1302_DATA,64H
LCALL WRITE
MOV R0,64H
LCALL DIVIDE ;星期分离送显示缓冲
MOV 48H,R1
MOV 78H,R1
WAITT4: LCALL DISPLAY
JNB P1.1,WAITT4
JNB P1.2,WAITT4
AJMP SETG7
SETG8: SETB 0DH ;调小时时闪标志
GWAIT8: LCALL DISPLAY
JNB P1.0,GWAIT8
SETG9: LCALL DISPLAY
JNB P1.0,SETG10
JNB P1.1,GADDHOUR
JNB P1.2,GDECHOUR
JNB P1.3,ZHUAN8
AJMP FLAG8
ZHUAN8: LJMP SETGOUT
FLAG8:
AJMP SETG9
GDECHOUR: MOV R7,62H ;小时加1
LCALL DEC1
MOV 62H,A
CJNE A,#0FFH,GADDHOUR11
MOV A,#23H
GADDHOUR11: ADD A,#00H
DA A
MOV 62H,A
AJMP GADDHOUR1
GADDHOUR: MOV R7,62H ;小时加1
LCALL ADD1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -