基于C语言的抗干扰消抖按键程序设计抗干扰消抖按键程序设计
一、引言
按键作为常见的人机交互方式,应用广泛。然而,在实际应用中,由于环境干扰和按键的本身特性,容易产生按键的抖动和误触发现象,影响按键的可靠性和精度。为此,需要设计一种可抗干扰、消除按键抖动的按键处理程序,以提高按键的可靠性和稳定性。
二、按键的特性和干扰情况分析
1.按键的特性
2.干扰情况
按键在使用过程中可能会受到各种干扰,主要包括:电源噪声或干扰;周围环境的振动或震动干扰;按键自身的抖动(主要是机械振动导致的)。
三、抗干扰消抖按键程序设计
1.概述
2.程序设计思路
①按键输入检测:
首先,需要对按键输入信号进行检测,以判断按键是处于松开状态还是按下状态。实现的方法是通过检测按键所对应的IO口的电平状态,当该IO口的输入电平为高电平时,说明按键未按下,当输入电平为低电平时,说明按键已经按下。
②滤波处理:
③抗干扰处理:
为了增强程序的抗干扰性能,还可以采取以下措施:
1)采用硬件滤波电路:可以通过在按键的输入端添加RC滤波器等硬件电路来消除电源噪声和瞬间信号变化对按键输入的影响。
2)增加重复检测次数:在程序中设置重复检测次数,如果连续检测到多次信号变化,才认为按键状态发生了改变,从而可以减少误触发的概率。
3.代码实现
基于以上设计思路,本程序的主要代码实现如下:
#include
sbitbtn=P1^0;
unsignedinttimer_cnt;
unsignedintslide_window[8];
unsignedintslide_idx=0;
voiddelay(unsignedintt)
{
while(t--){;}
}
voidTimer_Init()
TMOD|=0x01;
TH0=0x3C;
TL0=0xB0;
EA=1;
ET0=1;
TR0=1;
voidTimer_ISR()interrupt1
timer_cnt++;
unsignedintcheck_btn()
unsignedintstable_cnt=0;
unsignedintstable_avg=0;
unsignedintbtn_state=0;
unsignedinti;
if(!btn){
timer_cnt=0;
while(btn==0){}
delay(20);
while(1){
if(btn){
break;
if(timer_cnt>=500){
slide_window[slide_idx++]=timer_cnt;
slide_idx%=8;
if(slide_idx==0){
stable_avg=0;
for(i=0;i<8;i++){
stable_avg+=slide_window[i];
stable_avg=stable_avg>>3;
if(stable_avg>200){
stable_cnt++;
}else{
stable_cnt=0;
if(stable_cnt>=3){
btn_state=1;
returnbtn_state;
intmain()
Timer_Init();
if(check_btn()){
P1=0xFF;
delay(100);
P1=0x00;
四、结论
一、按键特性分析
1.1稳态电阻
按键的稳态电阻通常在10欧姆到10兆欧姆之间,取决于材料,设计和制造工艺。高质量的按键电路应该具有尽量小的电阻。
1.3机械振动
机械振动是指当按键连接时会产生的机械振动或抖动,因而可能导致抖动现象。振动的程度和频率通常与按键设计、材料和宏观环境有关。
二、干扰情况分析
2.1电源噪声
在信号传输中,电源噪声是一种常见的噪声源,会影响到使用噪音灵敏器件,例如来自关闭的继电器、电视等设备的干扰。电源排除方法包括使用稳定电源和内含电源保护的设备。
2.2振动干扰
振动干扰范围广泛,包括外部物体撞击和声音,它们都会对周围环境产生震动。这种干扰可以通过外表设计中的缓冲元件来减少。
2.3按键自身抖动
当按键连接时,机械振动会导致按键抖动,这些抖动信号可能会干扰系统的正确功能并导致误触发操作。按键抖动可以通过使用软件滤波线路来减少。
三、抗干扰消抖按键程序设计数据
为了设计用于抗干扰消抖按键的程序,需要考虑以下数据:
3.2滤波器设计
3.3抗干扰性能
抗干扰性能包括硬件和软件方面的措施。硬件方面,通过使用电源滤波器和隔离器件可以减少干扰;软件方面,可采用滤波器、重复检测等方法来防止误操作。
以上数据是设计抗干扰消抖按键程序的基础,它们可以帮助确定软硬件设计参数,并且最终确定抗干扰消抖按键程序的性能特点。下面介绍一些具体的技术手段。
四、设计技术和方法
4.1滑动窗口滤波器
滑动窗口滤波器是一种通常用于信号滤波的数字滤波器。其核心思想是维护一个由N个最新样本组成的滑动窗口,每次将新样本添加到窗口中,再将之前最老的样本从窗口中删除。这样,总是计算窗口中的平均值,以减少噪声干扰和抖动现象。在抗干扰消抖按键程序中,滑动窗口过大或过小都可能导致滤波器效果变差,因此需要进行适当的优化。
4.2重复检测
重复检测是指在连续检测到按键状态发生变化时,需要进行多次确认才可以生成相应的操作信号。这可以降低误触发的概率,提高按键的稳定性和可靠性。
4.3应对环境振动和机械振动的延时处理
在操作控制系统时,环境振动和机械振动都可能导致按键抖动,进