|
;四獨(dú)立按鍵控制四LED; ;四個(gè)獨(dú)立按鍵對(duì)應(yīng)四個(gè)獨(dú)立的LED. ;當(dāng)某一按鍵按下時(shí)對(duì)應(yīng)的LED亮,當(dāng)?shù)诙伟聪聲r(shí)滅。 ;四個(gè)LED只能有一個(gè)亮,初學(xué)者可以參考以下程式: ;當(dāng)一直按下某一按鍵時(shí)對(duì)應(yīng)的LED會(huì)閃動(dòng)。 ;--------------------------------------------------------- K1 BIT P1.4 K2 BIT P1.5 K3 BIT P1.6 K4 BIT P1.7 FLAG0 BIT 20H.0 ;LED0標(biāo)記 FLAG1 BIT 20H.1 ;LED1標(biāo)記 FLAG2 BIT 20H.2 ;LDE2標(biāo)記 FLAG3 BIT 20H.3 ;LED3標(biāo)記 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 ;延時(shí)示去抖動(dòng) 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 ;--------------------------------------------------------- ;延時(shí)子程序 ;--------------------------------------------------------- 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 ;--------------------------------------------------------- |