u for universal
u-button 是一款开源通用按键驱动库。有三大特点,一是该库采用读回调机制获取所有的按键状态,因而不受限于按键的类型,可支持独立按键,矩阵按键,以及AD按键等。二是采用事件回调机制上报按键事件,开发者只需要关注于自己的代码逻辑即可。第三,它支持中断模式,开发者可根据自己需求进行相应配置。
.
├── examples
├── LICENSE
├── README.md
├── u-button.c
└── u-button.h
examples 暂时为空,后期会补上
待定
rtos、裸机均可使用
- v1.0
- u-button 初版
| 需要配置的成员 | 说明 |
|---|---|
| filter_time | |
| hold_active_time | |
| button_irq_enabled | |
| repeat_speed | |
| ub_device_read_callback | |
| ub_event_callback | |
| ops |
struct u_button_ops {
void (*ub_exti_irq_control_callback)(ub_bool_t enabled);
void (*ub_time_irq_control_callback)(ub_bool_t enabled);
};| 按键事件 | 说明 |
|---|---|
| UB_EVENT_BUTTON_DOWN | 按键按下,每次按下都会触发 |
| UB_EVENT_BUTTON_UP | 按键抬起,每次抬起都会触发 |
| UB_EVENT_BUTTON_REPEAT_CLICK | 重复击事件,repeat变量记录连击次数 |
| UB_EVENT_BUTTON_HOLD | 长按事件触发 |
选用了中断模式,需要将button_irq_enabled变量置1,并且设置ops回调函数,最后要将ub_device_state_set();放在exti中断处理函数中调用。
- 定义一个设备类型的全局变量
ub_dev_t g_dev;
- 依次给设备结构体赋值初始化
g_dev.filter_time = 0; // 设置消抖时间
g_dev.hold_active_time = 40; // 设置长按有效时间
g_dev.button_irq_enabled = UB_BUTTON_IRQ_USE; // 设置中断模式
g_dev.repeat_speed = 30; // 设置重复击速度
g_dev.ub_device_read_callback = funcA; // 设置读回调
g_dev.ub_event_callback = funcB; // 设置事件回调
g_dev.ops->ub_exti_irq_control_callback = funcC; // 设置按键中断开关
g_dev.ops->ub_time_irq_control_callback = funcD; // 设置定时器中断开关时间参数的配置与用户调用
ub_device_state_handle()的频率有关
- 调用初始化接口
ub_device_init(&g_dev);
ub_device_state_set(&g_dev);
ub_device_state_handle(&g_dev);