Fork me on GitHub
0%

LVGL配置文件说明

系统配置

颜色和内存

用于配置图形颜色深度和 LVGL 使用的内存分配策略及缓冲区大小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/* 颜色设置 */

// 颜色深度RGB565
#define LV_COLOR_DEPTH 16
// 交换16bit中的2byte的顺序(SPI传输可能需要)
#define LV_COLOR_16_SWAP 0
// 透明背景上绘制的支持(使用 opa透明度 或 transform_*样式需要启用该选项)
#define LV_COLOR_SCREEN_TRANSP 0
// 颜色混合函数中的舍入行为
// 0 - 始终向下舍入
// 64 - 小数部分 ≥ 0.75 时向上舍入
// 128 - 小数部分 ≥ 0.5 时向上舍入(标准舍入)
// 192 - 小数部分 ≥ 0.25 时向上舍入
// 254 - 始终向上舍入
#define LV_COLOR_MIX_ROUND_OFS 0
// 色度键(chroma key)是一种将图像中指定颜色视为透明的技术.默认是绿色将不会被绘制
#define LV_COLOR_CHROMA_KEY lv_color_hex(0x00ff00)


/* 内存设置 */

// 是否自己实现内存分配函数
// 0:内置函数lv_mem_alloc / lv_mem_free
// 1:malloc/free或自己实现
#define LV_MEM_CUSTOM 0
// 指定用于图形对象分配(lv_mem_alloc)的内存池大小(字节) 必须大于2K
#define LV_MEM_SIZE (48U * 1024U) /*[bytes]*/
// 是否启用指定外部内存地址而不是默认空间(未使用)
#define LV_MEM_ADR 0
// 用于渲染和内部处理过程的中间内存缓冲区数量(lv_mem_buf_get()临时分配)
#define LV_MEM_BUF_MAX_NUM 16
// 是否使用标准的C库的memset和memcpy函数
#define LV_MEMCPY_MEMSET_STD 0

硬件配置

设置显示刷新、输入读取周期及系统滴答计时方式等硬件相关参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* 硬件抽象层配置 */

// 默认显示刷新周期(毫秒)LVGL 会按照该周期刷新发生变化的屏幕区域
#define LV_DISP_DEF_REFR_PERIOD 30
// 输入设备读取周期(毫秒)定义输入设备状态的读取频率
#define LV_INDEV_DEF_READ_PERIOD 30
// 使用自定义的滴答时钟源 启用后无需手动调用 lv_tick_inc()来更新时钟
#define LV_TICK_CUSTOM 0
// 如果自定义TICK需要实现以下宏和平台相关配置(Arduino为例)
// 自定义系统时间函数所需包含的头文件
#define LV_TICK_CUSTOM_INCLUDE "Arduino.h"
// 获取当前系统时间(毫秒)的函数
#define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis())
// 默认屏幕每英寸像素数(DPI)用于初始化控件尺寸、样式内边距和间距等默认大小
// 不是关键参数,可根据需要调整以缩放默认界面元素大小。
#define LV_DPI_DEF 130
/* 5. GPU */

// 本块内容对是否启用硬件GPU引擎进行配置(ARM NXP STM32...)
// 本部分不进行说明,大部分都是针对不同硬件平台进行设置的,如果选择的硬件有此功能配置即可

绘图

控制是否启用复杂图形特效及相关图层、渐变、抗锯齿缓存大小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

/* 绘图 */

