找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 14848|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

26課:矩陣式鍵盤(pán)接口技術(shù)及程序設(shè)計(jì)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1 發(fā)表于 2013-5-21 05:13 | 只看該作者 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
在單片機(jī)系統(tǒng)中鍵盤(pán)中按鈕數(shù)量較多時(shí),為了減少I/O口的占用,常常將按鈕排列成矩陣形式,如圖1所示。在矩陣式鍵盤(pán)中,每條水平線和垂直線在交叉處不直接連通,而是通過(guò)一個(gè)按鈕加以連接。這樣,一個(gè)端口(如P1口)就能組成4*4=16個(gè)按鈕,比之直接將端口線用于鍵盤(pán)多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就能組成20鍵的鍵盤(pán),而直接用端口線則只能多出一鍵(9鍵)。由此可見(jiàn),在需要的鍵數(shù)比較多時(shí),采用矩陣法來(lái)做鍵盤(pán)是合理的。


<單片機(jī)矩陣式鍵盤(pán)接口技術(shù)及編程接口圖>
矩陣式結(jié)構(gòu)的鍵盤(pán)顯然比直接法要復(fù)雜一些,識(shí)別也要復(fù)雜一些,上圖中,列線通過(guò)電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鈕沒(méi)有按下時(shí),所有的輸出端都是高電平,代表無(wú)鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會(huì)被拉低,這樣,通過(guò)讀入輸入線的狀態(tài)就可得知是否有鍵按下了。具體的識(shí)別及編程辦法如下所述。
矩陣式鍵盤(pán)的按鈕識(shí)別辦法
確定矩陣式鍵盤(pán)上何鍵被按下介紹一種“行掃描法”。
行掃描法 行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鈕識(shí)別辦法,如上圖所示鍵盤(pán),介紹過(guò)程如下。
判斷鍵盤(pán)中有無(wú)鍵按下 將全部行線Y0-Y3置低電平,然后檢測(cè)列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤(pán)中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個(gè)按鈕之中。若所有列線均為高電平,則鍵盤(pán)中無(wú)鍵按下。
判斷閉合鍵所在的位置 在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過(guò)程。其辦法是:依次將行線置為低電平,即在置某根行線為低電平時(shí),其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測(cè)各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鈕就是閉合的按鈕。
下面給出一個(gè)具體的例程:
圖仍如上所示。8031單片機(jī)的P1口用作鍵盤(pán)I/O口,鍵盤(pán)的列線接到P1口的低4位,鍵盤(pán)的行線接到P1口的高4位。列線P1.0-P1.3分別接有4個(gè)上拉電阻到正電源+5V,并把列線P1.0-P1.3設(shè)置為輸入線,行線P1.4-P.17設(shè)置為輸出線。4根行線和4根列線形成16個(gè)相交點(diǎn)。
檢測(cè)當(dāng)前是否有鍵被按下。檢測(cè)的辦法是P1.4-P1.7輸出全“0”,讀取P1.0-P1.3的狀態(tài),若P1.0-P1.3為全“1”,則無(wú)鍵閉合,不然有鍵閉合。
去除鍵抖動(dòng)。當(dāng)檢測(cè)到有鍵按下后,延時(shí)一段時(shí)間再做下一步的檢測(cè)判斷。
若有鍵被按下,應(yīng)識(shí)別出是哪一個(gè)鍵閉合。辦法是對(duì)鍵盤(pán)的行線進(jìn)行掃描。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
在每組行輸出時(shí)讀取P1.0-P1.3,若全為“1”,則表示為“0”這一行沒(méi)有鍵閉合,不然有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計(jì)算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值
為了保證鍵每閉合一次CPU僅作一次處理,必須卻除鍵釋放時(shí)的抖動(dòng)。



