按键模块程序分享

2019-08-19 16:51发布

本程序是从网上资料修改而来的,不算是原创,谢谢
为什么要写按键模块程序?
1>基于模块化考虑
2>基于分层的考虑(底层,按键层,应用层)
3>取消原子按键的delay函数,太占用CPU资源
按键模块程序的大致结构
其中pKeyLevelCB是底层回调函数指针,底层的数据操作就是封装在这里
pKeyEventCB是应用层函数指针数组,应用层的数据操作就是封装在这里
arg就是应用层函数可能需要传递的参数,如果没有,就用NULL

[mw_shl_code=c,true]typedef struct
{
        void *arg;
        u32 state;
        KeyEvent index;
        u32 wobble_cnts;
        u32 stable_cnts;
        KeyLevelCB pKeyLevelCB;
        KeyEventCB pKeyEventCB[KEY_EVENT_NUM];
}KEY;[/mw_shl_code]
应用层事件索引,目前我只是实现了单击事件,如果想实现双击等其它功能,可自由添加.
[mw_shl_code=c,true]typedef enum
{
        KEY_SINGLE_CLICK = 0,
        KEY_DOUBLE_CLICK,
        KEY_EVENT_NUM,
}KeyEvent;[/mw_shl_code]
总结:本程序总体来说不是很复杂,因为目前只是实现了单击事件的处理,但是框架已经搭好了,有什么需求,只要在上面添加代码即可.
附件部分是demo版本,基于战舰开发板,Keil5.14.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
taizonglai
1楼-- · 2019-08-19 17:39
不错,多谢分享哦
ianhom
2楼-- · 2019-08-19 18:18
 精彩回答 2  元偷偷看……
liuchang
3楼-- · 2019-08-19 19:39
ianhom 发表于 2017-5-15 13:11
感谢分享!
之前我也写过一个按键模块
https://github.com/ianhom/Btn_State_Machine_Module

请问神
你这个按键模块已经用于实际项目了?
我那个自己弄着玩的,能实现功能,但是如果要放在项目里话,还需要自己验证...
ianhom
4楼-- · 2019-08-19 20:15
liuchang 发表于 2017-5-15 17:30
请问神
你这个按键模块已经用于实际项目了?
我那个自己弄着玩的,能实现功能,但是如果要放在项目里话,还 ...

在我自己开发的小东西上用过,正式产品中使用的是这个模块未优化的版本
翱翔云端的鸟
5楼-- · 2019-08-20 02:12
ianhom 发表于 2017-5-15 17:35
在我自己开发的小东西上用过,正式产品中使用的是这个模块未优化的版本

厉害,学习借鉴一下
ianhom
6楼-- · 2019-08-20 02:28
翱翔云端的鸟 发表于 2017-5-15 17:37
厉害,学习借鉴一下

http://www.openedv.com/forum.php ... id=67273&extra=
之前在论坛上分享过,可以看视频效果

一周热门 更多>