用户登录
用户注册

分享至

软件去抖c 单片机键盘去抖动c语言程序

  • 作者: 迷1样的女子
  • 来源: 51数据库
  • 2020-04-21

首先,你把你的想法说说,漏洞在哪?这样我们才能有针对性的回答

其次,用延时程序去抖动。去抖动主要是当你按下按健时,由于按健有反应时间、有抖动,可能你按一次机器感应到几次。所以用延时程序防抖就是让在手指按键(按下,松开的间隔)正常反应时间即10ms(参数具体自己调),确定只有一次按键 。去除过程中的毛刺等因素更多

我不懂为什么你和iamlaosong 都觉得程序没问题。

if(key1==0)

{

delay(5);

if(key1==0) 这里为什么要再判断一次?如果delay(5)之后还是抖动波形,那么key1可能是高电平,直接跳过if,到while(), 等松手之后进行下一次检测。可是!这之中num并没有经过num++啊,也就是按了一下,但没有num的自增;如果认为delay(5)之后已是低电平,何须判断if(key1==0)呢

请看我对iamlaosong的回复,字数有限制

delay(5) 为手指按键(按下,松开的间隔)正常反应时间。意思就是你手指按下去到松开,基本要花费delay(5) 的时间

而按下去的过程中,有毛刺,有抖动波形。一发生毛刺现象,如果按正常的检测程序(key1==0)就会检测到两次。

用

if(key1==0)

{

delay(5);

if(key1==0) 程序,就能很好避免这个情况。至于你说的,1、if语句时候刚好是高电平,工程上讲这个概率非常小。但是出现毛刺的概率非常大。2、如果认为delay(5)之后已是低电平,何须判断if(key1==0)呢?这个就是为了防止是毛刺现象啊,如果是毛刺在delay(5)仍是高电平。你怎么就知道是按下去,而不是毛刺呢。

我觉得你的想法,带有一种先入为主的思想,你应想想,出现毛刺了,你怎么消除??

要我说,你自己试验一下不就完啦,用示波器看看波形,看看按键结果。实验是检验真理的唯一标准

谢谢!我对iamlaosong 的回复打错一个字:如果delay(5)之后还是抖动波形,且if语句时候刚好是。。低。。电平 ?

据你说的理解,是不是可以这样说呢:

delay()函数必须延迟非常准确,以至于保证能够大于抖动时间;这样经过delay()之后就不可能有抖动波形,而只能有各种因素(如器件、温度等)造成的短暂毛刺?!

而所有的delay(),if,while(!k)之类的,都仅仅是用于防止那些短暂的、不是由于抖动造成的毛刺?

是的

你最好,试验一下。

因我没有板子。。

既然这样我要继续问你一下,

whle(!key1)

delay(5)

whle(!key1)

这段也有问题啊,比如你手按的时间很长,当中突然有个毛刺瞬间高电平,于是跳到delay;但注意此时手一直是按着的,delay结束后仍然低电平,进入第二个whle,注意,此时的状况与第一个whle完全一样!很可能再来一个毛刺跳过第二个while,这工程上完全可能啊,这时因手一直按着,可导致num++多次啊!哪怕第二个whle不是毛刺也无法去除松手的抖动啊!

是有可能啊,但是概率是多少呢?

是小概率事件啊,同志,基本可忽略。

不是,你没理解我意思。第一个while测试的时候,怎么会发生毛刺???如果你认为毛刺本身是小概率时间,那就可以省略第二个while啊;如果认为第二个while是怕第一个while被毛刺退出,那么没有理由认为第二个while不会同样发生毛刺。那么难道你认为发生一个毛刺是大概率时间,两个毛刺以上则为小概率事件??显然不能苟同吧。。 或者你说说毛刺对于这个测试,发生的概率随时间的分布函数?

认为毛刺本身是小概率时间

————————————————————

是毛刺,手的抖动刚刚发生在这个时间点,是一个小概率事件。

比如说delay(5)这个时间段与一个时间点相比,你觉得发生概率大还是小。

毛刺的发生,手的抖动是个随机事件。

你就不明白我的意思,你就不能好好看我的话。

说真的,我们说一百遍,不如实验做一遍

你按自己的想法写个程序,不就完啦,有些东西,实验做多了自然而然就明白了,光靠看,光看想,看不明白,想不明白,弄不明白

我当然认真看你的回复的。。你也再好好看我的。。你似乎还是没理解我意思,还是我之前你的问题。你说“delay(5)这个时间段与一个时间点相比…” 我觉得你是搞错了,毛刺并不是在delay()结束的瞬间有效。因为手一直按着,只要有毛刺就能检测的。

while(!key1); //手按着,低电平,万一有毛刺

delay(5);

while(!key1);说的是这段,万一又有个毛刺,手还没松呢;就算没毛刺,松手之后的抖动会触发num++

我没版子。。

while(!key1); //手按着,低电平,万一有毛刺

delay(5);

while(!key1);说的是这段,万一又有个毛刺,

哦,这样就出错了。

呵呵,手一直按着来计数,呵呵。

囧。。你是想说一般不手一直按着吗?但我并不是说手故意一直按着啊,只是相对毛刺的时间,手按得时间可能长呢?否则你干嘛在delay(5)之后再while?注意第二个while就是怕手还按着才写的啊!!!这时哪怕没毛刺,手一松不就出问题了么(没有delay)?我说的有错么……

有没有听抖森读书的软件

thelovebook 现在去下载 限时免费 仅限苹果手机 或者我有全套音频 给你发

挺抖森讲故事的那个软件叫啥啊????

苹果有个 朗易听什么的,安卓的话荔枝FM上有抖森读诗,还有一个英国付费的忘了叫什么了

一个51单片机交通灯C程序,这个程序里面按键消抖和数码管都是用软件延时,用定时器0来怎么做C程序

给个定时器的示例你看看

#include<reg52.h>

sbit led = P0^0;

unsigned int num;

void main(void)

{

TMOD = 0x00; // 工作方式0

TH0 = (8192 - 5000) / 32; // 12M晶振下定时5ms

TL0 = (8192 - 5000) % 32;

EA = 1; // 开总中断

ET0 = 1; // 开定时器中断

TR0 = 1; // 启动定时器

while(1)

{

if(num == 200) // 定时1秒钟到

{

num = 0; // 计数器清零

led = ~led; // led灯取反,实现1秒闪烁一次

}

}

}

void timer() interrupt 1

{

TH0 = (8192 - 5000) / 32; // 重装初值

TL0 = (8192 - 5000) % 32;

num++; // 计数器加1

}

可以看一看

OPPO1C为什么进入抖音短视频会自动弹出来

OPPO1C为什么进入抖音短视频会自动弹出来,可能是由于手机的安卓版本较低,与抖音短视频软件的最新版本不兼容导致,建议卸载抖音短视频以后,进入【百度手机助手】或【豌豆荚】下载软件的历史版本,以后手机中的软件收到更新提示,不要点击更新,更新之后就会出现闪退、无法使用的情况。

为什么叫抖森

把他的姓念得快点就是抖森= =

汤姆·希德勒斯顿 Tom Hiddleston

女朋友喜欢抖森,要我给他点赞,可我不知道他用的是什么软件,有人知道吗?

Twitter,国内应该用不了。更多

苹果改国籍成吗

转载请注明出处51数据库 » 软件去抖c 单片机键盘去抖动c语言程序

软件
前端设计
程序设计
Java相关