void lv_port_indev_init(void)
{
/*------------------
* 键盘
* -----------------*/
// /初始化您的键盘或键盘(如果有的话)/
keypad_init();
/*注册键盘输入设备*/
indev_keypad = lv_indev_create();
lv_indev_set_type(indev_keypad, LV_INDEV_TYPE_KEYPAD);
lv_indev_set_read_cb(indev_keypad, keypad_read);
// lv_indev_set_group(indev_keypad, g_EncoDer_key_group); //绑定输入设备到组
/*------------------
*编码器
* -----------------*/
/*如果您有,请初始化编码器*/
encoder_init();
/*注册编码器输入设备*/
indev_encoder = lv_indev_create();
lv_indev_set_type(indev_encoder, LV_INDEV_TYPE_ENCODER);
lv_indev_set_read_cb(indev_encoder, encoder_read);
// lv_indev_set_group(indev_encoder, g_EncoDer_key_group); //绑定输入设备到组
// lv_indev_set_mode(indev_encoder, LV_INDEV_MODE_EVENT);
// 1. 创建组
g_EncoDer_key_group = lv_group_create();
lv_indev_set_group(indev_keypad, g_EncoDer_key_group);
lv_indev_set_group(indev_encoder, g_EncoDer_key_group);
}
/将被library调用读取鼠标/
static void keypad_read(lv_indev_t * indev_drv, lv_indev_data_t * data)
{
static uint32_t last_key = 0;
static bool edit_mode = false; // 编辑模式放这里
// /获取当前的x和y坐标/
// mouse_get_xy(&data->point.x, &data->point.y);
/*获取是否按下a键并保存按下的键*/
uint32_t act_key = keypad_get_key();
if(act_key != 0 ) {
data->state = LV_INDEV_STATE_PRESSED; // 按下
/*根据您的按键定义将按键转换为LVGL控制字符*/
switch(act_key) {
case 1:
act_key = LV_KEY_UP;
// LED_CV_F;
// KEY.key_sec = 0;
break;
case 2:
act_key = LV_KEY_DOWN;
// LED_CC_F;
// KEY.key_sec = 0;
break;
case 3:
act_key = LV_KEY_ENTER;
// LED_FAULT_F;
// KEY.key_sec = 0;
break;
case 4: //编码器S
act_key = LV_KEY_ESC;
// LED_RUN_F;
// KEY.key_sec = 0;
break;
}
last_key = act_key;
}
else {
data->state = LV_INDEV_STATE_RELEASED; // 释放 松开
// data->key =0;
// last_key = 0;
//KEY.key_sec = 0;
}
data->key = last_key;
}
/*********************************************************
-
滑块数值变化事件回调
*********************************************************/
static void slider_value_event(lv_event_t * e)
{
lv_obj_t * slider = lv_event_get_target(e);
int16_t val = lv_slider_get_value(slider);// 这里可以加:数值显示、同步变量、阈值判断等
LV_LOG_USER(“Slider Val = %d”, val);
}
// ===================== UI =====================
void lv_create_key_test_ui(void)
{
// 1. 设置屏幕背景色 (LVGL9.5 用 lv_screen_active 标准写法)
lv_obj_set_style_bg_color(lv_screen_active(), lv_color_hex(0xFF0000), LV_PART_MAIN);
// 1. 创建焦点组
lv_group_set_default(g_EncoDer_key_group);
// 2. 创建滑块
slider_main = lv_slider_create(lv_scr_act());
lv_obj_set_size(slider_main, 200, 12);
lv_obj_center(slider_main);
// 滑块范围 0~100 初始50
lv_slider_set_range(slider_main, 0, 100);
lv_slider_set_value(slider_main, 0, LV_ANIM_OFF);
// 加入焦点组,允许按键/编码器控制
lv_group_add_obj(g_EncoDer_key_group, slider_main);
// 绑定数值变化事件
lv_obj_add_event_cb(slider_main, slider_value_event, LV_EVENT_VALUE_CHANGED, NULL);
// 焦点高亮样式
lv_obj_set_style_border_width(slider_main, 0, LV_STATE_DEFAULT);
lv_obj_set_style_border_color(slider_main, lv_color_hex(0x2196F3), LV_STATE_FOCUSED);
lv_obj_set_style_border_width(slider_main, 3, LV_STATE_FOCUSED);
}
长按 按键容易死,只有重新起动