一.显示功能开启
接着要完成LVGL显示功能的注册,即开启:
1、开启 lv_conf.h
把“#if 0”改为“#if 1”
2、开启 lv_port_disp.h
改1
注意这里还要把"lvgl/lvgl.h"改为"lvgl.h"
3、开启 lv_port_disp.c (这个文件很关键,我们的底层函数主要需要在这实现)
同样的,这里要删去“_template”
这里可以设置你的显示屏的长宽。
在lv_port_disp.c这个文件中,还需要选择一个缓冲方式,我们一般选第一种(大概在90到101行),故这里我们注释掉第二和第三种
/* Example for 1) */
static lv_disp_draw_buf_t draw_buf_dsc_1;
static lv_color_t buf_1[MY_DISP_HOR_RES * 10]; /*A buffer for 10 rows*/
lv_disp_draw_buf_init(&draw_buf_dsc_1, buf_1, NULL, MY_DISP_HOR_RES * 10); /*Initialize the display buffer*/
//选择第一种缓冲方式,注释掉后两种
// /* Example for 2) */
// static lv_disp_draw_buf_t draw_buf_dsc_2;
// static lv_color_t buf_2_1[MY_DISP_HOR_RES * 10]; /*A buffer for 10 rows*/
// static lv_color_t buf_2_2[MY_DISP_HOR_RES * 10]; /*An other buffer for 10 rows*/
// lv_disp_draw_buf_init(&draw_buf_dsc_2, buf_2_1, buf_2_2, MY_DISP_HOR_RES * 10); /*Initialize the display buffer*/
// /* Example for 3) also set disp_drv.full_refresh = 1 below*/
// static lv_disp_draw_buf_t draw_buf_dsc_3;
// static lv_color_t buf_3_1[MY_DISP_HOR_RES * MY_DISP_VER_RES]; /*A screen sized buffer*/
// static lv_color_t buf_3_2[MY_DISP_HOR_RES * MY_DISP_VER_RES]; /*Another screen sized buffer*/
// lv_disp_draw_buf_init(&draw_buf_dsc_3, buf_3_1, buf_3_2,
// MY_DISP_VER_RES * LV_VER_RES_MAX); /*Initialize the display buffer*/
此时当我们完成上述全部步骤后,再次进行编译,应该为 0 Error,如果不是,需要解决所有Error后再进行。但是有一些警告没有关系
接着我们就要正式开始添加驱动文件了,还是在lv_port_disp.c 这个文件中,添加我们所用的LCD的驱动文件:
首先添加驱动头文件:
对这里的添加作简单说明:
首先,LVGL只是一个开源框架,内部是不含任何驱动函数的,所有驱动函数都是我们自己写或者LCD原厂的例程,我们要通过向LVGL中添加驱动函数来将其和我们的屏幕建立连接。
第一个是static void disp_init(void)这个函数,用于初始化屏幕,在其中添加你的LCD屏幕初始化函数
第二个是static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p),是最基础的刷新绘制函数。
将LCD驱动里的画点函数放在这个函数里,
这是笔者画点函数的声明:
添加完成后:
这里对传入的参数作简单解释:x,y表示坐标,这没什么可说的。但是第三个参数,是指向了颜色结构体成员的指针,其中full字段包含了完整的颜色值,ch只是访问单独的颜色通道值
当你使用这个联合体时,你可以单独设置和获取颜色分量:
lv_color32_t my_color;
my_color.ch.blue = 0xFF; // 将蓝色分量设置为最大值
my_color.ch.green = 0x00; // 将绿色分量设置为最小值
my_color.ch.red = 0x00; // 将红色分量设置为最小值
my_color.ch.alpha = 0x7F; // 将 alpha 分量设置为 127(50% 透明)
或者你可以将颜色作为一个 32 位的值来操作:
lv_color32_t my_color;
my_color.full = 0xFFFF0000; // 将颜色设置为红色,完全不透明
这个联合体特别适用于需要颜色操作的系统中,因为它允许有效地使用内存,并且能够快速访问或修改颜色分量,既可以单独操作,也可以作为一个整体。
至此,若不需要触摸功能的话,LVGL的基础功能就移植完成了。