通信工程毕设 基于单片机的GSM智能快递柜设计(源码+硬件+论文)


0 前言

🔥
这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 毕业设计 基于单片机的GSM智能快递柜设计(源码+硬件+论文)

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

🧿 项目分享:见文末!

在这里插入图片描述

1 主要功能

该文提出了一种基于STC89C52单片机的基于51单片机快递货柜模拟设计GSM短信发送验证码。该装置主要由单片机、电源模块、继电器电路、LED灯光报警模块、控制模块、GSM模块、键盘模块、LCD显示模块、机械开关等组成,借助成熟的GSM移动网络,当货物柜检测到快递的存在,会自动发送验证码给用户手机上,真正实现了远距离、高效率传递信息。

  • (1)采用LCD1602液晶显示当前快递柜的状态。
  • (2)有数字按键(0-6)可以输入短信验证码,进行开柜。
  • (3)快递员将货物存入柜子中,可以通过GSM模块向指定人发送随机的验证码。
  • (4)验证码成功打开柜子之后失效。

2 硬件设计(原理图)

在这里插入图片描述

在这里插入图片描述

  • 1、本s设计由STC89C52单片机核心电路+液晶LCD1602显示电路+按键电路+LED灯指示电路+继电器控制电路+GSM_SIM900A模块电路+电源电路组成。
  • 2、设备为一个快递员发件柜,比如小区流行的快递货柜,快递员拿到快递后,要送到小区的货柜中,柜子默认是关闭的,快递员通过钥匙打开柜台,然后快递员将快递放入柜子,然后关上柜子,然后点击柜子按键,将4位随机数字码通过机柜的短信模块发送给2个手机号,收货人收到短信后验证码输入,如果对,开门,完成一次动作。
  • 3、本设计的单片机核心电路具有上电复位电路、按键复位电路和晶振电路。

3 核心软件设计

主程序设计

在这里插入图片描述

主程序主要要解决两部分问题, 一是快递员存储快递, 二是取件人拿去快递。

快递员存储快递后需输入命令, 即输入用户11 位手机号码。 GSM 模块接收到 AT 指令后, 生成验证码并将指令转化成信号发送至单片机上。

单片机接收到信号, 生成信息发送至取件人的手机上。 取件人可以依据收到的短信中的验证码进行取件步骤, 如若输入正确的验证码, 快递箱门将会成功打开, 继续等下一个指令; 否则, LED 显示灯将会显示警告并且蜂鸣器电路会工作进行报警。

GMS程序设计

GSM 程序设计主要解决的问题就是收到 AT 指令时, 能够成功生成验证码及发送验证码到对应收件人的手机上。 在设置短息的号码时, 因为手机号码为11 位, 所以我在编写程序时, 将两位数字位置颠倒, 确保了取件人可以接收到消息。

在这里插入图片描述

篇幅有限,不过多复述详细设计细节,详细的设计分享在论文中。。。

关键代码



