版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、工程学11年级个人项目手机远程控制自动收取快递装置摘要:随着互联网时代到来,人们对网络购物接受度逐渐提高,物流支付等配套服务不断完善,各类网购平台如雨后春笋般蓬勃发展。网络购物逐渐成为了人们的一种生活方式,伴随而来的是快递邮件爆炸性地增加。怎样使物流中断的消费者自动化信息化成为时下物流业亟待思考的一个问题。本课题,就将以提升收取快递的便捷度,帮物业前台和买主提供方便为目的,设计一个能够自动检验快递物品,并收发快递,远程付款的工具箱。本课题以短信为方式联系货主与装置,达到远程输入、付款、与快递公司联系收发货等功能。并将快递信息建立成信息库,管理快递的收发和记录。既使得人们收发快递变得简单、高效、
2、准确,也有利于提高物流公司的分发系统管理,使其更高效。让物流系统的信息化做到终端、做得完整。关键词:手机、快递、信息库课题由来: 这个课题,源于我自己的生活经验。有好几次,我在淘宝网上买东西,买家迟迟不发货,等他发货了,我却人在外地,根本赶不回来收货,弄的快递员来了好几次,也没找到我人,最后只好退件给卖家。还有一次,快递到货,事先没有沟通好,每次给我打电话,我都在上课,没有接到,一连几天,发短信过来十分不耐烦,最后甚至把我的货给吞了。这让我意识到,制作自动收取快递的工具的可行性和实用性,由此引发了这个课题的灵感。网购如今日益风行,面对新的市场发展格局,物业服务企业在做好基础服务的同时,也能做好
3、快递代收服务。随着互联网时代到来,人们对网络购物接受度逐渐提高,物流支付等配套服务不断完善,各类网购平台如雨后春笋般蓬勃发展。网络购物逐渐成为了人们的一种生活方式,伴随而来的是快递邮件爆炸性地增加。本课题,就将以提升收取快递的便捷度,帮物业前台和买主提供方便为目的,设计一个能够自动检验快递物品,并收取快递,远程付款的工具箱。物主可以根据自己的需求购买工具箱,也可以通过物业或其他机构统一购买和管理。可以在别墅或郊外等人口疏密,独门独栋的地方分散式地摆放但统一管理,也可以在小区或办公楼等人口稠密的地方根据需求统一置柜并管理。研究目的:简单地说就是设计并成功制作出能够自动收发快递的工具箱。其基本功能
4、有: (1)识别短信输入的快递单号并与键盘输入的单号进行对比,实现开门(2)货主可以在拍下货品后,远程通过手机把货品信息如快递单号等输入到箱子的信息库里。(3)信息库能记录所有的快递收发信息(单号、时间、地点等)(4)把箱子设计成可以自由安装式的。在已建好的住房内,货主自行安装快递箱。而在待建的住房中,可以采用如图一所示的方法开发一个信报间,专门收发快递和信件。(图一为其底楼平面图)此外,箱子可以设计成各种大小款式,当快递员投递时,把单号输入到用于管理的单片机或pc机内,由其提供可供选择的箱号,有快递员根据货品大小自由选择。(可供选择的箱号由箱主、箱内装货情况等因素来决定。)研究方法与过程:1
5、.研究工具与材料stc90c516rd+单片机一台、赛瑞 xg-03 dc12v/24v小电锁一把、工业级 sim900a gsm/gprs模块一个、箱一个、pvc塑料板一块、矩阵键盘、液晶屏幕一块2.研究步骤及方案:a:学习单片机的基本知识,挑选单片机型号stc90c516rd+系列单片机是宏晶科技推出的新一代超*/高速/低功耗的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可任意选择,内部集成max810专用复位电路,时钟频率在12mhz以下时,复位脚可直接接地。1.增强型6 时钟/ 机器周期,12 时钟/ 机器周期 8051 cpu2.工作电压:5.5v
6、 - 3.8v(5v 单片机)/3.8v - 2.4v(3v 单片机)3.工作频率范围:0-40mhz,相当于普通8051的 080mhz.4.用户应用程序空间 4k/6k/7k/8k/10k/12k/13k/16k/32k/40k/48k/56k/ 61k/字节5.片上集成 1280字节/512/256字节 ram6.通用i/o口(35/39 个),复位后为: p1/p2/p3/p4 是准双向口/ 弱上拉(普通8051 传统i/o 口)p0口是开漏输出,作为总线扩展用时,不用加上拉电阻,作为i/o 口用时,需加上拉电阻。7.isp(在系统可编程)/iap(在应用可编程),无需专用编程器 /
7、仿真器可通过串口(p3.0/p3.1)直接下载用户程序,8k 程序3 - 5 秒即可完成一片8.eeprom 功能9.看门狗10.内部集成max810专用复位电路,外部晶体12m以下时,可省外部复位电路,复位脚可直接接地。11.共3个16位定时器/计数器,其中定时器0还可以当成2个8位定时器使用12.外部中断4路,下降沿中断或低电平触发中断,power down模式可由外部中断低电平触发中断方式唤醒13.通用异步串行口(uart),还可用定时器软件实现多个uart14.工作温度范围:0-75/-40-+8515.封装:lqfp-44,pdip-40,plcc-44b:设计开箱方式密码解析开箱密
8、码设定方法:用手机发送”password:#openpd:#”。权限密码设定方法:用手机发送”password:#newpd:#”。开锁通知电话号设定方法:用手机发送” password:#infornum:#。例:password:000000#123456789#开机密码:能打开信箱的密码。权限密码正确才能设定开机密码。开锁通知(防盗功能):开锁成功后向指定手机号发送短信通知设定成功后,模块会回复相应设置成功提示c:设计装置工作方式发快递:用密码打开信箱(密码通过手机以上指令设定),将包裹写好地址相关信息放入信箱。给快递公司打电话索要快递单号,并告知其信箱密码为快递单号。发件人用手机发送短
9、信到信箱手机号码:password:#openpd:#快递员用快递单号为密码打开信箱,取出包裹,扫描快递单号录入取件信息。收快递:快递到达后,快递公司给收件人打电话,收件人向快递公司索要快递单号并告知其信箱密码为快递单号。收件人用手机发送短信到信箱手机号码:password:#openpd:#快递员用快递单号打开信箱,将包裹放入信箱。收件人用快递单号打开信箱,取出包裹。 d:设计研究电路图(左上)(右上)(左下)(右下)e:根据电路图编写个部分的头文件和函数包括:1602.c1602.h显示器程序代码tc35.ctc35.h无线模块代码usart.cusart.h串口代码moto.cmoto.
10、h门锁控制代码key4x4.ckey4x4.h4x4按键盘代码main.c主函数代码g:购置通信模块等设备并调试h:组装入箱四、研究结果、结论和分析:4.1研究结果:4.2结论和分析:5收获和体会 在本次研究和实验活动中,我们小组收获颇丰,获取了宝贵的以科学的态度、严谨作风、以及怀揣社会责任感来进行研究和实验的经验,为以后的研究之路提供了无价的财富,引发了我们对科学事业的兴趣,也使我们拥有了一种严谨的生活态度,以及用科学的眼光来看待一切的习惯,为我们以后的科研道路铺好了石基。6参考文献新概念51单片机c语言教程入门、提高、开发、拓展全攻略 郭天祥编著原始材料:图1图2附录:头文件及函数代码:e
11、.1显示器程序代码e.1.1头文件# ifndef _lcd1602_h_# define _lcd1602_h_#include stc12.h#include #define uchar unsigned char#define uint unsigned int/lcd1602操作位定义#define dataport p0sbit rs = p20; /寄存器选择 0:指令寄存器 1:数据寄存器sbit rw = p21; /读写控制 0:写 1:读sbit en = p22; /读写数据使能 0:停止 1:启动/1602屏地址定义#define line1 0x80 /第一行地址#d
12、efine line2 0xc0 /第二行地址/外部函数void lcd1602_writecmd(unsigned char cmd);void lcd1602_writedat(unsigned char dat);void lcd1602_checkbusy(void);void lcd1602_init(void);void displaystr(uchar x,uchar y, uchar *listdata);void cleansreen();# endife.1.2函数#include 1602.h#include /*函数名称:delay_us功 能:stc 1t单片机1us
13、延时程序入口参数:us:延时的微秒数返 回 值:无备 注:内部时钟11.0592mhz*/static void delay_us(unsigned int us) while( us-) _nop_(); /*函数名称:delay_ms功 能:stc 1t单片机1ms延时程序入口参数:ms:延时的毫秒数返 回 值:无备 注:示波器实测1.05ms 内部时钟11.0592mhz*/static void delay_ms(unsigned int ms) unsigned int i; while( (ms-) != 0) for(i = 0; i 600; i+); /* 函 数 名: lc
14、d1602_writecmd* 函数功能: 向lcd1602写指令* 入口参数: cmd:指令* 返 回: 无* 备 注:无*/void lcd1602_writecmd(unsigned char cmd) en=0; rs=0; rw=0; delay_us(10); en=1; delay_us(10); dataport=cmd; delay_us(10); en=0;/*函数名称:lcd1602_writedat功 能:向lcd1602写数据入口参数:dat:数据返 回 值:无备 注:无*/void lcd1602_writedat(unsigned char dat) en=0;
15、rs=1; rw=0; delay_us(10); en=1; delay_us(10); dataport=dat; delay_us(10); en=0;/*函数名称:lcd1602_checkbusy功 能:检测lcd1602忙信号入口参数:无返 回 值:无备 注:无*/void lcd1602_checkbusy(void) unsigned char temp;dataport=0xff; /做输入先置高,12c系列单片机需转换端口模式 while(1) en=0; rs=0; rw=1; delay_us(10); en=1; delay_us(10); temp=dataport
16、; /读取忙通道数据 delay_us(10); en=0; if(temp&0x80)!=0x80) break; /*函数名称:lcd1602_init功 能:lcd1602初始化入口参数:无返 回 值:无备 注:详见数据手册定义。*/void lcd1602_init(void) delay_ms(15); /上电延时15ms lcd1602_writecmd(0x38); /写显示指令(不检测忙信号) delay_ms(5); lcd1602_writecmd(0x38); /写显示指令(不检测忙信号) delay_ms(5); lcd1602_writecmd(0x38); /写显示
17、指令(不检测忙信号) lcd1602_checkbusy(); lcd1602_writecmd(0x38); /写显示指令 lcd1602_checkbusy(); lcd1602_writecmd(0x08); /显示关闭 lcd1602_checkbusy(); lcd1602_writecmd(0x01); /清屏 lcd1602_checkbusy(); lcd1602_writecmd(0x06); /显示光标移动设置 lcd1602_checkbusy(); delay_ms(5); lcd1602_writecmd(0x0c); /显示开及光标设置 void displayst
18、r(uchar x,uchar y, uchar *listdata) uchar i=0;if(y=0&x8) lcd1602_checkbusy();lcd1602_writecmd(0x80+x);for(i=0;istrlen(listdata);i+ )lcd1602_checkbusy();/判断忙信号lcd1602_writedat(listdatai); elseif(y=1&x8)lcd1602_writecmd(0x80+0x40+x);for(i=0;istrlen(listdata);i+ )lcd1602_checkbusy();lcd1602_writedat(li
19、stdatai); else return;void cleansreen() lcd1602_writecmd(0x01);e.2无线模块代码e.2.1头文件#include #define uchar unsigned char#define uint unsigned int#define rxbuf_n70/定义接收缓冲区大小为25bytes#define idlen 15 /快递单号最大长度#define pdlen 10 /权限密码最大长度extern char rxbuf;/定义串口接收数据缓冲区extern uchar rxpoint;/rx缓冲区指针extern uchar
20、phonenum;/手机号码extern uchar *mscontent;/短信内容extern bit recflag;extern uchar adminpdpdlen; /6位权限密码extern uchar expressididlen; /快递单号void starttc35i();/启动tc35ivoid powndowntc35i();/关闭tc35i /前提先初始化串口 void send_message(uchar *dialnum,uchar *text);/向指定号码发送短信 void send_atcmd(uchar *cmd );void readmessage()
21、;uchar compare(uchar* pw,uchar* input); /密码比较e.2.2函数#include tc35.h#include usart.h#include /sbit igt=p23;/sbit pd=p24;char rxbufrxbuf_n=0;/定义串口接收数据缓冲区uchar rxpoint;/rx缓冲区指针bit recflag=0;/用来等待发送信息结束后,接收tc35响应的标志uchar phonenum15/主人手机号码uchar adminpdpdlen=000000#; /6位权限密码uchar expressididl
22、en=123456789#; /快递单号 uchar *mscontent=cxhf;/查询时间uchar code *infomessage=at+cnmi=2,1r;/开启短信提示 a t+cmgf=1uchar code *txtmode=at+cmgf=1r; /以英文模式发送 0:pud模式uchar code *netstatus=at+cops?r;/发送指令查询当前服务状态 china mobile 正常 0无信号/*ate0rn /关闭回显*/char *lookfor_str(uchar *s, uchar *t);void send_at(void); void set_
23、mode(uchar mode);uchar transmittext(uchar *dialnum,uchar *text);/查找字符串,在s中查找t/返 回 值: s_temp(t在s中的位置)成功 0失败char *lookfor_str(uchar *s, uchar *t)uchar *s_temp; uchar *m_temp; uchar *t_temp; if (s = 0 |t = 0) return 0;for (s_temp = s; *s_temp != 0; s_temp+)m_temp = s_temp;for (t_temp = t; *t_temp = *m_
24、temp; t_temp+, m_temp+);if (*t_temp = 0) return s_temp;return 0;/*void starttc35i() igt=0; delay_ms(100); igt=1;/此处选用pnp管更保适,因为开机默认是io高电平 npn delay_ms(1000); /至少维持100ms igt=0;void powndowntc35i()/关闭tc35i pd=0;/此处选用pnp管更保适,因为开机默认是io高电平 delay_ms(4000); / 至少维持3.5秒 pd=1; */发送at联机指令,测试是否连接正确void send_at(
25、void) uchar *p;uchar i=1; while(i-)/测试10次,在某一次成功就退出rxpoint=0;/buffer指针清0sendstring(atr);/发送at回车 es=1; /必须中断 串口中断应许 等待应答ok delay_ms(100);/等待接受数据完成while(recflag=0);recflag=0;delay_ms(300); p=lookfor_str(rxbuf,ok); /接收到的数据存在rsbuf if(p!=0) /接收到okdelay_ms(1000);break;delay_ms(500);/发送at指令,以“ok”回复void sen
26、d_atcmd(uchar *cmd ) uchar *p;uchar i=1; while(i-)/测试10次,在某一次成功就退出rxpoint=0;/buffer指针清0memset(rxbuf,0,sizeof(rxbuf);sendstring(cmd);/发送at回车 es=1; /必须中断 串口中断应许 等待应答ok delay_ms(1000);/等待接受数据完成while(recflag=0);recflag=0;delay_ms(300); p=lookfor_str(rxbuf,ok); /接收到的数据存在rsbuf if(p!=0) /接收到okdelay_ms(1000
27、);break;delay_ms(500);/设置短信模式 1:text模式 0:pdu模式/串口发送数组命令到tc35,at+cmgf=1void set_mode(uchar mode) uchar *p,i=1;while(i-)/测试10次,在某一次成功就退出rxpoint=0;/buffer指针清0memset(rxbuf,0,sizeof(rxbuf);if(mode) sendstring(at+cmgf=1r);/设置短消息模式 1 textelse sendstring(at+cmgf=0r);/设置短消息模式 pdu模式 es=1; /必须中断 串口中断应许 等待应答ok
28、delay_ms(300);/等待接受数据完成while(recflag=0);recflag=0;delay_ms(300); p=lookfor_str(rxbuf,ok); /接收到的数据存在rsbuf if(p!=0) /接收到okdelay_ms(1000);break;delay_ms(500);/发送号码void send_phonenum(uchar *str)uchar i=0;while(*str)sendasc(*str) ;str+;i+;if(i=14) break;/只发送14个/发送text短信 at+cmgs=+8613760602242/*dialnum 目的
29、号码 *text短信内容/返回:1 发送成功 0 发送失败 uchar transmittext(uchar *dialnum,uchar *text) uchar i=1,j=10;uchar *p;while(i-)rxpoint=0; /buffer指针清0memset(rxbuf,0,sizeof(rxbuf);sendstring(at+cmgs=);/信息发送指令 at+cmgs=+8613760602242sendasc();send_phonenum(dialnum); /号码sendasc();sendasc(r);/回车while(recflag=0);recflag=0;
30、delay_ms(3000);p=lookfor_str(rxbuf,);/if(p!=0)/如果接受到 发送textrxpoint=0; /清空接收缓冲区sendstring(text);/发送短信内容sendstring(x1ar);/x1a结束符(相当ctrl+z) r回车符while(recflag=0);recflag=0;delay_ms(5000);/这里要延时足够长时间,否则会读取错误p=lookfor_str(rxbuf,ok);/查找okif(p!=0)/发送成功return 1;else delay_ms(1000);return 0;/完整的短信发送函数/dialnum
31、:手机号码 text:短信内容void send_message(uchar *dialnum,uchar *text)send_at();/发送atset_mode(1);/设置短信模式:texttransmittext(dialnum,text);/设置uchar compare(uchar* pw,uchar* input) uchar i,res=1; for(i=0;i 发送textp=lookfor_str(rxbuf,password); / 对比权限密码 if(p!=0) p+=9;if(compare(adminpd,p)/ 如果权限密码正确 adminpdpdlen; /6
32、位权限密码 / expressididlen; /快递单号 p=lookfor_str(rxbuf,openpd); /用快递单号作为开箱密码if(p!=0)p+=7;for(i=0;iidlen;i+)if(*p=#)expressidi=#; /添加结束符send_message(phonenum,setopenpassword ok);/防盗号码更改成功后向设定的号码发送设定成功提示break;expressidi=*p+;p=lookfor_str(rxbuf,newpd); /用快递单号作为开箱密码if(p!=0)p+=7;for(i=0;ipdlen;i+)if(*p=#)expr
33、essidi=#; /添加结束符send_message(phonenum,setnewadminpassword ok);/防盗号码更改成功后向设定的号码发送设定成功提示break;adminpdi=*p+; p=lookfor_str(rxbuf,infornum); / 修改防盗通知手机号 if(p!=0) p+=9;for(i=0;i12;i+)if(*p=#)send_message(phonenum,setinformnomber ok);/防盗号码更改成功后向设定的号码发送设定成功提示break; phonenumi=*p+; sendstring(at+cmgd=);/ 删除当
34、前短信sendasc(num); /号码sendasc(r);delay_ms(1000); sendstring(at+cmgd=1,4r);/删除全部短信 e.3串口代码e.3.1头文件#include #define uchar unsigned char#define uint unsigned int/usart的函数 void delay_ms(unsigned int time); void usart_init(void); void sendasc(uchar d); void sendstring(uchar *str);e.3.2函数#include tc35.h#inc
35、lude usart.h/延时函数ms(condition:11.0592m hse)void delay_ms(unsigned int time)unsigned char tres;for(;time0;time-)tres=1500;while(tres-); /串口初始化void usart_init() scon=0x50;/串口:方式1,接受允许tmod=0x21;/定时器1:模式2,8位自动重装模式,用于产生波特率 th1=0xfd; /初值设定 9600bittl1=0xfd; tr1=1; /开启定时器1 /ti=1;/特别注意:强行使上次数据发送结束,才开始printf(
36、不信可以试试去掉本句试试) ea=1;es=1; void sendasc(uchar d)sbuf=d;while(!ti);ti=0;void sendstring(uchar *str)while(*str)sendasc(*str) ;str+;/ 通讯中断接收程序 中断函数无返回值void usart_interrupt(void) interrupt 4 /放在这里 和放在main()里面是一样的ea=0; recflag=1; if(rxpoint0;i-);void delayms(int i)for(i=i/2;i0;i-) delayus(1300);void delays
37、(int i)for(;i0;i-) delayms(1000);void openlock()/打开电磁锁 jdq=on; delays(20); jdq=off;e.5按键盘代码e.5.1头文件#include stc12.h#include#define uchar unsigned char#define uint unsigned int#define start 12#define ok 14#define cancel 13#define keyport p1sbit beep=p36;/蜂鸣器extern unsigned char keynum; /键值 0-16unsign
38、ed char keyscan();e.5.2函数#include key4x4.hunsigned char keynum=16,key;void delay(uint xms) /延时函数uint i, j;for(i=xms;i0;i-) for(j=110;j0;j-); unsigned char readkey(void) /按键扫描程序 keyport.0-keyport.3为行线 keyport.4-keyport.7为列线 unsigned char rcode, ccode; keyport = 0xf0; / 发全0行扫描码,列线输入 if(keyport&0xf0) !
39、= 0xf0) / 若有键按下 delay(10);/ 延时去抖动 if(keyport&0xf0) != 0xf0) rcode = 0xfe; / 逐行扫描初值 while(rcode&0x10) != 0) keyport = rcode; / 输出行扫描码 if(keyport&0xf0) != 0xf0) / 本行有键按下 ccode = (keyport&0xf0)|0x0f; while(keyport&0xf0) != 0xf0) /等待键释放 beep=0;/ display(); beep=1; return (rcode) + (ccode); / 返回键编码 else
40、rcode = (rcode1)|0x01; / 行扫描码左移一位 while(keyport!=0xff); return 0; / 无键按下,返回值为0unsigned char keydeal(unsigned char key) if(key!=0) switch(key) case 0x11: keynum=0; break; case 0x21: keynum=1; break; case 0x41: keynum=2; break; case 0x81: keynum=3;break; case 0x12: keynum=4;break; case 0x22: keynum=5;
41、break; case 0x42: keynum=6;break; case 0x82: keynum=7; break; case 0x14: keynum=8; break; case 0x24: keynum=9; break; case 0x44: keynum=*; break; case 0x84: keynum=#; break; case 0x18: keynum=start; break; case 0x28: keynum=ok; break; case 0x48: keynum=cancel; break; case 0x88: keynum=15; break; default: break; else keynum=16
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 屋里尖尖角课件
- 西京学院《影视鉴赏》2023-2024学年第一学期期末试卷
- 西京学院《数据采集与预处理》2022-2023学年期末试卷
- 孝亲敬老,从我做起
- 西京学院《机器学习》2023-2024学年期末试卷
- 2024-2025学年高二物理举一反三系列1.4质谱仪和回旋加速器((含答案))
- 爆米花课件背景
- Module 4单元备课(说课稿)-2024-2025学年外研版(一起)英语三年级上册
- 西昌学院《土地评价学》2022-2023学年第一学期期末试卷
- 天然气净化高级单选题复习试题有答案
- 大学生职业生涯规划成品
- (高清版)DB42T 2179-2024 装配式建筑评价标准
- DL∕T 796-2012 风力发电场安全规程
- 2024广西继续教育公需科目(高质量共建“一带一路”)
- 2024年国家公务员考试行测真题完整版
- MOOC 数学文化十讲-南开大学 中国大学慕课答案
- 写作与沟通智慧树知到课后章节答案2023年下杭州师范大学
- 汉语拼音字母表默写表
- 森林施工组织设计(完整版)
- 304不锈钢冷轧剥片缺陷分析及控制
- 立体停车库详解
评论
0/150
提交评论