📄 jishi.txt
字号:
year DATA 66H
month DATA 65H
week DATA 64H
day DATA 63H
hour DATA 62H
mintue DATA 61H
second DATA 60H
DS12887A DATA 7F0AH
DS12887B DATA 7F0BH
DS12887C DATA 7F0CH
DS12887D DATA 7F0DH
DS12887 DATA 7F00H
ORG 0000H
AJMP MAIN
ORG 0003H
RETI
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
LJMP INTEL
ORG 0023H
RETI
MAIN: MOV SCON,#00H ;串行输出,方式0
MOV TMOD,#10H ;计数器1,方式1';
LCALL S12887
SETB PSW.5
WAIT0: MOV DPTR,#DS12887A
MOVX A,@DPTR
JBC ACC.7,WAIT0 ;UIP=1,时钟更新正在进行,不能读取时钟值;
KK: MOV DPTR,#00H ;UIP=0,可以读取值
MOVX A,@DPTR
MOV second,A
MOV R0,second
LCALL DIVIDE
MOV 70H,R1
MOV 40H,R1
MOV 71H,R2
MOV 41H,R2
MOV DPTR,#02H
MOVX A,@DPTR
MOV mintue,A
MOV R0,mintue
LCALL DIVIDE
MOV 72H,R1
MOV 42H,R1
MOV 73H,R2
MOV 43H,R2
MOV DPTR,#04H
MOVX A,@DPTR
MOV 62H,A
MOV R0,62H
LCALL DIVIDE
MOV 74H,R1
MOV 44H,R1
MOV 75H,R2
MOV 45H,R2
MOV DPTR,#06H
MOVX A,@DPTR
MOV week,A
MOV 76H,week
MOV 46H,week
MOV DPTR,#07H
MOVX A,@DPTR
MOV day,A
MOV R0,day
LCALL DIVIDE
MOV 77H,R1
MOV 47H,R1
MOV 78H,R2
MOV 48H,R2
MOV DPTR,#08H
MOVX A,@DPTR
MOV month,A
MOV R0,month
LCALL DIVIDE
MOV 79H,R1
MOV 49H,R1
MOV 7AH,R2
MOV 4AH,R2
MOV DPTR,#09H
MOVX A,@DPTR
MOV year,A
MOV R0,year
LCALL DIVIDE
MOV 7BH,R1
MOV 4BH,R1
MOV 7CH,R2
MOV 4CH,R2
;MOV R0,#70H
;MOV R1,#76H
;MOV R2,#30H
MOV 7DH,#00H
MOV 7EH,#02H
JNB PSW.5,HH
LCALL DISPLAY1
HH: LCALL DISPLAY2
JNB P1.0,SETG;判断调整键是否按下
LJMP WAIT0
SETG: MOV TL1,#0B0H ;送计数初值
MOV TH1,#3CH
SETB EA ;开中断
SETB TR1 ;计数器1的运行控制位,为1时启动记数
SETB ET1 ;溢出中断允许位,为1,允许T1中断
CLR 08H ;调时标志清零
CLR 09H
CLR 0AH
CLR 0BH
CLR 0CH
CLR 0DH
CLR 0EH
CLR 0FH
MOV DPTR,#DS12887B
MOV A,#82H;禁止更新,初始化时间和日历
MOVX @DPTR,A
LCALL DISPLAY1
LCALL DISPLAY2
JNB P1.0,GWAIT ;判断调整键是否抬起,为0未抬
AJMP SETG1
GWAIT: AJMP SETG
SETG1: SETB 09H ;调年闪标志
LCALL DISPLAY1
JNB P1.0,SETG2
JNB P1.1,GADDYEAR
JNB P1.2,GSUBYEAR
AJMP SETG1
GADDYEAR: MOV R7,year ;年加一
LCALL ADD1
MOV year,A
GADDYEAR1: MOV DPTR,#09H ;年值送入12887
MOVX @DPTR,A
MOV R0,A
LCALL DIVIDE ;年分离送显示缓存
MOV 7BH,R1
MOV 4BH,R1
MOV 7CH,R2
MOV 4CH,R2
WAITT1: LCALL DISPLAY1
JNB P1.1,WAITT1
AJMP SETG1
GSUBYEAR: MOV R7,year ;年减一
LCALL SUB1
MOV year,A
GSUBYEAR1: MOV DPTR,#09H ;年值送入12887
MOVX @DPTR,A
MOV R0,A
LCALL DIVIDE ;年分离送显示缓存
MOV 7BH,R1
MOV 4BH,R1
MOV 7CH,R2
MOV 4CH,R2
WAITT2: LCALL DISPLAY1
JNB P1.2,WAITT2
AJMP SETG1
SETG2: SETB 0AH ;调月时闪标志
GWAIT2: LCALL DISPLAY1
JNB P1.0,GWAIT2
SETG3: LCALL DISPLAY1
JNB P1.0,SETG4
JNB P1.1,GADDMONTH
JNB P1.2,GSUBMONTH
AJMP SETG3
GADDMONTH: MOV R7,month ;月加一
LCALL ADD1
MOV month,A
CJNE A,#13H,GADDMONTH1
MOV month,#01H
GADDMONTH1: MOV DPTR,#08 ;月值送入12887
MOV A,month
MOVX @DPTR,A
MOV R0,month
LCALL DIVIDE ;月分离送显示缓存
MOV 79H,R1
MOV 49H,R1
MOV 7AH,R2
MOV 4AH,R2
WAITT3: LCALL DISPLAY1
JNB P1.1,WAITT3
AJMP SETG3
GSUBMONTH: MOV R7,month ;月减一
LCALL SUB1
MOV month,A
CJNE A,#00H,GSUBMONTH1
MOV month,#12H
GSUBMONTH1: MOV DPTR,#08 ;月值送入12887
MOV A,month
MOVX @DPTR,A
MOV R0,month
LCALL DIVIDE ;月分离送显示缓存
MOV 79H,R1
MOV 49H,R1
MOV 7AH,R2
MOV 4AH,R2
WAITT4: LCALL DISPLAY1
JNB P1.2,WAITT4
AJMP SETG3
SETG4: SETB 0BH ;调日时闪标志
GWAIT4: LCALL DISPLAY1
JNB P1.0,GWAIT4
SETG5: LCALL DISPLAY1
JNB P1.0,SETG6
JNB P1.1,GADDDAY
JNB P1.2,GSUBDAY
AJMP SETG5
GADDDAY: MOV R7,day ;日加一
LCALL ADD1
MOV day,A
MOV R0,A
CJNE R0,#02H,PPP
CJNE A,#29H,GADDDAY1
MOV day,#01H
AJMP GADDDAY1
PPP: CJNE A,#32H,GADDDAY1
MOV day,#01H
GADDDAY1: MOV DPTR,#07H ;日值送入12887
MOV A,day
MOVX @DPTR,A
MOV R0,day
LCALL DIVIDE ;日分离送显示缓存
MOV 77H,R1
MOV 47H,R1
MOV 78H,R2
MOV 48H,R2
WAITT5: LCALL DISPLAY1
JNB P1.1,WAITT5
AJMP SETG5
GSUBDAY: MOV R7,day ;日减一
LCALL SUB1
MOV day,A
MOV R0,A
CJNE R0,#02H,MMM
CJNE A,#00H,GSUBDAY1
MOV day,#28H
AJMP GSUBDAY1
MMM: CJNE A,#00H,GSUBDAY1
MOV day,#31H
GSUBDAY1: MOV DPTR,#07H ;日值送入12887
MOV A,day
MOVX @DPTR,A
MOV R0,day
LCALL DIVIDE ;日分离送显示缓存
MOV 77H,R1
MOV 47H,R1
MOV 78H,R2
MOV 48H,R2
WAIT6: LCALL DISPLAY1
JNB P1.2,WAIT6
AJMP SETG5
SETG6: SETB 0CH ;调星期时闪标志
GWAIT6: LCALL DISPLAY1
JNB P1.0,GWAIT6
SETG7: LCALL DISPLAY1
JNB P1.0,SETG8
JNB P1.1,GADDWEEK
JNB P1.2,GSUBWEEK
AJMP SETG7
GADDWEEK: MOV R7,week ;星期加一
LCALL ADD1
MOV week,A
CJNE A,#08H,GADDWEEK1
MOV week,#01H
GADDWEEK1: MOV DPTR,#06H ;星期值送入12887
MOV A,week
MOVX @DPTR,A
MOV R0,week
LCALL DIVIDE ;星期分离送显示缓存
MOV 76H,R1
MOV 46H,R1
WAITT7: LCALL DISPLAY1
JNB P1.1,WAITT7
AJMP SETG7
GSUBWEEK: MOV R7,week ;星期减一
LCALL SUB1
MOV week,A
CJNE A,#00H,GSUBWEEK1
MOV week,#07H
GSUBWEEK1: MOV DPTR,#06H ;星期值送入12887
MOV A,week
MOVX @DPTR,A
MOV R0,week
LCALL DIVIDE ;星期分离送显示缓存
MOV 76H,R1
MOV 46H,R1
WAITT8: LCALL DISPLAY1
JNB P1.2,WAITT8
AJMP SETG7
SETG8: SETB 0DH ;调[小]时闪标志
GWAIT8: LCALL DISPLAY2
JNB P1.0,GWAIT8
SETG9: LCALL DISPLAY2
JNB P1.0,SETG10
JNB P1.1,GADDHOUR
JNB P1.2,GSUBHOUR
AJMP SETG9
GADDHOUR: MOV R7,hour ;[小]时加一
LCALL ADD1
MOV hour,A
CJNE A,#24H,GADDHOUR1
MOV hour,#00H
GADDHOUR1: MOV DPTR,#04H ;[小]时值送入12887
MOV A,hour
MOVX @DPTR,A
MOV R0,hour
LCALL DIVIDE ;[[小]时分离送显示缓存
MOV 74H,R1
MOV 44H,R1
MOV 75H,R2
MOV 45H,R2
WAITT9: LCALL DISPLAY2
JNB P1.1,WAITT9
AJMP SETG9
GSUBHOUR: MOV R7,hour ;[小]时减一
LCALL SUB1
MOV hour,A
CJNE A,#99H,GSUBHOUR1
MOV hour,#23H
GSUBHOUR1: MOV DPTR,#04H ;[小]时值送入12887
MOV A,hour
MOVX @DPTR,A
MOV R0,hour
LCALL DIVIDE ;[[小]时分离送显示缓存
MOV 74H,R1
MOV 44H,R1
MOV 75H,R2
MOV 45H,R2
WAITT10: LCALL DISPLAY2
JNB P1.2,WAITT10
AJMP SETG9
SETG10: SETB 0EH ;调分时闪标志
GWAIT10: LCALL DISPLAY2
JNB P1.0,GWAIT10
SETG11: LCALL DISPLAY2
JNB P1.0,SETGOUT
JNB P1.1,GADDMINTUE
JNB P1.2,GSUBMINTUE
AJMP SETG11
GADDMINTUE: MOV R7,mintue ;分加一
LCALL ADD1
MOV mintue,A
CJNE A,#60H,GADDMINTUE1
MOV mintue,#00H
GADDMINTUE1: MOV DPTR,#02H ;分值送入12887
MOV A,mintue
MOVX @DPTR,A
MOV R0,mintue
LCALL DIVIDE ;分分离送显示缓存
MOV 72H,R1
MOV 42H,R1
MOV 73H,R2
MOV 43H,R2
WAITT11: LCALL DISPLAY2
JNB P1.1,WAITT11
AJMP SETG11
GSUBMINTUE: MOV R7,mintue ;分减一
LCALL SUB1
MOV mintue,A
CJNE A,#99H,GADDMINTUE2
MOV mintue,#59
GADDMINTUE2: MOV DPTR,#02H ;分值送入12887
MOV A,mintue
MOVX @DPTR,A
MOV R0,mintue
LCALL DIVIDE ;分分离送显示缓存
MOV 72H,R1
MOV 42H,R1
MOV 73H,R2
MOV 43H,R2
WAITT12: LCALL DISPLAY2
JNB P1.2,WAITT12
AJMP SETG11
SETGOUT: LCALL DISPLAY1
LCALL DISPLAY2
JNB P1.0,SETGOUT
MOV DPTR,#DS12887B
MOV A,#02H ;12887启动更新
MOVX @DPTR,A
CLR 08H
CLR 09H
CLR 0AH
CLR 0BH
CLR 0CH
CLR 0DH
CLR 0EH
CLR 0FH
CLR EA ;关闭中断
CLR TR1
LJMP WAIT0
S12887: MOV DPTR,#DS12887B ;寄存器B的地址7F0B送到DPTR
MOV A,#0082H ;SET=1,禁止更新,程序可初始化时间和日历,选用24时制
MOVX @DPTR,A
MOV DPTR,#DS12887A
MOV A,#20H
MOVX @DPTR,A
MOV DPTR,#00H ;秒地址
MOV A,#00H ;second=00
MOVX @DPTR,A
INC DPTR
MOV A,#0FFH ;不报警
MOVX @DPTR,A
INC DPTR
MOV A,#59H ;mintue=00
MOVX @DPTR,A
INC DPTR
MOV A,#0FFH
MOVX @DPTR,A
INC DPTR
MOV A,#23H ;hour=00
MOVX @DPTR,A
INC DPTR
MOV A,#0FFH
MOVX @DPTR,A
INC DPTR
MOV A,#1H ;week=1
MOVX @DPTR,A
INC DPTR
MOV A,#27H ;day=1
MOVX @DPTR,A
INC DPTR
MOV A,#2H ;month=1
MOVX @DPTR,A
INC DPTR
MOV A,#06H ;year=06
MOVX @DPTR,A
MOV DPTR,#DS12887C
CLR A
MOVX @DPTR,A ;寄存器C清零
INC DPTR
MOVX @DPTR,A ;寄存器D清零
MOV DPTR,#DS12887B
MOV A,#02H;SET=0,更新正常运行,禁止中断,选用24时制,不用夏时制
MOVX @DPTR,A
RET
DISPLAY1: SETB P1.4
CLR P1.3
MOV DPTR,#TAB
MOV R0,#76H
MOV R7,#9
NEXT: MOV A,@R0
MOVC A,@A+DPTR
MOV SBUF,A
W2: JBC TI,W1
SJMP W2
W1: INC R0
DJNZ R7,NEXT
SETB P1.3
CLR P1.4
LCALL DL1MS
RET
DISPLAY2: MOV DPTR,#TAB
MOV R0,#70H
MOV R4,#6
NEXT1: MOV A,@R0
MOVC A,@A+DPTR
MOV SBUF,A
W4: JBC TI,W3
SJMP W4
W3: INC R0
DJNZ R4,NEXT1
LCALL DL1MS
MOV R1,#62H ;小时地址送给R1
CJNE @R1,#00H,L2
SETB PSW.5
SJMP L3
L2: CLR PSW.5
L3: RET
DL1MS: MOV R6,#100
DL1: MOV R7,#255
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET
DIVIDE: MOV A,R0
ANL A,#0FH
MOV R1,A
MOV A,R0
SWAP A
ANL A,#0FH
MOV R2,A
RET
ADD1: MOV A,R7 ;加一程序
ADD A,#01H
DA A
RET
SUB1: MOV A,R7 ;减一程序
ADD A,#99H
DA A
RET
INTEL: MOV TL1,#0B0H ;定时器中断程序,重装定时器初值
MOV TH1,#3CH
MOV R1,#59H
K2: MOV R0,#255H
K1: DEC R0
CJNE R0,#00H,K1
DJNZ R1,K2
PUSH ACC ;保护现场
PUSH PSW
GFLASH: CPL 0FH
JB 0FH,GFLASH1
MOV 70H,40H
MOV 71H,41H
MOV 72H,42H
MOV 73H,43H
MOV 74H,44H
MOV 75H,45H
MOV 76H,46H
MOV 77H,47H
MOV 78H,48H
MOV 79H,49H
MOV 7AH,4AH
MOV 7BH,4BH
MOV 7CH,4CH
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 78H,#0AH
MOV 77H,#0AH
AJMP GFLASHOUT
GFLASH4: JB 0DH,GFLASH5
MOV 76H,#0AH
AJMP GFLASHOUT
GFLASH5: JB 0EH,GFLASH6
MOV 75H,#0AH
MOV 74H,#0AH
AJMP GFLASHOUT
GFLASH6: MOV 73H,#0AH
MOV 72H,#0AH
AJMP GFLASHOUT
TAB: DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09H,0FFH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -