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

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

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

基于51單片機的矩陣鍵盤設計

CHANBAEK ? 來源:滑小稽筆記 ? 作者:電子技術園地 ? 2023-01-17 16:23 ? 次閱讀

12.1 項目分析

矩陣鍵盤,是一種在節(jié)省端口的前提下控制大量按鍵的一種方法,對于傳統(tǒng)的獨立對地鍵盤,一個按鍵就需要占用一個單片機IO口,雖然有時候會加一些擴展芯片之類的用于一個端口控制多個按鍵,但是電路結構比較復雜,矩陣鍵盤則是一種盡可能的既不用驅(qū)動芯片又能最大限度的使用大量按鍵的方法,一個a行b列的矩陣鍵盤,它所占用的端口數(shù)量是a+b個端口,所控制的按鍵數(shù)量則是a×b個按鍵,比如常見的4×4矩陣鍵盤只需要占用8個端口就可以控制16個按鍵,矩陣鍵盤的接法如下圖所示。

從圖中可以看出,每一列的按鍵取一端接在一起,每一行的按鍵取按鍵的另一列接在一起,這樣就會引出四條行掃描線和列掃描線,假設某個端口產(chǎn)生了低電平,那么對應的就會有四個按鍵變成了獨立對地鍵盤,當這四個鍵按下的時候,對應的端口電平就會拉低,所以矩陣鍵盤的按鍵檢測主要就是進行掃描檢測,在短暫的時間內(nèi)不停的掃描鍵盤,可以根據(jù)行掃描判斷,也可以根據(jù)列掃描判斷,矩陣鍵盤的識別主要有以下幾種判斷方法:

算法1 :對矩陣鍵盤的行(或者列)不停的掃描,然后檢測對應的列(或者行),當掃描的頻率超過人的反應時間時,便不會被感覺出來,但是這種方法的優(yōu)點是程序編寫較為簡單,但是代碼很長,且浪費CPU的資源。

算法2: 對矩陣鍵盤的列(或者行)全部賦低電平,然后判斷是否有行(或者列)的端口有低電平產(chǎn)生,沒有,證明按鍵沒有被按下,如果有,那么此時將端口對應的數(shù)據(jù)存放入一個變量,并同時將列(或者行)的低電平轉(zhuǎn)移到行(或者列)上,此時列(或者行)必然也會有一個低電平的端口,將這時候的數(shù)據(jù)存放入第二個變量,最后,撤銷所有的低電平,將兩個變量的數(shù)據(jù)相加,則必然會得出所有按鍵值的其中一個,那么這個按鍵值所對應的按鍵必然就是按下的按鍵,這種算法比較復雜,編程或者理解起來比較困難,但是代碼短,節(jié)省CPU資源。

12.2 原理圖

現(xiàn)在我們以原理圖為例,實現(xiàn)如下功能,用0~F代表按鍵的編號,按下某個按鍵后,在數(shù)碼管上顯示按鍵的編號(要求采用算法2方式實現(xiàn))。

**12.3 **源代碼

/*********************************************************************************************************
                頭    文    件    引    用
*********************************************************************************************************/
#include <reg51.h>                                            //導入51單片機頭文件
#include <intrins.h>
/*********************************************************************************************************
              數(shù)    據(jù)    類    型    定    義
*********************************************************************************************************/
#define u8 unsigned char                                        //定義無符號字符型數(shù)據(jù)(0~255)
#define u16 unsigned int                                        //定義無符號整型數(shù)據(jù)(0~65535)
/********************************************************
Name    :KEY_Scan
Function  :鍵盤掃描
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 仿真效果

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

    關注

    1292

    文章

    6293

    瀏覽量

    232513
  • 單片機
    +關注

    關注

    6030

    文章

    44489

    瀏覽量

    631987
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10804

    瀏覽量

    210829
  • 51單片機
    +關注

    關注

    273

    文章

    5697

    瀏覽量

    122994
  • 矩陣鍵盤
    +關注

    關注

    7

    文章

    206

    瀏覽量

    31410
收藏 人收藏

    評論

    相關推薦

    51單片機矩陣鍵盤控制設計

    51單片機矩陣鍵盤控制設計
    發(fā)表于 05-30 11:33

    51單片機矩陣鍵盤c語言程序

    51單片機矩陣鍵盤c語言程序,c51單片機實現(xiàn)矩陣
    發(fā)表于 07-21 09:20

    基于51單片機矩陣鍵盤電子密碼鎖

    基于51單片機矩陣鍵盤電子密碼鎖,使用矩陣鍵盤輸入四位密碼,有錯誤和正確提示音。
    發(fā)表于 07-21 11:23 ?116次下載

    C51單片機矩陣鍵盤設計程序的詳細資料免費下載

    本文檔的主要內(nèi)容詳細介紹的是C51單片機矩陣鍵盤設計程序的詳細資料免費下載。
    發(fā)表于 11-27 16:37 ?26次下載
    C<b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>設計程序的詳細資料免費下載

    51單片機矩陣鍵盤的原理說明和實驗程序及電路圖免費下載

    本文檔的主要內(nèi)容詳細介紹的是51單片機矩陣鍵盤的原理說明和實驗程序及電路圖免費下載。
    發(fā)表于 04-18 17:27 ?7次下載

    使用51單片機矩陣鍵盤模擬密碼鎖的C語言程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用51單片機矩陣鍵盤模擬密碼鎖的C語言程序免費下載。
    發(fā)表于 08-15 17:32 ?17次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>模擬密碼鎖的C語言程序免費下載

    51單片機-矩陣鍵盤模塊-長短按鍵&數(shù)碼管顯示-模塊化編程模板

    51單片機-矩陣鍵盤模塊-長短按鍵&數(shù)碼管顯示-模塊化編程模板
    發(fā)表于 11-21 09:21 ?28次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>-<b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>模塊-長短按鍵&數(shù)碼管顯示-模塊化編程模板

    51單片機矩陣鍵盤的原理圖

    51單片機矩陣鍵盤的原理圖
    發(fā)表于 12-30 11:32 ?66次下載

    基于AT89C51單片機矩陣鍵盤電子琴

    方案介紹AT89C51單片機矩陣鍵盤電子琴通過16個按鍵彈奏16種音調(diào);數(shù)碼管根據(jù)按鍵顯示。
    發(fā)表于 12-15 17:08 ?7次下載

    基于89C51單片機矩陣鍵盤反轉(zhuǎn)掃描源程序

    基于89C51單片機矩陣鍵盤反轉(zhuǎn)掃描源程序
    發(fā)表于 05-15 11:02 ?3次下載

    基于89C51單片機矩陣鍵盤簡易計算器源程序

    基于89C51單片機矩陣鍵盤簡易計算器源程序
    發(fā)表于 05-15 11:01 ?29次下載

    基于89C51單片機矩陣鍵盤密碼鎖源程序

    基于89C51單片機矩陣鍵盤密碼鎖源程序
    發(fā)表于 05-15 11:01 ?4次下載

    基于89C51單片機矩陣鍵盤行列掃描源程序

    基于89C51單片機矩陣鍵盤行列掃描源程序
    發(fā)表于 05-15 11:00 ?3次下載

    基于89C51單片機矩陣鍵盤中斷掃描源程序

    基于89C51單片機矩陣鍵盤中斷掃描源程序
    發(fā)表于 05-15 11:00 ?2次下載

    51單片機矩陣鍵盤掃描程序

    51單片機矩陣鍵盤掃描程序
    發(fā)表于 05-17 17:20 ?10次下載