提交按键库例程
This commit is contained in:
90
2gpio-lib/lib/ebtn/ebtn_cb.c
Normal file
90
2gpio-lib/lib/ebtn/ebtn_cb.c
Normal file
@@ -0,0 +1,90 @@
|
||||
#include "ebtn_cb.h"
|
||||
|
||||
/* ---------------- 按钮参数配置 ---------------- */
|
||||
static const ebtn_btn_param_t default_param = EBTN_PARAMS_INIT
|
||||
(
|
||||
20, // 按下去抖时间(ms)
|
||||
20, // 释放去抖时间(ms)
|
||||
20, // 点击最短时间(ms)
|
||||
300, // 点击最长时间(ms)
|
||||
200, // 连击间隔最大值(ms)
|
||||
500, // 长按KEEPALIVE间隔(ms)
|
||||
10 // 最大连续点击次数
|
||||
);
|
||||
|
||||
/* ---------------- 按钮ID定义 ---------------- */
|
||||
typedef enum
|
||||
{
|
||||
USER_BUTTON1 = 0,
|
||||
USER_BUTTON_MAX,
|
||||
} user_button_t;
|
||||
|
||||
/* ---------------- 按钮对象 ---------------- */
|
||||
static ebtn_btn_t btns[] =
|
||||
{
|
||||
EBTN_BUTTON_INIT(USER_BUTTON1, &default_param),
|
||||
};
|
||||
|
||||
/* ---------------- 获取按键状态 ---------------- */
|
||||
static uint8_t prv_btn_get_state(struct ebtn_btn* btn)
|
||||
{
|
||||
switch(btn->key_id)
|
||||
{
|
||||
case USER_BUTTON1:
|
||||
return gpio_get(GPIOC, GPIO13) == GPIO13;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* ---------------- 事件回调函数 ---------------- */
|
||||
static void prv_btn_event(struct ebtn_btn* btn, ebtn_evt_t evt)
|
||||
{
|
||||
switch(evt)
|
||||
{
|
||||
case EBTN_EVT_ONPRESS:
|
||||
|
||||
break;
|
||||
case EBTN_EVT_ONRELEASE:
|
||||
|
||||
break;
|
||||
case EBTN_EVT_ONCLICK:
|
||||
if((ebtn_click_get_count(btn) == 2) && (btn->key_id == USER_BUTTON1))
|
||||
{
|
||||
gpio_toggle(GPIOE, GPIO3);
|
||||
}
|
||||
//printf("[BTN %d] Clicked, count=%d\r\n", btn->key_id, ebtn_click_get_count(btn));
|
||||
break;
|
||||
case EBTN_EVT_KEEPALIVE:
|
||||
if(btn->key_id == USER_BUTTON1)
|
||||
{
|
||||
gpio_toggle(GPIOE, GPIO3);
|
||||
}
|
||||
//printf("[BTN %d] Keepalive, cnt=%d\r\n", btn->key_id, ebtn_keepalive_get_count(btn));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* ---------------- 系统时间 ---------------- */
|
||||
static uint32_t ebtn_user_get_tick(void)
|
||||
{
|
||||
return systick;
|
||||
}
|
||||
|
||||
/* ---------------- 初始化函数 ---------------- */
|
||||
void ebtn_user_init(void)
|
||||
{
|
||||
ebtn_init(btns,
|
||||
EBTN_ARRAY_SIZE(btns),
|
||||
NULL, 0, // 无组合键
|
||||
prv_btn_get_state,
|
||||
prv_btn_event);
|
||||
}
|
||||
|
||||
/* ---------------- 周期处理函数 ---------------- */
|
||||
void ebtn_user_process(void)
|
||||
{
|
||||
ebtn_process(ebtn_user_get_tick());
|
||||
}
|
||||
Reference in New Issue
Block a user