标题:
这个汇编程序 为什么数码管只能显示0呢,键盘没有反应
[打印本页]
作者:
wadp
时间:
2020-4-15 11:02
标题:
这个汇编程序 为什么数码管只能显示0呢,键盘没有反应
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: ACALL KEYSCAN
MOV A,30H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
ACALL DELAY
SJMP MAIN
KEYSCAN: MOV P3,#0FH
MOV A,P3
ANL A,#0FH
MOV R3,A
MOV P3,#0F0H
MOV A,P3
ANL A,#0F0H
ORL A,R3
CJNE A,#0FFH,KEYPRO
RET
KEYPRO: MOV R3,A
MOV DPTR,#KEYVALUE
MOV R4,#0FFH
KEY1: INC R4
MOV A,R4
MOV DPTR,#KEYVALUE
MOVC A,@A+DPTR
MOV 20H,R3
CJNE A,20H,KEY1
MOV A,R4
MOV 30H,A
RET
DELAY:MOV R5,#40H
NEXT1:MOV R6,#80H
NEXT2:MOV R7,#90H
DJNZ R7,$
DJNZ R1,NEXT2
DJNZ R0,NEXT1
RET
KEYVALUE:DB 0E7H,0D7H,0B7H,77H,0EBH,0DBH,0BBH,7BH
DB 0EDH,0DDH,0BDH,7DH,0EEH,0DEH,0BEH,7EH
TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
END
作者:
carpcarey
时间:
2020-4-16 10:17
当按键抖动的时候,你得到的P3口的值并不是你KEYVALUE中的任何值,导致死循环在KEY1:和CJNE A,20H,KEY1之间不会退出。所以只能显示开始的0.
KEY1: INC R4
MOV A,R4
MOV DPTR,#KEYVALUE
MOVC A,@A+DPTR
MOV 20H,R3
CJNE A,20H,KEY2
MOV A,R4
MOV 30H,A
RET
KEY2:CJNE R4,#10H,KEY1 ;如果16个都不是 则返回
RET
另外,DELAY中的错误:DJNZ R1,NEXT2 应该为 DJNZ R6,NEXT2
DJNZ R0,NEXT1 应该为 DJNZ R5,NEXT1
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1