什么是Lvgl?
LVGL(轻巧而多功能的图形库)是一个免费的开放源代码图形库,它提供创建具有易于使用的图形元素,精美的视觉效果和低内存占用的嵌入式GUI所需的一切。
主要特性
功能强大的构建块,例如按钮,图表,列表,滑块,图像等。
带有动画,抗锯齿,不透明,平滑滚动的高级图形
各种输入设备,例如触摸板,鼠标,键盘,编码器等
支持UTF-8编码的多语言
多显示器支持,如TFT,单色显示器
完全可定制的图形元素
独立于任何微控制器或显示器使用的硬件
可扩展以使用很少的内存(64 kB闪存,16 kB RAM)进行操作
操作系统,支持外部存储器和GPU,但不是必需的
单帧缓冲区操作,即使具有高级图形效果
用C语言编写,以实现最大的兼容性(与C ++兼容)
模拟器可在没有嵌入式硬件的PC上进行嵌入式GUI设计
可移植到MicroPython
可快速上手的教程、示例、主题
丰富的文档教程
在MIT许可下免费和开源
源码布局
-
./lvgl 库本身
-
./lv_drivers 显示和输入设备驱动程序
-
./lv_examples 示例和演示
初始化lvgl
配置文件
上面的三个库中有一个类似名为 lv_conf_template.h 的配置头文件(template就是模板的意思)。通过它可以设置库的基本行为,裁剪不需要模块和功能,在编译时调整内存缓冲区的大小等等。
-
将 lvgl/lv_conf_template.h 复制到 lvgl 同级目录下,并将其重命名为
lv_conf.h
。打开文件并将开头的#if 0
更改为#if 1
以使能其内容。 -
将 lv_drivers/lv_drv_conf_template.h 复制到 lv_drivers 同级目录下,并将其重命名为
lv_drv_conf.h
。打开文件并将开头的#if 0
更改为#if 1
以使能其内容。 -
(可选)将 lv_examples/lv_ex_conf_template.h 复制到 lv_examples 同级目录下,并将其重命名为
lv_ex_conf.h
。打开文件并将开头的#if 0
更改为#if 1
以使能其内容。
准备lvgl配置文件
使能配置文件
lv_conf.h 也可以复制到其他位置,但是应该在编译器选项中添加 ``LV_CONF_INCLUDE_SIMPLE`` 定义 (例如,对于 gcc 编译器为 ``-DLV_CONF_INCLUDE_SIMPLE`` ) 并手动设置包含路径。
在配置文件中,注释说明了各个选项的含义。我们在移植时至少要检查以下三个配置选项,其他配置根据具体的需要进行修改:
-
LV_HOR_RES_MAX
显示器的水平分辨率。 -
LV_VER_RES_MAX
显示器的垂直分辨率。 -
LV_COLOR_DEPTH
颜色深度,其可以是:
8 - RG332
16 - RGB565
32 - (RGB888和ARGB8888)
准备好这三个库:lvgl、lv_drivers、lv_examples 后,我们就要开始使用lvgl带给我们的功能了。使用 lvgl 图形库之前,我们还必须初始化 lvlg 以及相关其他组件。初始化的顺序为:
-
调用 lv_init() 初始化 lvgl 库;
-
初始化驱动程序;
-
在 LVGL 中注册显示和输入设备驱动程序;
-
在中断中每隔
x毫秒
调用lv_tick_inc(x)
用以告知 lvgl 经过的时间;
每隔 x毫秒
定期调用 lv_task_handler()
用以处理与 lvgl 相关的任务
显示接口
要设置显示,必须初始化 lv_disp_buf_t
和 lv_disp_drv_t
变量。
lv_disp_buf_t 保存显示缓冲区信息的结构体
lv_disp_drv_t HAL要注册的显示驱动程序、与显示交互并处理与图形相关的结构体、回调函数。