按键中断中添加定时器消抖程序设计
时间: 2023-10-02 11:11:05 浏览: 28
独立按键中断消抖加减C程序
4星 · 用户满意度95%
按键消抖的程序设计可以分为两个部分:按键中断处理和定时器中断处理。
按键中断处理部分的代码如下所示:
```c
void EXTI0_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line0) != RESET)
{
// 按键按下,启动定时器
TIM_Cmd(TIM2, ENABLE);
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
```
在按键中断处理中,当检测到按键按下时,启动定时器 TIM2 并开始计时。
定时器中断处理部分的代码如下所示:
```c
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
// 检测按键状态
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET)
{
// 按键仍处于按下状态,执行相应操作
// ...
}
else
{
// 按键已经松开,按下动作无效,不进行任何操作
}
// 停止定时器并清除中断标志
TIM_Cmd(TIM2, DISABLE);
TIM_SetCounter(TIM2, 0);
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
}
}
```
在定时器中断处理中,当定时器 TIM2 触发时,首先检测按键状态,如果按键仍处于按下状态,则执行相应操作;否则,按下动作无效,不进行任何操作。然后,停止定时器并清除中断标志,以便下一次按键按下事件的处理。
需要注意的是,在使用定时器进行按键消抖的时候,需要对定时器的计时时间进行合理的设置,以便达到较好的消抖效果。
阅读全文