// 启用复杂绘图引擎,需要支持阴影、渐变、圆角、圆形、弧线、斜线、图像变换或遮罩等效果
#define LV_DRAW_COMPLEX 1
// 允许缓存的最大阴影尺寸(0表示禁用阴影缓存)
#define LV_SHADOW_CACHE_SIZE 0
// 启用圆形绘制缓存(用于抗锯齿优化)
// 缓存每个半径的 1/4 圆周数据,每个半径占用 radius * 4 字节内存,仅缓存最常用的半径
#define LV_CIRCLE_CACHE_SIZE 4
// 用于简单图层的主缓冲区大小
// 简单图层用于控件的 style_opa < 255 情况,即需先离屏渲染后再以指定透明度混合回屏幕
// bg_opa、text_opa 等单独属性不会触发图层缓冲
#define LV_LAYER_SIMPLE_BUF_SIZE (24 * 1024)
// 当主缓冲区不足或不可用时,简单图层使用的备用缓冲区大小
#define LV_LAYER_SIMPLE_FALLBACK_BUF_SIZE (3 * 1024)
// 默认图像缓存大小
#define LV_IMG_CACHE_DEF_SIZE 0
// 每个渐变允许的最大颜色停点数(数值越大,可实现更复杂、过渡更平滑的渐变效果)
// 每增加一个停点,将增加 (sizeof(lv_color_t) + 1) 字节的内存消耗
#define LV_GRADIENT_MAX_STOPS 2
// 默认渐变缓存大小(0表示禁用)
#define LV_GRAD_CACHE_DEF_SIZE 0
// 启用渐变抖动,可在低色深显示器上提升颜色过渡的平滑度
#define LV_DITHER_GRADIENT 0
// 软件旋转时允许分配的最大缓冲区大小(单位:字节)
// 仅在显示驱动启用了软件旋转功能时才会使用该缓冲区
// 缓冲区越大,整屏旋转速度越快;较小时将分块处理,速度较慢。
#define LV_DISP_ROT_MAX_BUF (10 * 1024)

调试功能

启用模块级别日志打印、内存监控及刷新调试功能,方便开发调试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/* 日志功能 */

// 启用日志系统(0 = 禁用,1 = 启用)
#define LV_USE_LOG 0
// 设置日志等级
#define LV_LOG_LEVEL LV_LOG_LEVEL_WARN
// 使用 printf 输出(默认重定向到标准输出)
#define LV_LOG_PRINTF 0
// 针对产生大量日志的模块启用或禁用 LV_LOG_TRACE(日志量巨大)
#define LV_LOG_TRACE_MEM 1 /* 内存管理模块 */
#define LV_LOG_TRACE_TIMER 1 /* 定时器模块 */
#define LV_LOG_TRACE_INDEV 1 /* 输入设备模块 */
#define LV_LOG_TRACE_DISP_REFR 1 /* 显示刷新模块 */
#define LV_LOG_TRACE_EVENT 1 /* 事件系统 */
#define LV_LOG_TRACE_OBJ_CREATE 1 /* 对象创建/销毁 */
#define LV_LOG_TRACE_LAYOUT 1 /* 布局引擎 */
#define LV_LOG_TRACE_ANIM 1 /* 动画系统 */


/* 断言 */

// 检查参数是否是 NULL(非常快 建议开启)
#define LV_USE_ASSERT_NULL 1
// 检查内存是否分配成功(非常快,推荐)
#define LV_USE_ASSERT_MALLOC 1
// 检查样式是否正确初始化(非常快,推荐)
#define LV_USE_ASSERT_STYLE 0
// 在关键操作后检查 lv_mem 的完整性(慢)
#define LV_USE_ASSERT_MEM_INTEGRITY 0
// 检查对象的类型和存在性(慢)
#define LV_USE_ASSERT_OBJ 0
// 发生断言处理程序的头文件
#define LV_ASSERT_HANDLER_INCLUDE <stdint.h>
// 当断言发生时添加自定义处理程序,例如重新启动 MCU, 默认while
#define LV_ASSERT_HANDLER while(1);


/* 其它 */

// LVGL 的性能监控功能开关
#define LV_USE_PERF_MONITOR 0
// 性能监控窗口在屏幕上的显示位置(LV_ALIGN_TOP_LEFT、LV_ALIGN_TOP_RIGHT、LV_ALIGN_BOTTOM_LEFT、LV_ALIGN_CENTER)
#define LV_USE_PERF_MONITOR_POS LV_ALIGN_BOTTOM_RIGHT
// LVGL 的内存监控功能开关(需要 LV_MEM_CUSTOM = 0),监控内存使用以及碎片率
#define LV_USE_MEM_MONITOR 0
// 内存监视器标签在屏幕上的位置
#define LV_USE_MEM_MONITOR_POS LV_ALIGN_BOTTOM_LEFT
// 启用显示刷新区域的调试功能
// 开启后,LVGL 会记录每次刷新的区域(invalidate 和 redraw)的相关信息
#define LV_USE_REFR_DEBUG 0
// 是否使用自定义的 snprintf/vsnprintf 实现, 如果=1则需要自己实现相关函数目前默认使用c库函数
#define LV_SPRINTF_CUSTOM 0
// 是否启用内建 sprintf 的浮点数支持(取决于底层是否支持浮点数格式化)
#define LV_SPRINTF_USE_FLOAT 0
// 是否启用 LVGL 对象的 `user_data` 成员
// 启用后,每个控件(如 lv_obj_t)都可以挂载用户自定义数据结构,适用于事件回调、控件绑定等
#define LV_USE_USER_DATA 1
// 是否启用垃圾回收器(GC)支持,一般仅在 Micropython / Lua / WASM 等绑定语言使用
// 使用纯 C / C++ 保持0即可
#define LV_ENABLE_GC 0

