1. 创建第一个LVGL模拟器项目
任务说明
本案例目标是在PC上搭建LVGL模拟器环境,运行一个显示“Hello LVGL”的简单界面。你将通过SDL2驱动在PC窗口上渲染LVGL界面,从而熟悉LVGL的基本工程结构:初始化、创建控件、设置内容与运行事件循环。
工程结构
lvgl_simulator/
├── main.c
├── lv_conf.h
├── Makefile
└── lvgl/ # LVGL源码(v8.3.x)
├── lvgl.h
├── src/
└── ...
实现代码
创建 main.c,内容如下:
#include "lvgl/lvgl.h"
#include "lvgl/examples/porting/lv_port_disp_template.h"
#include "lvgl/examples/porting/lv_port_indev_template.h"
#include <SDL2/SDL.h>
#include <stdio.h>
#include <stdbool.h>
#define HOR_RES 800
#define VER_RES 480
static void hal_init(void) {
lv_init();
// 显示驱动初始化(使用SDL2模拟器)
lv_disp_drv_t disp_drv;
lv_disp_drv_init(&disp_drv);
disp_drv.hor_res = HOR_RES;
disp_drv.ver_res = VER_RES;
disp_drv.flush_cb = disp_flush;
lv_disp_drv_register(&disp_drv);
// 鼠标/触摸输入初始化
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);
}
static void create_ui(void) {
lv_obj_t *label = lv_label_create(lv_scr_act());
lv_label_set_text(label, "Hello LVGL");
lv_obj_center(label);
}
int main(void) {
hal_init();
create_ui();
while (1) {
lv_timer_handler();
SDL_Delay(5);
}
return 0;
}
创建 lv_conf.h(LVGL配置文件),关键设置如下:
#define LV_COLOR_DEPTH 32
#define LV_MEM_CUSTOM 0
#define LV_TICK_CUSTOM 0
#define LV_USE_LOG 1
创建 Makefile:
CC = gcc
CFLAGS = -O2 -Wall -I.
LDFLAGS = -lSDL2 -lm
LVGL_DIR = lvgl
SRCS = main.c \
$(LVGL_DIR)/src/lv_core/lv_disp.c \
$(LVGL_DIR)/src/lv_core/lv_indev.c \
$(LVGL_DIR)/src/lv_core/lv_obj.c \
$(LVGL_DIR)/src/lv_core/lv_refr.c \
$(LVGL_DIR)/src/lv_core/lv_group.c \
$(LVGL_DIR)/src/lv_core/lv_style.c \
$(LVGL_DIR)/src/lv_draw/*.c \
$(LVGL_DIR)/src/lv_font/*.c \
$(LVGL_DIR)/src/lv_hal/*.c \
$(LVGL_DIR)/src/lv_misc/*.c \
$(LVGL_DIR)/src/lv_themes/*.c \
$(LVGL_DIR)/src/lv_widgets/*.c
OBJS = $(SRCS:.c=.o)
all: simulator
simulator: $(OBJS)
$(CC) -o $@ $^ $(LDFLAGS)
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
clean:
rm -f simulator $(OBJS)
编译与运行
- 安装依赖:
sudo apt install libsdl2-dev(Ubuntu/Debian)或brew install sdl2(macOS) - 下载LVGL v8.3源码到
lvgl/目录 - 在工程根目录执行
make - 运行
./simulator
验证方法
程序启动后,应出现一个800×480的SDL窗口,窗口中央显示黑色背景上的白色文字“Hello LVGL”。窗口可正常关闭,终端无报错输出。若文字居中显示且窗口响应关闭操作,则判定案例通过。
关键说明
本案例使用LVGL v8.3的SDL模拟器移植层,disp_flush 和 mouse_read 函数在 lv_port_disp_template.c 与 lv_port_indev_template.c 中实现,需将这两个文件复制到工程目录并启用SDL支持。上述代码展示了LVGL应用的最小骨架:lv_init() 初始化核心库,注册显示与输入驱动,创建控件后通过 lv_timer_handler() 周期驱动LVGL运行。实际编译时需根据LVGL源码路径调整Makefile中的文件列表。