版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/u014421520/article/details/83584231
MCUKeys
1 简介
MCUKeys是一个简洁小巧可配置的、灵活的、通用的的按键检测程序,截至到目前为止它可以检测如下输入事件:
- 按键按下
- 按键抬起
- 长按(时间可配置)
- 连击(时间可配置)
- 双击
- 组合按键(可以实现以上五种状态)
同时,所有的事件都支持注册回调函数,在事件发生时执行。如果当前系统希望只检测按键按下事件,则可以屏蔽其他所有事件,对于其他按键事件亦然。
2 使用方法
- 先定义一个变量用于获取按键状态
e_keys_status key_value = KEY_NONE;
- 初始化按键,包括硬件IO配置和软件变量初始化两部分
keys_init(); //初始化按键
- 如果有需要回调函数,则注册,不需要可跳过,默认不支持回调函数
keys[KEY1_ID].short_key_down = led2_on; //注册回调函数
keys[KEY1_ID].short_key_up = led2_off;
keys[KEY1_ID].long_key_down = led3_on;
...
- 设置一个周期性可调用的函数来调用按键扫描函数
//定时器3中断服务函数 KEY_TICKS周期中断一次
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断
{
key_scan(); //按键扫描函数
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中断标志位
}
- 在主循环中可以取出按键事件并处理
//main
while(1)
{
key_value = key_out_fifo();
if(key_value != KEY_NONE)
{
switch(key_value)
{
case KEY_1_DOWN:
{
//doing something
}
break;
case KEY_1_UP:
{
//doing something
}
break;
case KEY_1_LONG:
{
//doing something
}
break;
case KEY_1_DOUBLE:
{
//doing something
}
default:
{
} break;
}
}
}
3 按键事件说明
事件 | 说明 |
---|---|
KEY_DOWN | 按键按下,每次按下都触发,可选是否上报 |
KEY_UP | 按键弹起,每次松开都触发,可选是否上报 |
KEY_LONG | 长按触发,key.h中的KEY_LONG_TIME配置长按时间,同时每个按键可单独配置长按时间 |
KEY_REPEAT | 按下连发,key.h中的KEY_REPEAT_TIME配置连发时间,同时每个按键可单独配置连发时间 |
KEY_DOUBLE | 双击按键事件,key.h中的KEY_DOUBLE_MIN/MAX调整双击灵敏度 |
4 快速上手
MCUKeys提供完整的中文注释。同时,提供如下的例程供大家参考。相信很容易上手。
GitHub源码获取清点这里,希望给博主star以资鼓励。