📄 keyboard.asm
字号:
; 上拉电阻, P1.2-P1.5
;
; _ vcc +5
; ___________________|
; | | | |
; _ _ _ _
; | | | | | | | |
; |_| |_| |_| |_|
; | | | | ______
; ---|---|---|---|----Y3| |A___P1.0
; ---|---|---|---|----Y2| 2-4 |
; ---|---|---|---|----Y1| 译码 |B___P1.1
; ---|---|---|---|----Y0|______|
; | | | |
; P1.2 P1.3 P1.4 P1.5
?PR?KEYSCAN SEGMENT CODE
PUBLIC KEYSCAN
;RSEG ?PR? KEYSCAN
BIN EQU P1
KEY EQU 30H ;存键值
LINE EQU 31H
;ORG 0000H
;MAIN: LCALL KEYSCAN
; AJMP MAIN
KEYSCAN:
L1: MOV LINE,#01H
ORL BIN,#3FH
ACALL TRANS
JZ L2
MOV KEY,A
NOP
NOP
LCALL DELAY_10ms
ACALL TRANS
XRL A,KEY
JZ K1
L2: MOV LINE,#05H
ORL BIN,#3EH
ACALL TRANS
JZ L3
MOV KEY,A
NOP
NOP
LCALL DELAY_10ms
ACALL TRANS
XRL A,KEY
JZ K1
L3: MOV LINE,#09H
ORL BIN,#3DH
ACALL TRANS
JZ L4
MOV KEY,A
NOP
NOP
LCALL DELAY_10ms
ACALL TRANS
XRL A,KEY
JZ K1
L4: MOV LINE,#0DH
ORL BIN,#3CH
ACALL TRANS
JZ STOPSCAN
MOV KEY,A
NOP
NOP
LCALL DELAY_10ms
ACALL TRANS
XRL A,KEY
JZ K1
STOPSCAN: MOV LINE,#00H
AJMP KEYSCAN_STOP
K1: ACALL TRANS
JNZ K1 ;松开?-,否则等待|
MOV A,KEY
RR A
RR A
JNB ACC.0,K2 ;为0跳
MOV KEY,#00H
AJMP TRANS_1
K2: JNB ACC.1,K3
MOV KEY,#01H
AJMP TRANS_1
K3: JNB ACC.2,K4
MOV KEY,#02H
AJMP TRANS_1
K4: JNB ACC.3,K5
MOV KEY,#03H
AJMP TRANS_1
K5: MOV KEY,#00H
AJMP KEYSCAN_STOP
TRANS_1: MOV A,KEY
ADD A,LINE
MOV KEY,A
KEYSCAN_STOP:
ORL BIN,#3FH
RET
;提取键值
TRANS: MOV A,BIN
ORL A,#0C3H
CPL A ;取反
RET
;10ms delay
DELAY_10ms: MOV R1,#0DH
LOOP_IN_10ms: MOV R2,#0FFH
DJNZ R2,$
DJNZ R1,LOOP_IN_10ms
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -