去抖函数的总结

/*******************************

防抖动的函数
 参数:
 pinx:需要读取的引脚状态
 data:赋值
 div:赋值的偏移量
 * Shake_count:防抖的计数

*********************************/

#define Shake_Min 1
#define Shake_Mid 5
#define Shake_Max 10

void Shake_Function(u8 pinx, u8* data,u8 div,u8* Shake_count)

{

    u8 count = *Shake_count;
    
    if(pinx)//防抖动
    {
        count++;
    }
    else
    {
        count--;

    }

    if(count>=Shake_Max)
    {
        count = Shake_Mid;
        *data |=div;
    }
    else if(count<=Shake_Min)
    {
        count = Shake_Mid;
        *data &=(~div);
    }
    else
    {}
    *Shake_count = count;

}

/**************************************************************************
*检查拨码开关,根据拨码开关的数字码
***************************************************************************/

void DIP_Switch_Config(void)
{

    static u8 DIP_Count[5]={Shake_Mid,Shake_Mid,Shake_Mid,Shake_Mid,Shake_Mid};

    Shake_Function(READ_DIP_Switch1,&PROMARK.DIP_Switch_ID,0x01,&DIP_Count[0]);
    Shake_Function(READ_DIP_Switch2,&PROMARK.DIP_Switch_ID,0x02,&DIP_Count[1]);
    Shake_Function(READ_DIP_Switch3,&PROMARK.DIP_Switch_ID,0x04,&DIP_Count[2]);
    Shake_Function(READ_DIP_Switch4,&PROMARK.DIP_Switch_ID,0x08,&DIP_Count[3]);

    Shake_Function(READ_DIP_Switch5,&PROMARK.DIP_Switch_ID,0x10,&DIP_Count[4]);    

}

你可能感兴趣的:(去抖函数的总结)