📄 51led8x8.src
字号:
A8255 EQU 7CFFH
B8255 EQU 7DFFH
C8255 EQU 7EFFH
D8255 EQU 7FFFH
TIMER0 EQU 30H
TIMER1 EQU 31H
ORG 0000H
LJMP START
ORG 0003H
LJMP INTERRUPT_0
ORG 0013H
LJMP INTERRUPT_1
ORG 0030H
START:
MOV SP,#60H
MOV IE,#10000101B;中断致能,EA=EX1=EX0=1
MOV IP,#00000100B;设定外部中断0 为低优先权,设定外部中断1 为高优先权
SETB IT0;设定外部中断0 为负缘触发
SETB IT1;设定外部中断1 为负缘触发
LCALL DELAY1S
MAIN:
MOV DPTR,#D8255;8255控制口
MOV A,#80H;A、B、C都为输出方式0
MOVX @DPTR,A
MOV A,#55H
LOOP:
MOV R7,#00H
MOV R6,#00H
LOOPB1:
MOV A,#0FFH
MOV DPTR,#C8255
MOVX @DPTR,A
MOV DPTR,#A8255
MOVX @DPTR,A
MOV DPTR,#TAB_PB
MOV A,R6
MOVC A,@A+DPTR
MOV DPTR,#B8255
MOVX @DPTR,A
LCALL DELAY50
INC R6
CJNE R6,#08H,LOOPB1
LOOPC1:
MOV A,#0FFH
MOV DPTR,#B8255
MOVX @DPTR,A
MOV DPTR,#A8255
MOVX @DPTR,A
MOV DPTR,#TAB_PC
MOV A,R7
MOVC A,@A+DPTR
MOV DPTR,#C8255
MOVX @DPTR,A
LCALL DELAY50
INC R7
CJNE R7,#08H,LOOPC1
LOOPC2:
MOV A,#0FFH
MOV DPTR,#A8255
MOVX @DPTR,A
MOV DPTR,#TAB_PC
MOV A,R7
DEC A
MOVC A,@A+DPTR
MOV DPTR,#C8255
MOVX @DPTR,A
LCALL DELAY50
DEC R7
CJNE R7,#00H,LOOPC2
MOV R6,#07H
LOOPB2:
MOV A,#0FFH
MOV DPTR,#C8255
MOVX @DPTR,A
MOV DPTR,#A8255
MOVX @DPTR,A
MOV DPTR,#TAB_PB
MOV A,R6
DEC A
MOVC A,@A+DPTR
MOV DPTR,#B8255
MOVX @DPTR,A
LCALL DELAY50
DEC R6
CJNE R6,#00H,LOOPB2
SJMP LOOP
;DELAY 1s
DELAY1S:
MOV TIMER1,#250
DELAY1:
MOV TIMER0,#250
DJNZ TIMER0,$
DJNZ TIMER1,DELAY1
RET
;延时 50ms
DELAY50:
MOV TIMER1,#120
DELAY101:
MOV TIMER0,#100;2'
DJNZ TIMER0,$;2'
DJNZ TIMER1,DELAY101;2'
RET
;======================================================
;中断服务程序0
INTERRUPT_0:
;PUSH 06H
;PUSH 07H
PUSH ACC
MOV R5,#05H
MOV DPTR,#D8255;8255控制口
MOV A,#80H;A、B、C都为输出方式0
MOVX @DPTR,A
INT0_LOOP:
MOV R3,#0
MOV R4,#0
INT0_LOOPB1:
MOV A,#0FFH
MOV DPTR,#C8255
MOVX @DPTR,A
MOV DPTR,#A8255
MOVX @DPTR,A
MOV DPTR,#TAB_PB_INT0
MOV A,R3
MOVC A,@A+DPTR
MOV DPTR,#B8255
MOVX @DPTR,A
LCALL DELAY50
LCALL DELAY50
LCALL DELAY50
LCALL DELAY50
INC R3
CJNE R3,#02H,INT0_LOOPB1
INT0_LOOPC1:
MOV A,#0FFH
MOV DPTR,#B8255
MOVX @DPTR,A
MOV DPTR,#A8255
MOVX @DPTR,A
MOV DPTR,#TAB_PC_INT0
MOV A,R4
MOVC A,@A+DPTR
MOV DPTR,#C8255
MOVX @DPTR,A
LCALL DELAY50
LCALL DELAY50
LCALL DELAY50
LCALL DELAY50
INC R4
CJNE R4,#02H,INT0_LOOPC1
INT0_LOOPC2:
MOV A,#0FFH
MOV DPTR,#A8255
MOVX @DPTR,A
MOV DPTR,#TAB_PC_INT0
MOV A,R4
DEC A
MOVC A,@A+DPTR
MOV DPTR,#C8255
MOVX @DPTR,A
LCALL DELAY50
LCALL DELAY50
LCALL DELAY50
LCALL DELAY50
DEC R4
CJNE R4,#00H,INT0_LOOPC2
MOV R3,#02
INT0_LOOPB2:
MOV A,#0FFH
MOV DPTR,#C8255
MOVX @DPTR,A
MOV DPTR,#A8255
MOVX @DPTR,A
MOV DPTR,#TAB_PB_INT0
MOV A,R3
DEC A
MOVC A,@A+DPTR
MOV DPTR,#B8255
MOVX @DPTR,A
LCALL DELAY50
LCALL DELAY50
LCALL DELAY50
LCALL DELAY50
DEC R3
CJNE R3,#00H,INT0_LOOPB2
DEC R5
MOV A,R5
JZ INT0_END
LCALL INT0_LOOP
INT0_END:
POP ACC
;POP 07H
;POP 06H
RETI
;中断服务程序1
INTERRUPT_1:
;PUSH 06H
PUSH ACC
MOV R2,#00H
MOV DPTR,#D8255;8255控制口
MOV A,#80H;A、B、C都为输出方式0
MOVX @DPTR,A
INT1_LOOP:
MOV R1,#0
INT1_LOOPA1:
MOV A,#00H
MOV DPTR,#C8255
MOVX @DPTR,A
MOV DPTR,#B8255
MOVX @DPTR,A
MOV DPTR,#TAB_PA_INT1
MOV A,R1
MOVC A,@A+DPTR
MOV DPTR,#A8255
MOVX @DPTR,A
LCALL DELAY50
LCALL DELAY50
INC R1
CJNE R1,#08H,INT1_LOOPA1
INT1_LOOPA2:
MOV DPTR,#TAB_PA_INT1
MOV A,R1
DEC A
MOVC A,@A+DPTR
MOV DPTR,#A8255
MOVX @DPTR,A
LCALL DELAY50
LCALL DELAY50
DEC R1
CJNE R1,#00H,INT1_LOOPA2
INC R2
CJNE R2,#05H,INT1_LOOP
POP ACC
;POP 06H
RETI
TAB_PB:
DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH
TAB_PC:
DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH
TAB_PB_INT0:
DB 0F0H,0FH
TAB_PC_INT0:
DB 0F0H,0FH
TAB_PA_INT1:
DB 80H,40H,20H,10H,08H,04H,02H,01H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -