×
单片机 > 单片机程序设计 > 详情

51 单片机 C 语言:不规则的矩阵键盘

发布时间:2020-08-26 发布时间:
|

单片机的 P4.0,P2.0--P2.6 这几个 IO 上面接一个 4*4 的键盘。


这里P4.0是最低位,P2.6是最高位。


一个按键接在同一个端口上 很好操作的,但是这些 IO 在两个端口上面。


这些端口不连续应该咋写键盘程序 ?



//定义键盘端口:


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 单片机的位操作指令,做这个是很容易的。


对比一下某些教材或网络文章的键盘程序,做而论道的自我感觉,是相当的好。




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
采用AT89C2051的数字可调稳压电源单片机源程序