0 前言
🔥
这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是
🚩 毕业设计 基于单片机的GSM智能快递柜设计(源码+硬件+论文)
🥇学长这里给一个题目综合评分(每项满分5分)
- 难度系数:3分
- 工作量:3分
- 创新点:4分
🧿 项目分享:见文末!文章来源地址https://www.toymoban.com/news/detail-860975.html
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 最后
包含内容
文章来源:https://www.toymoban.com/news/detail-860975.html
🧿 项目分享:见文末!
到了这里,关于嵌入式毕设分享 基于单片机的GSM智能快递柜设计(源码+硬件+论文)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!