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

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

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

基于51單片機的矩陣按鍵設(shè)計

天才小貍花 ? 來源:Sigle_chip ? 作者:Sigle_chip ? 2022-08-22 10:10 ? 次閱讀

導語

獨立按鍵在系統(tǒng)中大量使用,會占用大量的IO口,因此采用矩陣按鍵的設(shè)計。使用 8個 IO可實現(xiàn)了 16個按鍵,與此對應的也可以設(shè)計更為復雜的電路,來實現(xiàn)更少的IO,更多的按鍵,本質(zhì)上都是通過IO捕獲電平上的變化。

矩陣按鍵

電路

通過行與列的掃描來檢查那個IO電平被按下,而當某一個按鍵按下時,改按鍵對應的行和列就會短接,當按鍵按下時,一個高電平和低電平短接會把高電平拉低。

逐行掃描:高4位P17-P14鏈接每一行,依次把每一行設(shè)置為低電平,把低4位設(shè)置未高電平,然后檢測第四位是否全為1,如果不全為1,說明有按鍵按下,電平被拉低,也就是對應的按鍵被按下,如此循環(huán)檢測每一行;其實根據(jù)原理可以看出來,除了逐行掃描,也可以逐列掃描,原理相同;

行列掃描:和逐行或逐列掃描不通的是行列掃描;掃描原理是先把高4位設(shè)置為低電平,把低4位設(shè)置為高電平,這樣如果低4位中有電平變低,說明該列有按鍵按下,但不知道具體是哪一行的按鍵;接著反過來操作,把高4位設(shè)置為高電平,低四位設(shè)置為低電平,檢測高4位哪一位被拉低,那么按鍵就在對應的行上,這樣通過兩次掃描就知道該按鍵在哪一行哪一列了,也就知道具體是哪個按鍵被按下了。

poYBAGMC5XGAWxBqAAE4Ua2fifs971.png

程序

void KeyScan()
{
//4*4矩陣鍵盤掃描
P3 = 0XF0;//列掃描
if(P3 != 0XF0)//判斷按鍵是否被按下
{
delay(10);//軟件消抖10ms
if(P3 != 0XF0)//判斷按鍵是否被按下
{
switch(P3) //判斷那一列被按下
{
case 0xe0:KeyValue = 0;break;//第一列被按下
case 0xd0:KeyValue = 1;break;//第二列被按下
case 0xb0:KeyValue = 2;break;//第三列被按下
case 0x70:KeyValue = 3;break;//第四列被按下
}
P3 = 0X0F;//行掃描
switch(P3) //判斷那一行被按下
{
case 0x0e:KeyValue = KeyValue;break;//第一行被按下
case 0x0d:KeyValue = KeyValue + 4;break;//第二行被按下
case 0x0b:KeyValue = KeyValue + 8;break;//第三行被按下
case 0x07:KeyValue = KeyValue + 12;break;//第四行被按下
}
while(P3 != 0X0F);//松手檢測
}
}
P3 = 0XFF;//獨立按鍵掃描
if(P3 != 0XFF)
{
delay(10);//軟件消抖10ms
if(P3 != 0XFF)
{
switch(P3) //判斷那一行被按下
{
case 0xfe:KeyValue = 16;break;//S2被按下
case 0xfd:KeyValue = 17;break;//S3被按下
case 0xfb:KeyValue = 18;break;//S4被按下
case 0xf7:KeyValue = 19;break;//S5被按下
}
while(P3 != 0XFF);//松手檢測
}
}
}

其他鍵盤

8個IO控制64個IO。

pYYBAGMC5WGARGM9AADUhc_B1lw557.png

審核編輯:湯梓紅

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

    關(guān)注

    6026

    文章

    44455

    瀏覽量

    630962
  • 51單片機
    +關(guān)注

    關(guān)注

    273

    文章

    5696

    瀏覽量

    122773
  • 矩陣按鍵
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    8352
  • 獨立按鍵
    +關(guān)注

    關(guān)注

    1

    文章

    45

    瀏覽量

    11530
