# 基于LVGL的自动贩卖机系统 **Repository Path**: Jaklin/LVGL_Vending_Machine_System ## Basic Information - **Project Name**: 基于LVGL的自动贩卖机系统 - **Description**: 自动贩卖机系统是一个非常适合学习和参考的LVGL应用项目,它展示了如何利用LVGL构建一个功能完整、交互友好的用户界面。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-03 - **Last Updated**: 2025-11-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于 LVGL 的嵌入式自助贩卖系统 ## 项目简介 本项目是一个基于 LVGL (Light and Versatile Graphics Library) 8.3.11 开发的嵌入式图形用户界面系统,使用 SquareLine Studio 1.5.4 进行界面设计。系统提供了完整的用户管理、商品浏览和购买功能,适用于嵌入式设备的触摸屏界面开发。 ## 功能特性 ### 1. 用户登录与注册 - **用户登录**:支持用户名和密码登录验证 - **用户注册**:新用户注册功能,包含用户名、密码和确认密码验证 - **密码验证**:注册时验证密码和确认密码是否一致 - **用户数据管理**:用户信息存储在 `/jakl/img/UserData.txt` 文件中 ### 2. 管理员管理界面 - **用户列表显示**:显示所有注册用户及其余额信息 - **添加用户**:管理员可以添加新用户,设置用户名、密码和初始余额 - **删除用户**:管理员可以删除指定用户(管理员账户除外) - **修改用户信息**:管理员可以修改用户的密码和余额 - **刷新列表**:实时刷新用户列表显示 ### 3. 商品售卖系统 - **商品分类**:支持饮料和零食两种商品类别 - **商品展示**:动态加载商品图片和价格信息 - **数量选择**:通过滑块选择商品数量 - **总价计算**:实时计算购物车总价 - **支付功能**:支持余额支付,自动扣除用户余额 - **余额显示**:实时显示当前用户余额 ### 4. 界面美化 - **现代化设计**:采用淡蓝色主题,界面简洁美观 - **中文字体支持**:使用楷体字体(simkai.ttf),支持中文显示 - **交互反馈**:按钮点击效果、阴影效果等现代化UI元素 - **响应式布局**:支持弹性布局,适配不同屏幕尺寸 ## 技术栈 - **图形库**:LVGL 8.3.11 - **UI设计工具**:SquareLine Studio 1.5.4 - **字体支持**:FreeType(中文字体渲染) - **编译工具链**:arm-linux-gcc - **开发平台**:ARM Linux - **编程语言**:C语言 ## 项目结构 ``` Project_1/ ├── main.c # 主程序入口 ├── Makefile # 编译配置文件 ├── README.md # 项目说明文档 ├── lvgl/ # LVGL图形库源码 │ ├── src/ # LVGL核心源码 │ ├── examples/ # LVGL示例代码 │ └── docs/ # LVGL文档 ├── lv_drivers/ # LVGL驱动源码 │ ├── display/ # 显示驱动 │ └── indev/ # 输入设备驱动 ├── usrCode/ # 用户代码目录 │ ├── screens/ # 界面屏幕代码 │ │ ├── ui_LoginForm.c # 登录界面实现 │ │ ├── ui_LoginForm.h # 登录界面头文件 │ │ ├── ui_AdminLogin.c # 管理员界面实现 │ │ ├── ui_AdminLogin.h # 管理员界面头文件 │ │ ├── ui_SystemForm.c # 系统表单(商品售卖)界面实现 │ │ └── ui_SystemForm.h # 系统表单界面头文件 │ ├── ui.c # UI初始化代码 │ ├── ui.h # UI头文件 │ ├── ui_helpers.c # UI辅助函数 │ ├── list.c # 链表数据结构实现 │ ├── list.h # 链表数据结构头文件 │ ├── dir.c # 目录操作实现 │ └── dir.h # 目录操作头文件 ├── usrLib/ # 用户库文件 │ ├── freetype/ # FreeType字体库头文件 │ └── libfreetype.a # FreeType字体库静态库 └── img/ # 资源文件目录 ├── drink/ # 饮料商品图片和数据 │ ├── *.png # 饮料商品图片 │ └── DrinkData.txt # 饮料商品数据文件 ├── snacks/ # 零食商品图片和数据 │ ├── *.png # 零食商品图片 │ └── SnacksData.txt # 零食商品数据文件 ├── simkai.ttf # 楷体中文字体文件 └── UserData.txt # 用户数据文件 ``` ## 编译与运行 ### 环境要求 - **编译器**:arm-linux-gcc(ARM Linux交叉编译工具链) - **系统**:Linux开发环境 - **依赖库**:FreeType字体库 ### 编译步骤 1. **克隆项目** ```bash git clone <项目地址> cd Project_1 ``` 2. **编译项目** ```bash make ``` 3. **部署到开发板** 编译成功后会自动通过 SCP 将可执行文件传输到开发板: ```bash # 目标设备:root@192.168.47.11 # 目标路径:/jakl/ # 可执行文件:demo ``` ### 手动部署 如果自动部署失败,可以手动部署: ```bash scp demo root@192.168.47.11:/jakl/ ``` ### 运行 在开发板上运行: ```bash cd /jakl/ ./demo ``` ## 文件说明 ### 主要源代码文件 #### 1. `main.c` - **功能**:程序主入口 - **主要工作**: - 初始化 LVGL 图形库 - 初始化显示驱动(fbdev) - 初始化输入设备驱动(evdev) - 调用 UI 初始化函数 - 启动 LVGL 主循环 #### 2. `usrCode/screens/ui_LoginForm.c` - **功能**:登录和注册界面实现 - **主要功能**: - 用户登录验证 - 用户注册功能 - 密码和确认密码验证 - 界面切换(登录/注册) #### 3. `usrCode/screens/ui_AdminLogin.c` - **功能**:管理员管理界面实现 - **主要功能**: - 用户列表加载和显示 - 添加用户功能 - 删除用户功能 - 修改用户信息功能 - 用户列表刷新 #### 4. `usrCode/screens/ui_SystemForm.c` - **功能**:商品售卖系统界面实现 - **主要功能**: - 商品列表加载和显示 - 商品数量选择(滑块) - 总价计算 - 支付功能 - 余额更新和显示 ### 数据文件 #### 1. `img/UserData.txt` - **格式**:`用户名 密码 余额` - **说明**:存储所有用户的信息,包括用户名、密码和余额 - **示例**: ``` 用户名 密码 余额 admin admin 10000 user1 password1 500 user2 password2 300 ``` #### 2. `img/drink/DrinkData.txt` - **格式**:`编号 名称 价格` - **说明**:存储饮料商品的名称和价格信息 - **示例**: ``` 编号 名称 价格 1001 可乐 5.0 1002 雪碧 5.0 1003 橙汁 6.0 ``` #### 3. `img/snacks/SnacksData.txt` - **格式**:`编号 名称 价格` - **说明**:存储零食商品的名称和价格信息 - **示例**: ``` 编号 名称 价格 2001 薯片 8.0 2002 饼干 6.0 2003 巧克力 10.0 ``` ## 主要功能模块 ### 1. 用户认证模块 #### 登录功能 - 验证用户名和密码 - 检查用户是否存在 - 加载用户余额信息 - 跳转到商品售卖界面 #### 注册功能 - 验证用户名是否已存在 - 验证密码和确认密码是否一致 - 创建新用户并保存到文件 - 设置初始余额 ### 2. 管理员管理模块 #### 用户列表管理 - 从文件读取用户列表 - 动态显示用户信息 - 支持用户列表刷新 #### 用户操作 - **添加用户**:输入用户名、密码和余额,创建新用户 - **删除用户**:输入用户名,删除指定用户(管理员账户受保护) - **修改用户**:修改用户的密码和余额 - **查看用户**:点击用户列表项查看详细信息 ### 3. 商品售卖模块 #### 商品管理 - 从文件读取商品数据 - 动态加载商品图片 - 支持商品分类(饮料/零食) - 实时计算商品总价 #### 购物功能 - 通过滑块选择商品数量 - 实时显示商品总价 - 支持余额支付 - 支付后自动更新用户余额 - 支付成功后重置购物车 ### 4. UI界面模块 #### 界面设计 - 现代化淡蓝色主题 - 中文字体支持(楷体) - 圆角按钮和输入框 - 阴影效果和动画效果 #### 界面交互 - 触摸屏输入支持 - 虚拟键盘输入 - 界面切换动画 - 消息提示框 ## 使用说明 ### 1. 用户登录 1. 启动程序后,进入登录界面 2. 输入用户名和密码 3. 点击"登录"按钮 4. 登录成功后,进入商品售卖界面 ### 2. 用户注册 1. 在登录界面点击"注册"按钮 2. 输入用户名、密码和确认密码 3. 点击"注册"按钮 4. 注册成功后,返回登录界面 ### 3. 管理员登录 1. 使用管理员账户登录(默认用户名:`admin`,密码:`admin`) 2. 登录成功后,点击"管理员"按钮(如果存在)进入管理员界面 3. 在管理员界面可以: - 查看用户列表 - 添加新用户 - 删除用户 - 修改用户信息 - 刷新用户列表 ### 4. 商品购买 1. 登录后进入商品售卖界面 2. 在左侧菜单中选择商品类别(饮料/零食) 3. 在右侧商品面板中,通过滑块选择商品数量 4. 查看总价显示 5. 点击"支付"按钮完成购买 6. 支付成功后,余额自动更新,购物车清空 ## 配置说明 ### 显示配置 - **屏幕分辨率**:800x480 - **显示驱动**:fbdev(帧缓冲设备) - **缓冲区大小**:1MB ### 输入设备配置 - **输入类型**:触摸屏(evdev) - **输入模式**:指针输入 ### 字体配置 - **中文字体路径**:`/usr/share/fonts/simkai.ttf` - **字体大小**:22(常规),32(标题) - **字体样式**:粗体 ### 文件路径配置 - **用户数据文件**:`/jakl/img/UserData.txt` - **饮料数据文件**:`/jakl/img/drink/DrinkData.txt` - **零食数据文件**:`/jakl/img/snacks/SnacksData.txt` - **商品图片目录**:`/jakl/img/drink/` 和 `/jakl/img/snacks/` ## 开发说明 ### 添加新商品 1. 将商品图片放到对应的目录(`img/drink/` 或 `img/snacks/`) 2. 在对应的数据文件中添加商品信息(`DrinkData.txt` 或 `SnacksData.txt`) 3. 重新编译和部署程序 ### 修改界面样式 1. 使用 SquareLine Studio 打开项目文件 2. 修改界面元素的样式属性 3. 导出代码并替换 `usrCode/screens/` 目录下的对应文件 4. 重新编译和部署程序 ### 添加新功能 1. 在对应的界面文件中添加新函数 2. 在界面初始化函数中创建新的UI元素 3. 绑定事件处理函数 4. 重新编译和部署程序 ## 注意事项 1. **文件权限**:确保 `/jakl/img/` 目录及其文件有读写权限 2. **字体文件**:确保字体文件路径正确,且文件存在 3. **数据文件格式**:数据文件必须按照指定格式编写,否则可能导致读取失败 4. **管理员账户**:管理员账户(admin)不能删除,修改时会有提示 5. **余额支付**:支付时会检查余额是否足够,余额不足时无法完成支付 6. **内存管理**:使用 `strdup()` 分配的内存需要在使用完毕后释放,防止内存泄漏 ## 故障排除 ### 编译错误 1. **找不到 FreeType 库** - 检查 `usrLib/libfreetype.a` 文件是否存在 - 检查 Makefile 中的库路径配置 2. **字体初始化失败** - 检查字体文件路径是否正确 - 检查字体文件是否存在且可读 ### 运行时错误 1. **无法打开用户数据文件** - 检查文件路径是否正确 - 检查文件权限 - 确保目录存在 2. **界面显示异常** - 检查屏幕分辨率配置 - 检查显示驱动是否正确初始化 - 检查缓冲区大小是否足够 3. **触摸屏无响应** - 检查输入设备驱动是否正确初始化 - 检查触摸屏设备节点是否正确 ## 版本信息 - **LVGL 版本**:8.3.11 - **SquareLine Studio 版本**:1.5.4 - **FreeType 版本**:2.12.1 - **项目名称**:自助贩卖系统 ## 许可证 暂无 ## 作者 林明杰 ## 更新日志 ### v1.0.0 - 初始版本发布 - 实现用户登录和注册功能 - 实现管理员用户管理功能 - 实现商品售卖系统 - 添加中文字体支持 - 优化界面设计 ## 联系方式 暂无 ---