|
;四獨立按鍵控制四LED; ;四個獨立按鍵對應(yīng)四個獨立的LED. ;當某一按鍵按下時對應(yīng)的LED亮,當?shù)诙伟聪聲r滅。 ;四個LED只能有一個亮,初學(xué)者可以參考以下程式: ;當一直按下某一按鍵時對應(yīng)的LED會閃動。
;--------------------------------------------------------- K1 BIT P1.4 K2 BIT P1.5 K3 BIT P1.6 K4 BIT P1.7
FLAG0 BIT 20H.0 ;LED0標記 FLAG1 BIT 20H.1 ;LED1標記 FLAG2 BIT 20H.2 ;LDE2標記 FLAG3 BIT 20H.3 ;LED3標記
K_OLD EQU 30H K_NEW EQU 31H ;--------------------------------------------------------- ORG 0000H JMP MAIN ORG 0030H ;--------------------------------------------------------- MAIN: MOV SP,#60H MOV P1,#0FFH MOV P0,#0FFH MOV K_OLD,#00H MOV 20H,#0FFH MAIN1: CALL K_SCAN ;鍵掃描 MOV A,K_NEW CJNE A,K_OLD,MAIN2 JMP MAIN1 MAIN2: CALL DELAY ;延時示去抖動 CALL K_SCAN ;再判斷鍵是否按下 MOV A,K_NEW CJNE A,K_OLD,MAIN3 JMP MAIN1 MAIN3: JB ACC.0,LOOP1 ;K1按下 JB ACC.1,LOOP2 ;K2按下 JB ACC.2,LOOP3 ;K3按下 JB ACC.3,LOOP4 ;K4按下 JMP MAIN1 LOOP1:
JNB FLAG0,LOOP1A MOV P0,#0FEH MOV 20H,#0EH ;FLAG0=0 JMP MAIN1 LOOP1A: MOV P0,#0FFH MOV 20H,#0FH JMP MAIN1 LOOP2: JNB FLAG1,LOOP1A MOV P0,#0FDH MOV 20H,#0DH ;FLAG1=0 JMP MAIN1 LOOP2A: MOV P0,#0FFH MOV 20H,#0FH JMP MAIN1 LOOP3: JNB FLAG2,LOOP3A MOV P0,#0FBH MOV 20H,#0BH ;FLAG2=0 JMP MAIN1 LOOP3A: MOV P0,#0FFH MOV 20H,#0FH JMP MAIN1 LOOP4: JNB FLAG3,LOOP4A MOV P0,#0F7H ;FLAG3=0 MOV 20H,#07H JMP MAIN1 LOOP4A: MOV P0,#0FFH MOV 20H,#0FH JMP MAIN1
;--------------------------------------------------------- ; 鍵掃描子程序 ;--------------------------------------------------------- K_SCAN: MOV P1,#0FFH MOV K_NEW,#00H MOV A,#00H MOV C,K4 CPL C RLC A MOV C,K3 CPL C RLC A MOV C,K2 CPL C RLC A MOV C,K1 CPL C RLC A MOV K_NEW,A RET ;--------------------------------------------------------- ;延時子程序 ;--------------------------------------------------------- DELAY: MOV R6,#200 DEL: MOV R7,#0FFH DJNZ R7,$ DJNZ R6,DEL
RET ;---------------------------------------------------------
;可以將 K_SCAN 子程序更改為: ;K_SCAN: ; MOV P1,#0FFH ; MOV K_NEW,#00H ; MOV A,P1 ; CPL A ; ANL A,#0F0H ; SWAP A ; MOV K_NEW,A ; RET
;--------------------------------------------------------- |