新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PIC單片機鍵盤程序

        PIC單片機鍵盤程序

        作者: 時間:2012-12-31 來源:網絡 收藏

        ;該pic單片機通過PORTB的"中斷"進行鍵盤的輸入,使按下K1鍵時第一個數碼管顯示1,按下K2
        ;鍵時第一個數碼管上顯示2,按下K3鍵時第一個數碼管上顯示3,按下K4鍵時第一個數碼管上顯示4
        ;對鍵盤的掃描采用中斷方式

        LIST P=18F458
        INCLUDE "P18F458.INC"

        ;所用的寄存器
        JIANR EQU 0X20
        DEYH EQU JIANR+1
        DEYL EQU JIANR+2
        ORG 0X00
        GOTO MAIN
        ORG 0X08
        GOTO INTSERVE
        ORG 0X30
        ;************以下為碼值轉換表**************
        CONVERT ADDWF PCL,1
        RETLW 0XC0 ;0,顯示段碼與具體的硬件連接有關
        RETLW 0XF9 ;1
        RETLW 0XA4 ;2
        RETLW 0XB0 ;3
        RETLW 0X99 ;4
        RETLW 0X92 ;5
        RETLW 0X82 ;6
        RETLW 0XD8 ;7
        RETLW 0X80 ;8
        RETLW 0X90 ;9
        RETLW 0X88 ;A
        RETLW 0X83 ;B
        RETLW 0XC6 ;C
        RETLW 0XA1 ;D
        RETLW 0X86 ;E
        RETLW 0X8E ;F
        RETLW 0X7F ;"."
        RETLW 0XBF ;"-"
        RETLW 0X89 ;H
        RETLW 0XFF ;DARK
        RETURN
        ;***************初始化子程序***************
        INITIAL
        CLRF INTCON ;禁止總中斷和外圍中斷
        BSF INTCON,RBIE ;B口變位中斷允許
        BCF INTCON2,7 ;使弱上拉有效
        BSF INTCON2,0 ;B口變位中斷高優先級
        BSF RCON,7 ;使能中斷優先級
        BCF TRISA,5 ;置RA5為輸出方式,以輸出鎖存信號
        BCF TRISB,1
        BCF TRISA,3
        BCF TRISE,0
        BCF TRISE,1
        BSF TRISB,4 ;設置與鍵盤有關的各口的輸入輸出方式
        BCF TRISC,5
        BCF TRISC,3 ;設置SCK與SDO為輸出方式
        MOVLW 0XC0
        MOVWF SSPSTAT ;設置SSPSTAT寄存器
        MOVLW 0X30
        MOVWF SSPCON1 ;設置SPI的控制方式,允許SSP方式,并在時鐘下降
        ;沿發送數據,與“74HC595當其SCLK從低到高電平
        ;跳變時,串行輸入數據(DI)移入寄存器"的特點相對應。
        MOVLW 0X01
        MOVWF JIANR ;顯示值寄存器賦初值
        BCF PORTB,1
        BCF PORTA,3
        BCF PORTE,0
        BCF PORTE,1 ;K1,K2,K3,K4四條列線置0,為中斷的
        ;產生創造初始條件
        MOVF PORTB,W ;讀PORTB端口,建立變位中斷的初始條件
        ; (由高到低時中斷)
        RETURN ;返回
        ;*************中斷服務子程序*****************
        INTSERVE NOP
        BCF INTCON,RBIF ;中斷標志清0
        CALL KEYDELAY ;調用8ms的軟件延時子程序,以消除抖動
        MOVF PORTB,W ;讀PORTB的值,并同時改變中斷發生的條件,可屏蔽
        ;一次按鍵松開時產生的無效的中斷,又可以防止按鍵
        ;時間過長發生連續中斷
        BTFSC PORTB,4
        RETFIE ;判斷為干擾,則返回,并可以屏蔽一次無用的中斷
        CALL KEYSERVE ;調用鍵服務子程序,確定鍵值
        BCF PORTB,1
        BCF PORTA,3
        BCF PORTE,0
        BCF PORTE,1 ;送低電平至K1,K2,K3,K4,以防止鍵掃描時改變
        ;K1,K2,K3,K4的電平,從而改變中斷條件
        BCF INTCON,RBIF ;鍵掃描時可能會產生“”而使RBIF
        ;置1,再清除一次RBIF以求避免額外中斷
        MOVF JIANR,W ;把需要顯示的值送給W寄存器
        CALL CONVERT ;查要顯示的段碼
        CALL DISPLAY ;調用顯示子程序
        RETFIE ;中斷返回
        ;***************顯示子程序******************
        DISPLAY
        CLRF PORTA
        MOVWF SSPBUF
        LOOP NOP
        BTFSS PIR1,SSPIF
        GOTO LOOP
        NOP
        BCF PIR1,SSPIF
        BSF PORTA,5 ;詳細程序語句請參考3. 1. 3節
        RETURN
        ;*********鍵盤去抖子程序(8ms的延時)******************
        KEYDELAY
        MOVLW 0X0A
        MOVWF DEYH
        AGAIN2 MOVLW 0XFF
        MOVWF DEYL
        AGAIN1 DECFSZ DEYL,1
        GOTO AGAIN1
        DECFSZ DEYH,1
        GOTO AGAIN2 ;具體程序語句參考3. 2節
        RETURN
        ;***************鍵服務子程序******************
        KEYSERVE
        JIANZHI ;確定鍵值的子程序
        BCF PORTB,1
        BCF PORTA,3
        MOVLW 0X03
        MOVWF PORTE ;K1,K2置低電平,K3,K4置高電平
        NOP
        NOP ;使引腳電平穩定
        BTFSS PORTB,4
        GOTO K1K2 ;RB4為0,表示按鍵為K1,K2中的一個
        GOTO K3K4 ;RB4為1,表示按鍵為K3,K4中的一個

        K1K2 BCF PORTB,1
        BSF PORTA,3 ;K1置低電平,K2置高電平
        NOP
        NOP ;使引腳電平穩定
        BTFSS PORTB,4
        GOTO K1 ;RB4為0,表示按鍵為K1
        GOTO K2 ;RB4為1,表示按鍵為K2

        K3K4 BCF PORTE,0
        BSF PORTE,1 ;K3置低電平,K4置高電平
        NOP
        NOP ;使引腳電平穩定
        BTFSS PORTB,4
        GOTO K3 ;RB4為0,表示按鍵為K3
        GOTO K4 ;RB4為1,表示按鍵為K4,以上對鍵盤進行掃描,
        ;來確定是哪一個鍵按下
        K1 MOVLW 0X03
        MOVWF JIANR
        GOTO RET
        K2 MOVLW 0X05
        MOVWF JIANR
        BCF PORTA,3
        GOTO RET
        K3 MOVLW 0X07
        MOVWF JIANR
        GOTO RET
        K4 MOVLW 0X09
        MOVWF JIANR ;以上根據按下的鍵把相應的值送給JIANR
        BCF PORTE,1
        RET NOP
        RETURN
        ;****************************************
        MAIN NOP
        CALL INITIAL ;調用初始化子程序
        BSF INTCON,GIE ;總中斷允許
        HERE GOTO HERE ;等待中斷發生
        END
        全部程序完畢,歡迎轉載請保留http://www.51hei.com 51hei單片機學習網的鏈接



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 长治县| 祁东县| 永和县| 永川市| 宁波市| 中西区| 荔波县| 黑山县| 宜城市| SHOW| 大宁县| 宜黄县| 邵阳市| 安乡县| 宜城市| 建湖县| 永顺县| 余江县| 荥阳市| 平湖市| 西贡区| 加查县| 新邵县| 仪征市| 吕梁市| 江安县| 毕节市| 井冈山市| 东港市| 玉溪市| 康定县| 永丰县| 保山市| 周宁县| 汶川县| 大理市| 新乐市| 呼伦贝尔市| 平昌县| 城固县| 洛川县|