请问一下这个函数是怎么做到按键消抖的

2019-03-24 17:31发布


以下是扫描消抖函数:
void keyscan()
{
        if(s2==0)  //S2是一个独立按键
        {
                while(s2==0);  //想问的是为什么如果此处的S2一直按着不松手,应该是NUM一直在加,但实际上为什么只是松开时
                num++;        //才加一次呢?如果在按的过程中有抖动,那么也应该会不规则连加几次啊,他这是怎么做到去抖的呢?
        }
}


望请各位大师解惑!!
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
dcexpert
1楼-- · 2019-03-24 22:16
函数的功能是这样,当检测到有按键 if(s2==0)后,等待按键释放, while(s2==0)

严格来说,这个函数没有起到消除抖动的作用。因为抖动是一个短暂多次发生的过程(如果设置一个计数器,那么按一次键,可能计数器会增加多次)。通常去抖都是检测到按键后,延时再次检测,两次或者多次相同才认为按下。所以一般都是在一个定时器中断里实现按键检测。
迈尔风随
2楼-- · 2019-03-25 00:02
 精彩回答 2  元偷偷看……
suoma
3楼-- · 2019-03-25 00:41
延时一段时间后,再去判断key状态
16816
4楼-- · 2019-03-25 01:55
suoma 发表于 2016-7-27 18:09
延时一段时间后,再去判断key状态

是那个while语句在起延时作用吗?
philipchiu
5楼-- · 2019-03-25 05:11
 精彩回答 2  元偷偷看……
16816
6楼-- · 2019-03-25 07:12
philipchiu 发表于 2016-7-27 18:26
不松开它一直在自我循环又怎会num++?

是不是也不对啊,
是不是不松开的话就还没进入循环呢?而是松开后,条件检测为真才算完成,之后才进入NUM++呢?

一周热门 更多>