检测手是否松开,那不就是检测按键的上升沿吗?我有用51写的,很好移植,你先看下,不懂得问我。
//=========按键扫描================//
void keyscan()
{ P2=0XFF; //读口先置1
row0=0; //扫描第0行
kbuf=P2;
kbuf=(kbuf&0X0F)^0X0F; //读k3~0,并取正逻辑
lastkey1=kbuf;
P2=0XFF; //。。。。。。。。。。
row1=0; //扫描第1行
kbuf=P2;
kbuf=(kbuf&0X0F)^0X0F;
lastkey1=(kbuf<<4)+lastkey1; //读k4~7,取正逻辑,lastkey1高四位k7~4,低四位k3~0
P2=0XFF; //。。。。。。。。
row2=0; //扫描第2行
kbuf=P2;
kbuf=(kbuf&0X0F)^0X0F;
lastkey2=kbuf;
P2=0XFF; //。。。。。。。。
P1=P1|0XC0; //读独立按键,先置1
kbuf=P1;
kbuf=(kbuf&0XC0)^0XC0; //独立按键取正逻辑
lastkey2=kbuf+lastkey2; //lastkey2高两位sw1,sw2,低四位K11~8
if((lastkey2!=key2)||(lastkey1!=key1)) //若键状态变化
{if(keycnt--!=0) //没到延时时间
{lastkey1=key1; //放弃不稳定键
lastkey2=key2;
}
}
else //键状态没变
keycnt=0X05; //去抖延时器加载初值
ekey1=(key1^lastkey1)&lastkey1;//键前沿提取 这边是键刚按下去的,可以改成键后沿,就是键松开的。
key1=lastkey1; //用新键状态
ekey2=(key2^lastkey2)&lastkey2;
key2=lastkey2;
} //
如果key1 没有松手,即 key1=0;
' !'为取反;
则!key1=1, 此时While(!key1) 条件成立,while(!key1) 函数语句为空,即程序一直等待在此处循环。(即等待松手)
在这里加一个while语句的目的是防抖动,也就是说防止你按一下键,由于抖动的原因,而单片机响应好几下。比如你的按键接在p00上,sbit
ds=p00
当你按下的时候ds=0,放手的时候又是1,所以应该是while(ds==0);这句话就是在等待你松手,你松手以后才继续执行命令
以上就是关于stm32矩阵键盘扫描方式松手检测全部的内容,包括:stm32矩阵键盘扫描方式松手检测、郭天祥十天学会单片机中,按键松手检测语句 while(!key1);、我想问一个关于c51单片机单键识别松手检测的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)