<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          PIC單片機鍵盤程序

          作者: 時間:2012-12-31 來源:網(wǎng)絡 收藏

          ;該pic單片機通過PORTB的"中斷"進行鍵盤的輸入,使按下K1鍵時第一個數(shù)碼管顯示1,按下K2
          ;鍵時第一個數(shù)碼管上顯示2,按下K3鍵時第一個數(shù)碼管上顯示3,按下K4鍵時第一個數(shù)碼管上顯示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口變位中斷高優(yōu)先級
          BSF RCON,7 ;使能中斷優(yōu)先級
          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方式,并在時鐘下降
          ;沿發(fā)送數(shù)據(jù),與“74HC595當其SCLK從低到高電平
          ;跳變時,串行輸入數(shù)據(jù)(DI)移入寄存器"的特點相對應。
          MOVLW 0X01
          MOVWF JIANR ;顯示值寄存器賦初值
          BCF PORTB,1
          BCF PORTA,3
          BCF PORTE,0
          BCF PORTE,1 ;K1,K2,K3,K4四條列線置0,為中斷的
          ;產(chǎn)生創(chuàng)造初始條件
          MOVF PORTB,W ;讀PORTB端口,建立變位中斷的初始條件
          ; (由高到低時中斷)
          RETURN ;返回
          ;*************中斷服務子程序*****************
          INTSERVE NOP
          BCF INTCON,RBIF ;中斷標志清0
          CALL KEYDELAY ;調用8ms的軟件延時子程序,以消除抖動
          MOVF PORTB,W ;讀PORTB的值,并同時改變中斷發(fā)生的條件,可屏蔽
          ;一次按鍵松開時產(chǎn)生的無效的中斷,又可以防止按鍵
          ;時間過長發(fā)生連續(xù)中斷
          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 ;鍵掃描時可能會產(chǎn)生“”而使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節(jié)
          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節(jié)
          RETURN
          ;***************鍵服務子程序******************
          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中的一個
          GOTO K3K4 ;RB4為1,表示按鍵為K3,K4中的一個

          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 RET
          K2 MOVLW 0X05
          MOVWF JIANR
          BCF PORTA,3
          GOTO RET
          K3 MOVLW 0X07
          MOVWF JIANR
          GOTO RET
          K4 MOVLW 0X09
          MOVWF JIANR ;以上根據(jù)按下的鍵把相應的值送給JIANR
          BCF PORTE,1
          RET NOP
          RETURN
          ;****************************************
          MAIN NOP
          CALL INITIAL ;調用初始化子程序
          BSF INTCON,GIE ;總中斷允許
          HERE GOTO HERE ;等待中斷發(fā)生
          END
          全部程序完畢,歡迎轉載請保留http://www.51hei.com 51hei單片機學習網(wǎng)的鏈接



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();