键盘程序请教?
现在要在P1口接一八位拔动开关,要求相应位拔则延时在原(10秒)的基础上增加或减少延时时间,P1。0——P1。3拔上则为增加时间,P1。4——P1。7拔上为减少时间,思路为有拔上则相应位放一个十进制数1,然后高四和低四比较,是增加的多还是减少的多,再和10比较,最后结果放R5,子程序是一个1秒的延时程序,延时是看R5里是多少,决定循环多少次。自己编的程序如下,但有很多错,小弟也是第一次学,请高手指教,谢谢
KEY: MOV P1, #0FFH ;置输入状态
MOV A, P1 ;读
CPL A ;取反
ANL A, #0FH ;屏蔽高四位
JZ KL
LCALL DELAY ;调用延时去抖动
JB P1.0, KEY0 ;有键按下则执行相应命令
K1: JB P1.1, KEY1
K2: JB P1.2, KEY2
K3: JB P1.3, KEY3
AJMP KL
KEY0:MOV 30H, #01 ;有键按下相应位加1
AJMP K1
KEY1:MOV 31H, #01
AJMP K2
KEY2:MOV 32H, #01
AJMP K3
KEY3:MOV 33H, #01
MOV A, #00H
MOV A, #30H
ADD A, #31H
ADD A, #32H
ADD A, #33H
MOV R4, A ;加数放R4
AJMP KL
KL: MOV A, P1
CPL A
SWAP A ;高低四位交换
ANL A, #0FH ;屏蔽高四位
JZ GOJMP
LCALL DELAY ;调用延时去抖动
JB P1.4, KEY4 ;有键按下则转相应命令
K5: JB P1.5, KEY5
K6: JB P1.6, KEY6
K7: JB P1.7, KEY7
KEY4:MOV 34H, #01
AJMP K5
KEY5:MOV 35H, #01
AJMP K6
KEY6:MOV 36H, #01
AJMP K7
KEY7:MOV 37H, #01
MOV A, #00H
MOV A, 34H
ADD A, 35H
ADD A, 36H
ADD A, 37H ;减数放A
CLR C ;清C(比较)
SUBB A,R4 ;A-R4
JC JIA ;A <0则跳JIA
MOV 21H, A ;交换
MOV A, #10
SUBB A, 21H
AJMP JG
JIA: MOV 20H, A
MOV A, R4
MOV R4, 20H
SUBB A, R4
JG: MOV R5, A ;结果放R5
GOJMP:AJMP KEY
DELAY: MOV R7,#200 ;10ms延时子程序
D1: MOV R6,#123
NOP
D2: DJNZ R6,D2
DJNZ R7,d1
RET
END
请高手帮我,98dian@163.com
QQ:107437596
谢谢!!!
发表时间:2003年4月25日22:26:15