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

2019-07-15 17:23发布

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

谢谢你的好意,但是我想要的不是这个结果
1946503604
2楼-- · 2019-07-16 23:04
比如是4*4矩阵按键,在矩阵按键扫描的时候行和列分别送相反电平此时该组IO口有一个8位二进制数值,在按第一个按键时.该组IO口数值有所变化,保持此时按键值,再按下另外按键时,此时该组IO口数值发生第二次变化,弟弟两次按键值,即可判断出第二次按键值。依次对比,就可以判断出后面按键。
Aidaohuakai
3楼-- · 2019-07-17 02:22
 精彩回答 2  元偷偷看……
yahopo
4楼-- · 2019-07-17 03:59
真不知道这么多,词不达意的人,怎么当软件工程师的。楼主要的是按下第一个按键后,再检测之后的键值,是怎么实现。而不是扫键函数。
yahopo
5楼-- · 2019-07-17 08:45
时隔一年了,楼主,怎么解决问题的,分享下,可以不
zhayl
6楼-- · 2019-07-17 09:39
你看看这段程序怎么样?我自己写的。
#include <reg51.h>
#define KEY P1

//按键码,按键之间按位或运算
#define KEY1  0x11
#define KEY2  0x12
#define KEY3  0x14
#define KEY4  0x18
#define KEY5  0x21
#define KEY6  0x22
#define KEY7  0x24
#define KEY8  0x28
#define KEY9  0x41
#define KEY10 0x42
#define KEY11 0x44
#define KEY12 0x48
#define KEY13 0x81
#define KEY14 0x82
#define KEY15 0x84
#define KEY16 0x88

void Delay10ms(u8 c)//延时10ms
{
        u8 a,b;
        for( ; c>0; c--)
                for(b=38; b>0; b--)
                        for(a=130; a>0; a--);
}

u8 GetKeyboard()//获取矩阵键盘按键值,支持多按键
{
        u8 key,i;

        key = 0xFF;
        for(i=KEY_Delay; i>0; i--)//按键延时 KEY_Delay*10ms
        {
                KEY = 0x0F;
                if(KEY == 0x0F) break;
                if(KEY != (key & 0x0F))
                {
                        Delay10ms(1);//消抖
                        if(KEY != (key & 0x0F))
                                key &= (KEY | 0xF0);
                }
                KEY = 0xF0;
                if(KEY == 0xF0) break;
                if(KEY != (key & 0xF0))
                {
                        Delay10ms(1);//消抖
                        if(KEY != (key & 0xF0))
                                key &= (KEY | 0x0F);
                }
                Delay10ms(1);
        }
        return (~key);
}

一周热门 更多>