单片机学习记录——矩阵键盘

硬件连接
这里写图片描述
如图,4*4矩阵键盘需要接8个IO引脚。
通过行列分别扫描的方法,得出键值。

软件设计

/*******************************************************
* 函 数 名         : key_scan
* 函数功能         : 返回矩阵键盘被按下的键值
* 输    入         : 无
* 输    出         : 键值(1~16),无键按下时返回0
********************************************************/
unsigned char key_scan(void)
{
    unsigned char hang = 0, lie = 0;
    unsigned char keyvalue = 0;

     // 第1回合第1步
     KEY = 0x0f;                // 从IO口输出,写IO口
     if (KEY != 0x0f)           // 从IO口输入,读IO口
     {
         // 读出的不是0x0f说明有按键被按下
         // 第1回合第2步:读出端口从读出值来判断是哪一行

         delay10ms();
         // 第一回合中算出行号
         switch (KEY)
         {
            case 0x0e:  hang = 1;   break;
            case 0x0d:  hang = 2;   break;
            case 0x0b:  hang = 3;   break;
            case 0x07:  hang = 4;   break;
            default:                break;
         }

         // 第2回合第1步
         KEY = 0xf0;
         if (KEY != 0xf0)
         {
              switch (KEY)
             {
                case 0xe0:  lie = 1;    break;
                case 0xd0:  lie = 2;    break;
                case 0xb0:  lie = 3;    break;
                case 0x70:  lie = 4;    break;
                default:                break;
             }

// 经过2个回合后hang和lie都知道了,然后根据hang和lie去计算键值即可
            keyvalue = (hang - 1) * 4 + lie;

            return keyvalue;
         }
     }

     return 0;

}

注:矩阵键盘不能同时按下两个按键。

猜你喜欢

转载自blog.csdn.net/jiaruitao777/article/details/80712829
今日推荐