chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

單片機(jī)8x8矩陣鍵盤原理說明

姚小熊27 ? 來源:網(wǎng)絡(luò)整理 ? 2018-02-24 16:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

基于單片機(jī)接矩陣鍵盤原理

單片機(jī)與矩陣鍵盤連接如下圖:

單片機(jī)8x8矩陣鍵盤原理說明

此圖用P1口P1.0---P1.3接4行P1.4--P1.7接4列

矩陣鍵盤工作原理:由于按鍵沒有接地,4行4列正好占用8個(gè)I/O如果4行我們送P3.0到P3.3送入0111然后去讀取4列的值,如果P3.0的按鍵按下那么P3.4---P3.7的值等于0111,假如是第2個(gè)鍵按下的話那么讀回來的值是1011,如果第3個(gè)鍵按下去讀回來的值是1101,如果第4個(gè)鍵按下去讀回來的值是1110,如果沒有鍵按下去讀回來就是1111。所以我們就根據(jù)讀回來的值來判斷按下去的是那個(gè)鍵。當(dāng)然這是對(duì)P3.0這一行,因?yàn)榫仃囨I盤是掃描的,所以下次把P3.0給1P3.1給0對(duì)第2行,陸續(xù)的第3行第4行,0111101111011110而每次都去從新掃描一遍列值列有4個(gè)值,以確定是那個(gè)鍵按下。無論何時(shí)任何一個(gè)時(shí)間有一個(gè)按鍵被按下就跳出循環(huán)。當(dāng)然不可能有2個(gè)鍵剛好一起按下你的手沒有這么好的力度,就算有2個(gè)鍵一起按鍵,程序也有先后檢測的順序,只能檢測一個(gè)后面的檢測不到。

P3=0XFE;//第一行給0

temp;定義個(gè)變量

temp=P3;讀回來由于讀需要先寫1因?yàn)镻3=FE已經(jīng)把高4位給1了所以能讀了

temp&oxf0如果沒有按鍵按下結(jié)果還是0xf0。如果有鍵按下結(jié)果就不是0xf0了。

num然后我們?cè)俣x一個(gè)變量讓它賦值給這個(gè)按下去的按鍵值。

一次類推把第一行賦值0掃描一遍然后把第2行賦值0掃描一遍。。。。。。。。。。。。。。共掃描16遍。

只要有鍵按下就會(huì)得到一個(gè)值num就從1排到16.共16個(gè)按鍵4*4的矩陣鍵盤。

我再總結(jié)下思路:

首先低4位是行共4行分別把每行給0低電平就4次0111、1011、1101、1110對(duì)吧

然后去檢測高4位4列啊先不考慮極端情況,4列就4個(gè)按鍵只要按下一個(gè)P3口的高4位就會(huì)有一個(gè)值。根據(jù)這個(gè)值就能判斷是那個(gè)鍵了。

如:P3=11111110低四位是行先把第一行給0

有按鍵下的話temp=P3讀回來11011110然后temp&0xf0與運(yùn)算下就判斷下還等于oxf0嗎?如還等于就沒有按下,如果不等于就肯定有按鍵按下。定義個(gè)變量讓它等于這個(gè)不是0XF0的值,做個(gè)標(biāo)記。依次類推。

單片機(jī)8x8矩陣鍵盤原理說明

小編使用proteus模擬了一個(gè)8x8的矩陣鍵盤。以下是原理圖:

單片機(jī)8x8矩陣鍵盤原理說明

啟動(dòng)后的原來圖,還沒有按鍵按下:

單片機(jī)8x8矩陣鍵盤原理說明

再來一張,有按鍵按下的情況:

單片機(jī)8x8矩陣鍵盤原理說明

代碼如下:

#include《reg52.h》

#defineucharunsignedchar

#defineuintunsignedint

//共陰極數(shù)碼管0~9

