51 單片機 C 語言:不規則的矩陣鍵盤

單片機的 P4.0,P2.0--P2.6 這幾個 IO 上面接一個 4*4 的鍵盤。


這裏P4.0是最低位,P2.6是最高位。


一個按鍵接在同一個端口上 很好操作的,但是這些 IO 在兩個端口上面。


這些端口不連續應該咋寫鍵盤程序 ?


題目鏈接:http://zhidao.baidu.com/question/1573006531976632500


做而論道回答如下:   2013-09-16 18:57   提問者採納


//定義鍵盤端口:


sbit  HH1 = P4^0;

sbit  HH2 = P2^0;

sbit  HH3 = P2^1;

sbit  HH4 = P2^2;


sbit  LL1 = P2^3;

sbit  LL2 = P2^4;

sbit  LL3 = P2^5;

sbit  LL4 = P2^6;


char scan_key(void)   //行列掃描

{

    HH1 = 0;

    if (!LL1)  return 0;

    if (!LL2)  return 1;

    if (!LL3)  return 2;

    if (!LL4)  return 3;

    HH1 = 1;


    HH2 = 0;

    if (!LL1)  return 4;

    if (!LL2)  return 5;

    if (!LL3)  return 6;

    if (!LL4)  return 7;

    HH2 = 1;


    HH3 = 0;

    if (!LL1)  return 8;

    if (!LL2)  return 9;

    if (!LL3)  return 10;

    if (!LL4)  return 11;

    HH3 = 1;


    HH4 = 0;

    if (!LL1)  return 12;

    if (!LL2)  return 13;

    if (!LL3)  return 14;

    if (!LL4)  return 15;

    HH4 = 1;


    return 255;    //沒有按鍵,就返回 255

}


本程序,使用的變量最少,也不涉及其它接口。


代碼最少,執行效率最高。


本程序,沒有消抖和等待釋放的環節,看明白後,自己添加。


----------------------------


提問者評價:用這個方法 是調出來了,謝謝!!!

 

----------------------------


後記:


利用 51 單片機的位操作指令,做這個是很容易的。


對比一下某些教材或網絡文章的鍵盤程序,做而論道的自我感覺,是相當的好。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章