
单片机独立键盘和4*4矩阵键盘中松手检测的区别,为什么矩阵键盘不能使用独立键盘的松手检测?
ucharkeyscan(){P3=0xfe;temp=P3;//P3=0xeetemp=temp&0xf0;while(temp!=0xf0){delay(5);tem...
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);这就是独立键盘的松手,
为什么矩阵键盘的不能用独立键盘的呢,研究了好长时间了,麻烦大侠说详细点,可以多给分的!谢谢! 展开
{
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);这就是独立键盘的松手,
为什么矩阵键盘的不能用独立键盘的呢,研究了好长时间了,麻烦大侠说详细点,可以多给分的!谢谢! 展开
4个回答
展开全部
楼主提供的程序,并不完整,不好讨论。
一般来说,4*4矩阵键盘函数的返回值是:按键信息0~15,和没有按键的代码16。
当有键按下后,还要反复检测按键,当得到返回值是16,才能认为全部按键都已经松手。
独立键盘,while(key!=0);只是等待这个按键盘何时松手,其它键,假如仍然按着,程序也不管了。
独立键盘的检测,实在是太简单了。
一般来说,4*4矩阵键盘函数的返回值是:按键信息0~15,和没有按键的代码16。
当有键按下后,还要反复检测按键,当得到返回值是16,才能认为全部按键都已经松手。
独立键盘,while(key!=0);只是等待这个按键盘何时松手,其它键,假如仍然按着,程序也不管了。
独立键盘的检测,实在是太简单了。
追问
您好,您的百度空间我是看了好多次了,真的学习很多东西,非常感谢您的无私分享!
展开全部
呵呵,说白了矩阵键盘结构复杂,不能用简单的松手检测是很正常的。就拿矩阵键盘的扫描来说吧是动态的,而且比独立键盘复杂的多。当然对他进行二次检测也是复杂的。
你说的while(key!=0);只是检测了一条io口,你想矩阵键盘要确定一个按键至少操作两条io,于是乎你想上面的指令就不行了!
你说的while(key!=0);只是检测了一条io口,你想矩阵键盘要确定一个按键至少操作两条io,于是乎你想上面的指令就不行了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你那按键按下去是什么电平的啊,while(key!=0);是代表1时一直执行上面的语句,等于0时才执行下面的(你上面的程序我没时间看了)。
uchar flay=1;
if(!key);
{
Delay(10);
{
if(!key&&flay);
{
flay=0;
执行语句;
}
}
else
flay=1;
这样也是等你放开按键才执行的(久按也是执行一次)。希望对你有帮助。
uchar flay=1;
if(!key);
{
Delay(10);
{
if(!key&&flay);
{
flay=0;
执行语句;
}
}
else
flay=1;
这样也是等你放开按键才执行的(久按也是执行一次)。希望对你有帮助。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
加上 软件去抖动检测吧,诸如 while(temp!=0xf0) //软件去抖动?
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询