OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7291|回复: 8

按键外部中断如何记录按键次数啊

[复制链接]

2

主题

4

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2021-10-30
在线时间
3 小时
发表于 2022-9-26 19:55:42 | 显示全部楼层 |阅读模式
1金钱
我小白刚开始学习stm32的hal库开发,无基础,如何用中断来记录按键次数,进行防抖,实现按三次LED灯灭,其余时间点亮LED灯啊。

最佳答案

查看完整内容[请看2#楼]

http://www.openedv.com/forum.php?mod=viewthread&tid=297899&extra=
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2022-9-26 19:55:43 | 显示全部楼层
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-9-27 10:46:35 | 显示全部楼层
int t=0,n=0;
按键中断()
{
n++;
t=500;//500ms后处理
}
1ms定时中断()
{
if(t>0)
{
  t--;
  if(t==0)
  {
    if(n==3)
    {
      关灯;
    }
    else
    {
     开灯;
    }
  }
}
}
专治疑难杂症
回复

使用道具 举报

32

主题

183

帖子

0

精华

高级会员

Rank: 4

积分
617
金钱
617
注册时间
2013-1-16
在线时间
131 小时
发表于 2022-9-27 15:39:20 | 显示全部楼层
不就是在中断里面实现案件累加
回复

使用道具 举报

70

主题

6758

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12989
金钱
12989
注册时间
2012-11-26
在线时间
3789 小时
发表于 2022-9-27 17:00:47 | 显示全部楼层
学习下状态机的逻辑  用状态机做
学无止境
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2021-10-30
在线时间
3 小时
 楼主| 发表于 2022-9-27 17:29:13 | 显示全部楼层
LcwSwust 发表于 2022-9-27 10:46
int t=0,n=0;
按键中断()
{
  1. int n=0,t=0;

  2. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  3. {
  4.         if(GPIO_Pin==GPIO_PIN_15)
  5.         {
  6.                 n++;
  7.                 t=500;}
  8.         }
  9. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  10. {
  11.         if(htim->Instance==TIM2)
  12.         {
  13.                 if(t>0)
  14.                 {
  15.                         t--;
  16.                         if(t==0)
  17.                         {
  18.                                 if(n%3==0)
  19.                                 {
  20.                                         HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
  21.                                 }
  22.                                 else
  23.                                         HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
  24.                                
  25.                         }
  26.                 }
  27.         }
  28. }
复制代码

老哥能帮我看看哪里出错了吗,这个程序按键按下灯一直不灭
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-9-27 17:32:22 | 显示全部楼层
zzz333 发表于 2022-9-27 17:29
老哥能帮我看看哪里出错了吗,这个程序按键按下灯一直不灭

哦,忘了需要对n清零:
  if(t==0)
  {
    if(n==3)
    {
      关灯;
    }
    else
    {
     开灯;
    }   
  n=0;
  }
  

专治疑难杂症
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2021-10-30
在线时间
3 小时
 楼主| 发表于 2022-9-27 18:04:22 | 显示全部楼层
LcwSwust 发表于 2022-9-27 17:32
哦,忘了需要对n清零:
  if(t==0)
  {

谢谢大佬,但是为什么我还是按了不灭
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-9-27 18:26:35 | 显示全部楼层
zzz333 发表于 2022-9-27 18:04
谢谢大佬,但是为什么我还是按了不灭

那就把n和t显示出来或用串口发出来(波特率最好不小于115200)
专治疑难杂症
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 01:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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