// 键盘部分代码
void KeyDown()
{
char a = 0;
GPIO_KEY=0x0f;
while(1)
{
if(GPIO_KEY!=0x0f)//读取按键是否按下
{
Delay10ms(1);//延时 10ms 进行消抖
if(GPIO_KEY!=0x0f)//再次检测键盘是否按下
{
//测试列
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=4;break;
case(0X0d): KeyValue=8;break;
case(0X0e): KeyValue=12;break;
}
//测试行
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70): KeyValue=KeyValue+3;break;
case(0Xb0): KeyValue=KeyValue+2;break;
case(0Xd0): KeyValue=KeyValue+1;break;
case(0Xe0):KeyValue=KeyValue;break;
}
……
显示模块部分源代码
void get_rand(void)
{
bit_0 = rand(); //获取随机数
user_pass[0] = (bit_0 % 10000)/1000;
user_pass[1] = (bit_0 % 1000)/100;
user_pass[2] = (bit_0 % 100)/10;
user_pass[3] = bit_0 % 10;
bit_1 = rand(); //获取随机数
user_pass[4] = (bit_1 % 10000)/1000;
user_pass[5] = (bit_1 % 1000)/100;
// password[6] = (bit_1 % 100)/10;
// password[7] = bit_1 % 10;
/*
LcdWriteCom(0x01); //清屏
data_clean();
PuZh_2[0] = user_pass[0]+0x30;
PuZh_2[1] = user_pass[1]+0x30;
PuZh_2[2] = user_pass[2]+0x30;
PuZh_2[3] = user_pass[3]+0x30;
PuZh_2[4] = user_pass[4]+0x30;
PuZh_2[5] = user_pass[5]+0x30;
display(); //显示
*/
}
void one_data(uchar *str) //显示第一行数据
{
unsigned char y;
for(y=0;y<16;y++)
{
PuZh_1[y]=*str;
str++;
}
}
void two_data(uchar *str)//显示第一行数据
{
unsigned char y;
for(y=0;y<16;y++)
{
PuZh_2[y]=*str;
str++;
}
}
void interface_dist()
{
one_data(" WELCOME ");
two_data(" ");
}
void input_pass()
{
unsigned char j=0,z=0,x=0,y=0;
LcdWriteCom(0x01); //清屏
one_data(" EMS INPUT ");
two_data(" ");
display(); //显示
j=6;
z=0;
// x=0;
for(;;)
…
GSM 模块部分源代码
void UsartConfiguration()
{
SCON=0X50; //设置为工作方式 1
TMOD=0X20; //设置计数器工作方式 2
TH1=0XFd; //计数器初始值设置, 注意波特率是 9600 的
TL1=0XFd; //11.0592 晶振
// PCON=0X80; //波特率加倍
// TH1=0XF3; //计数器初始值设置, 注意波特率是 4800 的
// TL1=0XF3; //12.0000 晶振
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
//串行口连续发送 char 型数组, 遇到终止号/0 将停止
void Uart1Sends(uchar *str)
{
while(*str!='\0')
{
SBUF=*str;
while(!TI);//等待发送完成信号(TI=1) 出现
TI=0;
str++;
}
}
void Uart1Send(uchar c)
{
SBUF=c;
while(!TI);//等待发送完成信号(TI=1) 出现
TI=0;
}
void pass_word()
{
char i;
for(i=0;i<6;i++)
{
SBUF=0x30;
while(!TI);//等待发送完成信号(TI=1) 出现
TI=0;
SBUF=0x30;
while(!TI);//等待发送完成信号(TI=1) 出现
TI=0;
SBUF=0x33;
while(!TI);//等待发送完成信号(TI=1) 出现
TI=0;
SBUF=0x30+user_pass[i];
while(!TI);//等待发送完成信号(TI=1) 出现
TI=0;
}
}
void send_code()
{
get_rand();
Uart1Sends("AT+CMGF=1\r\n");
Delay10ms(200);//延时 2 秒
Uart1Sends("AT+CSCS=\"UCS2\"\r\n");
Delay10ms(200);//延时 2 秒
Uart1Sends("AT+CSCA?\r\n");
Delay10ms(200);//延时 2 秒
Uart1Sends("AT+CSMP=\"17,167,0,24\"\r\n");
Delay10ms(200);//延时 2 秒
//15813366585
Uart1Sends("AT+CMGS=\"00310035003800310033003300360036003500380035\"\r\n");//
此处修改为对
Delay10ms(200);//延时 2 秒
Uart1Sends("8BF753D65FEB90129A8C8BC17801");
pass_word();
// Uart1Sends("9A8C8BC17801");//修改短信内容
// Uart1Sends("00310033003300330033003300330039003200340033");//修改短信内容
Delay10ms(200);//延时 2 秒
Uart1Send(0x1a);
Delay10ms(200);//延时 2 秒
}
void main(void)
{
unsigned char j=0,z=0,x=0;
UsartConfiguration();
// TMOD = 0X01; //设置定时器 T0 16 位
// EA = 1; //打开中断
// ET0 = 1; //打开 TO 定时器
// TR0 = 1; //开启中断
// TH0 = (65536-5000)/256;
// TL0 = (65536-5000)%256;
time = 0;
BELL = 0;
power = 0;
LcdInit();
error = 0;
Delay10ms(50);
i=0;
LcdWriteCom(0x01); //清屏
interface_dist(); //友好界面显示
Delay10ms(50);
display(); //显示
while(1)
{
KeyDown();
if(num == 10)
{
input_pass(); //输入密码
if(error == 0)
{
LcdWriteCom(0x01); //清屏
one_data(" WELCOME ");
two_data(" SEND MESSAGE ");
display(); //显示
send_code();
LcdWriteCom(0x01); //清屏
one_data(" WELCOME ");
two_data(" SEND SUCCESS ");
display(); //显示
Delay10ms(200);
}
}
LcdWriteCom(0x01); //清屏
interface_dist(); //友好界面显示
Delay10ms(50);
display(); //显示
if(num==12)
{
user_input();
}
}
}


4 实现效果

在这里插入图片描述

在这里插入图片描述

5 最后

包含内容

在这里插入图片描述

🧿 项目分享:见文末!

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于51单片机智能垃圾桶是一种利用单片机技术实现智能化管理的垃圾分类设备。综合应用了电子技术、传感技术和嵌入式系统设计原理。 该智能垃圾桶的主要构成包括:51单片机、各类传感器、电机和开关电源等。通过传感器感知垃圾量、环境温度和湿度等数据,并通过单片机进行实时处理和反馈控制,实现对垃圾桶的智能管理和控制。 在工作原理方面,首先,传感器感知垃圾桶内的垃圾量,一旦达到一定阀值,会触发电机的工作,将垃圾桶内的垃圾自动倾倒。同时,传感器还能感知环境温度和湿度等信息,并通过单片机实时监控和控制,例如当环境温度过高或湿度过大时,可以触发报警系统。 在源码方面,基于51单片机智能垃圾桶需要编写相应的嵌入式程序,实现传感器的数据采集和控制信号的输出等功能。根据具体需求,可以使用C语言或汇编语言进行编程。源码的编写需要根据具体的硬件电路连接和传感器的驱动来实现相应的功能。 原理图和PCB设计则是将电路连线连接和元件布局等图纸化的产物。根据垃圾桶的具体需求,可以设计相应的硬件电路,确定连接关系和元件的布局。通过原理图和PCB设计,可以准确地制作出相应的硬件电路板。 综上所述,基于51单片机智能垃圾桶的设计实现了垃圾的自动分类和自动清理功能,为垃圾处理提供了便利。该垃圾桶的源码、原理图和PCB设计非常重要,它们直接决定了垃圾桶的功能和性能。因此,源码的编写和硬件设计需要经过仔细考虑和实验验证,以确保垃圾桶的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值