SPACEX Dragon嵌入式系统GUI
Contents
I. 简介... 1
II. 开始学习... 2
i. 快速概览... 2
1. PC模拟器... 2
2. 在项目中添加LVGL. 2
3. 基础知识... 3
ii. PC模拟器... 10
1. 选择编译环境IDE. 10
2. 设置Eclipse CDT. 10
III. 导出... 13
IV. 详细API 13
V. 图标... 13
I. 简介
介绍
LVGL(轻度综合图形界面库)作为一个免费开源图形库能够提供几乎所有的嵌入式GUI。该开源库有使用方便,画面美观,内存占用率低等优点。
特点
· 强大的模块化编程能力,能够创建包括按键,图标,列表,滑块,图片在内的功 能
· 先进的图形界面,包含动画,抗撕裂,可调明暗度,柔和缩放等功能
· 支持不同的输入设备包括键盘,鼠标,触摸屏,编码器等
· UTF-8编码多语言支持
· 多显示器支持,可以同时使用多个TFT或单色显示
· 完整的可自定义图形元素
· 不限制芯片类型,硬件可无限制地在各种芯片上使用LVGL
· 可自定义内存调用
· 支持但不强制使用操作系统,外部存储或GPU
· 使用单一框架缓存支持复杂的图形界面(省资源?)
· 整个库用C编写最大程度地提高兼容性
· 可在计算机上用模拟器打开GUI而不用导出到硬件端debug
· 可与MicroPython连接
· 包含教程,实例与主题以便快速设计GUI
· 本文件有线上与线下版本
· 以MIT协议为基础的免费开源项目
要求
对于所有芯片的最低系统要求:
· 16,32或64位微处理器或芯片
· 建议使用大于16MHz的时钟速度
· 闪存/ROM:对于重要部件要求大于64KB(建议大于180KB)
· RAM:
o 静态RAM使用:根据不同功能与对象2KB以内不等
o 栈:大于2KB(建议大于8KB)
o 动态数据(堆):大于2KB(如果使用多个对象建议大于16KB)。使用lv_conf.h库中的LV_MEM_SIZE方程来设置。
o 显示缓存:大于“水平分辨率”像素值(建议大于10*“水平分辨率”像素值
· 在未处理器重或外部显示控制中均使用单一框架缓存
· 使用C99或者更新版的C语言编译器
· 使用者应有C或者C++基础知识:指针,结构,callback方程
II. 开始学习
i. 快速概览
在这一章将列出LVGL最重要的功能。在使用LVGL或者阅读导出,概览之前应阅读此章
1. PC模拟器
非常建议在导出至硬件前先在PC模拟器中对LVGL项目进行debug。
LVGL可以在多种编译器中使用。请前往模拟器章节学习如何设置模拟器并使用模拟器debug。从而你可以在无需硬件的环境下学习LVGL。
2. 在项目中添加LVGL
以下步骤为LVGL在有触摸屏显示的嵌入式系统中的设置:
o 下载或使用命令行从GITHUB复制git clone https://github.com/lvgl/lvgl.git
o 将下载后的lvgl文件夹复制到项目文件夹(目前github文件夹中的lvgl文件夹被改名为lvgl-master)
o 将lvgl/lv_conf_temp.h库改名为lv_conf.h并复制到lvgl。将lv_conf.h中的#if 0更改为1从而激活该库中的内容。三个必须设置的基本参数为LV_HOR_RES_MAX(显示屏水平像素最大值),LV_VER_RES_MAX(显示屏垂直像素最大值)以及LV_COLOR_DEPTH(显示屏颜色)
o 将lvgl-master/lvgl.h复制到需要调用LVGL有关方程的位置
o 调用lv_tick_inc(x)并为计时器或者任务设置一个x毫秒的参数。此方程为LVGL内部计时所必须。
o 调用lv_init()
o 创建一个LVGL显示缓存。LVGL会将需要被更改的图形显示首先保存在这个缓存中再发送到前端更新画面。缓存的大小可以任选,屏幕尺寸的1/10是一个比较好的初始选择。
staticlv_disp_buf_t disp_buf;//声明显示缓存数组
staticlv_color_t buf[LV_HOR_RES_MAX*LV_VER_RES_MAX/ 10];//设置尺寸为1/10屏幕大小的显示缓存
lv_disp_buf_init(&disp_buf, buf,NULL, LV_HOR_RES_MAX*LV_VER_RES_MAX/ 10);//初始化显示缓存数组
o 接下来实现并注册一个方程将改变后的画面复制到显示屏的特定区域
lv_disp_drv_tdisp_drv;/*创建显示驱动的报文数组*/
lv_disp_drv_init(&disp_drv);/*驱动基本初始化*/
disp_drv.flush_cb =my_disp_flush;/*设置驱动方程*/
disp_drv.buffer = &disp_buf;