功能配置

基础

对一些特定属性和三方库的使用进行配置,设置文件系统格式和支持的图片格式、二维码、GIF、视频等解码功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/* 编译配置 */

// 大小端配置(默认小端序)
#define LV_BIG_ENDIAN_SYSTEM 0
// 为lv_tick_inc()添加函数属性(如 `IRAM_ATTR`, `__attribute__((section(...)))` 等)
// 可用于强制函数放入高速内存或自定义段,以优化定时中断响应
#define LV_ATTRIBUTE_TICK_INC
// 为 lv_timer_handler() 添加函数属性,适用于中断优先级高、响应要求快的环境
#define LV_ATTRIBUTE_TIMER_HANDLER
// 用于修饰 lv_disp_flush_ready() 函数,可加速中断响应或放入特定内存区。
#define LV_ATTRIBUTE_FLUSH_READY
// 缓冲区对齐所需的字节数,常见值为 4(32 位)或 8(64 位),确保对齐适用于 DMA 操作
#define LV_ATTRIBUTE_MEM_ALIGN_SIZE 1
// 强制数据按特定位数对齐的属性修饰符,如 DMA 缓冲要求 __attribute__((aligned(4)))
#define LV_ATTRIBUTE_MEM_ALIGN
// 用于修饰大型常量(如字体、图像数组),可强制放入 Flash 或代码段,节省 RAM
#define LV_ATTRIBUTE_LARGE_CONST
// 修饰大数组,强制放入 RAM,适用于大缓冲区,如显示层缓存
#define LV_ATTRIBUTE_LARGE_RAM_ARRAY
// 修饰高频率调用的函数,将其放入 RAM 执行,加快绘图响应(如 lv_memcpy)
#define LV_ATTRIBUTE_FAST_MEM
// 修饰需通过 GPU/DMA 访问的数据(如显存、缓冲区),确保放入 DMA 可访问内存区域。
#define LV_ATTRIBUTE_DMA
// 使常量(如 LV_ALIGN_CENTER)可导出到 Micropython、WASM 等高级语言绑定中。
#define LV_EXPORT_CONST_INT(int_value) struct _silence_gcc_warning
// 使用 32 位坐标,扩大坐标范围(适合大型画布或极限缩放场景),默认为关闭。
#define LV_USE_LARGE_COORD 0


/* 三方库 */

// 使用标准 C 库文件函数(如 fopen, fread)
#define LV_USE_FS_STDIO 0
// 使用 POSIX 文件 API(如 open, read)
#define LV_USE_FS_POSIX 0
// 使用 Windows API(如 CreateFile, ReadFile)
#define LV_USE_FS_WIN32 0
// 使用 FATFS 文件系统(需手动集成 FatFs 库)
#define LV_USE_FS_FATFS 0
// 使用 LittleFS 文件系统(需手动集成 LittleFS 库)
#define LV_USE_FS_LITTLEFS 0
// 使用 PNG 图像解码器库,需要集成 `lodepng` 或类似解码库
#define LV_USE_PNG 0
// 使用 BMP 图像解码器库
#define LV_USE_BMP 0
// JPG 和自定义 split-JPG 图像解码器库
#define LV_USE_SJPG 0
// GIF 动图解码器库
// 支持 .gif 动画图片,需占用较多内存,适合用于简单动画展示
#define LV_USE_GIF 0
// 二维码生成库
// 用于生成 QR Code,适合设备显示配网码、链接等信息
#define LV_USE_QRCODE 0
// 使用 FREETYPE库
// FreeType 是一款强大的开源字体引擎,支持 `.ttf` / `.otf` 等矢量字体
#define LV_USE_FREETYPE 0
// FreeType 缓存大小
#define LV_FREETYPE_CACHE_SIZE (16 * 1024)
// 使用 轻量字体解析器TINY TTF
// Tiny TTF 是一个体积更小的矢量字体加载库,适用于资源受限的嵌入式设备
#define LV_USE_TINY_TTF 0
// 使用 Rlottie 动画库
#define LV_USE_RLOTTIE 0
// 使用 FFmpeg 图像与视频解码库
#define LV_USE_FFMPEG 0

