LVGL全程LittleVGL,是一个轻量化的,开源的,用于嵌入式GUI设计的图形库。并且配合LVGL模拟器,可以在电脑对界面进行编辑显示,测试通过后再移植进嵌入式设备中,实现高效的项目开发。

LVGL中文教程手册:百问网LVGL中文教程手册文档
以下的内容均是以VS环境下的LVGL模拟器进行展开,之后会再针对移植的事项进行说明。
一. 框架
学过QT或者其他UI开发的选手应该了解:
UI界面就是由一个个控件,以及控件之间的相互关系(如父子继承关系,事件触发等)组成的。每个控件都有其独有的属性(如样式,触发函数等),LVGL也是如此。
LVGL还带有主题功能,能够便捷地统一控件样式。
因为是面向嵌入式设备进行开发,LVGL还需要有硬件相关的驱动。
// 主函数代码
int main(int argc, char** argv)
{
/*Initialize LittlevGL*/
lv_init();
/*Initialize the HAL for LittlevGL*/
hal_init();
/*
* Demos, benchmarks, and tests.
*/
lv_demo();
while (1)
{
/* Periodically call the lv_task handler.
* It could be done in a timer interrupt or an OS task too.*/
lv_task_handler();
Sleep(10); /*Just to let the system breathe */
}
return 0;
}
- 对于功能实现,我们需要做的,就是将上面的lv_demo替换为我们自己写的函数。
- 因为lvgl内部是以不同线程的形式来处理各项任务,如刷屏等,并且我们也可以注册任务的,所以需要循环调用lv_task_handler来进行任务处理。
- lv_task_handler的调用除了在主函数的while中进行调用,也可以在OS或者定时器中断中进行调用,比如STM32使用FreeRTOS的一个线程进行处理。
二. 对象
对象具有各种属性,如位置尺寸等。
可以使用lv_obj_set _… 和 **lv_obj_get _…**来设置及获取属性信息。
/* 设置按键的大小 */
lv_obj_set_size(btn, 100, 50);
/* 获取按键的父级指针 */
lv_obj_get_parent(btn)
不同控件的特殊属性可以使用带控件名称的函数进行实现。
/* 设置滑块的最小值和最大值 */
lv_slider_set_range(slider1, 0, 100);
/* 设置回调函数 */
lv_slider_set_action(slider1, my_action);
工作机制
1. 亲子结构
父对象可以作为其子对象的容器。每个对象只能一个父对象(屏幕除外),但是一个父对象可以有无限多个子对象。
父对象的类型没有限制,但是有特殊的父对象(例如,按钮)和特殊的子对象(例如,标签)。
2. 子对象仅在父对象的范围内可见
3. 子对象的位置是相对于父对象的位置,父对象移动时,两者相对位置不变。
创建和删除对象
/**
* @param 指向父对象的指针。创建屏幕时以 NULL 作为父级。
* @param 此参数可选,表示创建新对象时,把 copy 对象上的属性值复制过来
*/
lv_obj_t * lv_ <type>_create(lv_obj_t * parent, lv_obj_t * copy);
/* 所有对象类型都有一个通用的删除功能。它删除对象及其所有子对象 */
void lv_obj_del(lv_obj_t * obj);
/* 异步删除 */
void lv_obj_del_async(lv_obj_t * obj)
/* 删除对象的所有子对象(但不会删除对象本身) */
void lv_obj_clean(lv_obj_t * obj);
屏幕对象
/* 创建屏幕 */
lv_obj_t * scr = lv_obj_create

本文介绍LVGL,一个轻量级、开源的嵌入式GUI库。涵盖框架搭建、对象管理、事件处理、输入设备配置、字体及动画设置等内容,助力开发者快速掌握嵌入式GUI设计。
 基础概念&spm=1001.2101.3001.5002&articleId=128343533&d=1&t=3&u=b4e5dfd9b6a64ead818282150845c37f)
1万+

被折叠的 条评论
为什么被折叠?



