找回密码
 立即注册
楼主: xujibicool

独立按键、长按连击、长短按、多击、组合按键区分先后,组合按键不区分先后

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:469
  • 最近打卡:2025-04-10 16:59:05

45

主题

69

回帖

1225

积分

金牌会员

积分
1225
发表于 2024-12-8 13:21:07 | 显示全部楼层
vb2*** 发表于 2024-12-8 12:56
这个不能唤醒掉电模式.. 有办法解决吗?

掉电模式单片机进入主时钟停振/省电模式,CPU 以及全部外设均停止工作。这个按键检测程序是放在定时器中断中执行的,掉电模式定时器应该也停止工作了,定时器中断无法执行,所以应该是不能唤醒的。

我的理解应该是,你专门拿一个按键做掉电唤醒(外部中断或普通 I/O 口都支持的外部中断),而且这个按键不能再放在按键检测程序中使用。
1.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:382
  • 最近打卡:2025-05-02 08:26:22
已绑定手机

10

主题

147

回帖

464

积分

中级会员

积分
464
发表于 2024-12-8 13:32:37 | 显示全部楼层

点赞收藏

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1521

回帖

1861

积分

金牌会员

积分
1861
发表于 2024-12-8 14:15:54 | 显示全部楼层
xujib*** 发表于 2024-12-8 13:21
掉电模式单片机进入主时钟停振/省电模式,CPU 以及全部外设均停止工作。这个按键检测程序是放在定时器中 ...

是的,应该就是这样子,  定时器中断扫描的按键程序
但是我的项目只有一个按键哦
没有别的办法解决吗?
掉电之前打开中断.唤醒后马上关闭中断. 理论上可行. 但是我实际用下来不能执行
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1521

回帖

1861

积分

金牌会员

积分
1861
发表于 2024-12-12 13:33:32 | 显示全部楼层

这代码和状态机的相比还是有点问题.

就是松手的时候,偶尔会有误按

应该是没有松手等待的处理

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:469
  • 最近打卡:2025-04-10 16:59:05

45

主题

69

回帖

1225

积分

金牌会员

积分
1225
发表于 2024-12-12 17:10:48 | 显示全部楼层
vb2*** 发表于 2024-12-12 13:33
这代码和状态机的相比还是有点问题.
就是松手的时候,偶尔会有误按
应该是没有松手等待的处理

前面的是按下触发,后面3个是弹起的时候触发。
测试时,按着按键,然后手抖动,(按下触发)的会误触发,(弹起触发)的更稳定
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1521

回帖

1861

积分

金牌会员

积分
1861
发表于 2024-12-12 18:07:27 | 显示全部楼层
xujib*** 发表于 2024-12-12 17:10
前面的是按下触发,后面3个是弹起的时候触发。
测试时,按着按键,然后手抖动,(按下触发)的会误触发, ...

能不能改成(按下触发)
出发后接下来的50ms 不执行任何动作.
这样就好了.
因为抬起触发有一个弊端.  就是不能及时发现指令已经执行
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:469
  • 最近打卡:2025-04-10 16:59:05

45

主题

69

回帖

1225

积分

金牌会员

积分
1225
发表于 2024-12-12 18:25:28 | 显示全部楼层
vb2*** 发表于 2024-12-12 18:07
能不能改成(按下触发)
出发后接下来的50ms 不执行任何动作.
这样就好了.

key.h 修改KEYDELAYTIME 为50 就可以了
key_cnt[] 进中断+1 ,之后与KEYDELAYTIME比较,条件判断
定时器中断1ms就50 ,2ms就25 依此类推
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1521

回帖

1861

积分

金牌会员

积分
1861
发表于 2024-12-12 18:30:01 | 显示全部楼层
xujib*** 发表于 2024-12-12 18:25
key.h 修改KEYDELAYTIME 为50 就可以了
key_cnt[] 进中断+1 ,之后与KEYDELAYTIME比较,条件判断
定时器 ...

这样也有个弊端哦, 如果按下的市场不够50ms .不会响应
不是我挑刺.. 是我用这个代码,碰到这个问题了
我还特意换了个好点的开关.
就稍微好点了.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:469
  • 最近打卡:2025-04-10 16:59:05

45

主题

69

回帖

1225

积分

金牌会员

积分
1225
发表于 2024-12-12 18:35:46 | 显示全部楼层
vb2*** 发表于 2024-12-12 18:30
这样也有个弊端哦, 如果按下的市场不够50ms .不会响应
不是我挑刺.. 是我用这个代码,碰到这个问题了
我还 ...

KEYDELAYTIME数值修改,你调试满意为止
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-05-02 09:54:04
已绑定手机

2

主题

106

回帖

266

积分

中级会员

积分
266
发表于 2024-12-18 14:32:33 | 显示全部楼层

mark qiang

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 20:53 , Processed in 0.205156 second(s), 117 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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