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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 從零開始51單片機教程 —— 27 矩陣式鍵盤接口技術(shù)及程序設(shè)計

          從零開始51單片機教程 —— 27 矩陣式鍵盤接口技術(shù)及程序設(shè)計

          作者: 時間:2012-02-16 來源:網(wǎng)絡(luò) 收藏

          矩陣式接口技術(shù)及程序設(shè)計

          在單片機系統(tǒng)中中按鈕數(shù)量較多時,為了減少I/O口的占用,常常將按鈕排列成矩陣形式,如圖1所示。在矩陣式中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鈕加以連接。這樣,一個端口(如P1口)就能組成4*4=16個按鈕,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就能組成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時,采用矩陣法來做鍵盤是合理的。

          點擊瀏覽下一頁
          單片機矩陣式鍵盤接口技術(shù)及編程接口圖>

          矩陣式結(jié)構(gòu)的鍵盤顯然比直接法要復(fù)雜一些,識別也要復(fù)雜一些,上圖中,列線通過電阻接正電源,并將行線所接的單片機的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鈕沒有按下時,所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。具體的識別及編程辦法如下所述。

          矩陣式鍵盤的按鈕識別辦法

          確定矩陣式鍵盤上何鍵被按下介紹一種“行掃描法”。

          行掃描法 行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鈕識別辦法,如上圖所示鍵盤,介紹過程如下。

          判斷鍵盤中有無鍵按下 將全部行線Y0-Y3置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鈕之中。若所有列線均為高電平,則鍵盤中無鍵按下。

          判斷閉合鍵所在的位置 在確認有鍵按下后,即可進入確定具體閉合鍵的過程。其辦法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鈕就是閉合的按鈕。

          下面給出一個具體的例程:

          圖仍如上所示。8031單片機的P1口用作鍵盤I/O口,鍵盤的列線接到P1口的低4位,鍵盤的行線接到P1口的高4位。列線P1.0-P1.3分別接有4個上拉電阻到正電源+5V,并把列線P1.0-P1.3設(shè)置為輸入線,行線P1.4-P.17設(shè)置為輸出線。4根行線和4根列線形成16個相交點。

          檢測當(dāng)前是否有鍵被按下。檢測的辦法是P1.4-P1.7輸出全“0”,讀取P1.0-P1.3的狀態(tài),若P1.0-P1.3為全“1”,則無鍵閉合,不然有鍵閉合。

          去除鍵抖動。當(dāng)檢測到有鍵按下后,延時一段時間再做下一步的檢測判斷。

          若有鍵被按下,應(yīng)識別出是哪一個鍵閉合。辦法是對鍵盤的行線進行掃描。P1.4-P1.7按下述4種組合依次輸出:

          P1.7 1 1 1 0

          P1.6 1 1 0 1

          P1.5 1 0 1 1

          P1.4 0 1 1 1

          在每組行輸出時讀取P1.0-P1.3,若全為“1”,則表示為“0”這一行沒有鍵閉合,不然有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值

          為了保證鍵每閉合一次CPU僅作一次處理,必須卻除鍵釋放時的抖動。

          點擊瀏覽下一頁

          點擊瀏覽下一頁


          《單片機矩陣式鍵盤接口技術(shù)及編程》

          鍵盤掃描程序:

          從以上分析得到單片機鍵盤掃描程序的流程圖如圖2所示。程序如下

          SCAN: MOV P1,#0FH

          MOV A,P1

          ANL A,#0FH

          CJNE A,#0FH,NEXT1

          SJMP NEXT3

          NEXT1: ACALL D20MS

          MOV A,#0EFH

          NEXT2: MOV R1,A

          MOV P1,A

          MOV A,P1

          ANL A,#0FH

          CJNE A,#0FH,KCODE;

          MOV A,R1

          SETB C

          RLC A

          JC NEXT2

          NEXT3: MOV R0,#00H

          RET

          KCODE: MOV B,#0FBH

          NEXT4: RRC A

          INC B

          JC NEXT4

          MOV A,R1

          SWAP A

          NEXT5: RRC A

          INC B

          INC B

          INC B

          INC B

          JC NEXT5

          NEXT6: MOV A,P1

          ANL A,#0FH

          CJNE A,#0FH,NEXT6

          MOV R0,#0FFH

          RET

          鍵盤處理程序就作這么一個簡單的介紹,實際上,鍵盤、顯示處理是很復(fù)雜的,它一般占到一個應(yīng)用程序的大部份代碼,可見其重要性,但說到,這種復(fù)雜并不來自于單片機的本身,而是來自于操作者的習(xí)慣等等問題,因此,在編寫鍵盤處理程序之前,最好先把它從邏輯上理清,然后用適當(dāng)?shù)乃惴ū硎境鰜恚詈笤偃懘a,這樣,才能快速有效地寫好代碼。

          DIY機械鍵盤相關(guān)社區(qū):機械鍵盤DIY




          關(guān)鍵詞: 鍵盤

          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁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); })();