基于-51单片机GPRS手机教程.doc
《基于-51单片机GPRS手机教程.doc》由会员分享,可在线阅读,更多相关《基于-51单片机GPRS手机教程.doc(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、- -基于51单片机GPRS打等功能的实现!血顶猎鹰大家好,小弟花了大半个月时间折腾出使用51单片机和TC35进展打,发短信,收到短信后回一个短信给发信人谁发的就回给谁,不是指特定的一个人!网上好多程序都是不能用的,这个程序经本人实际调试过,可以使用!先介绍下功能:1. 按下第一个按钮打给程序中指定的手机2. 按下第二个键发温度值给程序中指定的手机3. 按下第三个键发测试短信给程序中指定的手机4. 随便来个手机发一个bang给和单片机连在一起的手机卡,手机卡回ph=0.7给你的手机,发别的字符就不会这个相当于密码,当然这个bang和ph=0.7这个是你自己设的。下面看看电路图:右边那个长长的就
2、是TC35的接口了,第15脚接单片机,其他的按着连就行了。处于方便,1602就这样接了,还有按钮怎么接程序看看就知道了,红笔是我修改的,你懂的!这些脚和单片机一下,再接下晶振就好了,接下来进入正题。程序如下,程序横向有点长,为了让大家可以看程序方便点就把字体缩小了。里面解释很详细了,程序我是修改别人的,之前不能用,现在可以了。为了便于大家理解,我把几个重要的地方说下打过程mingling(3,AT12);for(x=0;x11;x+)senddata(neirongx); senddata(0x3b);senddata(0x0D);while(sw1=0); senddata(0x0D);/发
3、0x0d停顿打,首先发一些命令准备打,然后输入,在容里面,然后完毕符号,等待按键松开就不打了。发短信的过程ES=0;mingling(8,AT7);for(i=0;i11;i+)senddata(neirongi);senddata(0x0d);delaymm(100);senddata(shi+0x30);senddata(ge+0x30); /发送数据容senddata(0x20);senddata(0x1a);senddata(0x0d);ES=1;串口中断关不关都没事的,一般不会冲突。过程和打的差不多,只是命令有点不同,你懂的!承受短信过程先检测下有没短信来receive_ready(
4、);来了的话那个TC35通过串口给单片机发东西,我看了下东西是这个:&+CMTI: SM,10 10表示我当前的短信数,说明我之前有9条,加上现在的共10条我们取标志位TI,所以有SystemBuf5=0x54)&SystemBuf6=0x49就表示短信来了,0x54,0x49就是TI的意思,你懂的!来短信了我们准备发出短信, if(receiveready=1) read_message(); receiveready=0; sendready=1; Delay_ms(300); message_read();这里是准备的过程其中void message_read(void) /*准备是否回
5、复短信给目标*/ if(sendready=1)&(SystemBuf5=0x47)&(SystemBuf6=0x52) send=1;就是绕来绕去,你们也可以不绕,这里简单。另外我看了下这个时候数组里面存的东西,用我下面注释了的程序就好了如果你们也想看看 /*write_cmd(0x01);write_cmd(0x80);for(i=64;i80;i+)write_dat(SystemBufi);delaymm(1); write_cmd(0xc0);for(i=80;i91;i+)write_dat(SystemBufi);delaymm(1); while(1);/读出来看下,结果是 /
6、&+CMGR: REC UN 015 /READ,+86151581 1631 /07680,11/06/1 3247 /1,14:01:09+32& 4863 /34567 6479 /8912345678 8089 */看这个小东西把你的手机,发的时间日期,容都记下来存到数组里了,接下来的事情就好办了void readmend(void) /*读取短信容,判断相应指令是否正确*/ uchar i; for(i=0;i4;i+) /将短信容中的指令局部截取出来放到 /mandBuf数组中 mandBufi=SystemBuf64+i; if(mandBuf0=b)&(mandBuf1=a)&
7、(mandBuf2=n)&(mandBuf3=g) /判断指令是否为开发光管指令 write_cmd(0x01); /测试接收write_cmd(0x80);write_dat(b);write_dat(a);write_dat(n);write_dat(g);sendmessage(); /如果发送的指令既不是bang就定义为错误操作,不干别的这里读短信容看看我们的暗号是不是对的,我这里就设置成bang了,如果密码是对的,我们就发短信!上面我们不是看了这个小东西存的东西都放在哪了,看到没,在64开场就是你的容了接下来我们来看看它是怎么发出去的void sendmessage(void) /*
8、发送回复短信指令*/ uchar i;for(i=0;i8;i+) AT_SendNumberi=AT_CMGSi; for(i=8;i19;i+) AT_SendNumberi=SystemBuf18+i;/位置2636 将对方提取用来回复给对方 sendstring(AT_SendNumber);senddata(0x0d);delaymm(100);senddata(P);senddata(H);senddata(=);senddata(7);senddata(.);senddata(0);/容senddata(0x20);senddata(0x1a);senddata(0x0d);De
9、lay_ms(30);看到没,和之前我们发短信的方法是一样的,只不过这里用的是它数组里存的,所在位置2636,很方便看出来的哈,用我上面的显示程序就行了。接下来就是删除短信了,发一个指令还有储存的位置,这里人性化处理,不把你以前存在卡里的短信删掉,删掉的是你放进卡之后发过去的指令,这个是这样实现的。read_message(void)程序执行的时候把位置读走了,但是后来没消掉看到没?在delete_message(void)中我们用一个循环把你的位置放到数组里,然后再删,程序如下for(i=8;i11;i+)AT_deletei=numberbufi-8; 好了,根本也就是这些了,打到这里累死
10、我了!下面是整个程序!大家拿回去用吧。#include#include#define uchar unsigned char#define uint unsigned int#define RxIn 90/定义接收的数组长度为90uchar code AT=AT;/握手信号uchar code ATE=ATE; /关回显uchar code AT_MI=AT+MI=2,1;/设置这组参数来了新信息直接显示到串口,不作存储uchar code AT_CSCA=AT+CSCA=+00;/设置效劳中心AT+CSCA=+00uchar code AT_CMGF=AT+CMGF=1;/设置短信的格式为t
11、ext格式uchar code AT_CMGR=AT+CMGR=;/读取短信指令uchar code AT_CMGS=AT+CMGS=;/发送短信指令uchar code AT_CMGD=AT+CMGD=;/发送短信指令uchar AT_delete12;uchar AT_Read12;/用来存储发送读取短信指令 uchar AT_SendNumber22; /用来存储发送短信指令uchar numberbuf3; /用来保存短信条数 uchar idata SystemBufRxIn; /储存出口接收数据 uchar mandBuf4; /用来储存指令 uchar Rx=0;bit rece
12、iveready=0; /接收短信标志位bit sendready=0; /发送短信准备标志位bit send=0; /发送短信标志位sbit IGT=P27;/启动GSM的启动线连IGTsbit sw1=P33; /打sbit sw2=P34;/发测试短信sbit sw3=P35;/发温度sbit beep=P32; /蜂鸣器void Delay_ms(uint i);void Start_GSM(void);void UART_init (void);void sendchar(uchar ch);void sendstring(uchar *p);void GSM_INIT(void);
13、void receive_ready(void);void message_read(void);void read_message(void);void sendmessage(void);uchar code AT7=0x41,0x54,0x2B,0x43,0x4D,0x47,0x53,0x3D;/AT+CMGS= AT+CMGS=“+8613xxxxxxxxx回车输入短消息。Crtl+Z完毕并发送。uchar code AT12=0x41,0x54,0x44,0x3E;/ATD ATD*; 拨号,*为需要拨的,如呼叫,那么为ATD;uchar code neirong11=; /sbit
14、 DQ=P37; /DS18B20数据传输线接单片机的相应的引脚unsigned char tempL=0; /临时变量低位unsigned char tempH=0;/临时变量高位float temperature; /温度值unsigned char k,ge,shi,bai;uchar code atshanchu= AT+CMGD=9;sbit lcdrs=P10;sbit lcdrw=P11;sbit lcden=P12;void delaymm(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void delay(unsigned in
15、t k) unsigned int n; n=0; while(n 0;i-) DQ=1; delay(1); DQ=0; dat=1; DQ=1; if(DQ) dat|=0x80; delay(4); return(dat);void WriteOneChar(unsigned char dat) /*函数功能:向DS18B20写一字节数据*/ unsigned char i=0; for(i=8;i0;i-) DQ=0; DQ=dat&0x01;delay(5);DQ=1;dat=1;delay(4);void Init_DS18B20(void)/*函数功能:DS18B20初始化子程序
16、*/unsigned char x=0; DQ=1; /DQ先置高 delay(8); /延时 DQ=0; /发送复位脉冲 delay(85); /延时480ms) DQ=1; /拉高数据线 delay(14); /等待1560ms) ReadTemperature(void) /*函数功能:向DS18B20读温度值*/ Init_DS18B20(); /初始化WriteOneChar(0xcc); /跳过读序列号的操作WriteOneChar(0x44); /启动温度转换delaymm(125); /转换需要一点时间,延时Init_DS18B20(); /初始化WriteOneChar(0x
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 GPRS 手机 教程
限制150内