首先,你把你的想法说说,漏洞在哪?这样我们才能有针对性的回答
其次,用延时程序去抖动。去抖动主要是当你按下按健时,由于按健有反应时间、有抖动,可能你按一次机器感应到几次。所以用延时程序防抖就是让在手指按键(按下,松开的间隔)正常反应时间即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语言程序