📄 89c2051.asm
字号:
ACALL CLR0
MOV R0,#79H ;指向小时计时单元(78H-79H)
ACALL ADD1
MOV A,R3
CLR C
CJNE A,#24H,HOUR
HOUR: JC OUTT0
ACALL CLR0
OUTT0: MOV A,66H ;查询标志
CJNE A,#1,OUTT01
MOV 72H,76H ;中断退出时将分、时计时单元数据移入对应显示单元
MOV 73H,77H
MOV 74H,78H
MOV 75H,79H
OUTT01:POP PSW ;出栈
POP ACC
SETB ET0 ;开放T0
RETI ;中断返回
;---------------------------加1程序--------------------------;
ADD1: MOV A,@R0 ;取当前计时单元数据到A
DEC R0 ;指向前一地址
SWAP A ;A中数据高四位与低四位交换
ORL A,@R0 ;前一地址中数据放入A中低四位
ADD A,#01H ;A加1操作
DA A ;十进制调整
MOV R3,A ;移入R3寄存器
ANL A,#0FH ;高四位变0
MOV @R0,A ;放回前一地址单元
MOV A,R3 ;取回R3中暂存数据
INC R0 ;指向当前地址单元
SWAP A ;A中数据高四位与低四位交换
ANL A,#0FH ;高四位变0
MOV @R0,A ;数据放入当削地址单元中
RET
CLR0: CLR C
CLR A ;清累加器
MOV @R0,A ;清当前地址单元
DEC R0 ;指向前一地址
MOV @R0,A ;前一地址单元清0
RET ;子程序返回
;-------------------------调时闪烁程序----------------------;
INTT1: PUSH ACC
PUSH PSW
MOV TL1,#0B0H
MOV TH1,#3CH
DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)
MOV R2,#06H ;重装0.3秒定时用初值
CPL 02H ;0.3秒定时到对闪烁标志取反
JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"
MOV A,R5
CJNE A,#01H,NL
JMP NNN1
NL:CJNE A,#02H,NL1
LJMP NNN1
NL1:CJNE A,#03H,NL2
LJMP NLL
NL2:CJNE A,#04H,INTT1OUT
LJMP NLL
NLL:MOV 72H,76H
MOV 73H,77H
MOV 74H,78H
MOV 75H,79H
AJMP INTT1OUT
NNN1:MOV 72H,7BH
MOV 73H,7CH
MOV 74H,7DH
MOV 75H,7EH
INTT1OUT:POP PSW ;恢复现场
POP ACC
RETI ;中断退出
FLASH1:MOV A,R5
CJNE A,#01H,ML
LJMP MNN1
ML:CJNE A,#02H,ML1
LJMP MNN2
ML1:CJNE A,#03H,MN
LJMP MLL
MN:CJNE A,#04H,INTT1OUT
LJMP MHL
MLL:MOV 72H,7AH
MOV 73H,7AH ;显示单元(72-73H),将不显示分数据
MOV 74H,78H
MOV 75H,79H
AJMP INTT1OUT
MHL:MOV 72H,76H
MOV 73H,77H
MOV 74H,7AH ;显示单元(74-75H),小时数据将不显示
MOV 75H,7AH
AJMP INTT1OUT
MNN1:MOV 72H,7AH
MOV 73H,7AH ;显示单元(72-73H),将不显示闹钟分数据
MOV 74H,7DH
MOV 75H,7EH
AJMP INTT1OUT
MNN2:MOV 72H,7BH
MOV 73H,7CH
MOV 74H,7AH
MOV 75H,7AH ;显示单元(74-75H),闹钟小时数据将不显示
AJMP INTT1OUT
;-------------------------显示-------------------------------;
DISPLAY:MOV DPTR,#DISDATA
MOV A,70H
MOVC A,@A+DPTR
MOV P3,A
CLR P1.0
NOP
NOP
NOP
SETB P1.0
MOV A,71H
MOVC A,@A+DPTR
MOV P3,A
CLR P1.1
NOP
NOP
NOP
SETB P1.1
MOV A,72H
MOVC A,@A+DPTR
MOV P3,A
CLR P1.2
NOP
NOP
NOP
SETB P1.2
MOV A,73H
MOVC A,@A+DPTR
MOV P3,A
CLR P1.3
NOP
NOP
NOP
SETB P1.3
MOV A,74H
MOVC A,@A+DPTR
MOV P3,A
CLR P1.4
NOP
NOP
NOP
SETB P1.4
MOV A,75H
MOVC A,@A+DPTR
MOV P3,A
CLR P1.5
NOP
NOP
NOP
SETB P1.5
RET
BEEP:MOV A,68H ;查询标志
CJNE A,#1,BEERE
MOV A,78H ;查询闹钟时个位
CJNE A,7DH,BEERE
MOV A,79H ;查询闹钟时十位
CJNE A,7EH,BEERE
MOV A,76H ;查询闹钟分个位
CJNE A,7BH,BEERE
MOV A,77H ;查询闹钟分十位
CJNE A,7CH,BEERE
BB:CLR P1.6
LCALL DDL
SETB P1.6
LCALL DDL
JNB P1.7,BEERR
BEERE:RET
BEERR:SETB P1.6
MOV 68H,#0
LCALL DISPLAY
JNB P1.7,BEERR
JMP BEERE
DISDATA:DB 0C0H,0F9H,64H,70H,59H,52H,42H,0F8H,40H,50H,0FFH ;0123456789空白
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -