按键连发怎么搞?下面的程序是按键轮流亮灯,按一下亮一个灯,长按一秒以上连续轮流亮怎么做?
ID EQU 30H
K1 BIT P3.3
K2 BIT P3.4
L1 BIT P2.0
L2 BIT P2.1
L3 BIT P2.2
L4 BIT P2.3
L5 BIT P2.4
L6 BIT P2.5
L7 BIT P2.6
ORG 00H
START: MOV ID,#00H
KK1: JB K1,KK2
LCALL DELAY20MS ;10MS:可靠性低
JB K1,KK2
INC ID
MOV A,ID
CJNE A,#07,REL
MOV ID,#-1H
KK2: JB K2,REL
LCALL DELAY20MS ;10MS:可靠性低
JB K2,REL
DEC ID
MOV A,ID
CJNE A,#-1,REL
MOV ID,#06H ;07H:ERR
;RET:err
REL: JNB K1,$
JNB K2,$
LCALL DELAY20MS ;***
;JB K1,ZJ ;***
;JB K2,REL ;***
MOV A,ID
CJNE A,#00H,IS0
ORL P2,#01111111B ;***
CLR L1 ;***
LJMP KK1 ;START:ERR
IS0: CJNE A,#01H,IS1
ORL P2,#01111111B ;***
CLR L2 ;***
LJMP KK1 ;START:ERR
IS1: CJNE A,#02H,IS2
ORL P2,#01111111B ;***
CLR L3 ;***
LJMP KK1 ;START:ERR
IS2: CJNE A,#03H,IS3
ORL P2,#01111111B ;***
CLR L4 ;***
LJMP KK1 ;START:ERR
IS3: CJNE A,#04H,IS4
ORL P2,#01111111B ;***
CLR L5 ;***
LJMP KK1 ;START:ERR
IS4: CJNE A,#05H,IS5
ORL P2,#01111111B ;***
CLR L6 ;***
LJMP KK1 ;START:ERR
IS5: CJNE A,#06H,IS6
ORL P2,#01111111B ;***
CLR L7 ;***
LJMP KK1 ;START:ERR
IS6: LJMP START
;DELAY10MS: MOV R6,#20
DELAY20MS: MOV R6,#40
LOOP1: MOV R7,#248
DJNZ R7,$
DJNZ R6,LOOP1
RET
;DELAY: MOV R5,#20
;LOOP2: LCALL DELAY10MS
; DJNZ R5,LOOP2
; RET
END
发表时间:2006年12月29日20:51:51