UI/
目录包含了所有与用户界面相关的代码和资源。这部分代码使用 LVGL 的可视化设计工具 SquareLine Studio 自动生成,开发者主要负责调用和与业务逻辑进行交互。
目录结构详解
1 | UI/ |
screens/
: 每个.c
文件定义了一个完整的屏幕界面。例如ui_Screen1.c
负责创建仪表盘的主界面,包括背景、指针、标签等所有静态元素。components/
: 用于存放可复用的 UI 组件,例如一个自定义的警告图标和文本组合。这有助于保持代码的整洁和可维护性。fonts/
和images/
: 这两个目录存放的是项目所需的静态资源。LVGL 会将字体文件 (.ttf
) 和图片文件 (.png
) 转换为 C 语言的数组格式(.c
文件)。这样做的好处是,资源文件会直接被编译进最终的可执行文件中,无需在运行时从文件系统加载,极大地提高了嵌入式设备的运行效率和部署便利性。ui.c
和ui.h
: 这是整个 UI 模块的“门面”。ui.h
对外暴露了ui_init()
函数和各个 UI 控件的句柄(例如ui_Image_SpeedoMeter
)。ui.c
中的ui_init()
函数则会调用screens/
目录下的函数来完成所有界面的初始化。UI/CMakeLists.txt
: 这个文件负责将UI/
目录下的所有.c
文件收集起来,并编译成一个静态库或对象文件集合,供根目录的CMakeLists.txt
链接。
工作流程
- 在
main.c
中,首先调用ui_init(&ui)
来创建和初始化所有 UI 元素。 - 在
obj/control.c
中,通过extern
关键字引用ui.h
中声明的 UI 控件句柄。 - 当需要更新界面时(例如更新速度值),
control.c
会直接调用 LVGL 的 API 函数来操作这些句柄,例如lv_bar_set_value(ui_BarSpeed, new_speed)
。