基于单片机的自动存包柜设计

1. 系统总体设计

点击链接下载protues仿真设计资料:https://download.csdn.net/download/m0_51061483/91926418

1.1 设计背景

随着公共场所(如商场、车站、学校等)对自助服务需求的不断提升,自动存包柜逐渐成为智能化服务设施的重要组成部分。传统人工管理的存包方式存在效率低、管理复杂、安全性差等问题,而智能存包柜能够通过自动分配箱位、密码验证等方式,提高存取效率并增强安全性。

基于单片机的自动存包柜系统,通过嵌入式控制技术实现密码自动生成、空箱检测、用户身份验证及实时信息显示等功能,使系统具备智能化管理能力。同时,该系统结构简单、成本低廉,适用于教学实验及中小型应用场景。


1.2 系统功能设计

本系统主要实现以下功能:

  1. 自动生成密码功能:用户按下"存包"键后,系统自动生成随机密码;
  2. LCD显示功能:实时显示密码及分配的箱号;
  3. 空箱自动管理功能:自动检测并分配空闲箱体;
  4. 存包功能:用户根据提示完成存包操作;
  5. 取包功能:用户输入密码进行验证并打开对应箱体;
  6. 输入控制功能:支持数字键输入、清除及确认操作;
  7. 状态反馈功能:实时显示系统操作状态;
  8. 系统具备响应快速、安全可靠及操作简便等特点。

2. 系统电路设计

2.1 单片机最小系统电路设计

系统采用STC89C52单片机作为核心控制器。

最小系统包括:

  1. 晶振电路:采用11.0592MHz晶振提供系统时钟;
  2. 复位电路:RC复位电路实现系统上电初始化;
  3. 电源电路:提供稳定5V电压供系统运行。

2.2 矩阵键盘输入电路设计

系统采用4×4矩阵键盘作为输入设备。

按键包括:

  1. 数字键(0~9);
  2. 存包键;
  3. 取包键;
  4. 清除键;
  5. 确认键。

设计要点:

  1. 行列扫描方式;
  2. 节省IO口资源;
  3. 软件消抖处理;
  4. 支持多功能按键识别。

2.3 LCD显示电路设计

系统采用LCD1602显示模块。

显示内容包括:

  1. 当前操作提示;
  2. 随机生成的密码;
  3. 分配的箱号;
  4. 输入状态及结果反馈。

2.4 箱体控制电路设计

存包柜通过电磁锁或继电器控制箱门。

设计方案:

  1. 单片机输出控制信号;
  2. 通过三极管驱动继电器;
  3. 控制对应箱门开关;
  4. 支持多箱体独立控制。

2.5 空箱检测电路设计

用于判断箱体是否空闲。

设计方法:

  1. 采用开关检测或红外检测;
  2. 每个箱体对应一个检测信号;
  3. 输入单片机IO口;
  4. 判断箱体状态。

2.6 存储电路设计

用于存储密码与箱号对应关系。

设计方案:

  1. 使用单片机内部RAM;
  2. 可扩展EEPROM实现掉电保存;
  3. 保存密码与箱号映射关系。

2.7 报警与提示电路设计

系统可设置蜂鸣器提示操作结果。

设计要点:

  1. 操作成功提示;
  2. 密码错误报警;
  3. 提高用户体验。

2.8 电源与抗干扰设计

设计要点:

  1. 稳压电源提供5V;
  2. 滤波电容降低干扰;
  3. 控制电路与驱动电路隔离;
  4. 提高系统稳定性。

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. 系统总结

本系统基于单片机实现了自动存包柜的智能控制,通过密码生成、箱位管理及用户交互,实现了存包与取包的自动化操作。

在电路设计方面,各模块分工明确,系统结构清晰;在程序设计方面,采用状态机与模块化设计,使系统逻辑严谨、运行稳定。

该系统具备良好的实用性与扩展性,可广泛应用于公共场所的智能存储设备,同时也是嵌入式系统设计中的典型应用案例。

相关推荐
LiuYouth_1233 小时前
耳机双链接A、B手机,A有业务的情况下,B手机播放音乐需要外放 -- 基于中科蓝汛897X
单片机
点灯小铭3 小时前
基于单片机的火焰与温度联动检测及声光灭火控制系统
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
不做无法实现的梦~4 小时前
STM32 上部署 MAVLink 协议教程
stm32·单片机·嵌入式硬件
进击的小头4 小时前
第5篇:嵌入式处理器内核全解析:TI DSP各个系列核心差异与选型指南
单片机·嵌入式硬件
爬山算法4 小时前
MongoDB(88)如何进行数据迁移?
数据库·mongodb
广药门徒4 小时前
PADS 复用模块的使用
嵌入式硬件
HIZYUAN4 小时前
AG32 MCU可以替代STM32+CPLD吗 (二)
stm32·单片机·嵌入式硬件·fpga开发·agm ag32·国产mcu+fpga·低成本soc
551只玄猫4 小时前
【数学建模 matlab 实验报告11】拟合
开发语言·数学建模·matlab·数据分析·课程设计·实验报告·拟合
yuanmazhiwu5 小时前
计算机毕业设计:Python全国空气质量与气象监测平台 Flask框架 可视化 数据分析 机器学习 天气 深度学习 AI 空气质量分析(建议收藏)✅
人工智能·python·深度学习·数据挖掘·flask·汽车·课程设计