UI/ 目录包含了所有与用户界面相关的代码和资源。这部分代码使用 LVGL 的可视化设计工具 SquareLine Studio 自动生成,开发者主要负责调用和与业务逻辑进行交互。

目录结构详解

1
2
3
4
5
6
7
8
UI/
├── CMakeLists.txt # 编译脚本,将所有UI源文件打包
├── components/ # 存放自定义的复合组件
├── fonts/ # 字体文件 (C 数组格式)
├── images/ # 图片文件 (C 数组格式)
├── screens/ # 存放各个屏幕的 UI 定义代码
├── ui.c / ui.h # UI 的主入口,负责创建和初始化所有界面
└── ui_events.c / .h # UI 事件的回调函数(本项目中较少使用)
  • screens/: 每个 .c 文件定义了一个完整的屏幕界面。例如 ui_Screen1.c 负责创建仪表盘的主界面,包括背景、指针、标签等所有静态元素。

  • components/: 用于存放可复用的 UI 组件,例如一个自定义的警告图标和文本组合。这有助于保持代码的整洁和可维护性。

  • fonts/images/: 这两个目录存放的是项目所需的静态资源。LVGL 会将字体文件 (.ttf) 和图片文件 (.png) 转换为 C 语言的数组格式(.c 文件)。这样做的好处是,资源文件会直接被编译进最终的可执行文件中,无需在运行时从文件系统加载,极大地提高了嵌入式设备的运行效率和部署便利性。

  • ui.cui.h: 这是整个 UI 模块的“门面”。ui.h 对外暴露了 ui_init() 函数和各个 UI 控件的句柄(例如 ui_Image_SpeedoMeter)。ui.c 中的 ui_init() 函数则会调用 screens/ 目录下的函数来完成所有界面的初始化。

  • UI/CMakeLists.txt: 这个文件负责将 UI/ 目录下的所有 .c 文件收集起来,并编译成一个静态库或对象文件集合,供根目录的 CMakeLists.txt 链接。

工作流程

  1. main.c 中,首先调用 ui_init(&ui) 来创建和初始化所有 UI 元素。
  2. obj/control.c 中,通过 extern 关键字引用 ui.h 中声明的 UI 控件句柄。
  3. 当需要更新界面时(例如更新速度值),control.c 会直接调用 LVGL 的 API 函数来操作这些句柄,例如 lv_bar_set_value(ui_BarSpeed, new_speed)