1. 系统总体设计
点击链接下载protues仿真设计资料:https://download.csdn.net/download/m0_51061483/91926418
1.1 设计背景
随着公共场所(如商场、车站、学校等)对自助服务需求的不断提升,自动存包柜逐渐成为智能化服务设施的重要组成部分。传统人工管理的存包方式存在效率低、管理复杂、安全性差等问题,而智能存包柜能够通过自动分配箱位、密码验证等方式,提高存取效率并增强安全性。
基于单片机的自动存包柜系统,通过嵌入式控制技术实现密码自动生成、空箱检测、用户身份验证及实时信息显示等功能,使系统具备智能化管理能力。同时,该系统结构简单、成本低廉,适用于教学实验及中小型应用场景。
1.2 系统功能设计
本系统主要实现以下功能:
- 自动生成密码功能:用户按下"存包"键后,系统自动生成随机密码;
- LCD显示功能:实时显示密码及分配的箱号;
- 空箱自动管理功能:自动检测并分配空闲箱体;
- 存包功能:用户根据提示完成存包操作;
- 取包功能:用户输入密码进行验证并打开对应箱体;
- 输入控制功能:支持数字键输入、清除及确认操作;
- 状态反馈功能:实时显示系统操作状态;
- 系统具备响应快速、安全可靠及操作简便等特点。
2. 系统电路设计
2.1 单片机最小系统电路设计
系统采用STC89C52单片机作为核心控制器。
最小系统包括:
- 晶振电路:采用11.0592MHz晶振提供系统时钟;
- 复位电路:RC复位电路实现系统上电初始化;
- 电源电路:提供稳定5V电压供系统运行。
2.2 矩阵键盘输入电路设计
系统采用4×4矩阵键盘作为输入设备。
按键包括:
- 数字键(0~9);
- 存包键;
- 取包键;
- 清除键;
- 确认键。
设计要点:
- 行列扫描方式;
- 节省IO口资源;
- 软件消抖处理;
- 支持多功能按键识别。
2.3 LCD显示电路设计
系统采用LCD1602显示模块。
显示内容包括:
- 当前操作提示;
- 随机生成的密码;
- 分配的箱号;
- 输入状态及结果反馈。
2.4 箱体控制电路设计
存包柜通过电磁锁或继电器控制箱门。
设计方案:
- 单片机输出控制信号;
- 通过三极管驱动继电器;
- 控制对应箱门开关;
- 支持多箱体独立控制。
2.5 空箱检测电路设计
用于判断箱体是否空闲。
设计方法:
- 采用开关检测或红外检测;
- 每个箱体对应一个检测信号;
- 输入单片机IO口;
- 判断箱体状态。
2.6 存储电路设计
用于存储密码与箱号对应关系。
设计方案:
- 使用单片机内部RAM;
- 可扩展EEPROM实现掉电保存;
- 保存密码与箱号映射关系。
2.7 报警与提示电路设计
系统可设置蜂鸣器提示操作结果。
设计要点:
- 操作成功提示;
- 密码错误报警;
- 提高用户体验。
2.8 电源与抗干扰设计
设计要点:
- 稳压电源提供5V;
- 滤波电容降低干扰;
- 控制电路与驱动电路隔离;
- 提高系统稳定性。
3. 系统程序设计
3.1 程序总体结构设计
系统采用模块化与状态机设计方法。
主程序如下:
c
void main()
{
System_Init();
while(1)
{
key = Key_Scan();
System_Process(key);
Display_Update();
}
}
3.2 数据结构设计
c
#define MAX_BOX 10
unsigned int password[MAX_BOX];
unsigned char box_state[MAX_BOX]; // 0空闲 1占用
用于存储箱体信息。
3.3 随机密码生成程序设计
c
unsigned int Generate_Password()
{
unsigned int pwd;
pwd = rand() % 9000 + 1000;
return pwd;
}
生成4位随机密码。
3.4 存包处理程序设计
c
void Store_Process()
{
for(i=0;i<MAX_BOX;i++)
{
if(box_state[i] == 0)
{
password[i] = Generate_Password();
box_state[i] = 1;
Open_Box(i);
break;
}
}
}
实现空箱分配与密码生成。
3.5 取包验证程序设计
c
void Take_Process(unsigned int input_pwd)
{
for(i=0;i<MAX_BOX;i++)
{
if(password[i] == input_pwd)
{
Open_Box(i);
box_state[i] = 0;
password[i] = 0;
break;
}
}
}
实现密码匹配与取包。
3.6 按键输入处理程序设计
c
void Input_Process(unsigned char key)
{
if(key <= 9)
{
input_pwd = input_pwd * 10 + key;
}
}
实现密码输入。
3.7 清除功能程序设计
c
void Clear_Input()
{
input_pwd = 0;
}
清空输入内容。
3.8 系统状态处理程序设计
c
void System_Process(unsigned char key)
{
if(key == STORE_KEY)
Store_Process();
else if(key == TAKE_KEY)
mode = 1;
else if(key == CONFIRM_KEY)
Take_Process(input_pwd);
else if(key == CLEAR_KEY)
Clear_Input();
}
实现功能调度。
3.9 显示程序设计
c
void Display_Update()
{
LCD_ShowString(0,0,"PWD:");
LCD_ShowNum(4,0,input_pwd,4);
LCD_ShowString(0,1,"BOX:");
LCD_ShowNum(4,1,current_box,2);
}
实现信息显示。
3.10 系统初始化程序设计
c
void System_Init()
{
LCD_Init();
Key_Init();
Box_Init();
}
完成系统初始化。
4. 系统总结
本系统基于单片机实现了自动存包柜的智能控制,通过密码生成、箱位管理及用户交互,实现了存包与取包的自动化操作。
在电路设计方面,各模块分工明确,系统结构清晰;在程序设计方面,采用状态机与模块化设计,使系统逻辑严谨、运行稳定。
该系统具备良好的实用性与扩展性,可广泛应用于公共场所的智能存储设备,同时也是嵌入式系统设计中的典型应用案例。