《單片機(jī)矩陣式鍵盤(pán)接口技術(shù)及編程》
鍵盤(pán)掃描程序:
從以上分析得到單片機(jī)鍵盤(pán)掃描程序的流程圖如圖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
鍵盤(pán)處理程序就作這么一個(gè)簡(jiǎn)單的介紹,實(shí)際上,鍵盤(pán)、顯示處理是很復(fù)雜的,它一般占到一個(gè)應(yīng)用程序的大部份代碼,可見(jiàn)其重要性,但說(shuō)到,這種復(fù)雜并不來(lái)自于單片機(jī)的本身,而是來(lái)自于操作者的習(xí)慣等等問(wèn)題,因此,在編寫(xiě)鍵盤(pán)處理程序之前,最好先把它從邏輯上理清,然后用適當(dāng)?shù)乃惴ū硎境鰜?lái),最后再去寫(xiě)代碼,這樣,才能快速有效地寫(xiě)好代碼。到本課為止,本站教程暫告一個(gè)段落!請(qǐng)繼續(xù)關(guān)注http://www.torrancerestoration.com的單片機(jī)教程。感謝大家的關(guān)心和支持!教程中如果有不對(duì)之處也希望大家在評(píng)論中提出,我們會(huì)及時(shí)正更錯(cuò)誤的.


評(píng)分

參與人數(shù) 1黑幣 +4 收起 理由
Oscard + 4 很給力!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報(bào)

13#
ID:93625 發(fā)表于 2018-6-27 10:04 | 只看該作者
看來(lái)把這課給漏學(xué)了,補(bǔ)上
回復(fù)

使用道具 舉報(bào)

12#
ID:263745 發(fā)表于 2017-12-21 18:00 | 只看該作者
大學(xué)學(xué)過(guò)的匯編語(yǔ)言全還給老師了
回復(fù)

使用道具 舉報(bào)

11#
ID:8655 發(fā)表于 2017-10-30 11:50 | 只看該作者
學(xué)習(xí)了  謝謝樓主
回復(fù)

使用道具 舉報(bào)

10#
ID:107365 發(fā)表于 2017-4-26 11:02 來(lái)自手機(jī) | 只看該作者
版主您好!首先感謝分享,辛苦啦!  請(qǐng)教,按鍵軟件消抖延時(shí)5~10ms,這對(duì)單片機(jī)資源不是太浪費(fèi)了嗎,又沒(méi)有更好的方法呢 (⊙o⊙)
回復(fù)

使用道具 舉報(bào)

9#
ID:185661 發(fā)表于 2017-4-14 19:52 | 只看該作者
匯編看不懂
回復(fù)

使用道具 舉報(bào)

8#
ID:88716 發(fā)表于 2015-8-24 09:01 來(lái)自手機(jī) | 只看該作者
例子怎么都是用匯編語(yǔ)言呢
回復(fù)

使用道具 舉報(bào)

7#
ID:60611 發(fā)表于 2015-6-11 21:51 | 只看該作者
現(xiàn)在還用匯編的很少了哈
回復(fù)

使用道具 舉報(bào)

6#
ID:73815 發(fā)表于 2015-6-2 13:45 | 只看該作者
這上面寫(xiě)的程序要是每句后面加上講解對(duì)初學(xué)者幫助很大
回復(fù)

使用道具 舉報(bào)

5#
ID:77081 發(fā)表于 2015-4-15 21:14 | 只看該作者
矩陣式鍵盤(pán)接口技術(shù)及程序設(shè)計(jì)
回復(fù)

使用道具 舉報(bào)

地板
ID:72292 發(fā)表于 2015-1-15 23:30 | 只看該作者
樓主,你寫(xiě)的很有幫助,可是我還想進(jìn)一步問(wèn)一下。如蚊子所述:由此得到閉合鍵的行值和列值,然后可采用計(jì)算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值。
  我想問(wèn)問(wèn)查表法,這個(gè)表怎么定義?是自己隨意定義么,還是按照什么規(guī)則定義的?謝謝了。
回復(fù)

使用道具 舉報(bào)

板凳
ID:71662 發(fā)表于 2015-1-6 14:59 | 只看該作者
很不錯(cuò)的東西   謝謝分享啊
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:68367 發(fā)表于 2014-11-22 16:57 | 只看該作者

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表