发表于:2006/6/1 15:20:00
#0楼
有哪位指点一二:
硬件连接:(4X4的键盘:行接P1.7~P1.4;列接P1.3~P1.0)(如图)
程序:(简化后的)
ORG 0000H
LJMP MAIN
ORG 0003H
RETI
ORG 000BH
RETI
ORG 0013H
LJMP SSSS
ORG 001BH
RETI
ORG 0100H
MAIN:
CLR RS0
CLR RS1
MOV P1,#0FH
MOV SP,#5FH
CLR IT1 ;
SETB EX1 ;
SETB EA ;
HERE:JMP HERE
SSSS: ;——————————————键盘中断——————————————
PUSH ACC
PUSH PSW
CLR EA ;终止外1中断
SETB RS0
CLR RS1
LCALL DALAY10 ;抖动
MOV A,P1 ;
ANL A,#0FH ;屏蔽高四位
XRL A,#0FH ;
JZ EXIT ;延时后,P1.3~P1.0为高,按入无效
MOV R2,#01111111B ;扫描码
LOOP:
MOV P1,R2
MOV A,P1
MOV P2,A
NOLOOP:
WAIT:
MOV P1,#0FH
MOV A,P1
ANL A,#0FH
XRL A,#0FH
JNZ WAIT
LCALL DALAY10
SJMP RETURN
EXIT:
RETURN:
CLR IE1
SETB EA
POP PSW
POP ACC
RETI
DALAY10: ;延时10毫秒
SETB RS0
SETB RS1
MOV R6,#13H
LLOP:
MOV R7,#0F9H
LLOP1:
DJNZ R7,LLOP1
DJNZ R6,LLOP
SETB RS0
CLR RS1
RET
END
当按下第二行第一列的按键时:
检测 P2 为11001110B。如果扫描码是11101111B时,此时的P2口不是应该为1110111B的吗?(按下不同的键,P2都会有规律的变化)
请问有什么原因会造成这种后果???
硬件连接:(4X4的键盘:行接P1.7~P1.4;列接P1.3~P1.0)(如图)
程序:(简化后的)
ORG 0000H
LJMP MAIN
ORG 0003H
RETI
ORG 000BH
RETI
ORG 0013H
LJMP SSSS
ORG 001BH
RETI
ORG 0100H
MAIN:
CLR RS0
CLR RS1
MOV P1,#0FH
MOV SP,#5FH
CLR IT1 ;
SETB EX1 ;
SETB EA ;
HERE:JMP HERE
SSSS: ;——————————————键盘中断——————————————
PUSH ACC
PUSH PSW
CLR EA ;终止外1中断
SETB RS0
CLR RS1
LCALL DALAY10 ;抖动
MOV A,P1 ;
ANL A,#0FH ;屏蔽高四位
XRL A,#0FH ;
JZ EXIT ;延时后,P1.3~P1.0为高,按入无效
MOV R2,#01111111B ;扫描码
LOOP:
MOV P1,R2
MOV A,P1
MOV P2,A
NOLOOP:
WAIT:
MOV P1,#0FH
MOV A,P1
ANL A,#0FH
XRL A,#0FH
JNZ WAIT
LCALL DALAY10
SJMP RETURN
EXIT:
RETURN:
CLR IE1
SETB EA
POP PSW
POP ACC
RETI
DALAY10: ;延时10毫秒
SETB RS0
SETB RS1
MOV R6,#13H
LLOP:
MOV R7,#0F9H
LLOP1:
DJNZ R7,LLOP1
DJNZ R6,LLOP
SETB RS0
CLR RS1
RET
END
当按下第二行第一列的按键时:
检测 P2 为11001110B。如果扫描码是11101111B时,此时的P2口不是应该为1110111B的吗?(按下不同的键,P2都会有规律的变化)
请问有什么原因会造成这种后果???
[此贴子已经被作者于2006-6-1 15:24:33编辑过]