MOV H,#00H
MOV 53H,#00H
MOV 52H,#00H
MOV 51H,#00H
START: MOV R0,#H ;初始化寄存器
MOV R2,#00H
SCAN: MOV P2,#11000111B ;扫描有无键按下
MOV A,P2
ORL A,#11000000B
CJNE A,#11000111B,NEXT
SJMP DISP
NEXT: ACALL DELAY20ms ;延时20ms去抖动
MOV P2,#0DFH ;扫描第一行
MOV A,P2
ORL A,#0F8H
SETB C
LOOP: RRC A
INC R2
JNC LOP
CJNE R2,#04H,LOOP
MOV R2,#00H
MOV P2,#0EFH MOV A,P2
ORL A,#0F8H
LOOP1: RRC A
INC R2
;扫描第二行
JNC LOP1
CJNE R2,#04H,LOOP1
MOV R2,#00H
MOV P2,#0F7H MOV A,P2
ORL A,#0F8H
LOOP2: RRC A
INC R2
JNC LOOP3
CJNE R2,#04H,LOOP2
SJMP DISP
LOP: MOV A,R2 ADD A,#06H
;扫描第三行
;键值处理
MOV R2,A
SJMP LOOP3
LOP1: MOV A,R2
ADD A,#03H
MOV R2,A
LOOP3: MOV H,53H MOV 53H,52H
MOV 52H,51H
MOV 51H,R2
KEY: MOV P2,#11000111B MOV A,P2
ORL A,#11000000B
CJNE A,#11000111B,KEY
;左移动待显示键值
;判断按键是否施放
DISP: MOV A,@R0 ;刷新显示第一位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
MOV P3,#0EFH
ACALL DELAY5ms
DEC R0
MOV A,@R0 MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
;刷新显示第二位
MOV P3,#0BFH
ACALL DELAY5ms
DEC R0
MOV A,@R0 MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
MOV P3,#0DFH
ACALL DELAY5ms
DEC R0
MOV A,@R0 MOV DPTR,#TAB
MOVC A,@A+DPTR
;刷新显示第三位
;刷新显示第四位
MOV P1,A
MOV P3,#7FH
ACALL DELAY5ms
LJMP START
DELAY20ms:
MOV R6,#0C8H
LOOP6: MOV R7,#60H
NOP
LOOP7: DJNZ R7,LOOP7
DJNZ R6,LOOP6
RET
DELAY5ms:
MOV R3,#H
LOOP8: MOV R4,#17H
NOP
LOOP9: DJNZ R4,LOOP9
DJNZ R3,LOOP8
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务