收藏 人收藏

    評論

    相關(guān)推薦

    有關(guān)51單片機矩陣按鍵

    求大神指點矩陣按鍵電路圖的原理
    發(fā)表于 07-14 11:02

    大俠們,求教關(guān)于51單片機矩陣按鍵的問題

    我用的是吳鑒鷹的開發(fā)板,其中關(guān)于矩陣按鍵的程序不太理解,請各位前輩大神指教unsigned char Key_Scan(void){uchar Key_Temp,Scan_Code
    發(fā)表于 09-26 20:42

    怎么實現(xiàn)51單片機矩陣按鍵?

    怎么實現(xiàn)51單片機矩陣按鍵?
    發(fā)表于 10-09 09:12

    51單片機矩陣按鍵怎么運用?

    51單片機矩陣按鍵怎么運用
    發(fā)表于 11-01 08:15

    51單片機矩陣按鍵

    51單片機矩陣按鍵,根據(jù)按鍵數(shù)在數(shù)碼管上顯示。
    發(fā)表于 05-09 10:59 ?4次下載

    51單片機矩陣按鍵的功能應用

    codeunsignedcharLedChar[]={//數(shù)碼管顯示字符轉(zhuǎn)換表 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E }; unsignedcharKeySta[4][4]={//全部
    發(fā)表于 03-05 15:35 ?3245次閱讀

    51單片機矩陣按鍵的實驗詳細資料說明

    方法一:逐行掃描:我們可以通過高四位輪流輸出低電平來對矩陣鍵盤進行逐行掃描,當?shù)退奈唤邮盏降臄?shù)據(jù)不全為1的時候,說明有按鍵按下,然后通過接收到的數(shù)據(jù)是哪一位為0來判斷是哪一個按鍵被按下。
    發(fā)表于 04-15 18:25 ?0次下載

    51單片機矩陣按鍵掃描的原來和電路圖及代碼免費下載

    原理:當按鍵按下時按鍵兩個引腳為0;先給P1.3-P1.0為1,P1.7-P1.4為0(代碼中GPIO_KEY=0x0f;),當有按鍵按下,它的兩個引腳都應該為0,我們事先把列引腳設(shè)為了1,看哪一位
    發(fā)表于 09-19 17:20 ?0次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>矩陣</b><b class='flag-5'>按鍵</b>掃描的原來和電路圖及代碼免費下載

    矩陣按鍵、秒表、數(shù)碼管動態(tài)掃描和數(shù)碼管同時加減的程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是基于51單片機矩陣按鍵、秒表、數(shù)碼管動態(tài)掃描和數(shù)碼管同時加減的C語言程序免費下載。
    發(fā)表于 05-13 08:00 ?21次下載
    <b class='flag-5'>矩陣</b><b class='flag-5'>按鍵</b>、秒表、數(shù)碼管動態(tài)掃描和數(shù)碼管同時加減的程序免費下載

    51單片機矩陣按鍵

    矩陣按鍵,顧名思義,就是形成矩陣按鍵,一般由多行多列組成,如下圖是一個4*4的矩陣按鍵;如果是
    發(fā)表于 11-14 16:21 ?3次下載
    【<b class='flag-5'>51</b><b class='flag-5'>單片機</b>】<b class='flag-5'>矩陣</b><b class='flag-5'>按鍵</b>

    基于51單片機矩陣按鍵學習

    矩陣按鍵就是獨立按鍵的結(jié)合體,矩陣按鍵的優(yōu)點是提高了I/O端口的利用率,用M+N個I/O端口就可以控制M×N個獨立
    發(fā)表于 11-23 16:36 ?17次下載
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機</b>的<b class='flag-5'>矩陣</b><b class='flag-5'>按鍵</b>學習

    51單片機 矩陣按鍵控制數(shù)碼管顯示0~F

    通過按下4*4矩陣按鍵讓數(shù)碼管顯示對應的數(shù)值#include <reg52.h>typedef unsigned char u8;typedef unsigned int
    發(fā)表于 11-23 16:36 ?7次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b> <b class='flag-5'>矩陣</b><b class='flag-5'>按鍵</b>控制數(shù)碼管顯示0~F

    基于51單片機矩陣按鍵驅(qū)動

    ;/*功能 :判斷按鍵是否按下參數(shù) :<unsigned int>函數(shù) readButtonDown 的返回值<unsigned char>從0開始的位置表示結(jié)果 :按下時為真 沒按下時為假*/#define BUTTON_DOWN_IF(Button
    發(fā)表于 11-23 17:06 ?13次下載
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機</b>的<b class='flag-5'>矩陣</b><b class='flag-5'>按鍵</b>驅(qū)動

    基于51單片機矩陣按鍵檢測數(shù)碼管顯示電路圖及程序

    本資源內(nèi)容概要: 這是基于51單片機矩陣按鍵檢測數(shù)碼管顯示設(shè)計包含了電路圖源文件(Altiumdesigner軟件打開)、C語言程序源代碼(keil軟件打開) 。 本資源適合人群:
    發(fā)表于 08-28 15:18 ?0次下載

    基于51單片機矩陣按鍵LM386放大數(shù)碼管顯示電子琴設(shè)計

    本資源內(nèi)容概要: 這是基于51單片機矩陣按鍵 LM386放大數(shù)碼管顯示電子琴設(shè)計包含了電路圖源文件(Altiumdesigner軟件打開)、C語言程序源代碼(keil軟件打開)、元件
    發(fā)表于 11-10 17:22 ?3次下載