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)。