ucharcodetable[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchartmp;//暫存P2的值

ucharkeynum;//按鍵值

ucharshi,ge;//數(shù)碼管個(gè)位和十位顯示

sbitP36=P3^6;//數(shù)碼管時(shí)能端

sbitP37=P3^7;

//數(shù)碼管顯示聲明

voiddisplay();

//毫秒級(jí)延時(shí)

voiddelay(uintz)

{

uintx,y;

for(x=z;x》0;x--)

for(y=110;y》0;y--);

}

voidkeyscan()

{

P0=0xfe;//掃描第1行

if(P2!=0xff)//有按鍵按下

{

tmp=P2;

delay(5);

if(P2!=0xff)//延時(shí)后確定有按鍵按下

{

switch(tmp)

{

case0xfe:keynum=1;break;//第1行第1個(gè)按鍵按下

case0xfd:keynum=2;break;//第1行第2個(gè)按鍵按下

case0xfb:keynum=3;break;//第1行第3個(gè)按鍵按下

case0xf7:keynum=4;break;//第1行第4個(gè)按鍵按下

case0xef:keynum=5;break;//第1行第5個(gè)按鍵按下

case0xdf:keynum=6;break;//第1行第6個(gè)按鍵按下

case0xbf:keynum=7;break;//第1行第7個(gè)按鍵按下

case0x7f:keynum=8;break;//第1行第8個(gè)按鍵按下

}

while(tmp!=0xff)//等待按鍵松手

{

tmp=P2;

display();

}

}

}

delay(5);

P0=0xfd;//掃描第2行

if(P2!=0xff)//有按鍵按下

{

tmp=P2;

delay(5);

if(P2!=0xff)//延時(shí)后確定有按鍵按下

{

switch(tmp)

{

case0xfe:keynum=9;break;//第2行第1個(gè)按鍵按下

case0xfd:keynum=10;break;//第2行第2個(gè)按鍵按下

case0xfb:keynum=11;break;//第2行第3個(gè)按鍵按下

case0xf7:keynum=12;break;//第2行第4個(gè)按鍵按下

case0xef:keynum=13;break;//第2行第5個(gè)按鍵按下

case0xdf:keynum=14;break;//第2行第6個(gè)按鍵按下

case0xbf:keynum=15;break;//第2行第7個(gè)按鍵按下

case0x7f:keynum=16;break;//第2行第8個(gè)按鍵按下

}

while(tmp!=0xff)

{

tmp=P2;

display();

}

}

}

delay(5);

P0=0xfb;//掃描第3行

if(P2!=0xff)//有按鍵按下

{

tmp=P2;

delay(5);

if(P2!=0xff)//延時(shí)后確定有按鍵按下

{

switch(tmp)

{

case0xfe:keynum=17;break;//第3行第1個(gè)按鍵按下

case0xfd:keynum=18;break;//第3行第2個(gè)按鍵按下

case0xfb:keynum=19;break;//第3行第3個(gè)按鍵按下

case0xf7:keynum=20;break;//第3行第4個(gè)按鍵按下

case0xef:keynum=21;break;//第3行第5個(gè)按鍵按下

case0xdf:keynum=22;break;//第3行第6個(gè)按鍵按下

case0xbf:keynum=23;break;//第3行第7個(gè)按鍵按下

case0x7f:keynum=24;break;//第3行第8個(gè)按鍵按下

}

while(tmp!=0xff)

{

tmp=P2;

display();

}

}

}

delay(5);

P0=0xf7;//掃描第4行

if(P2!=0xff)//有按鍵按下

{

tmp=P2;

delay(5);

if(P2!=0xff)//延時(shí)后確定有按鍵按下

{

switch(tmp)

{

case0xfe:keynum=25;break;//第4行第1個(gè)按鍵按下

case0xfd:keynum=26;break;//第4行第2個(gè)按鍵按下

case0xfb:keynum=27;break;//第4行第3個(gè)按鍵按下

case0xf7:keynum=28;break;//第4行第4個(gè)按鍵按下

case0xef:keynum=29;break;//第4行第5個(gè)按鍵按下

case0xdf:keynum=30;break;//第4行第6個(gè)按鍵按下

case0xbf:keynum=31;break;//第4行第7個(gè)按鍵按下

case0x7f:keynum=32;break;//第4行第8個(gè)按鍵按下

}

while(tmp!=0xff)

{

tmp=P2;

display();

}

}

}

delay(5);

P0=0xef;//掃描第5行

if(P2!=0xff)//有按鍵按下

{

tmp=P2;

delay(5);

if(P2!=0xff)//延時(shí)后確定有按鍵按下

{

switch(tmp)

{

case0xfe:keynum=33;break;//第5行第1個(gè)按鍵按下

case0xfd:keynum=34;break;//第5行第2個(gè)按鍵按下

case0xfb:keynum=35;break;//第5行第3個(gè)按鍵按下

case0xf7:keynum=36;break;//第5行第4個(gè)按鍵按下

case0xef:keynum=37;break;//第5行第5個(gè)按鍵按下

case0xdf:keynum=38;break;//第5行第6個(gè)按鍵按下

case0xbf:keynum=39;break;//第5行第7個(gè)按鍵按下

case0x7f:keynum=40;break;//第5行第8個(gè)按鍵按下

}

while(tmp!=0xff)

{

tmp=P2;

display();

}

}

}

delay(5);

P0=0xdf;//掃描第6行

if(P2!=0xff)//有按鍵按下

{

tmp=P2;

delay(5);

if(P2!=0xff)//延時(shí)后確定有按鍵按下

{

switch(tmp)

{

case0xfe:keynum=41;break;//第6行第1個(gè)按鍵按下

case0xfd:keynum=42;break;//第6行第2個(gè)按鍵按下

case0xfb:keynum=43;break;//第6行第3個(gè)按鍵按下

case0xf7:keynum=44;break;//第6行第4個(gè)按鍵按下

case0xef:keynum=45;break;//第6行第5個(gè)按鍵按下

case0xdf:keynum=46;break;//第6行第6個(gè)按鍵按下

case0xbf:keynum=47;break;//第6行第7個(gè)按鍵按下

case0x7f:keynum=48;break;//第6行第8個(gè)按鍵按下

}

while(tmp!=0xff)

{

tmp=P2;

display();

}

}

}

delay(5);

P0=0xbf;//掃描第7行

if(P2!=0xff)//有按鍵按下

{

tmp=P2;

delay(5);

if(P2!=0xff)//延時(shí)后確定有按鍵按下

{

switch(tmp)

{

case0xfe:keynum=49;break;//第7行第1個(gè)按鍵按下

case0xfd:keynum=50;break;//第7行第2個(gè)按鍵按下

case0xfb:keynum=51;break;//第7行第3個(gè)按鍵按下

case0xf7:keynum=52;break;//第7行第4個(gè)按鍵按下

case0xef:keynum=53;break;//第7行第5個(gè)按鍵按下

case0xdf:keynum=54;break;//第7行第6個(gè)按鍵按下

case0xbf:keynum=55;break;//第7行第7個(gè)按鍵按下

case0x7f:keynum=56;break;//第7行第8個(gè)按鍵按下

}

while(tmp!=0xff)

{

tmp=P2;

display();

}

}

}

delay(5);

P0=0x7f;//掃描第8行

if(P2!=0xff)//有按鍵按下

{

tmp=P2;

delay(5);

if(P2!=0xff)//延時(shí)后確定有按鍵按下

{

switch(tmp)

{

case0xfe:keynum=57;break;//第8行第1個(gè)按鍵按下

case0xfd:keynum=58;break;//第8行第2個(gè)按鍵按下

case0xfb:keynum=59;break;//第8行第3個(gè)按鍵按下

case0xf7:keynum=60;break;//第8行第4個(gè)按鍵按下

case0xef:keynum=61;break;//第8行第5個(gè)按鍵按下

case0xdf:keynum=62;break;//第8行第6個(gè)按鍵按下

case0xbf:keynum=63;break;//第8行第7個(gè)按鍵按下

case0x7f:keynum=64;break;//第8行第8個(gè)按鍵按下

}

while(tmp!=0xff)

{

tmp=P2;

display();

}

}

}

delay(5);

}

voiddisplay()

{

//顯示個(gè)位

P37=0;

P1=table[ge];

delay(5);

P37=1;

//顯示十位

P36=0;

P1=table[shi];

delay(5);

P36=1;

}

voidmain()

{

while(1)

{

shi=keynum/10;

ge=keynum;

keyscan();

display();//這里的顯示是保存上一次的顯示值

}

}

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

    關(guān)注

    6067

    文章

    44992

    瀏覽量

    650588
  • 矩陣鍵盤
    +關(guān)注

    關(guān)注

    7

    文章

    207

    瀏覽量

    32119
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    51單片機(jī)學(xué)習(xí)記錄(8) “8X8點(diǎn)陣 精選資料推薦

    51單片機(jī)學(xué)習(xí)記錄(8) “8x8點(diǎn)陣”8x8點(diǎn)陣就是由64個(gè)小led燈組成的矩陣,現(xiàn)在先讓我們看一下點(diǎn)陣的內(nèi)部結(jié)構(gòu)從圖中可以了解到(從行看
    發(fā)表于 07-15 06:45

    如何利用單片去設(shè)計(jì)機(jī)8x8矩陣鍵盤機(jī)串口通信

    /*-------------------------------------------------------------------------------------------------------------------------------- 說明:發(fā)送端單片機(jī)
    發(fā)表于 12-13 08:16

    51單片機(jī)3X44X4矩陣鍵盤,鍵盤掃描

    51單片機(jī)3X44X4矩陣鍵盤,鍵盤掃描。
    發(fā)表于 08-18 18:03 ?39次下載

    8x8點(diǎn)陣貪吃蛇

    51單片機(jī)--8x8點(diǎn)陣貪吃蛇:源程序文件(含圖片、程序文本)
    發(fā)表于 12-26 17:21 ?48次下載

    基于51單片機(jī)控制的8X8點(diǎn)陣貪吃蛇的程序資料合集免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是基于51單片機(jī)控制的8X8點(diǎn)陣貪吃蛇的程序資料合集免費(fèi)下載。
    發(fā)表于 02-18 08:00 ?28次下載
    基于51<b class='flag-5'>單片機(jī)</b>控制的<b class='flag-5'>8X8</b>點(diǎn)陣貪吃蛇的程序資料合集免費(fèi)下載

    使用51單片機(jī)控制LED實(shí)現(xiàn)8X8點(diǎn)陣的電路圖和程序及資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)控制LED實(shí)現(xiàn)8X8點(diǎn)陣的電路圖和程序及資料說明
    發(fā)表于 04-17 17:27 ?11次下載
    使用51<b class='flag-5'>單片機(jī)</b>控制LED實(shí)現(xiàn)<b class='flag-5'>8X8</b>點(diǎn)陣的電路圖和程序及資料<b class='flag-5'>說明</b>

    如何使用51單片機(jī)實(shí)現(xiàn)8x8點(diǎn)陣顯示的程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何使用51單片機(jī)實(shí)現(xiàn)8x8點(diǎn)陣顯示的程序免費(fèi)下載。
    發(fā)表于 06-28 17:42 ?24次下載
    如何使用51<b class='flag-5'>單片機(jī)</b>實(shí)現(xiàn)<b class='flag-5'>8x8</b>點(diǎn)陣顯示的程序免費(fèi)下載

    使用51單片機(jī)進(jìn)行8x8點(diǎn)陣的詳細(xì)資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)進(jìn)行8x8點(diǎn)陣的詳細(xì)資料說明。
    發(fā)表于 06-17 17:44 ?13次下載
    使用51<b class='flag-5'>單片機(jī)</b>進(jìn)行<b class='flag-5'>8x8</b>點(diǎn)陣的詳細(xì)資料<b class='flag-5'>說明</b>

    數(shù)碼管順序顯示和8x8點(diǎn)陣及矩陣鍵盤的數(shù)據(jù)庫資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)碼管順序顯示和8x8點(diǎn)陣及矩陣鍵盤的數(shù)據(jù)庫資料免費(fèi)下載。
    發(fā)表于 05-22 08:00 ?6次下載
    數(shù)碼管順序顯示和<b class='flag-5'>8x8</b>點(diǎn)陣及<b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>的數(shù)據(jù)庫資料免費(fèi)下載

    51單片機(jī)8x8矩陣鍵盤+數(shù)碼管+74HC595+Proteus仿真

    51單片機(jī)8x8矩陣鍵+數(shù)碼管+74HC595+Proteus仿真硬件:AT89C52、74HC595、2位數(shù)碼管、64個(gè)按鍵、74HC245、兩路數(shù)碼管顯示,實(shí)際應(yīng)用電路只需一路即可,未來驗(yàn)證
    發(fā)表于 11-23 17:36 ?45次下載
    51<b class='flag-5'>單片機(jī)</b><b class='flag-5'>8x8</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>+數(shù)碼管+74HC595+Proteus仿真

    51單片機(jī)8x9矩陣鍵盤+數(shù)碼管+74HC595+Proteus仿真

    51單片機(jī)8x9矩陣鍵盤+數(shù)碼管+74HC595+Proteus仿真這是在《51單片機(jī)8x8
    發(fā)表于 11-23 17:51 ?19次下載
    51<b class='flag-5'>單片機(jī)</b><b class='flag-5'>8x</b>9<b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>+數(shù)碼管+74HC595+Proteus仿真

    行列掃描DIY 8x8 LED矩陣

    電子發(fā)燒友網(wǎng)站提供《行列掃描DIY 8x8 LED矩陣.zip》資料免費(fèi)下載
    發(fā)表于 10-19 11:14 ?2次下載
    行列掃描DIY <b class='flag-5'>8x8</b> LED<b class='flag-5'>矩陣</b>

    帶有74HC138芯片的五個(gè)矩陣(8x8)鍵盤

    電子發(fā)燒友網(wǎng)站提供《帶有74HC138芯片的五個(gè)矩陣(8x8)鍵盤 .zip》資料免費(fèi)下載
    發(fā)表于 11-11 09:53 ?3次下載
    帶有74HC138芯片的五個(gè)<b class='flag-5'>矩陣</b>(<b class='flag-5'>8x8</b>)<b class='flag-5'>鍵盤</b>

    Arduino趕上節(jié)拍8x8 LED矩陣

    電子發(fā)燒友網(wǎng)站提供《Arduino趕上節(jié)拍8x8 LED矩陣.zip》資料免費(fèi)下載
    發(fā)表于 12-05 10:24 ?0次下載
    Arduino趕上節(jié)拍<b class='flag-5'>8x8</b> LED<b class='flag-5'>矩陣</b>

    使用8x8 LED矩陣制作Magic Eyes

    電子發(fā)燒友網(wǎng)站提供《使用8x8 LED矩陣制作Magic Eyes.zip》資料免費(fèi)下載
    發(fā)表于 02-07 09:25 ?1次下載
    使用<b class='flag-5'>8x8</b> LED<b class='flag-5'>矩陣</b>制作Magic Eyes