APP下载

C语言下的抗干扰消抖按键程序设计研究

2018-02-05张红军贺州学院数学与计算机学院

数码世界 2018年1期
关键词:电路设计C语言中断

张红军 贺州学院数学与计算机学院

在我国常见的单片机控制电路设计中,由于机械的特殊性导致其在投产中并不能够达到理想的效果。在电路设计预期效果中,其想要达到按键按下则点位遍地,按键释放则点位变高,如图1所示。但是在实际操作中,通常是机械按键按下后经过多次高低电位的变化后才变成持续稳定的低电压,按键经过多次释放后才能够慢慢恢复到想要的稳定高电压。当这个变化过程必然经过高低压的震动,因此我们将这个过程称之为抖动。抖动时间通常为6-12ms,在设计时取值为8ms。也正是因为抖动的产生,所以虽然只按了一次键,但是实际上机器已经接收了多次按键。如果使用单片机控制按键+1电路,如果不消除抖动,则数码管的显示次数会非常多,进而导致数码管显示数据出现抖动现象。如果噪音的干扰较为严重,及时没有人为操作,也会使单片机因为干扰噪音的出现而自动运行,进而造成操作失误现象的产生。这种失误将会造成非常大的瞬时,所以在消抖程序中加入抗干扰程序是必须要进行的程序。本文以单片机按键+1的电路为例子,叙述C语言抗干扰消抖的程序设计。

图1 理想波形图

1 消抖方式分析

消除抖动的方式有两种,一种是硬件,另一种是软件。其中,硬件消除抖动的方式也分为RS硬件消抖、电容滤波消抖、中断法消抖三种形式。硬件消除抖动可以编写消抖程序,并将其运用到元件、电路板、成本等环节中,就可以实现消抖。通过软件消抖可以借助高低电平变化来实现。以下是具体的消抖程序介绍:

1.1 硬件消抖

硬件消抖就是将抖动消除在信号输入之前,这样就可以节省资源,提高系统对于信号的感知力。

1.1.1 RS硬件消抖

运用两个与非门构成一个RS硬件,再利用其记忆作用消除抖动对于及其的作用力。当开关每切换一次,输出端就进行一次操作,进而消除抖动的影响。

1.1.2 电容滤波消抖

使用RS锁存器进行消抖,只能够在单刀双掷开关中取得良好的效果。在当前常用的键盘中,常常是两个接线端的按键。针对这一按键的特征,可以将电容并联到案件中,利用平波的方式进行调整,从而消除脉冲波。

1.1.3 中断法消抖

每个案件都需要与外部中断口相连接,当对按键进行按动时,可以引起单片机的中断,进而消除抖动。这种方法可以不用在主程序中进行查询,只需要中断之后再处理相应的问题即可。缺点就是单片机的中断是非常有价值的,一旦发生中断将会导致数据丢失,因此当前对于这种消抖方法比较少用。

1.2 软件消抖

有上述可知,如果采用硬件消抖的方式对单片机进行消抖,则N个按键就必须要进行N个防抖程序设计。所以,当按键比较多的时候,硬件防抖程序将无法进行操作,这也暴露出了硬件消抖的弊端。在这种情况下,可以选取软件的方式进行防抖。软件消抖是采用降低键盘输入端口的接收信号频率,从而将高频抖动变化成低频抖动,一旦发现案件闭合,就进行8s的延时,让前一个抖动小时候则再一次进入检测的状态,如果仍在闭合状态,则确认是否有按键按下。当按键释放后再进行8s的延时,当抖动全部消失后转入处理程序。一般程序代码如下所示:

如果程序是if(v==0)的状态则证明按键发生了变化,继续进行下一步骤

在程序出现delay的状态时经历8s延时,经历按键抖动

当if(v==0)时进行第二次检测按键状态

然后执行下面程序

结束

2 C语言下的抗干扰消抖按键流程设计与分析

可以通过QR1的数值判断按键是否经历过按下或是释放。QR1;在延时8s后按下抖动期后再次判断,如果QR=0则是人为操作,如果QR≠0则证明其他原因干扰导致的。因此在程序流程设计中,可以按照如下步骤来设计:

第一步设立为开始,按键是否按下,如果是延时8s,若不是返回。延时8s后进行第二次的按键是否按下检查,如果是则继续,如果不是则返回到第一步。当第二次检查后进行按键是否释放的检查,如若是,则延时8s,如果否则返回第二次按键是否按下的检查中。当延时8s后检查按键是否释放,如若是进行接下来的按键是否释放检查;如若不是则返回上亿步按键是否释放的检查中。如若按键已经全部释放则进行执行功能程序段的检查,最后结束。

3 电路设计

在C语言下的抗干扰消抖按键程序电路设计中,充分考虑了消抖按键程序的实际使用情况,并针对抗干扰程序的运行等问题对于电路设计进行了适当的调整,具体电路设计图如下所示:

图3 电路设计图

4 C语言下的抗干扰消抖按键程序设计

可以通过上述的电路设计和流程设计,设定抗干扰消抖按键程序如下所示:

综上所述,只要将执行功能程序段的设计稍微改动一下,就可以将原本的按键释放后数码显示管显示,改变为按键按下后数码显示管显示。同理,将本程序稍微改动一下,也可以将+1的电路变为-1的电路。

[1] 印健健. 基于C语言的抗干扰消抖按键程序设计[J]. 数字技术与应用, 2015,10(8):185-186

[2] 程佳佳. 基于VHDL的按键消抖程序设计[J]. 科教导刊:电子版, 2017,7(24):222-223

[3] 杨张利. 按键消抖程序设计在单片机中的运用[J]. 科技致富向导, 2014,1(20):267-268

[4] 侯玉宝, 陈忠平, 邬书跃. 51单片机C语言程序设计经典实例[M]. 电子工业出版社, 2016,2(7):00012-00015

猜你喜欢

电路设计C语言中断
基于Visual Studio Code的C语言程序设计实践教学探索
基于Multisim的单管共射放大电路设计与仿真分析
一种车用醉驾检测电路设计
“单片机中断概述”微课教学设计
一种考虑GPS信号中断的导航滤波算法
Altium Designer在电路设计中的应用
51单片机C语言入门方法
负反馈放大电路设计
Linux中断线程化分析及中断延时测试
基于C语言的计算机软件编程