大家是怎么做按键消抖的
我是用一定时器做20ms定时,定时到在中断里设专门标志(20ms是否到,初始化为0),在主循环里当按键按下时在判断此标志,为0,就开启定时中断,而后返回主流程,当此标志为1时在执行按键操作
uint32_t BUTTONScan(void)
{
sta
tic u8 key_up = 1;
if (key_up==1 (BUTTON_GetState(BUTTON1)==0||BUTTON_GetState(BUTTON2)==0
||BUTTON_GetState(BUTTON3)==0)) //||BUTTON_GetState(BUTTON4)==0
{
if(keymark !=1) //keymark为20ms定时到的标志
{
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//开启定时3通道1中断
TIM_Cmd(TIM3, ENABLE);
return 0;
}
else
{
keyread=1;
key_up=0;
keymark=0;
TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE);//定时3中断关
TIM_Cmd(TIM3, DISABLE);
if( BUTTON_GetState(BUTTON1)==0)
{
// Freq_Low=Freq_Low+1000000;//,Freq_Up_Down
return 1;
}
else if( BUTTON_GetState(BUTTON2)==0)
{
// Freq_High=Freq_Low+1000000;
return 2;
}
else if( BUTTON_GetState(BUTTON3)==0)
{
// Freq_Up_Down=Freq_Up_Down+100000;
return 3;
}
// else if( BUTTON_GetState(BUTTON4)==0) return 4;
}
}
else if (BUTTON_GetState(BUTTON1)==1 BUTTON_GetState(BUTTON2)==1
BUTTON_GetState(BUTTON3)==1 )//BUTTON_GetState(BUTTON4)==1
{
if(keymark !=1)
{
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//开启定时3通道1中断
TIM_Cmd(TIM3, ENABLE);
return 0;
}
else
{
key_up=0;
keymark=0;
TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE);//定时3中断关
TIM_Cmd(TIM3, DISABLE);
key_up=1;
return 0;
}
}
}
讲的不清楚,望见谅,总觉得不太好,大家有什么好的消抖程序吗