關(guān)于矩陣鍵盤行列掃描的測試實驗

我會時常分享一些51的程序編寫方法,有一定基礎(chǔ)的可以來看看。如有不當(dāng)之處,歡迎大家指正,一同進(jìn)步。
矩陣鍵盤無非就是兩種掃描方式,一為逐行掃描,二為行列一起掃描讀取鍵值。先確定行后確定列的讀取方法沒有什么可講的,我針對行列一起掃描來總結(jié)一下我常用的一些方法。
學(xué)習(xí)嵌入式或者說硬件一定是從硬件原理開始,因為矩陣鍵盤電路原理簡單,網(wǎng)上講解較多,我只附上原理圖,重點跟大家交流一下程序部分。
下圖就是矩陣鍵盤 由P1口控制,P10~P13為列 P14~P17為行。

矩陣鍵盤電路原理圖

高四位輸出低電平,低四位輸出高電平,檢測低四位不全為高可確定列;反過來高四位輸出高電平,低四位輸出高電平,高四位不全為高確定行,行列交叉即可獲得按鍵鍵值。廢話不多說,直接上程序,我已經(jīng)詳細(xì)注解過了,不懂多看看哈。

/*******************************************************************************
* 函數(shù)名        : KeyDown
* 函數(shù)功能    : 檢測有按鍵按下并讀取鍵值
* 輸入          : 無
* 輸出        : 無
* 作者    : INK
* 日期地點    : NANKING
*******************************************************************************/
void KeyDown(void)
{
  char a=0;
  GPIO_KEY=0x0f;      // 位定義的引腳
  if(GPIO_KEY!=0x0f)  //讀取按鍵是否按下
  {
    Delay10ms();      //延時10ms進(jìn)行消抖
        if(GPIO_KEY!=0x0f) //再次檢測鍵盤是否按下
          {
          //測試列
            GPIO_KEY=0X0F;
switch(GPIO_KEY)
        {  //此段程序只是為了確定列的值 方便在后面進(jìn)行測試行的時候加減運算 獲得具體案件的行列值 從而轉(zhuǎn)換為按鍵值
case(0X07): KeyValue=0;break;//掃描第一列
case(0X0b): KeyValue=1;break;//按鍵第二列 是keyValue=1
case(0X0d): KeyValue=2;break;//按鍵第三列
case(0X0e): KeyValue=3;break;//按鍵第四列
         }
              //測試行 確定了列以后需要翻轉(zhuǎn) 確定行 交叉確定鍵值
          GPIO_KEY=0XF0; //屏蔽高四位
switch(GPIO_KEY)
        {                      //已經(jīng)進(jìn)行過
case(0X70): KeyValue=KeyValue;break;//自己去看為什么是 0X70 列的時候又為什么是0X07 硬件相結(jié)合
case(0Xb0): KeyValue=KeyValue+4;break;  //鍵值是5  掃描第二行
case(0Xd0): KeyValue=KeyValue+8;break;  //鍵值是9  掃描第三行
case(0Xe0): KeyValue=KeyValue+12;break; //鍵值13  掃描第四行
        }   //其實最終返回的鍵值就是進(jìn)行過加法運算的
while((a<50)&&(GPIO_KEY!=0xf0)) //檢測按鍵松手檢測 松手 按鍵就是 f0
        {
          Delay10ms();
          a++;//防止程序死在 while循環(huán)里 利用a的值跳出循環(huán),比較不錯的雙重保險辦法 
        }
    }
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容