我们在这个网站可以下载LVGL的源码
下载时我们要选择release(稳定)我这里用的LVGL V8.3
下载好打开
我们做一个工程模板吧
把之前LCD屏幕的一些文件删了
在工程文件夹里新建Mid_lvgl文件夹
把LVGL源码的src等文件夹复制到Mid_lvgl
修改一下第二个文件的文件名
继续拷贝....
按这个流程拷贝
添加文件
接下来我们要添加头文件路径,我这里准备了头文件的路径代码,在这里最后加";"再粘贴代码
.\App_Common;.\App_Modbus;.\Arm_Kernel;.\Drv_Common;.\Drv_Modbus;.\Gd32_Hal;.\Gd32_Hal\Include;.\Mid_Modbus;.\Mid_Modbus\rtu;.\Mid_Modbus\include;.\Mid_Lvgl;.\Mid_Lvgl\driver\porting;.\Mid_Lvgl\src;.\Mid_Lvgl\src\core;.\Mid_Lvgl\src\draw;.\Mid_Lvgl\src\extra;.\Mid_Lvgl\src\extra\layouts;.\Mid_Lvgl\src\extra\layouts\flex;.\Mid_Lvgl\src\extra\layouts\grid;.\Mid_Lvgl\src\extra\themes;.\Mid_Lvgl\src\extra\themes\basic;.\Mid_Lvgl\src\extra\themes\default;.\Mid_Lvgl\src\extra\themes\mono;.\Mid_Lvgl\src\extra\widgets;.\Mid_Lvgl\src\extra\widgets\animimg;.\Mid_Lvgl\src\extra\widgets\calendar;.\Mid_Lvgl\src\extra\widgets\chart;.\Mid_Lvgl\src\extra\widgets\colorwheel;.\Mid_Lvgl\src\extra\widgets\imgbtn;.\Mid_Lvgl\src\extra\widgets\keyboard;.\Mid_Lvgl\src\extra\widgets\led;.\Mid_Lvgl\src\extra\widgets\list;.\Mid_Lvgl\src\extra\widgets\menu;.\Mid_Lvgl\src\extra\widgets\meter;.\Mid_Lvgl\src\extra\widgets\msgbox;.\Mid_Lvgl\src\extra\widgets\span;.\Mid_Lvgl\src\extra\widgets\spinbox;.\Mid_Lvgl\src\extra\widgets\spinner;.\Mid_Lvgl\src\extra\widgets\tabview;.\Mid_Lvgl\src\extra\widgets\tileview;.\Mid_Lvgl\src\extra\widgets\win;.\Mid_Lvgl\src\font;.\Mid_Lvgl\src\hal;.\Mid_Lvgl\src\misc;.\Mid_Lvgl\src\widgets;.\App_Hmi\widgets;.\App_Hm.\App_Common;.\App_Modbus;.\Arm_Kernel;.\Drv_Common;.\Drv_Modbus;.\Gd32_Hal;.\Gd32_Hal\Include;.\Mid_Modbus;.\Mid_Modbus\rtu;.\Mid_Modbus\include;.\Mid_Lvgl;.\Mid_Lvgl\driver\porting;.\Mid_Lvgl\src;.\Mid_Lvgl\src\core;.\Mid_Lvgl\src\draw;.\Mid_Lvgl\src\extra;.\Mid_Lvgl\src\extra\layouts;.\Mid_Lvgl\src\extra\layouts\flex;.\Mid_Lvgl\src\extra\layouts\grid;.\Mid_Lvgl\src\extra\themes;.\Mid_Lvgl\src\extra\themes\basic;.\Mid_Lvgl\src\extra\themes\default;.\Mid_Lvgl\src\extra\themes\mono;.\Mid_Lvgl\src\extra\widgets;.\Mid_Lvgl\src\extra\widgets\animimg;.\Mid_Lvgl\src\extra\widgets\calendar;.\Mid_Lvgl\src\extra\widgets\chart;.\Mid_Lvgl\src\extra\widgets\colorwheel;.\Mid_Lvgl\src\extra\widgets\imgbtn;.\Mid_Lvgl\src\extra\widgets\keyboard;.\Mid_Lvgl\src\extra\widgets\led;.\Mid_Lvgl\src\extra\widgets\list;.\Mid_Lvgl\src\extra\widgets\menu;.\Mid_Lvgl\src\extra\widgets\meter;.\Mid_Lvgl\src\extra\widgets\msgbox;.\Mid_Lvgl\src\extra\widgets\span;.\Mid_Lvgl\src\extra\widgets\spinbox;.\Mid_Lvgl\src\extra\widgets\spinner;.\Mid_Lvgl\src\extra\widgets\tabview;.\Mid_Lvgl\src\extra\widgets\tileview;.\Mid_Lvgl\src\extra\widgets\win;.\Mid_Lvgl\src\font;.\Mid_Lvgl\src\hal;.\Mid_Lvgl\src\misc;.\Mid_Lvgl\src\widgets;.\App_Hmi
点击左上角打开文件找到
打开,改成1
修改显示驱动
因为我们修改了这个的文件名,所以这里改成这样
设置屏幕分辨率:
在disp_init初始化LCD
配置图像数据缓冲模式,屏蔽这几行
在disp_flush函数中调用LCD驱动显示函数
修改触摸
在touchpad_init函数调用触摸屏初始化
在touchpad_is_pressde函数调用触摸屏驱动检测触摸函数
在touchpad_get_xy函数
我们在工程文件新建App_Hmi,我们把hmi_app.c/h移动到App_Hmi
在工程目录新建
编写hmi_app.c/h
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include "rtc_drv.h"
#include "sensor_drv.h"
#include "led_drv.h"
#include "key_drv.h"
#include "touch_drv.h"
#include "lcd_drv.h"
#include "store_app.h"
/* LVGL */
#include "lvgl.h"
#include "lv_port_indev.h"
#include "lv_port_disp.h"
void lv_example_flex_1(void)
{
/* ① 创建一个横向(ROW)Flex 容器,父对象是当前屏幕 */
lv_obj_t * cont_row = lv_obj_create(lv_scr_act());
lv_obj_set_size(cont_row, 300, 75); // 宽 300 px,高 75 px
lv_obj_align(cont_row, LV_ALIGN_TOP_MID, 0, 5); // 顶部居中,y 向下偏移 5 px
lv_obj_set_flex_flow(cont_row, LV_FLEX_FLOW_ROW); // 子项横向顺序排列,不换行
/* ② 创建一个纵向(COLUMN)Flex 容器,父对象仍是屏幕 */
lv_obj_t * cont_col = lv_obj_create(lv_scr_act());
lv_obj_set_size(cont_col, 200, 150); // 宽 200 px,高 150 px
lv_obj_align_to(cont_col, cont_row, LV_ALIGN_OUT_BOTTOM_MID, 0, 5); // 放在横向容器正下方,间距 5 px
lv_obj_set_flex_flow(cont_col, LV_FLEX_FLOW_COLUMN); // 子项纵向顺序排列
uint32_t i;
for(i = 0; i < 10; i++) {
lv_obj_t * obj;
lv_obj_t * label;
/* ③ 给横向容器添加按钮:固定宽 100 px,高占满父容器 */
obj = lv_btn_create(cont_row);
lv_obj_set_size(obj, 100, LV_PCT(100));
label = lv_label_create(obj);
lv_label_set_text_fmt(label, "Item: %"LV_PRIu32, i); // 显示序号
lv_obj_center(label); // 标签在按钮内居中
/* ④ 给纵向容器添加按钮:宽占满父容器,高根据内容自适应 */
obj = lv_btn_create(cont_col);
lv_obj_set_size(obj, LV_PCT(100), LV_SIZE_CONTENT);
label = lv_label_create(obj);
lv_label_set_text_fmt(label, "Item: %"LV_PRIu32, i);
lv_obj_center(label);
}
}
void HmiInit(void)
{
lv_init(); /* lvgl系统初始化 */
lv_port_disp_init(); /* lvgl显示接口初始化,放在lv_init()的后面 */
lv_port_indev_init(); /* lvgl输入接口初始化,放在lv_init()的后面 */
lv_example_flex_1();
//lv_demo_widgets();
}
/**
***********************************************************
* @brief 人机交互任务处理函数
* @param
* @return
***********************************************************
*/
void HmiTask(void)
{
lv_task_handler();
}
当你编译时发现像这样的报错:
说明内存不够了
我们把栈改小
哒哒