📄 万年历最终版.asm
字号:
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
WAITT5: LCALL DISPLAY
JNB P1.2,WAITT5
JNB P1.1,WAITT5
AJMP SETG9
SETG10: SETB 0EH ;调分时闪标志
GWAIT10: LCALL DISPLAY
JNB P1.0,GWAIT10
SETG11: LCALL DISPLAY
JNB P1.0,SETGOUT
JNB P1.1,GADDMINTUE
JNB P1.2,GDECMINTUE
JNB P1.3,SETGOUT
AJMP SETG11
GDECMINTUE: MOV R7,61H ;分加1
LCALL DEC1
CJNE A,#0FFH,GADDMINTUE11
MOV 61H,#59H
AJMP GADDMINTUE1
GADDMINTUE11:ADD A,#00H
DA A
MOV 61H,A
AJMP GADDMINTUE1
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
WAITT6: LCALL DISPLAY
JNB P1.2,WAITT6
JNB P1.1,WAITT6
AJMP SETG11
SETGOUT: LCALL DISPLAY
JNB P1.0,SETGOUT
JNB P1.3,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 0EH
CLR 0FH
CLR ET1
CLR TR1 ;关闪中断
LJMP MAIN1
;***********************************
;* 闪动调时程序 *
;***********************************
INTT1: PUSH ACC
PUSH PSW
GFLASH: CPL 0FH
JB 0FH,GFLASH1
MOV 7CH,4CH ;全部显示
MOV 7BH,4BH
MOV 7AH,4AH
MOV 79H,49H
MOV 78H,48H
MOV 77H,47H
MOV 76H,46H
MOV 75H,45H
MOV 74H,44H
MOV 73H,43H
MOV 72H,42H
MOV 71H,41H
MOV 70H,40H
GFLASHOUT: POP PSW
POP ACC
RETI
GFLASH1: JNB 2FH.4,GFLASH2
JB 0AH,GFLASH2 ;调年闪
MOV 7CH,#0FFH
MOV 7BH,#0FFH
AJMP GFLASHOUT
GFLASH2: JNB 2FH.1,GFLASH5
JB 0BH,GFLASH3 ;调月闪
MOV 7AH,#0FFH
MOV 79H,#0FFH
AJMP GFLASHOUT
GFLASH3: JB 0CH,GFLASH4 ;调日闪
MOV 77H,#0FFH
MOV 76H,#0FFH
AJMP GFLASHOUT
GFLASH4: JB 0DH,GFLASH5 ;调星期闪
MOV 78H,#0FFH
AJMP GFLASHOUT
GFLASH5: JNB 2FH.0,GFLASHOUT
JB 0EH,GFLASH6 ;调小时闪
MOV 75H,#0FFH
MOV 74H,#0FFH
AJMP GFLASHOUT
GFLASH6:
MOV 73H,#0FFH ;调分闪
MOV 72H,#0FFH
AJMP GFLASHOUT
;*********************************
;* 加1程序 *
;*********************************
ADD1: MOV A,R7
ADD A,#01H
DA A
RET
DEC1: MOV A,R7
JZ NEXTO1
CLR C
SUBB A,#01H
JNB PSW.6,NEXTO3
CLR C
SUBB A,#06H
NEXTO3: ADD A,#00H
DA A
AJMP NEXTO2
NEXTO1:MOV A,#0FFH
NEXTO2:RET
;*********************************
;* 分离程序 *
;*********************************
DIVIDE: MOV A,R0
ANL A,#0FH
MOV R1,A
MOV A,R0
SWAP A
ANL A,#0FH
MOV R2,A
RET
;*********************************
;* 写1302程序 *
;*********************************
WRITE: CLR SCLK
NOP
SETB RST
NOP
MOV A,DS1302_ADDR
MOV R4,#8
WRITE1: RRC A ;送地址给1302
NOP
NOP
CLR SCLK
NOP
NOP
NOP
MOV IO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R4,WRITE1
CLR SCLK
NOP
MOV A,DS1302_DATA
MOV R4,#8
WRITE2: RRC A
NOP ;送数据给1302
CLR SCLK
NOP
NOP
MOV IO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R4,WRITE2
CLR RST
RET
;*******************************
;* 读1302程序 *
;*******************************
READ: CLR SCLK
NOP
NOP
SETB RST
NOP
MOV A,DS1302_ADDR
MOV R4,#8
READ1: RRC A
NOP
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,加低位
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -