【嵌入式LVGL】01.LVGL常用的组件+常用接口函数

📅 2026/7/5 13:56:21
【嵌入式LVGL】01.LVGL常用的组件+常用接口函数
组件 / 部件看得见、能交互的 UI 单元按钮、窗口、开关容器部件特殊组件空白 menu3、lv_win、选项卡 tab可以装其他小部件普通部件不能装别的控件标签、开关、进度条。一.常用组件1.按钮——btn专属结构体lv_btn_t核心函数lv_btn_create()一般绑定LV_EVENT_CLICKED点击事件(1)创建按钮lv_obj_t * lv_btn_create(lv_obj_t * parent)返回值成功 返回按钮对象的地址失败 NULL参数parent --》结构体指针表示当前这个组件的父窗口父窗口你这个组件等一会在哪个窗口/组件上显示该窗口/组件就是父窗口比如我把按钮在当前窗口上显示当前窗口就是按钮的父窗口LVGL提供了专门的函数帮你获取当前界面的主窗口该函数叫做lv_obj_t *lv_scr_act(),返回值就是当前界面的主窗口地址(2)调整按钮的大小坐标位置lv_obj_set_pos(lv_obj_t * obj, lv_coord_t x, lv_coord_t y)参数obj --》某个组件对象的地址x,y --》你要设置的坐标位置(左上角)lv_obj_set_size(lv_obj_t * obj, lv_coord_t w, lv_coord_t h)参数obj --》某个组件对象的地址w,h --》你要设置的组件宽高(3)给按钮添加事件回调函数--》让你的按钮可以正常使用实现你想要的逻辑lv_obj_add_event_cb(lv_obj_t *obj, lv_event_cb_tevent_cb, lv_event_code_tfilter, void *user_data)参数obj --》某个组件/对象event_cb--》函数指针void(*)(lv_event_t *e)代表的是事件回调函数void (*函数指针)(lv_event_t * e);filter --》你想要判断的事件类型本质是枚举值(值很多罗列其中常用的)LV_EVENT_PRESSED //按下事件LV_EVENT_RELEASED //松开事件LV_EVENT_CLICKED //点击事件(按下去然后松开)user_data --》传递给event_cb的参数lv_event_t * e参数(4)按钮上显示文字,必须跟标签配合使用(按钮自己没有专门显示文字的方法)思路创建标签(按钮作为标签的父窗口)--》在标签上显示文字2.文本区域部件——textarea(输入框)专属结构体lv_textarea_t核心函数lv_textarea_create()、lv_textarea_set_text()(1)创建文本区域部件lv_obj_t* ta lv_textarea_create(lv_scr_act());(2)添加字符、字符串lv_textarea_add_char(ta, A);lv_textarea_add_text(ta, BCD);(3)获取输入的字符串(比如判断密码是否正确、账号格式是否合规)const char* txt lv_textarea_get_text(ta);(4)删除文本lv_textarea_del_char(ta); //删除光标左侧的一个字符(向后删除Backspace 退格键删除光标左边字符。)lv_textarea_del_char_forward(ta); //删除光标右侧的一个字符(forward代表向前删除Delete 键效果删除光标右边的字符)(5)设置只显示在一行(默认情况下文本内容过长会自动换行)lv_textarea_set_one_line(ta, true)(6)设置文本隐藏(密码模式)lv_textarea_set_password_mode(ta, true);(开启密码隐藏输入字符后会自动替换为*传入false则关闭密码模式正常显示文字。)lv_textarea_set_password_show_time(ta, 3000); //设置你输入字符的时候显示3000ms才隐藏(打字快了看不到现象,需要输入一个字符停下来看就是3秒隐藏)(7)设置默认接收输入的字符(字符白名单)lv_textarea_set_accepted_chars(ta, 0123456789); //只能输入0--9这些字符其他字符输入无效不显示lv_textarea_set_max_length(ta, 6); //设置字符长度最大是6(8)显示默认提示信息(占位提示文字placeholder)lv_textarea_set_placeholder_text(ta, password);3.标签——label(专门显示文字的一种组件)专属结构体lv_label_t继承lv_obj_t核心函数lv_label_create()、lv_label_set_text()、lv_label_set_long_mode()(1)创建标签lv_label_create(lv_obj_t * parent)返回值成功 返回标签对象的地址失败 NULL参数parent --》结构体指针表示当前这个组件的父窗口(2)设置长模式lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL); //标签上的文字左右来回滚动(标签的宽要小于文字总的宽度)LV_LABEL_LONG_SCROLL_CIRCULAR //标签上的文字循环滚动LV_LABEL_LONG_CLIP //文字超过标签的宽度直接切除注意长模式要看到效果标签的宽度必须小于字符串的宽度(3)设置标签文本lv_label_set_text(lv_obj_t * obj, const char * text)eg:lv_label_set_text(label,文本内容);参数label --》标签对象text --》你要设置的文本内容(4)设置表示文本格式int num56;lv_label_set_text_fmt(label, Speed: %d RPM,num);第三个参数可以传常量数字、变量、表达式任意符合对应格式符的数据4.开关组件——switch专属结构体lv_switch_t核心函数lv_switch_create()、lv_obj_has_state(sw, LV_STATE_CHECKED)判断开关是否打开(1)创建开关lv_switch_create(lv_scr_act())lv_obj_add_event_cb(LV_EVENT_VALUE_CHANGED);(2)判断开关的状态static void event_cb(lv_event_t* e){if(lv_obj_has_state(switch1, LV_STATE_CHECKED))printf(LED ON\n);elseprintf(LED OFF\n);}5.小窗口(自己创建和官方给的)(1)创建小窗口(lv_obj_create 空白盒子)lv_obj_t* menu3 lv_obj_create(lv_scr_act()); //其它的组件(比如:标签开关)可以把menu3作为父窗口lv_scr_act()获取当前激活屏幕作为父对象lv_obj_create屏幕)在屏幕上创建一块空白容器基础lv_obj_t容器menu3容器可以作为父窗口后续把标签、开关、按钮等组件挂载到它内部(2)官方小窗口(lv_win)专属结构体lv_win_t核心函数lv_win_create()、lv_win_get_content()必须用这个放子控件、lv_win_set_title()(3)两者区别:6.复选框——checkbox专属结构体lv_checkbox_t核心函数lv_checkbox_create()、lv_checkbox_set_text()(1)创建复选框lv_obj_t* checkbox lv_checkbox_create(lv_scr_act());(2)在复选框的右侧添加文本lv_checkbox_set_text(checkbox, 密码);(3)设置复选框跟右侧文本之间的间距lv_obj_set_style_pad_column(checkbox, 50, LV_STATE_DEFAULT); //参数50就是间距注意复选框跟开关组件判断方法一模一样(lv_obj_has_state(checkbox, LV_STATE_CHECKED)7.进度条——bar专属结构体lv_bar_t核心函数lv_bar_create()、lv_bar_set_value()设置进度(1)创建进度条lv_obj_t* bar lv_bar_create(lv_scr_act());(2)设置进度条的范围lv_bar_set_range(bar, 0, 100);(3)设置进度条动画显示效果(延时显示)必须放在设置进度条当前值的前面执行该函数(进度条从0显示到50耗费500ms时间)lv_obj_set_style_anim_time( bar, 500, LV_STATE_DEFAULT); //500ms(4)设置进度条的当前值lv_bar_set_value(bar, 50,LV_ANIM_ON);(5)获取进度条的当前值int valuelv_bar_get_value(bar);8.定时器——timer(不属于 UI 控件但配套所有组件)结构体lv_timer_t函数lv_timer_create(回调, 周期, 参数)定时刷新界面、轮询开关状态(1)创建并启动定时器(父类不是当前活跃屏幕了)lv_timer_t *lv_timer_create(timer_cb, 50,NULL); //每隔50ms执行一次timer_cb返回值lv_timer_t类型的指针表示定时器对象的地址参数第一个事件处理函数第二个 定时时间单位ms注意定时器创建后会自动启动(2)定时器对应的事件处理函数(参数不是lv_event_t *e了而是lv_timer_t* timer)void timer_cb(lv_timer_t* timer);(3)暂停定时器void lv_timer_pause(lv_timer_t * timer)(4)恢复定时器void lv_timer_resume(lv_timer_t * timer)(5)开启或者关闭定时器void lv_timer_enable(bool en)