📄 万年历.asm
字号:
MOV 47H,R2
MOV R0,64H
LCALL DIVIDE ;星期分离送显示缓冲
MOV 48H,week
MOV 78H,week
WAIT8: LCALL DISPLAY
JNB P1.4,WAIT8
AJMP SETG5
SETG6: SETB 0CH ;调小时时闪标志
GWAIT9: LCALL DISPLAY
JNB P1.1,GWAIT9
SETG9: LCALL DISPLAY
JNB P1.1,SETG10
JNB P1.3,GADDHOUR
JNB P1.4,GDECHOUR
JNB P1.2,JUMPDATE
AJMP SETG9
JUMPDATE: LCALL DISPLAY
CLR 0CH
JNB P1.2,JUMPDATE
AJMP SETG5
GADDHOUR: MOV R7,62H ;小时加1
LCALL ADD1
MOV 62H,A
CJNE A,#24H,GADDHOUR1
MOV 62H,#00H
GADDHOUR1: MOV DS1302_ADDR,#84H ;小时值送1302
MOV DS1302_DATA,62H
LCALL WRITE
MOV R0,62H
LCALL DIVIDE ;小时分离送显示缓冲
MOV 74H,R1
MOV 44H,R1
MOV 75H,R2
MOV 45H,R2
WAIT10: LCALL DISPLAY
JNB P1.3,WAIT10
AJMP SETG9
GDECHOUR: MOV R7,62H ;小时减1
LCALL DEC1
MOV 62H,A
CJNE A,#99H,GDECHOUR1
MOV 62H,#23H
GDECHOUR1: MOV DS1302_ADDR,#84H ;小时值送1302
MOV DS1302_DATA,62H
LCALL WRITE
MOV R0,62H
LCALL DIVIDE ;小时分离送显示缓冲
MOV 74H,R1
MOV 44H,R1
MOV 75H,R2
MOV 45H,R2
WAIT11: LCALL DISPLAY
JNB P1.4,WAIT11
AJMP SETG9
SETG10: SETB 0DH ;调分时闪标志
GWAIT12: LCALL DISPLAY
JNB P1.1,GWAIT12
SETG11: LCALL DISPLAY
JNB P1.1,SETGOUT
JNB P1.3,GADDMINTUE
JNB P1.4,GDECMINTUE
JNB P1.2,JUMPHOUR
AJMP SETG11
JUMPHOUR: LCALL DISPLAY
CLR 0DH
JNB P1.2,JUMPHOUR
AJMP SETG9
GADDMINTUE: MOV R7,61H ;分加1
LCALL ADD1
MOV 61H,A
CJNE A,#60H,GADDMINTUE1
MOV 61H,#00H
GADDMINTUE1: MOV DS1302_ADDR,#82H ;分值送1302
MOV DS1302_DATA,61H
LCALL WRITE
MOV R0,61H
LCALL DIVIDE ;分分离送显示缓冲
MOV 72H,R1
MOV 42H,R1
MOV 73H,R2
MOV 43H,R2
WAIT13: LCALL DISPLAY
JNB P1.3,WAIT13
AJMP SETG11
GDECMINTUE: MOV R7,61H ;分减1
LCALL DEC1
MOV 61H,A
CJNE A,#99H,GDECMINTUE1
MOV 61H,#59H
GDECMINTUE1: MOV DS1302_ADDR,#82H ;分值送1302
MOV DS1302_DATA,61H
LCALL WRITE
MOV R0,61H
LCALL DIVIDE ;分分离送显示缓冲
MOV 72H,R1
MOV 42H,R1
MOV 73H,R2
MOV 43H,R2
WAIT14: LCALL DISPLAY
JNB P1.4,WAIT14
AJMP SETG11
SETGOUT: LCALL DISPLAY
JNB P1.1,SETGOUT
LCALL GENGXIN
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#00H ;1302晶振开始振荡
LCALL WRITE
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#80H ;禁止写入1302
LCALL WRITE
CLR 08H
CLR 09H
CLR 0AH
CLR 0BH
CLR 0CH
CLR 0DH
CLR ET1
CLR TR1 ;关闪中断
LJMP MAIN1
;***********************************
;* 闪动调时程序 *
;***********************************
INTT1: PUSH ACC
PUSH PSW
GFLASH: CPL 0FH
JB 0FH,GFLASH1
MOV 7CH,4CH ;全部显示
MOV 7BH,4BH
MOV A,4AH
CJNE A,#0,TWEEK
MOV 4AH,#0BH
TWEEK:MOV 7AH,4AH
MOV 79H,49H
MOV 78H,WEEK
MOV 77H,47H
MOV 76H,46H
MOV 75H,45H
MOV 74H,44H
MOV 73H,43H
MOV 72H,42H
MOV 71H,41H
MOV 70H,40H
MOV 50H,59H ;农历月日
MOV 51H,5AH
MOV 52H,5BH
MOV 53H,5CH
GFLASHOUT: POP PSW
POP ACC
RETI
GFLASH1: JB 0AH,GFLASH2 ;调年闪
MOV 7CH,#0AH
MOV 7BH,#0AH
MOV 78H,#0AH ;调年时星期闪
MOV 50H,#0AH ;农历月日闪烁
MOV 51H,#0AH
MOV 52H,#0AH
MOV 53H,#0AH
AJMP GFLASHOUT
GFLASH2: JB 0BH,GFLASH3 ;调月闪
MOV 7AH,#0AH
MOV 79H,#0AH
MOV 78H,#0AH ;调月时星期闪
MOV 50H,#0AH ;农历月日闪烁
MOV 51H,#0AH
MOV 52H,#0AH
MOV 53H,#0AH
LJMP GFLASHOUT
GFLASH3: JB 0CH,GFLASH4 ;调日闪
MOV 77H,#0AH
MOV 76H,#0AH
MOV 78H,#0AH ;调日时星期闪
MOV 50H,#0AH ;农历月日闪烁
MOV 51H,#0AH
MOV 52H,#0AH
MOV 53H,#0AH
LJMP GFLASHOUT
GFLASH4: JB 0DH,GFLASH5 ;调小时闪
MOV 75H,#0AH
MOV 74H,#0AH
LJMP GFLASHOUT
GFLASH5: ;调分钟闪
MOV 73H,#0AH
MOV 72H,#0AH
LJMP GFLASHOUT
;*********************************
;* 加1程序 *
;*********************************
ADD1: MOV A,R7
ADD A,#01H
DA A
RET
;*********************************
;* 减1程序 *
;*********************************
DEC1: MOV A,R7
ADD A,#99H
DA A
RET
;*********************************
;* 大小月加调整程序 *
;*********************************
MMONTH: MOV R7,63H ;大月日加1
LCALL ADD1
MOV 63H,A
CJNE A,#32H,MGOOUT
MOV 63H,#01H
MGOOUT: RET
LMONTH:MOV R7,63H ;小月日加1
LCALL ADD1
MOV 63H,A
CJNE A,#31H,LGOOUT
MOV 63H,#01H
LGOOUT:RET
;*********************************
;* 大小月减调整程序 *
;*********************************
DMMONTH:MOV R7,63H ;大月日减1
LCALL DEC1
MOV 63H,A
CJNE A,#00H,DMGOOUT
MOV 63H,#31H
DMGOOUT: RET
DLMONTH:MOV R7,63H ;小月日减1
LCALL DEC1
MOV 63H,A
CJNE A,#00H,DLGOOUT
MOV 63H,#30H
DLGOOUT:RET
;*****************************************
;* BCD码转换成16进制数 *
;*****************************************
ZH: MOV A,R3
mov 2FH,#0
mov r6,#10
NUMBjiao:cjne a,2Fh,next
ajmp zh1
next:inc 2Fh
djnz r6,NUMBjiao
subb a,#06h
mov b,#4
div ab
mov a,b
MOV R3,A
ajmp exit
zh1: mov b,#4
div ab
mov a,b
mov r3,a
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -