OpenEdv-开源电子网

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

[分享]单片机多功能按键支持库,支持不限数量、任意按键、任意按键的任意状态之间的随意组合。

[复制链接]

28

主题

93

帖子

0

精华

高级会员

Rank: 4

积分
572
金钱
572
注册时间
2015-8-3
在线时间
113 小时
发表于 2021-5-15 10:40:12 | 显示全部楼层 |阅读模式
本帖最后由 影__ 于 2021-5-18 16:41 编辑

文章目录
本篇文章属于源码分享类,未涉及具体的讲解及实现。


写在前面

网上各种方法就不评论了,直接讲重点吧,本次介绍的方法不管是什么单片机,也不管是裸机编程还是带RTOS的都是通用的,就算是linux也能轻松移植,这篇文章相当于是前面写的一篇文章的补充(链接在此),有兴趣想了解原理的可以先阅读前面的文章再阅读本篇文章。


特点及实现

软件采用分层及模块化的思想,所有扩展功能都是可按需裁剪的,按键数量无限制,键盘无限制,完全无阻塞,最强功能支持已定义的任意状态之间的任意组合,只要你按得出来。
目前已支持和未支持的功能:


  • 按下触发--------------------------已支持
  • 弹起触发--------------------------已支持
  • 长按自动触发---------------------已支持
  • 长按弹起触发---------------------已支持
  • 按下多击触发---------------------已支持
  • 弹起多击触发---------------------已支持
  • 连续触发--------------------------已支持
  • 任意组合状态触发-----------------已支持
  • 已触发按键数量统计---------------已支持
  • 可调的时间参数--------------------暂未支持

已支持的键盘有单io键盘和矩阵键盘,如下:


使用

在移植上也是非常简单的,你只需要提供按键io的基本信息和读写io电平的函数,然后周期性的调用按键check函数就行了,关于具体的使用及源码下载,可点击链接详细查看,已提供stm32例程。
无法点击超链接的,直接复制右边链接即可(https://gitee.com/wei513723/key_board)。



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

56

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2949
金钱
2949
注册时间
2020-6-14
在线时间
221 小时
发表于 2021-5-15 12:51:13 | 显示全部楼层
不错,去下了学习一下。
回复 支持 反对

使用道具 举报

0

主题

84

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1360
金钱
1360
注册时间
2021-2-25
在线时间
100 小时
发表于 2021-5-15 13:48:41 | 显示全部楼层
非常感谢
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2021-5-15
在线时间
3 小时
发表于 2021-5-15 14:56:26 | 显示全部楼层
非常感谢,学习一下
回复 支持 反对

使用道具 举报

0

主题

88

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1281
金钱
1281
注册时间
2019-8-29
在线时间
283 小时
发表于 2021-5-16 12:05:14 | 显示全部楼层

非常感谢,学习一下
回复 支持 反对

使用道具 举报

28

主题

93

帖子

0

精华

高级会员

Rank: 4

积分
572
金钱
572
注册时间
2015-8-3
在线时间
113 小时
 楼主| 发表于 2021-5-17 11:05:45 | 显示全部楼层
问这个的人那么多,怎么又没多少人关注呢?
回复 支持 反对

使用道具 举报

28

主题

93

帖子

0

精华

高级会员

Rank: 4

积分
572
金钱
572
注册时间
2015-8-3
在线时间
113 小时
 楼主| 发表于 2021-5-18 17:02:13 | 显示全部楼层
x88484533 发表于 2021-5-15 12:51
不错,去下了学习一下。

看了论坛里面其它人分享的按键程序,质量很差啊,看的人反而还多,真是搞不懂。
回复 支持 反对

使用道具 举报

28

主题

93

帖子

0

精华

高级会员

Rank: 4

积分
572
金钱
572
注册时间
2015-8-3
在线时间
113 小时
 楼主| 发表于 2021-5-18 17:02:40 | 显示全部楼层

感谢支持才对。
回复 支持 反对

使用道具 举报

28

主题

93

帖子

0

精华

高级会员

Rank: 4

积分
572
金钱
572
注册时间
2015-8-3
在线时间
113 小时
 楼主| 发表于 2021-5-18 17:03:08 | 显示全部楼层
mozhou 发表于 2021-5-15 14:56
非常感谢,学习一下

感谢支持,再接再厉。
回复 支持 反对

使用道具 举报

28

主题

93

帖子

0

精华

高级会员

Rank: 4

积分
572
金钱
572
注册时间
2015-8-3
在线时间
113 小时
 楼主| 发表于 2021-5-18 17:03:42 | 显示全部楼层
huaishang 发表于 2021-5-16 12:05
非常感谢,学习一下

感谢支持。。
回复 支持 反对

使用道具 举报

0

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
金钱
374
注册时间
2019-12-17
在线时间
123 小时
发表于 2021-5-19 08:52:50 | 显示全部楼层
本帖最后由 csq463276932 于 2021-5-20 16:04 编辑

楼主顺便把代码传本论坛一份,方便大家下载。
回复 支持 反对

使用道具 举报

0

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
金钱
374
注册时间
2019-12-17
在线时间
123 小时
发表于 2021-5-20 08:37:24 | 显示全部楼层
楼主顺便把代码传本论坛一份,方便大家下载。
回复 支持 反对

使用道具 举报

28

主题

93

帖子

0

精华

高级会员

Rank: 4

积分
572
金钱
572
注册时间
2015-8-3
在线时间
113 小时
 楼主| 发表于 2021-5-20 20:44:57 | 显示全部楼层
csq463276932 发表于 2021-5-20 08:37
楼主顺便把代码传本论坛一份,方便大家下载。

因为还会更新增加新功能,所以没有上传。
回复 支持 反对

使用道具 举报

10

主题

560

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1739
金钱
1739
注册时间
2014-6-27
在线时间
943 小时
发表于 2021-5-21 09:06:23 | 显示全部楼层
影__ 发表于 2021-5-18 17:02
看了论坛里面其它人分享的按键程序,质量很差啊,看的人反而还多,真是搞不懂。

写得这么复杂,我一个函数也能搞定这些功能,效果也不差,是你没见过简单又高效的。
回复 支持 反对

使用道具 举报

28

主题

93

帖子

0

精华

高级会员

Rank: 4

积分
572
金钱
572
注册时间
2015-8-3
在线时间
113 小时
 楼主| 发表于 2021-5-21 18:41:26 | 显示全部楼层
本帖最后由 影__ 于 2021-5-21 18:47 编辑
TinyBoy 发表于 2021-5-21 09:06
写得这么复杂,我一个函数也能搞定这些功能,效果也不差,是你没见过简单又高效的。

那只是你认为的效果不差,你要能确定你各种情况都考虑到位了,那你牛逼,你要是没做到,就不要觉得你很牛!!就一个任意数量按键的任意状态组合就你那框架,你要能写出来,我算你牛逼!
回复 支持 反对

使用道具 举报

10

主题

560

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1739
金钱
1739
注册时间
2014-6-27
在线时间
943 小时
发表于 2021-5-22 11:43:15 | 显示全部楼层
影__ 发表于 2021-5-21 18:41
那只是你认为的效果不差,你要能确定你各种情况都考虑到位了,那你牛逼,你要是没做到,就不要觉得你很牛 ...

有按键不是随意组合的吗,这是按键该有的状态,只是需不需要这样的状态而已,比如5个按键按下,如果需要这样的键值,定义一个键值就行,还要专门写一个框架?
回复 支持 反对

使用道具 举报

10

主题

560

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1739
金钱
1739
注册时间
2014-6-27
在线时间
943 小时
发表于 2021-5-22 11:46:30 | 显示全部楼层
影__ 发表于 2021-5-21 18:41
那只是你认为的效果不差,你要能确定你各种情况都考虑到位了,那你牛逼,你要是没做到,就不要觉得你很牛 ...

你的按键扫描是好,没错,代码量实在有点多了,其实很少代码就能实现这些功能了。
回复 支持 反对

使用道具 举报

10

主题

560

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1739
金钱
1739
注册时间
2014-6-27
在线时间
943 小时
发表于 2021-5-22 11:52:55 | 显示全部楼层
影__ 发表于 2021-5-21 18:41
那只是你认为的效果不差,你要能确定你各种情况都考虑到位了,那你牛逼,你要是没做到,就不要觉得你很牛 ...

1个按键按下和任意组合按下,都是按下,状态不一样而已,没有什么分别。
回复 支持 反对

使用道具 举报

28

主题

93

帖子

0

精华

高级会员

Rank: 4

积分
572
金钱
572
注册时间
2015-8-3
在线时间
113 小时
 楼主| 发表于 2021-5-22 13:21:37 | 显示全部楼层
TinyBoy 发表于 2021-5-22 11:43
有按键不是随意组合的吗,这是按键该有的状态,只是需不需要这样的状态而已,比如5个按键按下,如果需要 ...

你有没有看清楚,同一时间轴和非同一时间轴,任意状态(而不是就一个按下或者弹起),任意数量,同一时间轴是最简单的;你要觉得能用一个函数解决的问题就是好,而代码量大就是差,那你应该看下threadx的源码;我是对标win系统的组合键设计,你觉得没用。而我的工程中用处很大。
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2013-10-15
在线时间
10 小时
发表于 2022-9-6 14:55:40 | 显示全部楼层
感谢,学习一下
回复 支持 反对

使用道具 举报

3

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2020-6-11
在线时间
55 小时
发表于 2023-4-12 13:52:10 | 显示全部楼层
感谢分享,另外能不能给个静态分配或者自定义malloc的宏定义方案,静态分配的可以由按键数量宏定义自动计算,这样在stm32上使用不需要去调整默认堆栈大小了
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2021-8-24
在线时间
6 小时
发表于 2023-4-13 02:06:24 来自手机 | 显示全部楼层
去学习啦啦啦
回复 支持 反对

使用道具 举报

0

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-6-23
在线时间
10 小时
发表于 2023-4-26 16:55:36 | 显示全部楼层
学习学习
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 09:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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