字体和文本

配置默认字体、字体压缩、子像素渲染、编码方式和语言支持等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/* 字体设置 */

// 控制是否启用 Montserrat 系列字体,每个字体大小会对应一套 .c 源文件,启用越多内存占用越大
// 最后的数字代表字号,8开始每2递增直到48
#define LV_FONT_MONTSERRAT_8 - 48 0
// Montserrat 12 字号字体,启用子像素抗锯齿(适用于 RGB 横向排列的 LCD)
#define LV_FONT_MONTSERRAT_12_SUBPX 0
// Montserrat 28 字号字体,压缩版,bpp = 3,节省 ROM(有轻微画质损失)
#define LV_FONT_MONTSERRAT_28_COMPRESSED 0
// 包含波斯语、阿拉伯语、希伯来语的字体(16号 DejaVu),支持所有连写形式和方向控制
#define LV_FONT_DEJAVU_16_PERSIAN_HEBREW 0
// 简化版宋体,仅包含 1000 个最常用 CJK 偏旁部首,适合极简场景(不适合正常中文显示)
#define LV_FONT_SIMSUN_16_CJK 0
// UNSCII 8点像素等宽字体,复古风格,适合像素级 UI(如终端、游戏模拟器)
#define LV_FONT_UNSCII_8 0
// UNSCII 16点像素等宽字体,高分屏上的复古显示
#define LV_FONT_UNSCII_16 0
// 声明自定义字体(多个字体可用 LV_FONT_DECLARE() 连续写入)
// 声明后可用于设置样式或作为默认字体,需确保字体在编译中链接进来
#define LV_FONT_CUSTOM_DECLARE
// 设置全局默认字体(必须启用了对应字体,否则链接失败或显示为空)例子: &lv_font_montserrat_14
#define LV_FONT_DEFAULT &lv_font_montserrat_14
// 支持大字体/字数非常多的字体(如中文字库、表情符号)
// 如果编译提示 glyph/bitmap 超出限制,可启用
#define LV_FONT_FMT_TXT_LARGE 0
// 启用压缩字体支持(如 Montserrat_28_compressed),节省 ROM,牺牲少量性能
#define LV_USE_FONT_COMPRESSED 0
// 启用子像素抗锯齿(对小字体边缘更平滑),但需匹配屏幕像素顺序
#define LV_USE_FONT_SUBPX 0
// 设置子像素顺序(必须与你的 LCD 的像素排列一致,错误顺序会导致边缘彩边/发虚)
#define LV_FONT_SUBPX_BGR 0
// 启用字体占位符绘制,当字体不包含字符时会显示 ▯ 或其他符号,防止文字丢失或 UI 崩溃
#define LV_USE_FONT_PLACEHOLDER 1


/* 文本设置 */

// 设置 LVGL 字符编码方式
// 建议使用 UTF-8(支持中文/日文/韩文等),ASCII 仅适用于纯英文系统
#define LV_TXT_ENC LV_TXT_ENC_UTF8
// 设置可换行的字符列表,遇到这些字符时自动断行,提升文本布局的可读性
#define LV_TXT_BREAK_CHARS " ,.;:-_"
// 设置多长的“长单词”可以被强制拆分换行(如长网址、标识符等)
// 设为 0 表示禁用,仅允许在 BREAK_CHARS 上换行
#define LV_TXT_LINE_BREAK_LONG_LEN 0
// 当长单词被拆行时,当前行至少保留的字符数
#define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3
// 拆行后下一行最少包含的字符数。防止“孤零零的”几个字符单独成行
#define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 3
// 设置文本变色控制字符
// 例:`"Battery: #ff0000 LOW#"` → 显示“LOW”为红色
// 可替换为 `^`, `@`, `{` 等罕用字符,避免与用户文本冲突
#define LV_TXT_COLOR_CMD "#"
// 是否启用双向文字支持(BiDi)。支持从右到左语言(如阿拉伯语、希伯来语)与从左到右语言混排。
#define LV_USE_BIDI 0
// 设置默认文本方向,可选择 LTR、RTL 或自动检测(AUTO 最灵活,推荐)
#define LV_BIDI_BASE_DIR_DEF LV_BASE_DIR_AUTO
// 是否启用阿拉伯语/波斯语字符形态处理(启用后字符将根据位置自动变形,确保正确书写效果)
#define LV_USE_ARABIC_PERSIAN_CHARS 0

