• 方案介绍
  • 相关推荐
申请入驻 产业图谱

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

10/21 14:01
1838
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1. 系统功能概述

本设计的目标是实现一个基于单片机控制的智能自动存包柜系统,具有密码自动生成、空箱管理、LCD信息显示以及按键输入控制等多项功能。系统通过单片机进行统一协调,实现高效、安全的自动化存取包流程。用户只需通过按键操作,即可完成存包、取包等操作。

本系统的主要功能如下:

  1. 密码自动生成与LCD显示
    当用户选择存包操作时,系统自动为其生成一个四位随机密码,密码通过LCD液晶显示屏实时显示,用户可凭此密码取包。系统自动记录对应的箱体号与密码,确保存取匹配。
  2. 空箱位置自动管理
    系统内部设有空箱检测模块,实时判断每个箱体的占用状态。当有新的存包请求时,系统自动分配当前空闲的箱体位置,提高空间利用率与使用效率。
  3. 存包与取包便捷操作
    用户通过按键输入指令完成存取操作。存包时,按下指定键后系统生成密码并打开对应箱体;取包时,输入密码并验证正确后系统打开对应箱门,实现安全、准确的物品取出。
  4. 实时状态反馈
    系统通过LCD显示屏实时显示操作提示、密码、箱体编号及系统状态信息。当输入错误或箱体异常时,系统发出提示音并在屏幕显示错误信息,方便用户操作。
  5. 人机交互性强
    系统设计了10个数字按键(0-9)以及“确认”“清除”“存包”“取包”功能键,简洁直观。所有交互过程均通过LCD与蜂鸣器提示完成,用户体验良好。

2. 系统电路设计

本系统的硬件设计以单片机为核心,配合按键矩阵、电磁锁控制模块、LCD液晶显示模块、蜂鸣器报警模块及空箱检测电路共同构成完整的自动存包柜控制系统

2.1 主控单片机模块

本系统选用 STC89C52RC 单片机 作为核心控制器。该芯片兼容MCS-51内核,具有较强的运算与I/O控制能力,完全满足多输入按键、LCD显示以及电磁锁控制等任务的需求。

单片机的主要任务包括:

  • 处理按键输入指令;
  • 生成随机密码;
  • 管理箱体状态数据;
  • 控制LCD显示内容;
  • 驱动电磁锁开启或关闭;
  • 进行密码比对与错误处理。

其内部结构包含丰富的I/O口资源、定时器中断系统等,为本系统提供了可靠的硬件基础。

2.2 按键输入模块

系统采用 独立按键与矩阵按键结合结构

  • 数字按键0-9用于密码输入与存包指令输入;
  • “确认”键用于输入完成后确认操作;
  • “清除”键用于清空当前输入内容;
  • “存包”“取包”键分别用于执行对应操作模式。

每个按键一端接单片机I/O口,另一端接地,并通过上拉电阻保持高电平。当按键按下时电平拉低,单片机检测到电平变化后即可识别输入。

通过软件实现按键消抖、长按与短按识别,使输入更加稳定可靠。

2.3 LCD显示模块

系统采用 LCD1602 液晶显示屏,具有显示直观、成本低廉等特点。LCD1602 可显示两行字符信息,每行16个字符,适合用于显示密码、箱号、操作提示等内容。

显示内容示例:

  • 存包模式下显示:“箱号:01 密码:4582”;
  • 取包模式下显示:“请输入密码:____”;
  • 验证成功后显示:“取包成功!”;
  • 错误输入时显示:“密码错误,请重试。”

LCD1602通过4位数据线与控制线RS、RW、EN连接到单片机,利用时序控制完成指令与数据的发送。

2.4 电磁锁控制模块

电磁锁用于控制箱体的开关,系统为每个箱体设置独立的控制接口。由于单片机I/O口输出电流有限,无法直接驱动电磁锁,因此通过 三极管驱动电路继电器模块 实现电流放大控制。

当单片机检测到正确密码或执行存包命令时,对应控制端输出高电平信号,驱动电磁锁通电,箱门自动打开。

2.5 蜂鸣器与指示灯模块

蜂鸣器主要用于提示操作状态,如输入成功、错误提示、箱体打开等。
指示灯可直观反映箱体占用状态:

  • 绿色LED表示空箱可用;
  • 红色LED表示箱体占用。

该模块可增强系统的直观性与可视化程度。

2.6 空箱检测模块

空箱检测采用 红外对射传感器霍尔传感器 检测箱内是否有物品。当光线被遮挡或磁场变化时,传感器输出电平信号至单片机,由程序判断箱体状态并记录。

该模块确保系统能够实时了解各箱的使用情况,从而实现自动分配空闲箱体功能。


3. 程序设计

