📄 9-0 查询式键盘.asm
字号:
DBUF DATA 030H
BIT_COUNT DATA 040H
TIMER DATA 041H
TIMER1 DATA 042H
DATA_IN DATA 020H
DATA_OUT DATA 021H
CLK BIT P1.6
DAT BIT P1.7
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
MOV DBUF,#0FH
Loop: CALL DISPLAY
CALL KEY
MOV DBUF,A
AJMP Loop
KEY: MOV P1,#0FFH
MOV A,P1
CJNE A, #0FFH, K00
AJMP KEY
K00: ACALL SHORT_DELAY
MOV A,P1
CJNE A,#0FFH,K01
AJMP KEY
K01: MOV R3,#8
MOV R2,#0
MOV B,A
MOV DPTR,#K0TAB
K02: MOV A,R2
MOVC A,@A+DPTR
CJNE A,B,K04
K03: MOV A,P1
CJNE A,#0FFH,K03
ACALL SHORT_DELAY
MOV A,R2
RET
K04: INC R2
DJNZ R3,K02
MOV A,#0FFH
LJMP LOOP
K0TAB: DB 0FEH,0FDH,0FBH,0F7H
DB 0EFH,0DFH,0BFH,07FH
DISPLAY:
ANL P2,#00H
MOV DATA_OUT,#10100100B
CALL SEND
MOV R0,#10000000B
MOV DATA_OUT,R0
CALL SEND
MOV DATA_OUT,DBUF
CALL SEND
RET
SEND: MOV BIT_COUNT,#8
ANL P2,#00H
CALL LONG_DELAY
SEND_LOOP:MOV C,DATA_OUT.7
MOV DAT,C
SETB CLK
MOV A,DATA_OUT
RL A
MOV DATA_OUT,A
CALL SHORT_DELAY
CLR CLK
CALL SHORT_DELAY
DJNZ BIT_COUNT,SEND_LOOP
CLR DAT
RET
LONG_DELAY: MOV TIMER,#250
DELAY_LOOP: DJNZ TIMER,DELAY_LOOP
RET
SHORT_DELAY: MOV TIMER,#100
SHORT_LP: DJNZ TIMER,SHORT_LP
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -