该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
ORG 0000H
LJMP START
ORG 00100H
DBUF EQU 30H
TEMP EQU 40H
DIN BIT P3.0
CLK BIT P3.1
START: MOV A,#16H
MAIN: ACALL DISP
MOV 30H, A
ACALL KEY1
AJMP MAIN
KEY1: MOV P1,#0F0H;对输入应锁存写
1
MOV A,P1
CJNE A,#0F0H, K11 有键按下
K10: AJMP KEY1 无键按下
K11: ACALL DELAY 延时去抖动
MOV P1,#0F0H
MOV A,P1 再读取键盘状况
CJNE A,#0F0H, K12 确有键按下
SJMP K10 误动作
K12: MOV B,A 存列值
MOV P1,#0FEH 检测第一列
MOV A,P1
CJNE A,#0FEH,K13
MOV P1,#0FDH 检测第二列
MOV A,P1
CJNE A,#0FDH,K13
MOV P1,#0FBH 检测第三列
MOV A,P1
CJNE A,#0FBH,K13
MOV P1,#0F7H 检测第四列 MOV A,P1
CJNE A,#0F7H, K13
AJMP K10 多键同时按下
K13: ANL A,#0FH 得行值
ORL A,B 得按下的行列值
MOV B,A 暂存键值
MOV R1,#16 16
个键
MOV R2,#0 键码初值
MOV DPTR,#K1TAB 键码表首址
K14: MOV A,R2
MOVC A,@A+DPTR 从键值表取键值
CJNE A,B, K16 与按下键的键比较
MOV P1,#0F0H
K15: MOV A,P1
CJNE A,#0F0H, K15
ACALL DELAY 延时去抖动
MOV A,R2 得键码
RET
K16: INC R2
DJNZ R1,K14
AJMP K10
K1TAB: DB 0EEH,0EDH,0EBH,0E7H
DB 0DEH,0DDH,0DBH,0D7H
DB 0BEH,0BDH,0BBH,0B7H
DB 07EH,07DH,07BH,077H
DISP: MOV DBUF,#0CH
MOV DBUF+1,#5
MOV DBUF+2,#1
MOV DBUF+3,#16
MOV DBUF+4,A
MOV R0,#DBUF
MOV R1,#TEMP
MOV R2,#8
DP10:MOV DPTR,#SEGTAB
MOV A,@R0
MOVC A,@A+DPTR
MOV @R1,A
INC R0
INC R1
DJNZ R2,DP10
MOV R0,#TEMP
MOV R1,#5
DP12:MOV R2,#8
MOV A,@R0
DP13:RLC A
MOV DIN,C
CLR CLK
SETB CLK
DJNZ R2,DP13
INC R0
DJNZ R1,DP12
RET
SEGTAB:DB 3FH,06H,5BH,4FH,66H,6DH
DB 7DH,07H,7FH,6FH,77H,7CH
DB 58H,5EH,79H,71H,00H,40H
DELAY: MOV R4,#02H
AA1: MOV R5,#0F8H
AA: NOP
NOP
DJNZ R5,AA
DJNZ R4,AA1
RET
END
汇编找到了