系统的软件设计采用模块化编程思想,主要分为以下几个功能模块:

  1. 主程序控制模块
  2. 按键扫描与输入模块
  3. 密码生成与比对模块
  4. LCD显示模块
  5. 电磁锁控制模块
  6. 空箱检测模块
  7. 蜂鸣器报警模块

各模块之间相互协作,构成完整的智能存包柜系统控制逻辑。


3.1 主程序控制模块

主程序是系统的核心,负责各子模块的调用与逻辑调度。

主程序流程如下:

  1. 系统初始化(LCD、I/O口、定时器、变量);
  2. 显示主菜单(“1.存包 2.取包”);
  3. 等待用户按键输入;
  4. 若选择“存包”,进入密码生成与箱位分配流程;
  5. 若选择“取包”,进入密码输入与验证流程;
  6. 根据操作结果控制箱门与显示输出。
#include <reg52.h>
#include "lcd1602.h"
#include "key.h"
#include "lock.h"

void main()
{
    Init_LCD();
    Init_Key();
    Init_Lock();
    LCD_ShowString(1,1,"1.Store 2.Take");
    
    while(1)
    {
        unsigned char key = Key_Scan();
        if(key == 1) Store_Process();
        else if(key == 2) Take_Process();
    }
}

3.2 按键输入模块

按键输入模块主要负责扫描按键矩阵并返回有效按键值。

按键消抖采用定时延时方式,确保稳定识别。

unsigned char Key_Scan()
{
    unsigned char key_value = 0xFF;
    if(P3_0 == 0){ delay_ms(20); if(P3_0==0) key_value = 0; }
    if(P3_1 == 0){ delay_ms(20); if(P3_1==0) key_value = 1; }
    if(P3_2 == 0){ delay_ms(20); if(P3_2==0) key_value = 2; }
    // 省略其他按键
    return key_value;
}

该模块不仅用于数字输入,还负责检测“存包”“取包”“确认”“清除”等功能键。


3.3 密码生成与比对模块

系统采用随机算法生成四位密码,并存储至数组中,与箱号一一对应。

unsigned int Generate_Password()
{
    unsigned int pwd = (rand() % 9000) + 1000; // 生成1000~9999的随机数
    return pwd;
}

在取包操作中,系统根据用户输入的密码与存储密码表比对,若匹配则打开对应箱门,否则提示“密码错误”。

bit Check_Password(unsigned int input)
{
    for(i=0;i<MAX_BOX;i++)
    {
        if(input == password[i]) return 1;
    }
    return 0;
}

3.4 LCD显示模块

LCD显示模块负责所有文本信息输出,包括操作提示、密码显示、状态反馈等。

void LCD_Display_Info(unsigned char box, unsigned int pwd)
{
    LCD_Clear();
    LCD_ShowString(1,1,"Box:");
    LCD_ShowNum(1,5,box,2);
    LCD_ShowString(2,1,"Pwd:");
    LCD_ShowNum(2,5,pwd,4);
}

系统中LCD通过命令与数据分时发送,采用延时控制指令间隔。


3.5 电磁锁控制模块

void Open_Lock(unsigned char box)
{
    P2 = 1 << box;   // 对应箱口输出高电平
    delay_ms(1000);
    P2 = 0x00;       // 关闭所有锁
}

在存包或取包流程中,调用该函数打开对应箱体锁,实现自动开锁功能。


3.6 空箱检测模块

空箱检测模块通过读取红外传感器信号判断当前箱位状态。

bit Check_Box_Free(unsigned char box)
{
    if(Sensor[box] == 1) return 1;  // 空闲
    else return 0;                  // 占用
}

系统会在每次存包前扫描所有箱体,自动选择第一个空闲位置。


3.7 蜂鸣器报警模块

蜂鸣器用于提示输入状态与错误反馈。

void Beep_Alert(unsigned char times)
{
    for(i=0;i<times;i++)
    {
        BEEP = 0;
        delay_ms(200);
        BEEP = 1;
        delay_ms(200);
    }
}

当输入错误或密码验证失败时,蜂鸣器鸣响三次以提示用户。


4. 系统总结

本设计基于STC89C52单片机实现了一个功能完善的自动存包柜系统,集成了密码自动生成、空箱管理、LCD显示、人机交互与电磁锁控制等模块。系统结构清晰、操作简便、可靠性高。

其主要特点包括:

  1. 高度自动化:系统能自动检测空箱并分配箱体;
  2. 安全性强:采用密码匹配机制,防止误取;
  3. 用户体验优良:LCD实时显示状态与提示;
  4. 模块化设计:便于维护与扩展;
  5. 成本低、可靠性高,适合校园、图书馆、商场等公共场所推广使用。

通过本系统的设计与实现,充分体现了单片机在智能控制领域的应用价值,为自动化存储与管理系统的研究提供了良好的实践基础。

点击链接下载资料:https://download.csdn.net/download/m0_51061483/91926418

相关推荐