本程序是从网上资料修改而来的,不算是原创,谢谢
为什么要写按键模块程序?
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.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
在我自己开发的小东西上用过,正式产品中使用的是这个模块未优化的版本
一周热门 更多>