矩阵按键处理多个键值问题

2019-07-15 17:23发布

矩阵怎么处理在有键已按下的情况下,识别出后面按下去是什么键,有相关的解决方法或相关的程序,请提供借鉴一下,谢谢了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
陈光辉
2019-07-16 14:17
比如是4*4矩阵按键,检测时可以通过单片机的I/O口送出低电平。检测时,先送出一列为低电平,其余几列全为高电平(此时我们确定了列数),然后立即轮流检测一次各行是否有低电平,若检测到某一行为低电平,则我们就能确定是哪个按键被按下了。  你可以看一下下面的代码,希望对你帮助。 代码的返回值就是哪个按键的值,可以用一个变量进行标记,记录按下的次数。


uint matrixkeyscan()
{
        uchar temp,key;

        P3=0xfe;        //第一行键盘
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delayms(10);    //消除按键抖动
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xee:
                                                        key=0;
                                                        break;
                                case 0xde:
                                                        key=1;
                                                        break;
                                case 0xbe:
                                                        key=2;
                                                        break;
                                case 0x7e:
                                                        key=3;
                                                        break;                               

                        }
                        while(temp!=0xf0)  //条件满足时是1;等待按键释放;
                        {
                                temp=P3;         //这两句是增加程序的稳定性
                                temp=temp&0xf0;
                        }

                }                               
        }
       

        P3=0xfd;         //第二行键盘
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delayms(10);    //消除按键抖动
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xed:
                                                        key=4;
                                                        break;
                                case 0xdd:
                                                        key=5;
                                                        break;
                                case 0xbd:
                                                        key=6;
                                                        break;
                                case 0x7d:
                                                        key=7;
                                                        break;                               

                        }
                        while(temp!=0xf0)  //条件满足时是1;等待按键释放;
                        {
                                temp=P3;         //这两句是增加程序的稳定性
                                temp=temp&0xf0;
                        }

                }                               
        }


        P3=0xfb;                              //第三行键盘   
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delayms(10);    //消除按键抖动
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xeb:
                                                        key=8;
                                                        break;
                                case 0xdb:
                                                        key=9;
                                                        break;
                                case 0xbb:
                                                        key=10;
                                                        break;
                                case 0x7b:
                                                        key=11;
                                                        break;                               

                        }
                        while(temp!=0xf0)  //条件满足时是1;等待按键释放;
                        {
                                temp=P3;         //这两句是增加程序的稳定性
                                temp=temp&0xf0;
                        }
               

                }                               
        }


        P3=0xf7;            //第四行键盘
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delayms(10);    //消除按键抖动
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xe7:
                                                        key=12;
                                                        break;
                                case 0xd7:
                                                        key=13;
                                                        break;
                                case 0xb7:
                                                        key=14;
                                                        break;
                                case 0x77:
                                                        key=15;
                                                        break;                               

                        }
                        while(temp!=0xf0)  //条件满足时是1;等待按键释放;
                        {
                                temp=P3;         //这两句是增加程序的稳定性
                                temp=temp&0xf0;
                        }
               

                }                               
        }
        return key;
}

不懂的话,可以加我好友,大家一起讨论,我也是新手,希望大家能互相进步!

一周热门 更多>