📄 键盘+静态显示.asm
字号:
KEY_ROW EQU 04H
KEY_ARRAY EQU 04H;键盘规模为4×4
KEY_VALUE EQU 60H;定义键值将存放在60H单元
KEY_IO EQU 90H;定义P1口为键盘的输入输出口线
INT1IN BIT P3.2
ORG 0000H ;主程序入口
LJMP MAIN
ORG 0003H ;外部中断0入口
LJMP INTO
;主程序
ORG 0030H
MAIN: MOV SP,#30H ;堆栈指针指向位空间以后RAM空间
LCALL INITIAL
SJMP $
;初始化子程序
INITIAL:MOV PSW ,#00H ;通用寄存器可以不定义,硬件复位自动指向第0组
MOV KEY_IO ,#0FH ;定义键盘口线
MOV SCON ,#00H ;初始化串行口方式0
SETB IT0 ;定义外部中断0下降沿触发方式
SETB EX0 ;开启外部中断0
SETB EA ;开启总中断,EA是中断允许总控制位
RET
;键盘扫描中断服务程序,读键值
INTO: CLR EA ;关中断
PUSH ACC
PUSH PSW
MOV PSW ,#18H
MOV R1 ,#KEY_ROW ;4
MOV R2 ,#KEY_ARRAY;4
MOV R3 ,#00H
MOV R4 ,#7FH
ARRAY_MOVE:MOV KEY_IO ,R4
MOV R5, #01H
MOV A ,KEY_IO
RIGHT_MOVE:RRC A
JC ROW_MOVE
LCALL DELAYFUNC
MOV A ,KEY_IO
LET:RRC A
DJNZ R5,LET
JC ROW_MOVE
MOV KEY_VALUE,R3
ACALL DISPLAY
SJMP RETURN
ROW_MOVE:INC R3
INC R5
DJNZ R1 ,RIGHT_MOVE
MOV R1 ,#KEY_ROW
MOV A ,R4
RR A
MOV R4 ,A
DJNZ R2 ,ARRAY_MOVE
RETURN:POP PSW
POP ACC
MOV KEY_IO,#0FH
SETB EA
RETI
;1位LED显示子程序
DISPLAY:MOV A,KEY_VALUE
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV SBUF,A;送串行口显示
RET
DELAYFUNC:PUSH PSW
MOV PSW,#10H
MOV R6,#5
DEL3:MOV R7,#250
DEL4:DJNZ R7,DEL4
DJNZ R6,DEL3
POP PSW
RET
TAB: DB 3FH ,06H, 5BH, 4FH
DB 66H, 6DH ,7DH ,07H
DB 7FH ,6FH, 77H, 7CH
DB 39H ,5EH ,79H ,71H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -