前言
switch button : 开关按钮控件,用的也比较多,这里熟悉下相关的操作
switch 有两个状态:开与关
环境搭建
RT-Thread 4.1.0 或最新版本
BSP 模拟器 simulator
LVGL软件包
功能
LVGL 画个Switch 开关按钮,画个 标签显示开关按钮的状态
操作方法
这里在LVGL 官方的例程里,找到了switch 空间的操作,稍微熟悉 相关大的API,编写switch 按钮的测试代码
存放位置:simulator\applications\lvgl\demo\lv_switch_01.c,
代码如下
#include <rtthread.h>
#include <lvgl.h>
static lv_obj_t *lbl_status = NULL;
static void sw_event_cb(lv_event_t *e)
{
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t *sw = lv_event_get_target(e);
if (lv_obj_has_state(sw, LV_STATE_CHECKED))
{
rt_kprintf("%s : power on \r\n", __func__);
lv_label_set_text(lbl_status, "ON");
lv_obj_align_to(lbl_status, sw, LV_ALIGN_OUT_RIGHT_MID, 20, 0);
}
else
{
lv_label_set_text(lbl_status, "OFF");
lv_obj_align_to(lbl_status, sw, LV_ALIGN_OUT_RIGHT_MID, 20, 0);
rt_kprintf("%s : power off \r\n", __func__);
}
}
/**
Show an example to switch button
*/
void lv_switch_01_init(void)
{
static rt_bool_t power_flag = RT_FALSE;
lv_obj_t *sw = lv_switch_create(lv_scr_act());
lv_obj_align(sw, LV_ALIGN_TOP_LEFT, 50, 20);
lv_obj_add_event_cb(sw, sw_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
lv_obj_clear_state(sw, LV_STATE_CHECKED);
/* Create a label */
lbl_status = lv_label_create(lv_scr_act());
lv_label_set_text(lbl_status, "OFF");
lv_obj_align_to(lbl_status, sw, LV_ALIGN_OUT_RIGHT_MID, 20, 0);
}
调用的位置:simulator\packages\LVGL-latest\env_support\rt-thread\lv_rt_thread_port.c,也可以放在其他的位置,把代码文件加入 visual studio 2022 的工程里
编译与运行
添加到RT-Thread 模拟器 Visual Studio 2022的工程里,编译并运行,效果如下:
switch 开关按钮API
设置 switch 默认开启状态:lv_obj_add_state(sw, LV_STATE_CHECKED);
设置 switch 默认关闭(灰色)状态:lv_obj_clear_state(sw, LV_STATE_CHECKED);
switch 是否为开启状态:lv_obj_has_state(sw, LV_STATE_CHECKED)
设置 switch 状态改变回调函数:lv_obj_add_event_cb(sw, sw_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
小结
开关按钮Switch 用的比较的广泛,如一些电源控制等
使用RT-Thread 模拟器调试LVGL,比较的高效与便捷,并且相关的代码,很容易移植到嵌入式的硬件电路板上。
原作者:张世争