在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<abbr id="27omo"></abbr>

<menu id="27omo"><dl id="27omo"></dl></menu>
    • <label id="27omo"><tt id="27omo"></tt></label>

      新聞中心

      PIC單片機(jī)鍵盤程序

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

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

      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
      ;************以下為碼值轉(zhuǎn)換表**************
      CONVERT ADDWF PCL,1
      RETLW 0XC0 ;0,顯示段碼與具體的硬件連接有關(guān)
      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)先級(jí)
      BSF RCON,7 ;使能中斷優(yōu)先級(jí)
      BCF TRISA,5 ;置RA5為輸出方式,以輸出鎖存信號(hào)
      BCF TRISB,1
      BCF TRISA,3
      BCF TRISE,0
      BCF TRISE,1
      BSF TRISB,4 ;設(shè)置與鍵盤有關(guān)的各口的輸入輸出方式
      BCF TRISC,5
      BCF TRISC,3 ;設(shè)置SCK與SDO為輸出方式
      MOVLW 0XC0
      MOVWF SSPSTAT ;設(shè)置SSPSTAT寄存器
      MOVLW 0X30
      MOVWF SSPCON1 ;設(shè)置SPI的控制方式,允許SSP方式,并在時(shí)鐘下降
      ;沿發(fā)送數(shù)據(jù),與“74HC595當(dāng)其SCLK從低到高電平
      ;跳變時(shí),串行輸入數(shù)據(jù)(DI)移入寄存器"的特點(diǎn)相對(duì)應(yīng)。
      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端口,建立變位中斷的初始條件
      ; (由高到低時(shí)中斷)
      RETURN ;返回
      ;*************中斷服務(wù)子程序*****************
      INTSERVE NOP
      BCF INTCON,RBIF ;中斷標(biāo)志清0
      CALL KEYDELAY ;調(diào)用8ms的軟件延時(shí)子程序,以消除抖動(dòng)
      MOVF PORTB,W ;讀PORTB的值,并同時(shí)改變中斷發(fā)生的條件,可屏蔽
      ;一次按鍵松開時(shí)產(chǎn)生的無效的中斷,又可以防止按鍵
      ;時(shí)間過長(zhǎng)發(fā)生連續(xù)中斷
      BTFSC PORTB,4
      RETFIE ;判斷為干擾,則返回,并可以屏蔽一次無用的中斷
      CALL KEYSERVE ;調(diào)用鍵服務(wù)子程序,確定鍵值
      BCF PORTB,1
      BCF PORTA,3
      BCF PORTE,0
      BCF PORTE,1 ;送低電平至K1,K2,K3,K4,以防止鍵掃描時(shí)改變
      ;K1,K2,K3,K4的電平,從而改變中斷條件
      BCF INTCON,RBIF ;鍵掃描時(shí)可能會(huì)產(chǎn)生“”而使RBIF
      ;置1,再清除一次RBIF以求避免額外中斷
      MOVF JIANR,W ;把需要顯示的值送給W寄存器
      CALL CONVERT ;查要顯示的段碼
      CALL DISPLAY ;調(diào)用顯示子程序
      RETFIE ;中斷返回
      ;***************顯示子程序******************
      DISPLAY
      CLRF PORTA
      MOVWF SSPBUF
      LOOP NOP
      BTFSS PIR1,SSPIF
      GOTO LOOP
      NOP
      BCF PIR1,SSPIF
      BSF PORTA,5 ;詳細(xì)程序語(yǔ)句請(qǐng)參考3. 1. 3節(jié)
      RETURN
      ;*********鍵盤去抖子程序(8ms的延時(shí))******************
      KEYDELAY
      MOVLW 0X0A
      MOVWF DEYH
      AGAIN2 MOVLW 0XFF
      MOVWF DEYL
      AGAIN1 DECFSZ DEYL,1
      GOTO AGAIN1
      DECFSZ DEYH,1
      GOTO AGAIN2 ;具體程序語(yǔ)句參考3. 2節(jié)
      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,以上對(duì)鍵盤進(jìn)行掃描,
      ;來確定是哪一個(gè)鍵按下
      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ù)按下的鍵把相應(yīng)的值送給JIANR
      BCF PORTE,1
      RET NOP
      RETURN
      ;****************************************
      MAIN NOP
      CALL INITIAL ;調(diào)用初始化子程序
      BSF INTCON,GIE ;總中斷允許
      HERE GOTO HERE ;等待中斷發(fā)生
      END
      全部程序完畢,歡迎轉(zhuǎn)載請(qǐng)保留http://www.51hei.com 51hei單片機(jī)學(xué)習(xí)網(wǎng)的鏈接



      評(píng)論


      相關(guān)推薦

      技術(shù)專區(qū)

      關(guān)閉