控件和组件

启用或关闭如按钮、标签、滑块等基础 UI 控件组件;额外组件配置是否启用额外控件如图表、日历、菜单、仪表盘等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/* 控件使用 */

// 圆弧控件,用于仪表盘、旋钮、圆形进度条等
#define LV_USE_ARC 1
// 条形进度条控件(水平/垂直),常用于进度显示
#define LV_USE_BAR 1
// 普通按钮控件,支持按压、释放动画和事件
#define LV_USE_BTN 1
// 按钮矩阵控件,用于实现键盘、小键盘等结构
#define LV_USE_BTNMATRIX 1
// 画布控件,可在其上绘制像素图像、线段、填充等(可自制控件或图层)
#define LV_USE_CANVAS 1
// 复选框控件,带文字与状态切换
#define LV_USE_CHECKBOX 1
// 下拉选择控件,需要使用 label 显示选项
#define LV_USE_DROPDOWN 1
// 图片控件,用于显示 .bin、.c 中的图片资源(需支持解码器)
#define LV_USE_IMG 1
// 标签小部件:显示文本字符串
#define LV_USE_LABEL 1
// 启用 label 文本选择(点击并拖动可选中区域),适用于触控/鼠标
#define LV_LABEL_TEXT_SELECTION 1
// 优化长文本的重绘性能,尤其是滚动或动画中的长 label
#define LV_LABEL_LONG_TXT_HINT 1
// 线段控件,可用于画连接线、图形边框、流程图等
#define LV_USE_LINE 1
// 滚轮选择器,类似拨号盘或日期选择器,支持循环滚动(LV_LABEL开)
#define LV_USE_ROLLER 1
// 无限滚动模式下的虚拟页数(越大滚动越平滑,但占用更多资源)
#define LV_ROLLER_INF_PAGES 7
// 滑动条控件,基于 bar 实现,可调节数值,适合音量/亮度调节(LV_BAR开)
#define LV_USE_SLIDER 1 /* Requires: lv_bar */
// 开关控件,类似 checkbox,但更具动态交互性,适合设置界面使用
#define LV_USE_SWITCH 1
// 文本输入框,支持单行/多行编辑,可用虚拟键盘配合使用(LV_LABEL开)
#define LV_USE_TEXTAREA 1
// 输入密码时,字符显示多长时间(单位 ms)后替换为遮挡符(如 ●)
#define LV_TEXTAREA_DEF_PWD_SHOW_TIME 1500
// 表格控件,支持表头、行列显示、选中高亮等。
#define LV_USE_TABLE 1


/* 额外组件 */

