📄 led.asm
字号:
BIT_COUNT DATA 07FH
TIMER DATA 07EH
TIMER1 DATA 07DH
TEMP DATA 07CH
DATA_IN DATA 021H
DATA_OUT DATA 020H
CLK BIT P3.5
DAT BIT P3.4
ORG 000H
JMP START
ORG 0013H
LJMP INT1
ORG 100H
START: MOV SP,#2FH ;设置堆栈
MOV IP,#01H
SETB IT0
MOV IE,#07H
MOV TIMER,#50H
DELAY: MOV TIMER1,#255 ;延时已确保7281完成复位
DELAY1: DJNZ TIMER1,DELAY1
DJNZ TIMER,DELAY
MOV DATA_OUT,#12H
CALL SEND ;8271初始化
MOV DATA_OUT,#80H
CALL SEND ;设置为164模式,不反相
MOV DATA_OUT,#16H ;全亮
CALL SEND
MOV DATA_OUT,#40H
CALL SEND
; MOV DATA_OUT,#10H ;闪烁
; CALL SEND
; MOV DATA_OUT,#00H
; CALL SEND
; MOV DATA_OUT,#11H ;闪烁速度
; CALL SEND
; MOV DATA_OUT,#15H
; CALL SEND
LCALL DELAY3
MOV DATA_OUT,#16H ;全灭
CALL SEND
MOV DATA_OUT,#00H
CALL SEND
MOV DATA_OUT,#12H
CALL SEND ;8271初始化
MOV DATA_OUT,#80H
CALL SEND ;设置为164模式,不反相
MOV DATA_OUT,#10H ;关闪烁
CALL SEND
MOV DATA_OUT,#0FFH
CALL SEND
SETB EA
WAIT: NOP
NOP
AJMP WAIT
INT1: CLR EA
POP ACC
POP DPL
POP DPH
MOV DATA_OUT,#93H ;读键值
CALL SEND
CALL RECEIVE ;读出数据
MOV DATA_OUT,#15H ;HEX译码指令
CALL SEND
MOV TEMP, DATA_IN
ANL TEMP,#0F0H ;键值高4位在第一位显示
MOV A,TEMP
SWAP A
ORL A,#10H
MOV DATA_OUT,A
CALL SEND
MOV DATA_OUT,#15H ;HEX译码指令
CALL SEND
MOV A,DATA_IN
ANL A,#0FH ;取键值低4位
MOV DATA_OUT,A ;在0位显示
CALL SEND
POP DPH
POP DPL
POP ACC
SETB EA
RETI
SEND: CLR CLK
SETB CLK
WAIT1: JB DAT,SEND
CLR CLK
SETB CLK
WAIT2: JNB DAT,WAIT2
MOV BIT_COUNT,#08H
SENDLOOP:MOV C,DATA_OUT.7
MOV DAT,C
CLR CLK
SETB CLK
MOV A,DATA_OUT
RL A
MOV DATA_OUT,A
NOP
NOP
NOP
DJNZ BIT_COUNT,SENDLOOP
SETB DAT
NOP
NOP
NOP
NOP
RET
RECEIVE: CLR CLK
SETB CLK
WAIT3: JB DAT,WAIT3
CLR CLK
SETB CLK
MOV BIT_COUNT,#08H
REC_LOOP:NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOV A,DATA_IN
MOV C,DAT
RLC A
MOV DATA_IN,A
CLR CLK
SETB CLK
DJNZ BIT_COUNT,REC_LOOP
NOP
NOP
NOP
NOP
RET
DELAY3: MOV R1,#0AH
DEL11: MOV R2,#0FFH
DEL12: MOV R3,#0FFH
DEL13: DJNZ R3,DEL13 ; 1+[1+(1+2*255+ 2)*255+2]*10+2=1.2S
DJNZ R2,DEL12
DJNZ R1,DEL11
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -