移植LVGL
移植LVGL的方法
首先你要去LVGL的github上下载lvgl源代码
下载完后解压你会得到如下文件:
其中src文件夹下为LVGL源码,不可修改
examples下为LVGL与硬件交互的接口模板
lv_conf_template.h为LVGL设置模板
lvgl.h为LVGL库调用头文件
LVGL的移植十分简单
仅仅只需要提供刷屏函数就能完成lvgl基本的显示功能
首先把需要的文件全部移到项目里,需要复制一下文件:
1 | src文件夹 |
接下来是进行基本的配置
首先把lv_conf_template.h文件改名为lv_conf.h
再将lvgl_conf.h宏开启
把0改成1就行了
然后是更改lv_conf.h里面的设置
找到:
1 |
|
目前就这些主要设置,根据自己的实际情况来看
设置无误后先进行一次编译,如果lvgl设置正确,那么编译应该会通过
接下来就是编写lvgl与硬件交互的底层驱动
打开poting文件夹
把lv_port_disp_template.c改名为lv_port_disp.c
把lv_port_disp_template.h改为lv_port_disp.h
记住修改lv_port_disp.c时同样要修改头文件名
开启这几个文件的宏
修改lv_port_disp.h文件内容如下:
在lv_port_disp.c中找到lv_port_disp_init函数
1 |
|
找到这一段代码
这3个例子是驱动屏幕的方式,选择第一种即可,把其它2种注释掉
在上面的代码下找到这2行
1 |
|
在下面找到disp_flush函数,这个函数就是核心的显示屏刷屏函数
1 |
|
至此,lvgl与显示屏的接口编写完成
接下来做个简单的测试
1 |
|
如果lvgl能正常工作,那么屏幕上应该会绘制一个按钮
接下来是移植输入设备
与上面一样
在porting下找到lv_port_indev_template.c和lv_port_indev_template.h
然后修改文件名,宏
修改lv_port_indev.h文件内容如下
再修改修改lv_port_indev.c里面的代码
lv_port_indev.c里面提供的接口比较多,这里只介绍编写触摸按键接口
找到一下代码
1 |
|
代码中默认使用button接口,我们只需要把按键映射改一下就行
然后找到按钮的接口
1 |
|
这里就按自己的意愿改了
同样再做一个小测试
#inclue "lvgl.h"
int main(){
lv_init();
lv_port_disp_init();
lv_port_indev_init();
//创建一个图形按钮
lv_obj_t* btn = lv_btn_create(lv_scr_act(), NULL);
//设置按钮大小
lv_obj_set_pos(btn, 10, 10);
//设置按钮位置
lv_obj_set_size(btn, 120, 50);
//这里是设置lvgl按钮的事件
lv_obj_set_event_cb(btn, [](lv_obj_t* btn, lv_event_t event) {
switch (event) {
//第一次按下
case LV_EVENT_PRESSED:
printf("pressed!\n");
break;
//持续按下
case LV_EVENT_PRESSING:
printf("pressing!\n");
break;
//按钮释放
case LV_EVENT_CLICKED:
printf("clicked!\n");
break;
}
}); /*Assign a call
//开启lvgl工作线程,这个函数主要处理lvgl图像绘制和事件响应等任务
task_run(lv_task_handler);
while(1){
//心跳函数,设置为1代表循环一次消耗1ms,用来设置lvgl的事件频率
//比如lvgl动画,如果在1ms内运行100次lv_tick_inc(1)
//那么动画速度理论上会快100倍
lv_tick_inc(1);
delayms(1);
}
}
lvgl同样可以移植文件系统,就跟上面教程一样,这里不加赘述