// 动图控件:将一组图像帧组成动画(支持播放/暂停/循环)
// 通常用于 loading 动画、动态提示
#define LV_USE_ANIMIMG 1
// 日历控件:用于选择日期、显示日程。支持点击选中、周视图、月份导航等
#define LV_USE_CALENDAR 1
// 设置每周的起始日(是否以周一为一周第一天)
// 0:周日;1:周一
#define LV_CALENDAR_WEEK_STARTS_MONDAY 0
// 设置一周七天的缩写显示,顺序需与起始日匹配
#if LV_CALENDAR_WEEK_STARTS_MONDAY
#define LV_CALENDAR_DEFAULT_DAY_NAMES {"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"}
#else
#define LV_CALENDAR_DEFAULT_DAY_NAMES {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"}
#endif
// 月份名称配置,适用于英语地区。可自定义为其他语言如中文 ["一月", "二月", ...]
#define LV_CALENDAR_DEFAULT_MONTH_NAMES { \
"January", "February", "March", "April", "May", "June", \
"July", "August", "September", "October", "November", "December" \
}
// 启用左右箭头按钮,点击切换月份
#define LV_USE_CALENDAR_HEADER_ARROW 1
// 启用下拉框选择月份与年份,适合多语言或自定义界面
#define LV_USE_CALENDAR_HEADER_DROPDOWN 1
// 图表控件:支持折线图、柱状图、点图等。适用于数据趋势展示、仪表板等场景
#define LV_USE_CHART 1
// 色轮控件:可交互选择颜色。适用于颜色选项设置页面(如灯光颜色、主题设置等)
#define LV_USE_COLORWHEEL 1
// 图片按钮控件:使用图片代替普通按钮背景。支持不同状态对应不同图像
// 用于图标按钮、开关控制、模拟物理按键外观等
#define LV_USE_IMGBTN 1
// 屏幕键盘控件:可与 textarea 配合,用于文本输入场景
// 自动适配字母/数字/符号布局,适合触摸屏设备
#define LV_USE_KEYBOARD 1
// LED 控件:小型状态指示灯,可设为 on/off 并设置颜色/亮度
// 常用于状态提示:连接状态、电源状态等
#define LV_USE_LED 1
// 列表控件:纵向排列的一组项目,每个项目可是按钮、图标或其他
// 常用于菜单、设置项、选择器
#define LV_USE_LIST 1
// 菜单控件:带有层级导航、滑动返回的菜单系统
// 适用于构建嵌套设置菜单、分组操作界面
#define LV_USE_MENU 1
// 仪表盘控件:用于显示圆形刻度、指针等内容
// 可自定义刻度、范围、指针样式等,用于速度表、电压表等视觉效果
#define LV_USE_METER 1
// 消息框控件:弹窗提示,支持按钮点击确认/取消
// 适合做提示、警告、确认操作对话框
#define LV_USE_MSGBOX 1
// 富文本控件:支持多段文字样式混排(不同颜色、字体、大小)
// 可用于实现高亮、链接样式、通知说明等复杂文本
#define LV_USE_SPAN 1
// 每行文本中最大支持的样式段数(span 数量),数值越大支持越复杂的富文本
#define LV_SPAN_SNIPPET_STACK_SIZE 64
// 数字调节器控件,支持用按钮或手势调节数值(适合时间、计数器等)
#define LV_USE_SPINBOX 1
// 加载指示器控件(转圈动画),常用作等待或加载状态提示
#define LV_USE_SPINNER 1
// 标签页控件,支持多个可切换的内容页,适合分模块展示
#define LV_USE_TABVIEW 1
// 瓦片视图控件,支持多个页面滑动切换,多用于分页导航
#define LV_USE_TILEVIEW 1
// 窗口控件,带标题栏、关闭按钮的浮动窗口,可作为弹窗或工具窗口使用
#define LV_USE_WIN 1

主题和布局

配置主题风格、深色模式、控件动画与默认过渡效果;启用 Flex 或 Grid 布局以实现更灵活的界面排列方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

/* 主题 */

// 启用默认主题
#define LV_USE_THEME_DEFAULT 1
// 默认主题的暗色模式开关(0:浅色;1:深色背景,浅色文字)
#define LV_THEME_DEFAULT_DARK 0
// 启用按压时控件放大效果,按下控件时,控件会稍微放大,增加操作反馈感
#define LV_THEME_DEFAULT_GROW 1
// 默认动画过渡时间(毫秒),控制颜色变化、大小变化等动画的速度
#define LV_THEME_DEFAULT_TRANSITION_TIME 80
// 基础主题:非常简单,适合用作自定义主题的起点
#define LV_USE_THEME_BASIC 1
// 单色主题,适用于黑白显示屏,色彩限制设备
#define LV_USE_THEME_MONO 1


/* 布局 */

// 用于自动排列子对象,支持行/列方向、自动换行、对齐方式等
// 常用于横向/纵向导航栏、按钮组、设置项列表等
#define LV_USE_FLEX 1
// 用于将子对象按照行列网格排列,支持设置每格宽度、高度和对齐方式
// 常用于控制面板、仪表盘、图片矩阵等结构化布局
#define LV_USE_GRID 1

示例和演示

本部分的配置是选择是否编译LVGL提供的默认Example和Demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/* 1. 示例 Example配置 */

