1. 项目概述与核心功能解析
这个基于51单片机的无人售货机系统,是我在嵌入式开发教学中经常使用的经典案例。它完整呈现了一个微型自动售货机的核心功能逻辑,特别适合初学者理解嵌入式系统的输入输出控制和状态机设计。
系统硬件架构简洁明了:
- 主控芯片:STC89C52单片机(51内核)
- 显示模块:LCD1602字符液晶
- 输入设备:6个机械按键(3个商品选择键+3个面值键)
- 输出设备:蜂鸣器报警模块、继电器模拟出货
- 电源模块:5V直流供电
核心业务逻辑分为三个典型状态:
- 商品选择状态:显示商品价格并记录选择
- 金额输入状态:模拟纸币/硬币投入
- 交易处理状态:完成金额校验、找零计算和出货控制
提示:STC89C52是宏晶科技推出的增强型51单片机,相比传统AT89C52,具有更高的性价比和更丰富的外设资源,特别适合教学和原型开发。
2. 硬件电路设计与关键器件选型
2.1 主控芯片配置要点
STC89C52的典型工作电路需要注意几个关键点:
- 复位电路:采用10kΩ上拉电阻+10μF电容的经典组合
- 时钟电路:11.0592MHz晶振(保证串口波特率精度)
- EA引脚:必须接高电平使用内部程序存储器
- I/O分配:
- P0口:需外接4.7kΩ上拉电阻(开漏输出)
- P2口:直接驱动LCD1602数据线
- P1口:连接按键矩阵
- P3.7:控制继电器
- P3.6:驱动蜂鸣器
2.2 人机接口设计细节
LCD1602的硬件连接采用4位数据模式节省I/O:
- DB4-DB7 → P2.4-P2.7
- RS → P2.0
- RW → GND(只写模式)
- E → P2.1
按键电路设计采用独立式连接:
- 商品选择键:P1.0-P1.2(A/B/C)
- 面值按键:P1.3-P1.5(0.5/1/5元)
- 确认键:P1.6
注意:所有按键都需要添加10nF的消抖电容,软件中还需做20ms延时消抖处理。
3. 系统软件架构与核心算法
3.1 状态机设计实现
系统采用有限状态机(FSM)模型,定义三个主要状态:
c复制typedef enum {
STATE_PRODUCT_SELECT, // 商品选择状态
