#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()); }