打印

修改后有20%的概率出现按键按下但没有响应

[复制链接]
341|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
llia|  楼主 | 2022-7-16 08:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
unsigned char key_scan(void)
{
static unsigned char key_state=0,key_old;
unsigned char key_press,key_return=KEY_NO;
key_press=PINE&0x07;
switch(key_state)
{
case key_state_0:
if(key_press!=KEY_NO) key_state=key_state_1;key_old=key_press;//key_old=key_press这句不要
break;
case key_state_1:
if(key_press==key_old)//这句改成if(key_press!=KEY_NO)
{
key_return=key_press;
key_state=key_state_2;
}
else
{
key_state=key_state_0;
}
break;
case key_state_2:
if(key_press==KEY_NO)
{
key_state=key_state_0;
}
break;
}
return key_return;
}



于扫描PE口的pe0~pe2的独立按键(10ms扫描一次)但是为啥在没有按键的情况下我用手碰(PE0~PE2)中的一个按键就误动作(修改不修改都是这样)的上拉电阻我已经开启了 修改后有20%的概率出现按键按下但没有响应不知道为啥希望大家帮帮忙
这两个本质的区别是什么呢

使用特权

评论回复
沙发
chenjunt| | 2022-7-16 08:18 | 只看该作者
注意break的使用、、、、、、、

使用特权

评论回复
板凳
llia|  楼主 | 2022-7-16 08:21 | 只看该作者
break?  最后的一个  我感觉去和不去都一样呀

使用特权

评论回复
地板
supernan| | 2022-7-16 08:23 | 只看该作者
你的key_state和key_old都为局部变量,那么你的去抖就没有作用,等于没有去抖。

使用特权

评论回复
5
ousj| | 2022-7-16 08:27 | 只看该作者
使用去抖程序吗?

使用特权

评论回复
6
dingy| | 2022-7-16 08:30 | 只看该作者
或者使用硬件去抖电路应该也可以

使用特权

评论回复
7
llia|  楼主 | 2022-7-16 08:31 | 只看该作者
哦,有道理啊

使用特权

评论回复
8
zhanghqi| | 2022-7-16 08:33 | 只看该作者
硬件去抖怎么做啊

使用特权

评论回复
9
chenho| | 2022-7-16 08:36 | 只看该作者
case后边不用加{ }吗

使用特权

评论回复
10
renyaq| | 2022-7-16 08:37 | 只看该作者

if(key_press==key_old)//这句改成if(key_press!=KEY_NO)
没明白这样改的意义

使用特权

评论回复
11
huangchui| | 2022-7-16 08:40 | 只看该作者
注意按键识别中断的延时处理的

使用特权

评论回复
12
chuxh| | 2022-7-16 08:42 | 只看该作者
那就看下你的防抖动的设计的是否OK

使用特权

评论回复
13
renyaq| | 2022-7-16 08:43 | 只看该作者
还是那句话,重点看延时控制的设计的

使用特权

评论回复
14
dingy| | 2022-7-16 08:45 | 只看该作者
扫面按键的时候,要判断按下与弹起之间的时间的

使用特权

评论回复
15
llia|  楼主 | 2022-7-17 21:00 | 只看该作者
哦,那我就知道怎么回事了,多谢大家

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

961

主题

8893

帖子

4

粉丝