LVGL(Light and Versatile Graphics Library)是一个免费的开源图形库,可提供创建嵌入式图形用户界面所需的一切,图形元素简单易用,视觉效果精美,占用内存少。
1.1 主要功能
- 功能强大的构建模块,如按钮、图表、列表、滑块、图片等。
- 具有动画、抗锯齿、不透明度、平滑滚动等功能的高级图形
- 多种输入设备,如触摸板、鼠标、键盘、编码器等
- 通过 UTF-8 编码支持多种语言
- 支持多显示器,即同时使用多个 TFT 单色显示器
- 使用类似 CSS 的样式完全自定义图形元素
- 独立于硬件:可与任何微控制器或显示器配合使用
- 可扩展:只需少量内存(64 kB 闪存、16 kB RAM)即可运行
- 支持操作系统、外部存储器和 GPU,但并非必需
- 即使使用高级图形效果,也可通过单帧缓冲器运行
- 用 C 语言编写,具有最大兼容性(与 C++ 兼容)
- 模拟器,可在没有嵌入式硬件的 PC 上开始嵌入式图形用户界面设计
- 与 Micropython 绑定
- 用于快速图形用户界面设计的教程、示例和主题
- 提供在线文档和 PDF 文档
- 根据 MIT 许可免费开源
使用 LVGL 有多种方法。以下是学习使用 LVGL 时需要阅读的文件和需要玩的东西的推荐顺序:
1. 查看在线演示,了解 LVGL 的操作(3 分钟)
2. 阅读文档的介绍页面(5 分钟)
3. 阅读文档的快速概览页(15 分钟)
4. 设置模拟器(10 分钟)
5. 试用一些示例
6. 将 LVGL 移植到电路板上。请参阅移植指南或查看即用项目
7. 阅读概述页面,更好地了解该库。(2-3小时)
8. 查看小工具的文档,了解它们的功能和用法
9. 如有问题,请访问论坛
10. 阅读贡献指南,了解如何帮助改进 LVGL(15 分钟)
2.1 快速概览
在这里您可以了解到有关 LVGL 的最重要信息。您应先阅读此部分以获得总体印象,然后再阅读详细的移植和概述部分。
2.1.1 在模拟器中入门
与直接将 LVGL 移植到嵌入式硬件相比,强烈建议先从模拟器开始。
LVGL 已被移植到许多集成开发环境中,您一定能找到自己喜欢的一款。请访问模拟器部分,获取可在个人电脑上运行的即用项目。这样你就可以暂时节省移植的时间,并立即获得一些使用 LVGL 的经验。
2.1.2 在项目中添加 LVGL
如果您想在自己的项目中尝试 LVGL,请按照以下步骤操作:
- 使用 git clone https://github.com/lvgl/lvgl.git 从 GitHub 下载或克隆该库。
- 将 lvgl 文件夹复制到项目中。
- 将 lvgl/lv_conf_template.h 复制到 lvgl 文件夹旁边的 lv_conf.h,将第一个 #if 0 改为 1 以启用文件内容,并设置 LV_COLOR_DEPTH 定义。
- 在需要使用 LVGL 相关函数的文件中包含 lvgl/lvgl.h。
- 在定时器或任务中每隔 x 毫秒调用 lv_tick_inc(x)(x 应介于 1 和 10 之间)。这是 LVGL 内部定时所必需的。或者,配置 LV_TICK_CUSTOM(参见 lv_conf.h),这样 LVGL 就能直接获取当前时间。
- 调用 lv_init()
- 创建绘图缓冲区: LVGL 将首先在此渲染图形,然后将渲染后的图像发送到显示器。缓冲区的大小可以自由设置,但 1/10 屏幕大小是一个很好的起点。
- static lv_disp_draw_buf_t draw_buf;
- static lv_color_t buf1[DISP_HOR_RES * DISP_VER_RES / 10]; /
- ,
- →*Declare a buffer for 1/10 screen size*/
- lv_disp_draw_buf_init(&draw_buf, buf1, NULL, MY_DISP_HOR_RES * MY_DISP_VER_SER / 10);␣
- ,
- → /*Initialize the display buffer.*/
复制代码
- 执行并注册一个函数,将渲染的图像复制到显示屏的某个区域:
- static lv_disp_drv_t disp_drv; /*Descriptor of a display driver*/
- lv_disp_drv_init(&disp_drv); /*Basic initialization*/
- disp_drv.flush_cb = my_disp_flush; /*Set your driver function*/
- disp_drv.buffer = &draw_buf; /*Assign the buffer to the display*/
- disp_drv.hor_res = MY_DISP_HOR_RES; /*Set the horizontal resolution of the display*/
- disp_drv.ver_res = MY_DISP_VER_RES; /*Set the vertical resolution of the display*/
- lv_disp_drv_register(&disp_drv); /*Finally register the driver*/
- void my_disp_flush(lv_disp_drv_t * disp, const lv_area_t * area, lv_color_t * color_p)
- {
- int32_t x, y;
- /*It's a very slow but simple implementation.
- *`set_pixel` needs to be written by you to a set pixel on the screen*/
- for(y = area->y1; y <= area->y2; y++) {
- for(x = area->x1; x <= area->x2; x++) {
- set_pixel(x, y, *color_p);
- color_p++;
- }
- }
- lv_disp_flush_ready(disp); /* Indicate you are ready with the flushing*/
- }
复制代码
- 执行并注册一个可以读取输入设备的函数。例如触摸板:
- static lv_indev_drv_t indev_drv; /*Descriptor of a input device driver*/
- lv_indev_drv_init(&indev_drv); /*Basic initialization*/
- indev_drv.type = LV_INDEV_TYPE_POINTER; /*Touch pad is a pointer-like device*/
- indev_drv.read_cb = my_touchpad_read; /*Set your driver function*/
- lv_indev_drv_register(&indev_drv); /*Finally register the driver*/
- void my_touchpad_read(lv_indev_t * indev, lv_indev_data_t * data)
- {
- /*`touchpad_is_pressed` and `touchpad_get_xy` needs to be implemented by you*/
- if(touchpad_is_pressed()) {
- data->state = LV_INDEV_STATE_PRESSED;
- touchpad_get_xy(&data->point.x, &data->point.y);
- } else {
- data->state = LV_INDEV_STATE_releaseD;
- }
- }
复制代码
- 在主 hile(1) 循环或操作系统任务中,每隔几毫秒定期调用 lv_timer_handler()。如果需要,它将重绘屏幕、处理输入设备和动画等。
如需更详细的指南,请参阅移植部分。
2.1.3 学习基础知识
小工具
按钮、标签、滑块、图表等图形元素被称为对象或小工具。请访问部件查看可用部件的完整列表。
每个对象都有一个创建它的父对象。例如,如果在按钮上创建了一个标签,那么按钮就是标签的父对象。
子对象随父对象移动,如果父对象被删除,子对象也会被删除。
子对象只能在父对象上可见。换句话说,子对象在父对象之外的部分会被剪切。
屏幕是父代的 "根"。您可以拥有任意数量的屏幕。
要获取当前屏幕,请调用 lv_scr_act();要加载屏幕,请调用 lv_scr_load(scr1)。
您可以使用 lv_<type>_create(parent)创建一个新对象。它将返回一个 lv_obj_t * 变量,可用作对象的引用来设置其参数。
例如
- lv_obj_t * slider1 = lv_slider_create(lv_scr_act());
复制代码
要设置一些基本属性,可以使用 lv_obj_set_<parameter_name>(obj, <value>) 函数。例如
- lv_obj_set_x(btn1, 30);
- lv_obj_set_y(btn1, 10);
- lv_obj_set_size(btn1, 200, 50);
复制代码
部件也有特定类型的参数,可通过 lv_<widget_type>_set_<parameter_name>(obj.<value>)函数设置、 <value>) 函数来设置。例如
- lv_slider_set_value(slider1, 70, LV_ANIM_ON);
复制代码
- 文件大小:
- 1.5 MB
- 下载次数:
- 0
- 附件售价:
-
2 RD币 购买记录
- LVGL(Light and Versatile Graphics Library)是一个免费的开源图形库,可提供创建嵌入式图形用户界面所需 ...
-
本地下载
立即购买
|