xllmyh 发表于 2019-6-27 16:29:36

stm8sf103f3p6按键中断消抖以及触发

INTERRUPT_HANDLER(EXTI_PORTC_IRQHandler, 5)
{
if(GPIO_ReadInputPin(GPIOC , GPIO_PIN_7) == RESET)   //判断是否是PC->,被按下,即KEY2,也可以说这个判断是PD端口区分是哪个引脚被按下的主要标志
{
}
void ALLKeyInit()
{
//KEY1_Init
//GPD->PIN2 设置为输入模式 带上拉电阻输入 全球通外部中断
GPIO_Init(GPIOD , GPIO_PIN_2 , GPIO_MODE_IN_PU_IT);
EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOA , EXTI_SENSITIVITY_FALL_ONLY); //PA端口为下降沿触发中断

//KEY2_Init
//GPC->PIN7 设置为输入模式 带上拉电阻输入 禁止外部中断
GPIO_Init(GPIOC , GPIO_PIN_7 , GPIO_MODE_IN_PU_IT);
EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOD , EXTI_SENSITIVITY_FALL_ONLY); //PD端口为下降沿触发中断

//KEY3_Init
//GPC->PIN6设置为输入模式 带上拉电阻输入 禁止外部中断
GPIO_Init(GPIOC , GPIO_PIN_6 , GPIO_MODE_IN_PU_IT);
EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC , EXTI_SENSITIVITY_FALL_ONLY); //PC端口为下降沿触发中断
}

toofree 发表于 2019-6-28 09:44:22

图省事的话,设计时按键IO加RC电路加硬件去抖;
程序消抖的话,建议用在定时器多次连续检测IO状态的方式,不要写成软件循环死等。
用IO中断检测的话,在中断服务函数中多次循环检测IO状态,但循环延时不要太长。

xllmyh 发表于 2019-6-27 16:30:21

按键有时候不灵

maxtch 发表于 2019-6-27 20:29:52

按钮消抖 Arduino 他们有例程,用 MAX809 硬件消抖也是可行的。

xllmyh 发表于 2019-7-1 14:05:26

toofree 发表于 2019-6-28 09:44
图省事的话,设计时按键IO加RC电路加硬件去抖;
程序消抖的话,建议用在定时器多次连续检测IO状态的方式, ...

怎么做到长按一个按键触发

toofree 发表于 2019-7-2 02:08:45

xllmyh 发表于 2019-7-1 14:05
怎么做到长按一个按键触发

那就得循环多次检测,比如一个检测周期是10ms,连续检测到相同的状态5次以上为消抖;相同状态大于50次,为长按键。

butterflyspring 发表于 2019-7-4 12:39:31

一般按键响应时间和使用体验时间可以从50ms到几百毫秒。可以采用扫描方式。利用积分的原理,扫描到连续几次即为识别到就可以达到消抖的效果了:)
页: [1]
查看完整版本: stm8sf103f3p6按键中断消抖以及触发