文章目录
1 简介2 绪论2.1 课题背景与目的3 系统设计3.1 系统架构3.2 硬件部分3.2.1 GMS模块3.2.2 按键模块3.2.3 显示模块3.2.4 继电器模块3.2.5 蜂鸣器模块3.3 软件部分3.3.1 主程序设计3.3.2 GMS程序设计3.4 实现效果3.5 部分相关代码1 简介
🔥 Hi,大家好,这里是丹成学长的毕设系列文章!
🔥 对毕设有任何疑问都可以问学长哦!
这两年开始,各个学校对毕设的要求越来越高,难度也越来越大… 毕业设计耗费时间,耗费精力,甚至有些题目即使是专业的老师或者硕士生也需要很长时间,所以一旦发现问题,一定要提前准备,避免到后面措手不及,草草了事。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的新项目是
🚩基于单片机的智能快递柜设计与实现
🥇学长这里给一个题目综合评分(每项满分5分)
难度系数:4分工作量:4分创新点:3分
🧿选题指导, 项目分享:
/molodi/article/details/125933857
2 绪论
2.1 课题背景与目的
一般来说,传统快递服务方式是人对人,即快递员进行揽件派送,与签收人进行面对面签收,确认无误后服务终止。这种传统快递方式虽然保证了包裹的一定安全,但效率低下,花费了双方大量的时间成本。而智能快递箱的诞生使得快递服务变得高效,它不再是门对门,或者是人对人的服务方式,智能快递箱就好比是中介,使得配送方和接收方的时间成本大大减少,更加自由。现在智能快递箱的应用在国内逐渐广泛。
智能快递箱是基于GSM与单片机系统下的一款全天24小时自助服务的服务设备。智能快递箱以单片机STC89C52作为最小控制系统,GSM模块能够插入手机卡,快递人员输入密码进行解锁放柜处理,然后通过矩阵键盘输入手机号进行短信发送,完成将物品投递入柜的功能。取件人通过手机收到的短信,输入对应验证码能够解锁快递箱门,拿取对应快递,完成取件功能。
3 系统设计
智能快递箱设计是以单片机作为最小的控制系统,由GSM模块插入的手机移动通信卡辅助实现整个系统运行。在矩阵键盘上输入手机号发送短信,输入对应验证码可以解锁对应柜子编号,成功取得快递。
该设计的技术难点有以下几个:
(1)矩阵键盘是否能够完成对11位手机号码和6位验证码的正确输入。
(2)取件人的手机号码输入完成后,GSM模块是否能够自动向取件人对应的手机发送取件码。
(3)输入正确的取件码后,单片机需要对电控锁进行正确打开。成功的依据是显示屏能够显示之前的编号。
(4)二次开发时,设计能力有限可能无法发挥产品的全部功能。
3.1 系统架构
(1) 该项目主要分为硬件系统与软件系统两个部分组成。 硬件系统由控制平台、 显示模块、 GSM 模块等组成。 软件系统则有 KEIL 软件上编译 C 程序以及刻录软件构成。
(2) 在掌握单片机工作原理的基础上, 还需要雄厚的 C 语言编译技术作为知识基底, 利用 KEIL 程序, 在其上面编写 C 语言, 以实现本次设计所需要的功能。
3.2 硬件部分
3.2.1 GMS模块
GSM 模块是将 GSM 射频芯片、 基带处理芯片、 存储器、 功放器件等集成在一块线路板上, 具有独立的操作系统、 GSM 射频处理、 基带处理并提供标准接口的功能模块, 包括发送短信, 语音通话以及数据传输的基本通信功能。
3.2.2 按键模块
3.2.3 显示模块
3.2.4 继电器模块
3.2.5 蜂鸣器模块
3.3 软件部分
3.3.1 主程序设计
主程序主要要解决两部分问题, 一是快递员存储快递, 二是取件人拿去快递。
快递员存储快递后需输入命令, 即输入用户11 位手机号码。 GSM 模块接收到 AT 指令后, 生成验证码并将指令转化成信号发送至单片机上。
单片机接收到信号, 生成信息发送至取件人的手机上。 取件人可以依据收到的短信中的验证码进行取件步骤, 如若输入正确的验证码, 快递箱门将会成功打开, 继续等下一个指令; 否则, LED 显示灯将会显示警告并且蜂鸣器电路会工作进行报警。
3.3.2 GMS程序设计
GSM 程序设计主要解决的问题就是收到 AT 指令时, 能够成功生成验证码及发送验证码到对应收件人的手机上。 在设置短息的号码时, 因为手机号码为11 位, 所以我在编写程序时, 将两位数字位置颠倒, 确保了取件人可以接收到消息。
3.4 实现效果
3.5 部分相关代码
/************************************************作者:丹成学长,Q746876041************************************************/// 键盘部分代码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; //设置为工作方式 1TMOD=0X20; //设置计数器工作方式 2TH1=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 秒//15813366585Uart1Sends("AT+CMGS=\"00310035003800310033003300360036003500380035\"\r\n");//此处修改为对Delay10ms(200);//延时 2 秒Uart1Sends("8BF753D65FEB90129A8C8BC17801");pass_word();// Uart1Sends("9A8C8BC17801");//修改短信内容// Uart1Sends("0031003300330033003300330033003900340033");//修改短信内容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();}}}/*******************************************************************篇幅有限,只展示部分代码********************************************************************/
🧿选题指导, 项目分享:
/molodi/article/details/125933857
如果觉得《【毕业设计】单片机智能快递柜系统 - stm32 嵌入式 物联网》对你有帮助,请点赞、收藏,并留下你的观点哦!