搜索
查看: 2087|回复: 6

[已解决] stm8sf103f3p6按键中断消抖以及触发

[复制链接]

该用户从未签到

2

主题

15

帖子

0

蝴蝶豆

中级会员

最后登录
2020-8-6
发表于 2019-6-27 16:29:36 | 显示全部楼层 |阅读模式
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端口为下降沿触发中断
}
回复

使用道具 举报

  • TA的每日心情
    开心
    2017-12-6 11:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    49

    主题

    3724

    帖子

    429

    蝴蝶豆

    论坛元老

    最后登录
    2021-8-7
    发表于 2019-6-28 09:44:22 | 显示全部楼层
    图省事的话,设计时按键IO加RC电路加硬件去抖;
    程序消抖的话,建议用在定时器多次连续检测IO状态的方式,不要写成软件循环死等。
    用IO中断检测的话,在中断服务函数中多次循环检测IO状态,但循环延时不要太长。
    回复 支持 1 反对 0

    使用道具 举报

    该用户从未签到

    2

    主题

    15

    帖子

    0

    蝴蝶豆

    中级会员

    最后登录
    2020-8-6
     楼主| 发表于 2019-6-27 16:30:21 | 显示全部楼层
    按键有时候不灵
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    21

    主题

    1073

    帖子

    442

    蝴蝶豆

    论坛元老

    最后登录
    2021-5-10
    发表于 2019-6-27 20:29:52 | 显示全部楼层
    按钮消抖 Arduino 他们有例程,用 MAX809 硬件消抖也是可行的。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    15

    帖子

    0

    蝴蝶豆

    中级会员

    最后登录
    2020-8-6
     楼主| 发表于 2019-7-1 14:05:26 | 显示全部楼层
    toofree 发表于 2019-6-28 09:44
    图省事的话,设计时按键IO加RC电路加硬件去抖;
    程序消抖的话,建议用在定时器多次连续检测IO状态的方式, ...

    怎么做到长按一个按键触发
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-12-6 11:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    49

    主题

    3724

    帖子

    429

    蝴蝶豆

    论坛元老

    最后登录
    2021-8-7
    发表于 2019-7-2 02:08:45 | 显示全部楼层
    xllmyh 发表于 2019-7-1 14:05
    怎么做到长按一个按键触发

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

    使用道具 举报

    该用户从未签到

    3

    主题

    1306

    帖子

    929

    蝴蝶豆

    版主

    最后登录
    2021-3-31
    发表于 2019-7-4 12:39:31 | 显示全部楼层
    一般按键响应时间和使用体验时间可以从50ms到几百毫秒。可以采用扫描方式。利用积分的原理,扫描到连续几次即为识别到就可以达到消抖的效果了
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

    GMT+8, 2024-4-26 23:55 , Processed in 1.161560 second(s), 37 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表