// 编译 /examples/ 目录下所有示例代码
#define LV_BUILD_EXAMPLES 1


/* 2. 演示 DEMO配置 */

// 编译 /demos/widgets/ 目录
// 启用后会展示一个完整的多控件组合界面,包括按钮、标签、滑块、列表、表单等
#define LV_USE_DEMO_WIDGETS 0
// LV_DEMO_WIDGETS_SLIDESHOW = 1 会启用“自动演示模式”,页面自动切换
#define LV_DEMO_WIDGETS_SLIDESHOW 0

// 编译 /demos/keypad_encoder/ 目录
// 演示如何通过外部输入设备(如矩阵键盘、旋钮编码器)来操作界面
#define LV_USE_DEMO_KEYPAD_AND_ENCODER 0

// 编译 /demos/benchmark 目录
// 用于测试目标设备的图形处理性能。会绘制多种图形(如旋转矩形、圆、文本等),测量帧率、刷新时间
#define LV_USE_DEMO_BENCHMARK 1
// 设置是否使用 RGB565A8 图像格式,优化性能和色彩深度匹配
#define LV_DEMO_BENCHMARK_RGB565A8 0

// 编译 /demos/stress/ 目录
// 连续创建和销毁控件、添加动画、事件、样式等,验证 LVGL 在高负载下的稳定性,适合系统压力评估
#define LV_USE_DEMO_STRESS 0

// 编译 /demos/music/ 目录
// 启用音乐播放器演示界面(内含精美动画、切换界面、波形图、旋转专辑封面等)
#define LV_USE_DEMO_MUSIC 0
//使用正方形屏幕布局(适合如 240×240、480×480 等屏幕)
#define LV_DEMO_MUSIC_SQUARE 0
// 使用横屏布局(适合宽屏显示,如 800×480)
#define LV_DEMO_MUSIC_LANDSCAPE 0
// 使用圆形屏幕布局(如智能手表屏幕)
#define LV_DEMO_MUSIC_ROUND 0
// 针对高分辨率大屏设备优化的布局样式(例如 1080×1920)
#define LV_DEMO_MUSIC_LARGE 0
// 启动后是否自动播放音乐(模拟播放,无需真实音频硬件)
#define LV_DEMO_MUSIC_AUTO_PLAY 0

其它

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* 其它 */

// 使能对象快照截屏功能
#define LV_USE_SNAPSHOT 0
// 使能自动测试,启用后可以模拟用户输入,如点击、滑动、按键等不需人为干预
#define LV_USE_MONKEY 0
// 使能网格导航系统
#define LV_USE_GRIDNAV 0
// 使能 UI 片段系统
#define LV_USE_FRAGMENT 0
// 使能图像字体支持
#define LV_USE_IMGFONT 0
// 使能发布-订阅消息系统
#define LV_USE_MSG 0
// 启用拼音输入法功能。需要依赖:lv_keyboard(虚拟键盘控件)
#define LV_USE_IME_PINYIN 0
// 使用默认内置的拼音词库
// 如果设为 0,你需要手动加载自己的词库,使用 lv_ime_pinyin_set_dict() 设置
#define LV_IME_PINYIN_USE_DEFAULT_DICT 1
// 设置候选词面板中最多可显示的拼音词条数量,建议根据屏幕尺寸适当调整
#define LV_IME_PINYIN_CAND_TEXT_NUM 6
// 设置 9 键模式下候选词条的是否启用和数量
#define LV_IME_PINYIN_USE_K9_MODE 1
#define LV_IME_PINYIN_K9_CAND_TEXT_NUM 3

内存总结

  1. 显示的缓存空间不在LV_MEM_SIZE中分配,对于RAM的分配需要更加合理

  2. 使用RAM的部分

    宏(/变量) 默认大小(Byte) 作用
    LV_MEM_SIZE 48 x 1024 内存池大小
    LV_LAYER_SIMPLE_BUF_SIZE 24 x 1024 简单图层渲染主空间
    LV_LAYER_SIMPLE_FALLBACK_BUF_SIZE 3 x 1024 简单图层渲染备用空间
    LV_DISP_ROT_MAX_BUF 10 x 1024 软件旋转缓存
    buf_2_1 & buf_2_2 width x 10 x 2 显示Buffer
    默认配置一个10行的缓存空间