📄 1302.asm
字号:
;;;;;;;;;;;;;;;;;
;;闪动调时程序;;
;;;;;;;;;;;;;;;;
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: JB 0AH,GFLASH2 ;调年闪
MOV 7CH,#0AH
MOV 7BH,#0AH
AJMP GFLASHOUT
GFLASH2: JB 0BH,GFLASH3 ;调月闪
MOV 7AH,#0AH
MOV 79H,#0AH
AJMP GFLASHOUT
GFLASH3: JB 0CH,GFLASH4 ;调日闪
MOV 77H,#0AH
MOV 76H,#0AH
AJMP GFLASHOUT
GFLASH4: JB 0DH,GFLASH5 ;调星期闪
MOV 78H,#0AH
AJMP GFLASHOUT
GFLASH5: JB 0EH,GFLASH6 ;调小时闪
MOV 75H,#0AH
MOV 74H,#0AH
AJMP GFLASHOUT
GFLASH6: MOV 73H,#0AH ;调分钟闪
MOV 72H,#0AH
AJMP GFLASHOUT
;;;;;;;;;;;;;;;;;;;;
;;;加一程序;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;
ADD1: MOV A,R7
ADD A,#01H
DA A
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 ;送地址给1302
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 ;从1302中读出数据
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码转换为10进制程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;
BCD_10: MOV A,R0
ANL A,#0FH
MOV R1,A ;高位×10, 加低位
MOV A,R0
SWAP A
ANL A,#0FH
MOV B,#10
MUL AB
ADD A,R1
MOV R0,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;查一年数据程序;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;
CHECKMONTH: LCALL BCD_10
MOV A,R0
MOV B,#04
MUL AB
MOV R1,A
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV R7,A ;第一字节送R7
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV R6,A ;第二字节送R6
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV R5,A ;第三字节送R6
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV R4,A ;第四字节送R4
RET
;;;;;;;;;;;;;;;;;;;;
;;;;;自动更新农历;;;
;;;;;;;;;;;;;;;;;;;;
GENGXIAN: MOV R2,#00H
MOV R3,#00H
MOV A,month
CJNE A,#01H,GM2
MOV R0,day ;当前月为一月
LCALL BCD_10 ;当前日转换为10进制,送R2
MOV A,R0
MOV R2,A
AJMP TIAOZHENG1
GM2: CJNE A,#02H,GM3
MOV R0,day ;当前月为二月
LCALL BCD_10 ;;当前日转换为10进制,
MOV A,R0 ;再加31,送R2
ADD A,#31
MOV R2,A
AJMP TIAOZHENG1
GM3: CJNE A,#03H,GM4
MOV R0,day ;当前月为三月
LCALL BCD_10 ;当前日转换为10进制,
MOV A,R0 ;再加59,送R2
ADD A,#59
MOV R2,A
AJMP TIAOZHENG1
GM4: CJNE A,#04H,GM5
MOV R0,day ;当前月为四月
LCALL BCD_10 ;;当前日转换为10进制,
MOV A,R0 ;再加90,送R2
ADD A,#90
MOV R2,A
AJMP TIAOZHENG1
GM5: CJNE A,#05H,GM6
MOV R0,day ;当前月为五月
LCALL BCD_10 ;当前日转换为10进制,
MOV A,R0 ;再加120,送R2
ADD A,#120
MOV R2,A
AJMP TIAOZHENG1
GM6: CJNE A,#06H,GM7
MOV R0,day ;当前月为六月
LCALL BCD_10 ;当前日转换为10进制,
MOV A,R0 ;再加151,送R2
ADD A,#151
MOV R2,A
AJMP TIAOZHENG1
GM7: CJNE A,#07H,GM8
MOV R0,day ;当前月位七月
LCALL BCD_10 ;当前日转换为10进制,
MOV A,R0 ;再加181,送R2
ADD A,#181
MOV R2,A
AJMP TIAOZHENG1
GM8:CJNE A,#08H,GM9
MOV R0,day ;当前月为八月
LCALL BCD_10 ;当前日转换为10进制,
MOV A,R0 ;再加212,送R2
ADD A,#212
MOV R2,A
AJMP TIAOZHENG1
GM9:CJNE A,#09H,GM10
MOV R0,day ;当前月为九月
LCALL BCD_10 ;当前日转换为10进制,
MOV A,R0 ;再加243
CLR C
ADD A,#243
JC GGG
MOV R2,A ;A没有溢出,送R2
AJMP TIAOZHENG1
GGG: MOV R3,#0FFH ;A溢出,A加一送R2
INC A ;R3中送#0ffh
MOV R2,A
AJMP TIAOZHENG1
GM10: CJNE A,#10H,GM11
MOV R0,day ;当前月为10月
LCALL BCD_10 ;当前日转换为10进制,
MOV A,R0 ;再加18,送R2
ADD A,#18 ;R3中送#0FFH
MOV R2,A
MOV R3,#0FFH
AJMP TIAOZHENG1
GM11:CJNE A,#11H,GM12
MOV R0,day ;当前月为11月
LCALL BCD_10 ;当前日转换为10进制,
MOV A,R0 ;再加49,送R2
ADD A,#49 ;R3中送#0FFH
MOV R2,A
MOV R3,#0FFH
AJMP TIAOZHENG1
GM12: MOV R0,day ;当前月为12月
LCALL BCD_10 ;当前日转换为10进制,
MOV A,R0 ;再加79,送R2
ADD A,#79 ;R3中送#0FFH
MOV R2,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -