0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

4x4矩陣鍵盤工作原理及掃描程序

姚小熊27 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 2018-02-24 15:30 ? 次閱讀

矩陣鍵盤掃描

4x4矩陣鍵盤工作原理及掃描程序

矩陣鍵盤的原理圖

根據(jù)矩陣鍵盤的原理圖可知,當(dāng)沒(méi)有按鍵按下時(shí),P1=0xf0;然后依次將P1^0~P1^3單獨(dú)置低電平,其他置高,再掃描各列的狀態(tài),來(lái)判斷是哪個(gè)按鍵按下,比如,將P1^0輸出低電平,其他的引腳都輸出高電平,即P1=0xfe,那么當(dāng)?shù)?行有按鍵按下時(shí)P1的相應(yīng)值為,

1X1(01111110=0x7e)1X2(10111110=0xbe)1x3(11011110=0xde)1X4(11101110=0xee)

將P1^1輸出低電平,其他的引腳都輸出高電平,即P1=0xfd,那么當(dāng)?shù)?行有按鍵按下時(shí)P1的相應(yīng)值為,

2X1(01111101=0x7d)2X2(10111101=0xbd)2x3(11011101=0xdd)2X4(11101101=0xed)

將P1^2輸出低電平,其他的引腳都輸出高電平,即P1=0xfd,那么當(dāng)?shù)?行有按鍵按下時(shí)P1的相應(yīng)值為,

3X1(01111011=0x7b)3X2(10111011=0xbb)3x3(11011011=0xdb)3X4(11101011=0xeb)

將P1^3輸出低電平,其他的引腳都輸出高電平,即P1=0xfd,那么當(dāng)?shù)?行有按鍵按下時(shí)P1的相應(yīng)值為,

4X1(01110111=0x77)4X2(10110111=0xb7)4x3(11010111=0xd7)4X4(11100111=0xe7)

/*

程序中用到了置位,如果檢測(cè)第一行時(shí)置位為0xfe,是為了初始化一下P1口,初始化后

*/

#include《reg52.h》

unsignedintVal;

voidDelay(unsignedintt);

voidmain(void)

{

while(1)

{

if(P1!=0xf0)//當(dāng)沒(méi)有按鍵按下時(shí),P0=0xf0;

{

Delay(1500);//去抖

if(P1!=0xf0)//表示按鍵還在按下,判斷是哪個(gè)按鍵

{

P1=0xfe;//置位為fe,檢測(cè)第一行11111110

//根據(jù)矩陣鍵盤原理圖,當(dāng)非第一行有按鍵按下時(shí)P1一直保持為0xfe

if(P1!=0xfe)//將P1置為0xfe后,經(jīng)過(guò)一個(gè)指令周期后如果它還是0xfe說(shuō)明按下的鍵不在第一行

{

Val=P1;

Delay(1500);//去抖

while(P1!=0xfe);//等待按鍵彈起

P0=Val;

}

P1=0xfd;//置位為fd,檢測(cè)第二行11111101

if(P1!=0xfd)

{

Val=P1;

Delay(1500);

while(P1!=0xfd)

P0=Val;

}

P1=0xfb;//置位為fb,檢測(cè)第三行11111011

if(P1!=0xfb)

{

Val=P1;

Delay(1500);

while(P1!=0xfb)

P0=Val;

}

P1=0xf7;//置位為f7,檢測(cè)第四行11110111

if(P1!=0xf7)

{

Val=P1;

Delay(1500);

while(P1!=0xf7)

P0=Val;

}

}

}

}

}

voidDelay(unsignedintt)

{

while(--t);

}

4X4矩陣鍵盤掃描

1. 4根行線的GIO均設(shè)為Output,根列線的GIO均設(shè)為Input;

2. 4根行線的GIO分別置為0111、1011、1101、1110,讀逐一讀取列線GIO的值,可確定是哪一個(gè)按鍵;

電路圖如下:

4x4矩陣鍵盤工作原理及掃描程序

注意:

1. 圖中用作輸入的GIO,一定要有一個(gè)上拉電阻。

2. 芯片中的每一個(gè)引腳是否用作了GPIO口來(lái)用,需配置芯片的寄存器,使引腳當(dāng)作GPIO口來(lái)使用,才會(huì)有效。

4x4矩陣鍵盤工作原理及程序

4x4矩陣鍵盤工作原理及掃描程序

矩陣鍵盤的動(dòng)態(tài)掃描確實(shí)略顯復(fù)雜,不可能就是讀一個(gè)端口數(shù)據(jù),然后馬上就出來(lái)結(jié)果。這需要對(duì)依次每一行的按鍵進(jìn)行掃描、判斷,然后得出結(jié)果。如上圖所示,先掃描第一行,也就是S1,S2,S3,S4四個(gè)按鍵的狀態(tài)。在PA口輸入0XFE。

0XFE變成二進(jìn)制是11111110,為了方便使用,記得每四個(gè)數(shù)之間加一個(gè)空格。11111110這個(gè)數(shù)據(jù)放到PA口上,假設(shè)這個(gè)時(shí)候S1被按下了,會(huì)出現(xiàn)什么情況?因?yàn)镻A0是低電平,S1被按下之后S1導(dǎo)通,導(dǎo)致PA4的電平從1降到0,于是PA端口的數(shù)據(jù)就變成了11101110,換算成16進(jìn)制就是0XEE。于是我們知道S1被按下了。

假設(shè)是S3被按下,會(huì)出現(xiàn)什么情況?沒(méi)錯(cuò),PA6的電平被拉低,PA的端口數(shù)據(jù)變成了10111110,也就是0XBE。這樣,我們就知道了,每一行的每一個(gè)按鍵被按下的時(shí)候,都會(huì)有一個(gè)對(duì)應(yīng)的獨(dú)一無(wú)二的值。這就是矩陣鍵盤的掃描原理!送上一段源碼。

voidmatrixkeyscan()

{

uchartemp,key;

P3=0xfe;

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

delayms(10);

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case0xee:

key=0;

break;

case0xde:

key=1;

break;

case0xbe:

key=2;

break;

case0x7e:

key=3;

break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

display(key);

}

}

P3=0xfd;

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

delayms(10);

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case0xed:

key=4;

break;

case0xdd:

key=5;

break;

case0xbd:

key=6;

break;

case0x7d:

key=7;

break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

display(key);

}

}

P3=0xfb;

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

delayms(10);

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case0xeb:

key=8;

break;

case0xdb:

key=9;

break;

case0xbb:

key=10;

break;

case0x7b:

key=11;

break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

display(key);

}

}

P3=0xf7;

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

delayms(10);

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case0xe7:

key=12;

break;

case0xd7:

key=13;

break;

case0xb7:

key=14;

break;

case0x77:

key=15;

break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

display(key);

}

}

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 矩陣鍵盤
    +關(guān)注

    關(guān)注

    7

    文章

    206

    瀏覽量

    31410
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于FPGA的4x4鍵盤矩陣

    基于FPGA的4x4鍵盤矩陣
    發(fā)表于 12-14 01:26

    4*4矩陣鍵盤設(shè)計(jì)及源代碼

    4*4矩陣鍵盤設(shè)計(jì)及源代碼 一 實(shí)驗(yàn)?zāi)康? 學(xué)習(xí)使用4X4 掃描
    發(fā)表于 02-08 16:30 ?472次下載

    4X4鍵盤程序

    4X4鍵盤程序 //-----------4X4鍵盤程序--------------// uc
    發(fā)表于 10-17 15:15 ?1334次閱讀

    4x4矩陣鍵盤程序及原理圖PCB

    4x4矩陣鍵盤程序及原理圖PCB,供大家下載。
    發(fā)表于 12-21 18:25 ?0次下載

    4X4鍵盤顯示源程序

    4X4鍵盤顯示源程序,感興趣的可以看看。
    發(fā)表于 06-22 15:56 ?1次下載

    51鍵盤掃描程序

    51鍵盤掃描程序,包含3X4矩陣鍵盤4X4
    發(fā)表于 08-18 18:00 ?8次下載

    使用51單片機(jī)設(shè)計(jì)4X4矩陣鍵盤電子琴的電路圖和程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)設(shè)計(jì)4X4矩陣鍵盤電子琴的電路圖和程序免費(fèi)下載。
    發(fā)表于 08-23 17:30 ?14次下載
    使用51單片機(jī)設(shè)計(jì)<b class='flag-5'>4X4</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>電子琴的電路圖和<b class='flag-5'>程序</b>免費(fèi)下載

    使用單片機(jī)實(shí)現(xiàn)4x4矩陣鍵盤程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實(shí)現(xiàn)4x4矩陣鍵盤程序免費(fèi)下載。
    發(fā)表于 08-20 17:31 ?12次下載
    使用單片機(jī)實(shí)現(xiàn)<b class='flag-5'>4x4</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>的<b class='flag-5'>程序</b>免費(fèi)下載

    使用51單片機(jī)實(shí)現(xiàn)4x4矩陣鍵盤程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)實(shí)現(xiàn)4x4矩陣鍵盤程序免費(fèi)下載。
    發(fā)表于 07-04 17:41 ?11次下載
    使用51單片機(jī)實(shí)現(xiàn)<b class='flag-5'>4x4</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>的<b class='flag-5'>程序</b>免費(fèi)下載

    使用51單片機(jī)設(shè)計(jì)4X4矩陣鍵盤程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)設(shè)計(jì)4X4矩陣鍵盤程序免費(fèi)下載。
    發(fā)表于 06-27 17:42 ?16次下載
    使用51單片機(jī)設(shè)計(jì)<b class='flag-5'>4X4</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>的<b class='flag-5'>程序</b>免費(fèi)下載

    4X4矩陣鍵盤的應(yīng)用仿真電路圖和keil程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是4X4矩陣鍵盤的應(yīng)用仿真電路圖和keil程序免費(fèi)下載。
    發(fā)表于 05-14 17:31 ?38次下載
    <b class='flag-5'>4X4</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>的應(yīng)用仿真電路圖和keil<b class='flag-5'>程序</b>免費(fèi)下載

    使用單片機(jī)實(shí)現(xiàn)數(shù)碼管顯示4X4鍵盤矩陣按鍵的程序和仿真資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實(shí)現(xiàn)數(shù)碼管顯示4X4鍵盤矩陣按鍵的程序和仿真資料免費(fèi)下載。
    發(fā)表于 06-01 14:18 ?37次下載
    使用單片機(jī)實(shí)現(xiàn)數(shù)碼管顯示<b class='flag-5'>4X4</b><b class='flag-5'>鍵盤</b><b class='flag-5'>矩陣</b>按鍵的<b class='flag-5'>程序</b>和仿真資料免費(fèi)下載

    使用單片機(jī)實(shí)現(xiàn)4X4鍵盤矩陣控制條形LED顯示的程序和仿真資料免費(fèi)下載

      本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實(shí)現(xiàn)4X4鍵盤矩陣控制條形LED顯示的程序和仿真資料免費(fèi)下載。
    發(fā)表于 06-01 14:18 ?22次下載
    使用單片機(jī)實(shí)現(xiàn)<b class='flag-5'>4X4</b><b class='flag-5'>鍵盤</b><b class='flag-5'>矩陣</b>控制條形LED顯示的<b class='flag-5'>程序</b>和仿真資料免費(fèi)下載

    4x4矩陣鍵盤工作原理掃描程序

    ,所以必須外接上拉電阻,當(dāng)I/O口為P1、P2和P3口時(shí),由于內(nèi)部已有上拉電阻,因此可省略外接的上拉電阻。 二、按鍵消抖 單片機(jī)系統(tǒng)中所使用的鍵盤都是機(jī)械式的彈性按鍵,因?yàn)榇嬖跈C(jī)械觸點(diǎn)的彈性作用,在按鍵閉合和彈起的瞬間都會(huì)出現(xiàn)抖動(dòng),如圖
    的頭像 發(fā)表于 04-07 14:36 ?7482次閱讀
    <b class='flag-5'>4x4</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b><b class='flag-5'>工作原理</b>及<b class='flag-5'>掃描</b><b class='flag-5'>程序</b>

    帶有stm32的宏鍵盤4x4矩陣

    電子發(fā)燒友網(wǎng)站提供《帶有stm32的宏鍵盤4x4矩陣.zip》資料免費(fèi)下載
    發(fā)表于 07-28 14:19 ?5次下載
    帶有stm32的宏<b class='flag-5'>鍵盤</b><b class='flag-5'>4x4</b><b class='flag-5'>矩陣</b>