1. 创建第一个LVGL项目
任务说明
本案例目标是在PC上搭建LVGL模拟器开发环境,创建一个最小可运行的LVGL项目,在窗口中央显示"Hello World"文本。通过SDL2模拟器运行,无需真实嵌入式硬件即可验证LVGL基本渲染流程。
环境准备
需要以下依赖:gcc、make、SDL2开发库(Ubuntu/Debian下安装libsdl2-dev)。LVGL源码使用v8.3版本,从官方仓库获取lvgl和lv_drivers两个目录,放置于项目根目录。
项目结构
lvgl_hello/
├── lvgl/ # LVGL核心库
├── lv_drivers/ # SDL2驱动
├── main.c # 主程序
├── lv_conf.h # LVGL配置
├── lv_drv_conf.h # 驱动配置
└── Makefile
核心代码实现
主程序main.c完成以下任务:初始化SDL2与LVGL,注册显示和输入驱动,创建标签控件显示文本,进入LVGL事件循环。
// main.c
#include "lvgl/lvgl.h"
#include "lv_drivers/display/monitor.h"
#include "lv_drivers/indev/mouse.h"
#include <stdbool.h>
#include <unistd.h>
int main(void)
{
/* 1. 初始化LVGL */
lv_init();
/* 2. 初始化SDL2显示驱动(窗口大小320x240) */
monitor_init();
lv_disp_drv_t disp_drv;
lv_disp_drv_init(&disp_drv);
disp_drv.flush_cb = monitor_flush;
lv_disp_drv_register(&disp_drv);
/* 3. 初始化鼠标输入驱动 */
mouse_init();
lv_indev_drv_t indev_drv;
lv_indev_drv_init(&indev_drv);
indev_drv.type = LV_INDEV_TYPE_POINTER;
indev_drv.read_cb = mouse_read;
lv_indev_drv_register(&indev_drv);
/* 4. 创建标签显示Hello World */
lv_obj_t *label = lv_label_create(lv_scr_act());
lv_label_set_text(label, "Hello World");
lv_obj_center(label);
/* 5. LVGL事件循环 */
while (1) {
lv_timer_handler();
usleep(5000); /* 5ms周期 */
}
return 0;
}
LVGL配置lv_conf.h中关键宏定义:
#define LV_COLOR_DEPTH 32
#define LV_TICK_CUSTOM 1
#define LV_TICK_CUSTOM_INCLUDE "lv_drivers/sdl/sdl.h"
#define LV_TICK_CUSTOM_SYS_TIME_EXPR (SDL_GetTicks())
驱动配置lv_drv_conf.h中启用SDL支持:
#define USE_MONITOR 1
#define USE_MOUSE 1
#define MONITOR_HOR_RES 320
#define MONITOR_VER_RES 240
Makefile编译链接所有源文件:
CC = gcc
CFLAGS = -O2 -Wall -I. -Ilvgl -Ilv_drivers
LDFLAGS = -lSDL2 -lm
SRCS = main.c \
lvgl/src/lv_core/*.c lvgl/src/lv_draw/*.c \
lvgl/src/lv_font/*.c lvgl/src/lv_hal/*.c \
lvgl/src/lv_misc/*.c lvgl/src/lv_objx/*.c \
lvgl/src/lv_themes/*.c \
lv_drivers/display/monitor.c lv_drivers/indev/mouse.c \
lv_drivers/sdl/sdl.c
OBJS = $(SRCS:.c=.o)
hello: $(OBJS)
$(CC) -o $@ $^ $(LDFLAGS)
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
clean:
rm -f $(OBJS) hello
运行与验证
在项目根目录执行make编译,然后运行./hello。预期出现一个320x240的SDL窗口,窗口中央显示黑色背景上的白色"Hello World"文本。验证判定标准:窗口正常打开且文本清晰可见,关闭窗口后程序退出无报错。
验证方法
编译并运行程序后,观察SDL窗口是否正常创建并显示文本。若窗口显示"Hello World"且无编译错误、无运行时崩溃,则案例验证通过。可通过修改lv_label_set_text中的字符串内容来确认文本渲染功能正常。