📄 final.asm
字号:
COUNT EQU 31H
ORG 0000H
AJMP MAIN
ORG 0003H
LJMP SETW
ORG 000BH
LJMP INTT0 ;计时中断
ORG 001BH
LJMP INTT1 ;闪烁中断
ORG 100H
MAIN:MOV SP,#70H
MOV 30H,#0AH
MOV 31H,#00H
MOV R2,#06H
MOV R0,#60H
MOV R7,#0DH
CLEARRAM:MOV @R0,#00H
INC R0
DJNZ R7,CLEARRAM
MOV 20H,#00H ;标志位
MOV IP,#2H
MOV TCON,#00000101B ;为边缘触发
MOV TMOD,#11H
MOV TH0,#4CH
MOV TL0,#00H ;50MS定时
MOV TH1,#4CH
MOV TL1,#00H
CLR 06H
SETB EA
SETB ET1
SETB EX0
SETB ET0
SETB TR0
MOV R4,#14H ;1S定时
START:LCALL DISPLAY
SJMP START
;;;;;;;;;;;;;;;;;;;;;;;;;
SETW:CLR EX0
PUSH ACC
PUSH PSW
CLR TR1
MOV TH1,#4CH
MOV TL1,#00H
SETB TR1
MOV 32H,#20
JB P1.7,SETN
LJMP INCW
SETN:;SETB TR1
INC COUNT
MOV A,COUNT
CJNE A,#6,JUDG
MOV COUNT,#00H
CLR 04H
CLR TR1
JMP OUTSETW
JUDG:CJNE A,#1,JUDG1
SETB 00H ;调整小时十位
JMP OUTSETW
JUDG1:CJNE A,#2,JUDG2
CLR 00H
SETB 01H
JMP OUTSETW
JUDG2:CJNE A,#3,JUDG3
CLR 01H
SETB 02H
JMP OUTSETW
JUDG3:CJNE A,#4,JUDG4
CLR 02H
SETB 03H
JMP OUTSETW
JUDG4:CJNE A,#5,OUTSETW
CLR 03H
SETB 04H
OUTSETW:SETB EX0
POP PSW
POP ACC
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INCW:MOV A,COUNT
JZ OUTINCW
INCW0:CJNE A,#1,INCW1
INC 65H
MOV A,65H
DA A
CJNE A,#3,OUTINCW
MOV 65H,#00H
JMP OUTINCW
INCW1:MOV A,COUNT
CJNE A,#2,INCW2
INC 64H
MOV A,65H
CJNE A,#02H,RRRR
MOV A,64H
CJNE A,#04H,OUTINCW
MOV 64H,#00H
JMP OUTINCW
RRRR:MOV A,64H
CJNE A,#0AH,OUTINCW
MOV 64H,#00H
JMP OUTINCW
INCW2:MOV A,COUNT
CJNE A,#3,INCW3
INC 63H
MOV A,63H
DA A
CJNE A,#6,OUTINCW
MOV 63H,#00H
JMP OUTINCW
INCW3:MOV A,COUNT
CJNE A,#4,INCW4
INC 62H
MOV A,62H
DA A
CJNE A,#10H,OUTINCW
MOV 62H,#00H
JMP OUTINCW
INCW4:MOV A,COUNT
CJNE A,#5,INCW2
INC 61H
MOV A,61H
DA A
CJNE A,#6,OUTINCW
MOV 61H,#00H
OUTINCW:JMP OUTSETW
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T0中断服务程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTT0:PUSH ACC
PUSH PSW
CLR ET0
CLR TR0
MOV A,#00H
ADD A,TL0
MOV TL0,A
MOV A,#4CH
ADDC A,TH0
MOV TH0,A
SETB TR0
DJNZ R4,OUTT00
MOV R4,#14H
MOV R0,#61H ;秒加一
ACALL ADD1 ;加1操作
MOV A,R3
CLR C
CJNE A,#60H,ADDSS
ADDSS:JC OUTT0
ACALL CLR0
MOV R0,#63H ;分加一
LCALL ADD1
MOV A,R3
CLR C
CJNE A,#60H,ADDMG
ADDMG:JC OUTT0
ACALL CLR0
MOV R0,#65H
LCALL ADD1 ;小时加一
MOV A,R3
CLR C
CJNE A,#24H,CLRH
CLRH: JC OUTT0
ACALL CLR0
OUTT0:MOV 66H,60H;将数据放到对应的显示单元
MOV 67H,61H
MOV 68H,62H
MOV 69H,63H
MOV 6AH,64H
MOV 6BH,65H
OUTT00:POP PSW
POP ACC
SETB ET0
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;
;ADD1加一子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;
ADD1:MOV A,@R0
SWAP A
DEC R0
ORL A,@R0
ADD A,#01H
DA A
MOV R3,A
ANL A,#0FH
MOV @R0,A
MOV A,R3
INC R0
SWAP A
ANL A,#0FH
MOV @R0,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;
;清零程序
;;;;;;;;;;;;;;;;;;;;;;;;;;
CLR0: CLR A
MOV @R0,A
DEC R0
MOV @R0,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;
;ADD2
;;;;;;;;;;;;;;;;;;;;;;;;;;
ADD2: MOV A,@R0 ;指向当前单元
ADD A,#01H ;加一操作
DA A ;十进制转换
ANL A,#0FH
MOV R3,A
MOV @R0,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;CLR1
;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLR1:CLR A
MOV @R0,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;闪烁功能程序即T1中断程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTT1:CLR TR1
PUSH ACC
PUSH PSW
MOV TL1,#00H
MOV TH1,#4CH
SETB TR1
DJNZ R2,OUTT1
CLR ET1
MOV R2,#0AH ;重置初值
DJNZ 32H,NETR
CLR TR1
CLR 00H
CLR 01H
CLR 02H
CLR 03H
CLR 04H
CLR 06H
NETR:CPL 06H ;每0.5秒换一种状态
JNB 06H,FLASH
MOV 67H,61H
MOV 68H,62H ;正常显示
MOV 69H,63H ;将数据放到对应的显示单元
MOV 6AH,64H
MOV 6BH,65H
OUTT1:SETB ET1
POP PSW
POP ACC
RETI
FLASH:JNB 04H,FLASH1
MOV 67H,30H
MOV 68H,62H
MOV 69H,63H
MOV 6AH,64H
MOV 6BH,65H
LJMP OUTT1
FLASH1:JNB 03H,FLASH2
MOV 68H,30H
MOV 69H,63H
MOV 6AH,64H
MOV 6BH,65H
LJMP OUTT1
FLASH2:JNB 02H,FLASH3
MOV 68H,62H
MOV 69H,30H
MOV 6AH,64H
MOV 6BH,65H
LJMP OUTT1
FLASH3:JNB 01H,FLASH4
MOV 68H,62H
MOV 69H,63H
MOV 6AH,30H
MOV 6BH,65H
LJMP OUTT1
FLASH4:JNB 00H,FLASH5
MOV 68H,62H
MOV 69H,63H
MOV 6AH,64H
MOV 6BH,30H
FLASH5:LJMP OUTT1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;显示程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISPLAY:MOV R1,#66H
MOV P3,#10000100b
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
LCALL DL1MS
MOV R1,#67H
MOV P3,#00100100b
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
LCALL DL1MS
MOV R1,#68H
MOV P3,#00010100b
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
LCALL DL1MS
MOV R1,#69H
MOV P3,#00001100b
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
LCALL DL1MS
MOV R1,#6AH
MOV P3,#00000110b
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
LCALL DL1MS
MOV R1,#6BH
MOV P3,#00000101b
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
LCALL DL1MS
;MOV P1,#0FFH
RET
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
;;;;;;;;;;;;;;;;;;;;;;;;;
;DL1MS延时
;;;;;;;;;;;;;;;;;;;;;;;;;
DL1MS:MOV R6,#14H
DL1:MOV R5,#19H
DL2:DJNZ R5,DL2
DJNZ R6,DL1
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -