12.1 項(xiàng)目分析
矩陣鍵盤(pán),是一種在節(jié)省端口的前提下控制大量按鍵的一種方法,對(duì)于傳統(tǒng)的獨(dú)立對(duì)地鍵盤(pán),一個(gè)按鍵就需要占用一個(gè)單片機(jī)IO口,雖然有時(shí)候會(huì)加一些擴(kuò)展芯片之類的用于一個(gè)端口控制多個(gè)按鍵,但是電路結(jié)構(gòu)比較復(fù)雜,矩陣鍵盤(pán)則是一種盡可能的既不用驅(qū)動(dòng)芯片又能最大限度的使用大量按鍵的方法,一個(gè)a行b列的矩陣鍵盤(pán),它所占用的端口數(shù)量是a+b個(gè)端口,所控制的按鍵數(shù)量則是a×b個(gè)按鍵,比如常見(jiàn)的4×4矩陣鍵盤(pán)只需要占用8個(gè)端口就可以控制16個(gè)按鍵,矩陣鍵盤(pán)的接法如下圖所示。
從圖中可以看出,每一列的按鍵取一端接在一起,每一行的按鍵取按鍵的另一列接在一起,這樣就會(huì)引出四條行掃描線和列掃描線,假設(shè)某個(gè)端口產(chǎn)生了低電平,那么對(duì)應(yīng)的就會(huì)有四個(gè)按鍵變成了獨(dú)立對(duì)地鍵盤(pán),當(dāng)這四個(gè)鍵按下的時(shí)候,對(duì)應(yīng)的端口電平就會(huì)拉低,所以矩陣鍵盤(pán)的按鍵檢測(cè)主要就是進(jìn)行掃描檢測(cè),在短暫的時(shí)間內(nèi)不停的掃描鍵盤(pán),可以根據(jù)行掃描判斷,也可以根據(jù)列掃描判斷,矩陣鍵盤(pán)的識(shí)別主要有以下幾種判斷方法:
算法1 :對(duì)矩陣鍵盤(pán)的行(或者列)不停的掃描,然后檢測(cè)對(duì)應(yīng)的列(或者行),當(dāng)掃描的頻率超過(guò)人的反應(yīng)時(shí)間時(shí),便不會(huì)被感覺(jué)出來(lái),但是這種方法的優(yōu)點(diǎn)是程序編寫(xiě)較為簡(jiǎn)單,但是代碼很長(zhǎng),且浪費(fèi)CPU的資源。
算法2: 對(duì)矩陣鍵盤(pán)的列(或者行)全部賦低電平,然后判斷是否有行(或者列)的端口有低電平產(chǎn)生,沒(méi)有,證明按鍵沒(méi)有被按下,如果有,那么此時(shí)將端口對(duì)應(yīng)的數(shù)據(jù)存放入一個(gè)變量,并同時(shí)將列(或者行)的低電平轉(zhuǎn)移到行(或者列)上,此時(shí)列(或者行)必然也會(huì)有一個(gè)低電平的端口,將這時(shí)候的數(shù)據(jù)存放入第二個(gè)變量,最后,撤銷所有的低電平,將兩個(gè)變量的數(shù)據(jù)相加,則必然會(huì)得出所有按鍵值的其中一個(gè),那么這個(gè)按鍵值所對(duì)應(yīng)的按鍵必然就是按下的按鍵,這種算法比較復(fù)雜,編程或者理解起來(lái)比較困難,但是代碼短,節(jié)省CPU資源。
12.2 原理圖
現(xiàn)在我們以原理圖為例,實(shí)現(xiàn)如下功能,用0~F代表按鍵的編號(hào),按下某個(gè)按鍵后,在數(shù)碼管上顯示按鍵的編號(hào)(要求采用算法2方式實(shí)現(xiàn))。
**12.3 **源代碼
/*********************************************************************************************************
頭 文 件 引 用
*********************************************************************************************************/
#include <reg51.h> //導(dǎo)入51單片機(jī)頭文件
#include <intrins.h>
/*********************************************************************************************************
數(shù) 據(jù) 類 型 定 義
*********************************************************************************************************/
#define u8 unsigned char //定義無(wú)符號(hào)字符型數(shù)據(jù)(0~255)
#define u16 unsigned int //定義無(wú)符號(hào)整型數(shù)據(jù)(0~65535)
/********************************************************
Name :KEY_Scan
Function :鍵盤(pán)掃描
Paramater :None
Return :None
********************************************************/
void KEY_Scan()
{
u8 x, y ;
u8 TAB[] = { 0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10, 0x08, 0x03, 0x46, 0x21, 0x06, 0x0E } ;
P2 = 0xF0 ;
if( P2!=0xF0 )
{
x = P2 ;
P2 = 0x0F ;
if( P2!=0x0F )
{
y = P2 ;
switch( x+y )
{
case 0xEE: P0 = TAB[ 0 ] ; break ;
case 0xDE: P0 = TAB[ 1 ] ; break ;
case 0xBE: P0 = TAB[ 2 ] ; break ;
case 0x7E: P0 = TAB[ 3 ] ; break ;
case 0xED: P0 = TAB[ 4 ] ; break ;
case 0xDD: P0 = TAB[ 5 ] ; break ;
case 0xBD: P0 = TAB[ 6 ] ; break ;
case 0x7D: P0 = TAB[ 7 ] ; break ;
case 0xEB: P0 = TAB[ 8 ] ; break ;
case 0xDB: P0 = TAB[ 9 ] ; break ;
case 0xBB: P0 = TAB[ 10 ] ; break ;
case 0x7B: P0 = TAB[ 11 ] ; break ;
case 0xE7: P0 = TAB[ 12 ] ; break ;
case 0xD7: P0 = TAB[ 13 ] ; break ;
case 0xB7: P0 = TAB[ 14 ] ; break ;
case 0x77: P0 = TAB[ 15 ] ; break ;
}
}
}
}
/*********************************************************************************************************
主 函 數(shù)
*********************************************************************************************************/
void main()
{
while( 1 )
{
KEY_Scan() ;
}
}
12.4 仿真效果
-
原理圖
+關(guān)注
關(guān)注
1302文章
6362瀏覽量
235286 -
單片機(jī)
+關(guān)注
關(guān)注
6043文章
44623瀏覽量
638781 -
cpu
+關(guān)注
關(guān)注
68文章
10908瀏覽量
213085 -
51單片機(jī)
+關(guān)注
關(guān)注
274文章
5705瀏覽量
124352 -
矩陣鍵盤(pán)
+關(guān)注
關(guān)注
7文章
207瀏覽量
31550
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
51單片機(jī)矩陣鍵盤(pán)c語(yǔ)言程序
基于51單片機(jī)的矩陣鍵盤(pán)電子密碼鎖
C51單片機(jī)矩陣鍵盤(pán)設(shè)計(jì)程序的詳細(xì)資料免費(fèi)下載
![C<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤(pán)</b>設(shè)計(jì)程序的詳細(xì)資料免費(fèi)下載](https://file.elecfans.com/web1/M00/78/F2/o4YBAFv9A9eAQGOpAAZAiYl1iPI023.png)
51單片機(jī)矩陣鍵盤(pán)的原理說(shuō)明和實(shí)驗(yàn)程序及電路圖免費(fèi)下載
使用51單片機(jī)矩陣鍵盤(pán)模擬密碼鎖的C語(yǔ)言程序免費(fèi)下載
![使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤(pán)</b>模擬密碼鎖的C語(yǔ)言程序免費(fèi)下載](https://file.elecfans.com/web1/M00/A3/AB/pIYBAF1U1YaAJPHNAAPb4br8BpY418.png)
51單片機(jī)-矩陣鍵盤(pán)模塊-長(zhǎng)短按鍵&數(shù)碼管顯示-模塊化編程模板
![<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>-<b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤(pán)</b>模塊-長(zhǎng)短按鍵&數(shù)碼管顯示-模塊化編程模板](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論