历史上的今天
今天是:2024年12月31日(星期二)
2021年12月31日 | 基于51单片机的GSM智能快递柜设计
2021-12-31 来源:eefocus
一.硬件方案
本设计基于STC89C52单片机的快递货柜模拟设计GSM短信发送验证码。该装置主要由单片机、电源模块、继电器电路、LED灯光报警模块、控制模块、GSM模块、键盘模块、LCD显示模块、机械开关等组成,借助成熟的GSM移动网络,当货物柜检测到快递的存在,会自动发送验证码给用户手机上,真正实现了远距离、高效率传递信息。
主要由51单片机+LCD1602液晶+GSM模块+按键+继电器设计而成;如图:

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

四.软件设计
主程序源码
void main (void)
{
unsigned char i;
Init_Timer0(); //定时器0初始化
UART_Init();
P1=0xff;
LCD_Init(); //初始化液晶
DelayMs(20); //延时有助于稳定
LCD_Clear();
sprintf(displaytemp,"AutomaticMachine");//打印输入界面
LCD_Write_String(0,0,displaytemp);//显示第一行
sprintf(displaytemp,"____ pass word ");//打印输入值 提示电机确定
LCD_Write_String(0,1,displaytemp);//显示第二行
LED=0;
for(i=0;i<20;i++) //短暂延时gsm稳定
{DelayMs(50);}
// SendStr("ready ok!",9);
RELAY=1;
LED=1;
while(1) //主循环
{
KeyScanDeal();
if(KEYFAS==0) //按键按下
{
DelayMs(20); //消除抖动
if(KEYFAS==0)
{
while(KEYFAS==0); //按键送掉发送验证码
SendMsg=TRUE; //发送消息置位
}
}
if(SendMsg==TRUE)
{
LED=0;
SendMsg=FALSE; //发送消息置位取消
SendStr("AT+CMGF=1rn",11); //设置字符
for(i=0;i<20;i++) //延时
{DelayMs(50);}
SendStr("AT+CSCS="GSM"rn",15); //设置gsm格式
for(i=0;i<20;i++) //延时
{DelayMs(50);}
SendStr("AT+CMGS="+8618799697649"rn",26);//此处可修改信息接收手机的号码 第一个手机号
for(i=0;i<2;i++) //延时
{DelayMs(50);}
SendStr("The PW :",8); //此处可修改信息,9代表字节数
if(PwCount==0)
{remempw[0]=pw01[0];remempw[1]=pw01[1];remempw[2]=pw01[2];remempw[3]=pw01[3];} //记录发送出去的号码
else if(PwCount==1)
{remempw[0]=pw02[0];remempw[1]=pw02[1];remempw[2]=pw02[2];remempw[3]=pw02[3];} //记录发送出去的号码
else if(PwCount==2)
{remempw[0]=pw03[0];remempw[1]=pw03[1];remempw[2]=pw03[2];remempw[3]=pw03[3];} //记录发送出去的号码
else if(PwCount==3)
{remempw[0]=pw04[0];remempw[1]=pw04[1];remempw[2]=pw04[2];remempw[3]=pw04[3];} //记录发送出去的号码
else if(PwCount==4)
{remempw[0]=pw05[0];remempw[1]=pw05[1];remempw[2]=pw05[2];remempw[3]=pw05[3];} //记录发送出去的号码
else if(PwCount==5)
{remempw[0]=pw06[0];remempw[1]=pw06[1];remempw[2]=pw06[2];remempw[3]=pw06[3];} //记录发送出去的号码
else if(PwCount==6)
{remempw[0]=pw07[0];remempw[1]=pw07[1];remempw[2]=pw07[2];remempw[3]=pw07[3];} //记录发送出去的号码
SendStr(remempw,4);
for(i=0;i<2;i++) //延时
{DelayMs(50);}
SendByte(0x1a);
for(i=0;i<20;i++) //延时
{DelayMs(50);}
// SendStr("AT+CMGS="+8618119677903"rn",26);//此处可修改信息接收手机的号码 第二个手机号
// for(i=0;i<2;i++) //延时
// {DelayMs(50);}
// SendStr("The PW :",8); //此处可修改信息,9代表字节数
// SendStr(remempw,4);
// for(i=0;i<2;i++) //延时
// {DelayMs(50);}
// SendByte(0x1a);
// for(i=0;i<20;i++) //延时
// {DelayMs(50);}
LED=1;
}
}
}
史海拾趣
|
在SPI驱动里面接收SPI数据,怎么及时处理SPI数据缓冲区才不会让一帧数据跟下一帧数据起冲突。 在SPI驱动里面接收SPI数据,怎么及时处理SPI数据缓冲区才不会让一帧数据跟下一帧数据起冲突。… 查看全部问答> |
|
有一台控制器设备,有LAN接口,IP地址是200.200.200.* 直接通过网线连接到电脑上,电脑的IP地址设为200.200.200.*,DNS是255.255.255.0网关设为192.168.1.1则可以连接到控制器,若把IP地址和网关设为其他的却不行,控制器软件只有一个IP地址,把IP ...… 查看全部问答> |
|
麻烦高手看一下,我用的是增强型uart,pc发送一个“s”给单片机,单片机受到后会给pc发送一个response at 9600 baud 。不知程序是否有问题??? 程序如下: #include \"reg932.h\" #define uchar unsigned char uchar temp; char text[]= ...… 查看全部问答> |
|
我修改了 FileDisk.c 这个虚拟磁盘源码,把它改成像还原精灵差不多。 功能:把对虚拟磁盘的写操作定向到另一个文件。 这样下次虚拟出来的磁盘就还是原来的。 程序设计:1、申请一块内存记录有过写操作的扇区号 2、对于写操作,写入另一临时文件 ...… 查看全部问答> |
|
最近又在电子元件技术网上看一个产品介绍中看到了这样的说法“本产品采用16位高精度ADC”,看到这样的文章我真想把这句话改为“本产品采用16位,高精度ADC”。因为实际上16位是分辨率,分辨率和转换精度是一个有联系但本质不同的概念。这也 ...… 查看全部问答> |




