我在做单片机写指令到GSM让GSM发短信到指定手机号,求资料或QQ帮助

如题所述

我以前编写的51单片机通过SIM300模块用GPRS把采集到的温度发送到设定的TCP服务器,你可以看看,发短信很简单,根据AT指令修改一下前面的代码即可。

/*8位共阳数码管,18b20接P3^3,11.0592晶振*/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar th,tl;//存放采集温度高8位,低8位
uchar temp_int,temp_dot;//存放转换后的温度整数部分和小数部分
sbit dq=P3^3; //18b20数据接口
bit stat_18b20; //18b20初始化返回状态
uchar ctrl_z=0x1a;//GPRS数据发送结束标识ctrl+z键16进制码
uchar ATCLPORT[]="AT+CLPORT=\"TCP\",\"5256\"\r"; //设置本地GPRS通信协议以及端口号
uchar ATCIPSTART[]="AT+CIPSTART=\"TCP\",\"121.233.142.158\",\"6000\"\r"; //连接TCP服务器
uchar ATCIPSEND[]="AT+CIPSEND\r"; //启动数据发送命令
void uart_init(); //串口初始化
void delayus(uint xus); //延时微秒
void delayms(uint xms); //延时毫秒
init_18b20(); //18b20初始化
readchar(); //读一个字节
void writechar(uchar dat); //写一个字节
void get_temp(); //取温度
void temp_convert(); //转换温度
void send_string(uchar *gprs_string); //给GPRS模块发送字符串
void send_char(uchar);
void gprs_init(); //GPRS模块初始化
void send_temp(); //通过GPRS模块发送温度
//--------------下面为主函数----------------
void main(void)
{
uart_init();
gprs_init();
while(1)
{
get_temp();
temp_convert();
send_temp();
}
}
void uart_init()
{
TMOD=0X20;
SCON=0X50;
TH1=0XFD;
TL1=0XFD;
TR1=1;
}
//--------------下面为延时操作函数----------------
void delayus(uint xus)
{
for(;xus>0;xus--);
}
void delayms(uint xms)
{
uint i;
uchar j;
for(i=0;i<xms;i++)
for(j=0;j<112;j++);
}
//--------------下面为DS18B20操作函数----------------
init_18b20()
{
stat_18b20=1;
dq=1;
delayus(5);
dq=0;
delayus(50);
dq=1;
delayus(5);
stat_18b20=dq;
delayus(60);
dq=1;
return(stat_18b20);
writechar(0x4e);
writechar(0x02);
writechar(0x01);
writechar(0x7f);
}
readchar()
{
uchar i,dat;
for(i=8;i>0;i--)
{
dq=0;
dat=dat>>1;
dq=1;
if(dq)
dat=dat|0x80;
delayus(4);
}
return(dat);
}
void writechar(uchar dat)
{
uchar i;
for(i=8;i>0;i--)
{
dq=0;
dq=dat&0x01;
delayus(5);
dq=1;
dat=dat>>1;
}
}
void get_temp()
{

init_18b20();
if(stat_18b20==0)
{
writechar(0xcc);
writechar(0x44);
delayms(50);
init_18b20();
writechar(0xcc);
writechar(0xbe);
tl=readchar();
th=readchar();

}
else
{
; //错误处理模块
}
}
void temp_convert()
{
temp_int=((th&0x07)<<4)|((tl&0xf0)>>4);
temp_dot=tl&0x0f;
}
//--------------下面为SIM300操作函数----------------
void send_string(uchar *gprs_string)//指令字符串发送指令
{
while(*gprs_string)
{
SBUF = *gprs_string;
while(TI==0);
TI=0;
gprs_string++;
}
}
void send_char(uchar x)
{
SBUF=x;
while(TI==0);
TI=0;
}
void gprs_init()
{
send_string(ATCLPORT);
delayms(1000);
send_string(ATCIPSTART);
delayms(1000);
}
void send_temp()
{
send_string(ATCIPSEND);
send_char(temp_int);
send_char(temp_dot);
send_char(ctrl_z);
delayms(1000);
}追问

我懂的不多,我在调试自己写的程序,能加QQ吗?

温馨提示:答案为网友推荐,仅供参考
相似回答