PIC單片機(jī)鍵盤掃描匯編程序
;**********鍵盤去抖子程序(約8ms的延時(shí))** ***************
KEYDELAY
MOVLW 0X0A
MOVWF DEYH
AGAIN2 MOVLW 0XFF
MOVWF DEYL
AGAIN1 DECFSZ DEYL,1
GOTO AGAIN1
DECFSZ DEYH,1
GOTO AGAIN2
RETURN
;***************鍵服務(wù)子程序****************
;確定鍵值的子程序
KEYSERVE
JIANZHI BCF PORTB,1
BCF PORTA,3
MOVLW 0X03
MOVWF PORTE ;K1,K2置低電平,K3,K4置高電平
NOP
NOP ;使引腳電平穩(wěn)定
BTFSS PORTB,4
GOTO K1K2 ;RB4為0,表示按鍵為K1,K2中的一個(gè)
GOTO K3K4 ;RB4為1,表示按鍵為K3,K4中的一個(gè)
K1K2 BCF PORTB,1
BSF PORTA,3 ;K1置低電平,K2置高電平
NOP
NOP ;使引腳電平穩(wěn)定
BTFSS PORTB,4
GOTO K1 ;RB4為0,表示按鍵為K1
GOTO K2 ;RB4為1,表示按鍵為K2
K3K4 BCF PORTE,0
BSF PORTE,1 ;K3置低電平,K4置高電平
NOP
NOP ;使引腳電平穩(wěn)定
BTFSS PORTB,4
GOTO K3 ;RB4為0,表示按鍵為K3
GOTO K4 ;RB4為1,表示按鍵為K4
K1 MOVLW 0X03
MOVWF JIANR
GOTO JIANW
K2 MOVLW 0X05
MOVWF JIANR
BCF PORTA,3
GOTO JIANW
K3 MOVLW 0X07
MOVWF JIANR
GOTO JIANW
K4 MOVLW 0X09
MOVWF JIANR ;以上根據(jù)按下的鍵把相應(yīng)的值送給JIANR
BCF PORTE,1
JIANW BTFSS PORTB,4
GOTO JIANW ;為了防止一次按鍵多次識(shí)別,等鍵松開才返回
RETURN
;****************************************
MAIN NOP
CALL INITIAL ;調(diào)用初始化子程序
LOOP
CALL KEYSCAN ;查鍵
BTFSC FLAG,F(xiàn)0
CALL KEYDELAY ;若檢測(cè)到有鍵按下,則調(diào)用軟件延時(shí)子程序去抖動(dòng)
BTFSC FLAG,F(xiàn)0
CALL KEYSCAN ;若第一次掃描到有鍵按下,則經(jīng)過前面的延時(shí)去抖后
;再次進(jìn)行鍵掃描
BTFSC FLAG,F(xiàn)0
CALL KEYSERVE ;若確認(rèn)有鍵按下,則需要調(diào)用鍵服務(wù)程序
BTFSS FLAG,F(xiàn)0
GOTO LOOP ;如果無鍵按下,則反復(fù)進(jìn)行鍵掃描
MOVF JIANR,W
CALL CONVERT ;把按鍵對(duì)應(yīng)的數(shù)字轉(zhuǎn)換成待顯示的段碼
CALL DISPLAY ;調(diào)用顯示子程序
GOTO LOOP
END
單片機(jī)相關(guān)文章:單片機(jī)教程
單片機(jī)相關(guān)文章:單片機(jī)視頻教程
單片機(jī)相關(guān)文章:單片機(jī)工作原理
評(píng)論