c51单片机 在矩阵键盘松手检测的原理是什么?为什么要加松手程序?不加又会怎样?谢谢!

c51单片机 在矩阵键盘松手检测的原理是什么?为什么要加松手程序?不加又会怎样?谢谢!,第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

} /**/


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

原文地址:https://54852.com/yw/12077901.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存