如何将lvgl的虚拟按键与外置独⽴实体按键联动如何将lvgl的虚拟按键与外置独⽴实体按键联动(基于lvgl V6.0.2) lv_port_indev配置
lv_port_indev.c
时子环static bool button_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data);
static int8_t button_get_pressed_id(void);
static bool button_is_pressed(uint8_t id);
lv_indev_t * indev_btn;
//在初始化函数中注册按键,该初始化函数会在main主函数中调⽤
void lv_port_indev_init(void)
{
lv_indev_drv_t indev_drv;
/*Register a button input device*/
lv_indev_drv_init(&indev_drv);
pe = LV_INDEV_TYPE_BUTTON;
ad_cb = button_read;
indev_btn =lv_indev_drv_register(&indev_drv);轨道交通
系统 //指定具体坐标点,我使⽤了三个物理按键来跟屏幕的触摸按键对应,该坐标点必须在虚拟按键的触摸范围内。 static lv_point_t points_btn[3]={
{SC_MENU_Addr_X1, SC_MENU_Addr_Y1},
{SC_MENU_Addr_X1+3*SC_Base_Addr_X36, SC_MENU_Addr_Y1},
{SC_MENU_Addr_X1+6*SC_Base_Addr_X36, SC_MENU_Addr_Y1},
};
lv_indev_set_button_points(indev_btn, points_btn);
}
//button_read 使⽤系统默认的即可
static bool button_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data)
{
static uint8_t last_btn =0;
/*Get the pressed button's ID*/
int8_t btn_act =button_get_pressed_id();
if(btn_act >=0){
data->state = LV_INDEV_STATE_PR;
last_btn = btn_act;
}else{
data->state = LV_INDEV_STATE_REL;
}
/*Save the last pressed button's ID*/
data->btn_id = last_btn;
/*Return `false` because we are not buffering and no more data to read*/双合金螺杆
return false;
}
/*Get ID (0, 1, 2 ..) of the pressed button*/
//使⽤系统默认的即可
/
一叶荻/注意此处i的最⼤值为数组最⼤有效值
static int8_t button_get_pressed_id(void)
{
uint8_t i;
/*Check to buttons see which is being pressed (assume there are 2 buttons)*/
for(i =0; i <3; i++){
/*Return the pressed button's ID*/
if(button_is_pressed(i)){
return i;
移动管式喷砂机}
}
}
/*No button pressed*/
return-1;
双绞线视频传输器
}
//此处需要将ID号与你实体按键的IO⼝对应起来。例如我的PE2对应ID号为0,对应坐标点为{SC_MENU_Addr_X1, SC_MENU_Addr_Y1}, /*Test if `id` button is pressed or not*/
static bool button_is_pressed(uint8_t id)
{
uint8_t i;
if(id==0)
{
i=key_Scan_lvgl(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2),1,M_ONOFF_PRES);
if(i>0)
return true;
}else if(id==1)
{
i=key_Scan_lvgl(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3),1,M_UP_PRES);
if(i>0)
return true;
}
else if(id==2)
{
i=key_Scan_lvgl(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4),1,M_DOWN_PRES);
if(i>0)
return true;
}
return false;
}
以上是初学时对此的应⽤,如有不⾜,敬请谅解。