stm32矩阵键盘扫描方式松手检测

stm32矩阵键盘扫描方式松手检测,第1张

检测手是否松开,那不就是检测按键的上升沿吗?我有用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单片机单键识别松手检测的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10206013.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存