求51单片机利用定时器消抖的程序!!

求51单片机利用定时器消抖的程序!!,第1张

定时器消抖就是利用定时器运行一段时间以消耗一段程序运行周期达到延时目的,再关闭定时器,如果你的想法是这样那很好办,一般我们都用delay函数来粗虐延时,你只要将TRx=1(定时器1或0的开关)去替换delay就行,然后根据定时器的初始化来确定延时长短,然后进去中断服务函数,重装初值后TRx=0,关闭定时器就行了,然后下一次消抖又打开,进去中断又关闭,这样反复就达到了延时目的。

有其他想法可以回复一起讨论。

希望我的回答能帮助到你。

原地等待10MS的话,会耽误你的程序运行。如果你程序本身不在乎,那就为所谓。但是,单片机都是死循环程序。你完全可以利用程序本身一次循环的时间,来模糊计算延时。

例如,程序本身循环一次要1MS,那么计数10次,就是10MS,就行了

这种按键消抖前面部分还可以接受,但是后面用while等待松键的方式不是很好,最好用成标志变量。我在下面写一段,你拿去试一下看可不可以:

unsigned char KeyDownFlag=1// 为0表示有按键按下并还未进行处理,为1表示没有按键按下

void KeyDelay()

{

unsigned int i

for(i=0i<500i++)

{

i++

}

}

void KeyCheck()

{

if(K1 == 1)// 松键检测

{

KeyDownFlag=1

}

if(KeyDownFlag==1)//如果没有未处理的按键

{

if(K1==0)

{

KeyDelay()

K1 = 1

if(K1==0)

{

// 在这里添加要运行的程序

liu()

}

}

}

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存