LVGL是一个高度可裁剪、低资源占用、界面美观且易用的嵌入式系统图形库,对硬件的要求比较低,可以较为流畅的运行在单片机上。不依赖特定的硬件平台,可以在任何显示屏上运行,并且完全开源,对按钮,触摸,编码器旋钮等支持的非常到位。
开源代码可以官网下载,可以下到当前最新的8.3.10版本
HYPERLINK "https://github.com/lvgl/lvgl/tree/release/v8.3"
移植使用时,主要用到下面框起来的四个文件或者文件夹
他们的主要用的内容和作用为:
examples
一些演示例程和可以用到的接口函数
src
LVGL的源码,最重要的内容
lv_conf_template.h
LVGL配置文件,用来裁剪控制LVGL的功能,通常重命名为lv_conf.h
lvgl.h
LVGL用到的一些头文件的声明
下面就在代码文件夹新建lvgl文件夹,用于放上面四个文件和文件夹
将他们拷贝进去
接下来需要看一下keil的配置,因为LVGL是基于C99编写的,所以keil编译时一定要选择C99模式编译,不选择的话我的工程默认使用的是C11模式,所以有可能会出比较多的编译错误
然后给项目添加下面的lvgl相关的文件夹
然后添加user_lvgl_port文件夹的相关文件,这里只添加显示的lv_port_disp_template,因为没有输入和文件系统,因此另外两个实际上添加了后面也没用用上。
接下来添加中断的user_lvgl源代码,也就是添加lvgl下面src文件夹的下列文件夹中的所有文件,包括extra(实际上可能不用,但为了后续编译免去麻烦全都加上)
添加头文件路径
添加LV_CONF_INCLUDE_SIMPLE到编译器预处理中,以使用lv_conf.h文件
修改头文件lv_port_disp_templ.h的预编译宏定义打开功能
修改头文件lv_port_disp_templ.c的预编译宏定义打开功能
添加液晶底层驱动的头文件,这里使用的是ILI9431
接下来修改这个lv_port_disp_init中的disp_init函数内容
在这里,将我们的LCD初始化的部分放到这里,当然,也可以放在别处,也行,但是必须要在确保在lvgl初始化之前调用,这里我们就不在这里做初始化,而分开操作。
下面选择显存方式,代码提供了3中方式,这里选择方式1,因此下面这两个Example测试代码通过预编译注释掉
修改disp_flush函数的填充功能函数为LCD驱动(ILI9431)的描点函数
将lv_conf_template.h修改为lv_conf.h
并修改里面的宏定义预编译,将其功能打开
在文件末尾增加屏幕大小定义
下面这两个宏在调试阶段也可以打开,这是用来在屏幕上显示帧数和MCU占用、内存占用的。
main函数增加头文件
还需要一个在嘀嗒定时器里加一个定时函数进行刷新(这里也注意添加头文件)
在主函数中对lvgl先进性初始化,要注意,前面有提到,ILI9431初始化需要在lvgl初始化之前进行
然后增加两个显示label标签,显示ST和21ic的一些信息
并在main函数中增加一个在lv_port_disp_init函数之后调用
主循环中,增加lvgl的处理函数lv_task_handler以及延时
其中 LV_DISP_DEF_REFR_PERIOD 为其刷新时间周期,在lv_conf.h文件中定义,该参数决定帧率。
编译下载运行
从图中看起来,刷新率配置还不算高,刷新太慢了,但CPU占用率已经相当高,这主要是因为屏幕驱动方式以及代码本身优化程度,造成了MCU的占用率不理想,待后续进行更多的优化。
---------------------
作者:Tristan_C
链接:https://bbs.21ic.com/icview-3345672-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。