永发信息网

单片机独立键盘和4*4矩阵键盘中松手检测的区别,为什么矩阵键盘不能使用独立键盘的松手检测?

答案:4  悬赏:50  手机版
解决时间 2021-02-15 04:27
  • 提问者网友:喧嚣尘世
  • 2021-02-14 10:23
uchar keyscan()
{
P3=0xfe;
temp=P3; //P3=0xee
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3; //P3=0xee
temp=temp&0xf0; //temp=0xe0
while(temp!=0xf0)
{
temp=P3; //temp=0xee
switch(temp)
{
case 0xee:num=0;break;
case 0xde:num=1;break;
case 0xbe:num=2;break;
case 0x7e:num=3;break;
}
while(temp!=0xf0)
{
temp=P3; //temp=0xee
temp=temp&0xf0; //temp=0xe0
}
}
}
return num;
}

其中
while(temp!=0xf0)//自己认为是松手检测
{
temp=P3; //temp=0xee
temp=temp&0xf0; //temp=0xe0
}
是矩阵键盘的松手检测

while(key!=0);这就是独立键盘的松手,
为什么矩阵键盘的不能用独立键盘的呢,研究了好长时间了,麻烦大侠说详细点,可以多给分的!谢谢!
最佳答案
  • 五星知识达人网友:青灯有味
  • 2021-02-14 11:27
楼主提供的程序,并不完整,不好讨论。
一般来说,4*4矩阵键盘函数的返回值是:按键信息0~15,和没有按键的代码16。
当有键按下后,还要反复检测按键,当得到返回值是16,才能认为全部按键都已经松手。
独立键盘,while(key!=0);只是等待这个按键盘何时松手,其它键,假如仍然按着,程序也不管了。
独立键盘的检测,实在是太简单了。
全部回答
  • 1楼网友:蓝房子
  • 2021-02-14 13:21
改成: if(k1==0)//假设你要检测的按键是k1 { delay();//延时5毫秒 if(k1==0)//如果按键真的按下 { while(!k1);//等待按键松开 语句1; 语句2; } } 改成这样应该可以,你试下
  • 2楼网友:摆渡翁
  • 2021-02-14 12:36
你那按键按下去是什么电平的啊,while(key!=0);是代表1时一直执行上面的语句,等于0时才执行下面的(你上面的程序我没时间看了)。 uchar flay=1; if(!key); { Delay(10); { if(!key&&flay); { flay=0; 执行语句; } } else flay=1; 这样也是等你放开按键才执行的(久按也是执行一次)。希望对你有帮助。
  • 3楼网友:野慌
  • 2021-02-14 11:53
呵呵,说白了矩阵键盘结构复杂,不能用简单的松手检测是很正常的。就拿矩阵键盘的扫描来说吧是动态的,而且比独立键盘复杂的多。当然对他进行二次检测也是复杂的。 你说的while(key!=0);只是检测了一条io口,你想矩阵键盘要确定一个按键至少操作两条io,于是乎你想上面的指令就不行了!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