专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
物联网
SIM900A模块TC35i怎样控制单片机工作?
2019-07-18 14:09
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
RF/无线
17360
2
1269
怎样才能
手机
发信息给SIM900A模块TC35i,模块传给
单片机
,实现功能?主要是控制P0口的高低电平,附件里有程序,硬件
电路图
,不知道什么问题,就是不成功。求教大神们,新手不懂,非常感谢帮助!!!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有帐号?
注册
x
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
无语大户
1楼-- · 2019-07-18 15:21
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define RxIn 90 //定义 接收的 数组长 度为90
/********************************** 宏定义*******************************************/
uchar code AT[]="AT"; //握 手信 号
uchar code ATE[]="ATE"; // 关回 显
uchar code AT_CNMI[]="AT+CNMI=2,1";//设置这组参数是来了新信息奖直接显示到串口,不作存储
uchar code AT_CSCA[]="AT+CSCA="+8615816497476""; //设置 服务中心 号码
uchar code AT_CMGF[]="AT+CMGF=1";//设置短信的格 式为 text格式
uchar code AT_CMGR[]="AT+CMGR=";//读取 短信指令
uchar code AT_CMGS[]="AT+CMGS=";//发送 短信指令
uchar code AT_CMGD[]="AT+CMGD=";//发送 短信指令
uchar code successfully[]="Operate Successfully!"; //发送操作成功信息到 目标号码
uchar code fail[]="Operate failed,try again!"; //发送操作失败 信息到目标号码
uchar AT_delete[12];
uchar AT_Read[12]; //用来存储发送读取短信指令
uchar AT_SendNumber[25]; //用来存储发送短信号码指令
uchar numberbuf[3]; //用来保存短信条数
uchar idata SystemBuf[RxIn]; //储存出口接收数据
uchar CommandBuf[6]; //用来储存指令
uchar idata state[17]; //用来存 储IO口状态
uchar idata state1[17]; //用来存储IO口状态
uchar Rx=0;
uint temp; //记录状 态
uchar temp1; // 用于 记录P0口状态
uchar temp2; // 用于记录P2口状态
bit check=0; //查询标志位
bit receiveready=0; //接收短信标志位
bit sendready=0; //发送短信准备标志位
bit send=0; //发送短信标志位
bit flag=0; //指令标志位
/*****************************位定义******************************************/
sbit P3_7=P2^5; //启动GSM的启动线连IGT
sbit LED0=P0^0; //LED1
sbit LED1=P0^1; //LED2
sbit LED2=P0^2; //LED3
sbit LED3=P0^3; //继电器1
sbit MOTOR1=P0^7; //继电器5
/*********************************函数声明*************************************/
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);
void receive_ready(void);
void message_read(void);
void read_message(void);
void sendmessage(void);
/*************************************************************************************/
////////////////////////////////函数void Delay_ms(uint i); 实现功能:进行毫秒延时//////////////////////////////
/*************************************************************************************/
void Delay_ms(uint i)
{
unsigned int j;
for(;i>0;i--){
for(j=0;j<125;j++)
{;}
}
}
/*************************************************************************************/
//////////////////////函数void UART_init; 实现功能:对串口进行初始化//////////////////////////////////////////////
/*************************************************************************************/
void UART_init (void)
{
TMOD=0x20; //选择定时器1
PCON=0x00; ///波特率不加倍
SCON=0x50; //串行工作方式1允许串行接收
TH1=0xFD; //实验板上晶振位11.0592MHZ,选择波特率为9600
TL1=0xFD; //在相应计数器上赋值
EA=1; //总中断开启
ES=1; //串行中断开启
TR1=1; //开启定时器1
}
/************************************************************************************/
//////////////////////函数void sendchar(uchar ch);实现功能:发送一字节数据///////////////////////////////////////
/************************************************************************************/
void sendchar(uchar ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}
/***********************************************************************************/
//////////////////////函数void sendstring(uchar *p);实现功能:通过串口发送字符串///////////////////
/***********************************************************************************/
void sendstring(uchar *p)
{
while(*p)
{
sendchar(*p);
p++;
}
sendchar(0x0D);
sendchar(0x0A);
}
/************************************************************************************/
///////////////////函数void receive(void) interrupt 4 using 1;实现功能:通过串口接收数据/////////////////////////
/************************************************************************************/
void receive(void) interrupt 4 using 1
{
if(RI)
{
if(Rx<RxIn)
{
SystemBuf[Rx]=SBUF;
Rx++;
}
RI=0;
}
}
/*************************************************************************************/
///////////////////函数void GSM_INIT(void);实现功能:初始化TC35模块///////////////////////////////////////////////
/*************************************************************************************/
void GSM_INIT(void)
{
LOOP:
Delay_ms(1000);
sendstring(AT);
Delay_ms(1000);
sendstring(ATE);
Delay_ms(1000);
sendstring(AT_CNMI);
Delay_ms(1000);
//sendstring(AT_CSCA);
Delay_ms(1000);
for(Rx=0;Rx<RxIn;Rx++)
{
SystemBuf[Rx]=0x00;
}
Rx=0;
sendstring(AT_CMGF);
Delay_ms(1000);
if((SystemBuf[2]=='O')&&(SystemBuf[3]=='K')) //判断是否模块初始化成功,成功的话模块会回复"OK"给单片机
{
//如果单片机没有收到OK,就继续发送初始化指令/
for(Rx=0;Rx<RxIn;Rx++)
{
SystemBuf[Rx]=0x00;
}
Rx=0;
}
else
{
for(Rx=0;Rx<RxIn;Rx++)
{
SystemBuf[Rx]=0x00;
}
Rx=0;
goto LOOP;
}
}
/*************************************************************************************/
///////////////////函数void receive_ready(void);实现功能:接收短信准备///////////////////////////////////////////
/*************************************************************************************/
void receive_ready(void)
{
uchar i;
if((SystemBuf[5]==0x54)&&SystemBuf[6]==0x49) //如果有新短信来,模块会通过串口向单片机发送字符串,TI
{ //此函数的功能是判断是否有新短信来,如果来的话就置位准备接受位标志为1
receiveready=1; //如果不是新短信的指令,就舍弃,并将接收数组清零/
}
else{
for(i=0;i<Rx;i++)
{
SystemBuf[i]=0x00;
}
Rx=0;
}
}
/*************************************************************************************/
/////////////函数 void message_read(void);实现功能:判断短信,准备是否回复短信给目标号码////////
/*************************************************************************************/
void message_read(void)
{
if((sendready==1)&&(SystemBuf[5]==0x47)&&(SystemBuf[6]==0x52)) //GR
send=1;
}
/*************************************************************************************/
///////////////////函数 void read_message(void);实现功能:发送读取短信指令,/////////////////////////////////////
/*************************************************************************************/
void read_message(void)
{
uchar i;
Delay_ms(1000);
for(i=0;i<3;i++)
{
numberbuf[i]=SystemBuf[14+i];
}
for(i=0;i<8;i++)
{
AT_Read[i]=AT_CMGR[i];
}
for(i=8;i<11;i++)
{
AT_Read[i]=numberbuf[i-8];
}
for(Rx=0;Rx<RxIn;Rx++)
{
SystemBuf[Rx]=0x00;
}
Rx=0;
sendstring(AT_Read); //发送AT+CMGR=?,?代表短信储存所在位置
}
/*************************************************************************/
///////////////////函数void readcommend(void);实现功能:读取短信内容,判断相应指令是否正确///////////////////
/********************************************************************************/
void readcommend(void)
{
uchar i;
for(i=0;i<5;i++) //将短信内容中的指令部分截取出来放到
{ //CommandBuf数组中
CommandBuf[i]=SystemBuf[64+i];
}
if((CommandBuf[0]=='o')&&(CommandBuf[1]=='p')&&(CommandBuf[2]=='e')&&(CommandBuf[3]=='n')) //判断指令是否为开继电器指令
{
switch(CommandBuf[4])
{
case 0x31: LED0=0; //LED1开启
break;
case 0x32: LED1=0; //LED 2开启
break;
case 0x33: LED2=0; //LED 3开启
break;
case 0x34: LED3=0; //继电器1开启
break;
case 0x35: MOTOR1=0; //继电器 2开启
break;
/*case 0x36: realy5=0; //继电器 6开启
break;
case 0x37: realy6=0; //继电器 7开启
break;
case 0x38: realy7=0; //继电器 8开启
break;
case 0x41: key1=0; //开关1开启
break;
case 0x42: key2=0; //开关2开启
break;
case 0x43: key3=0; //开关3开启
break;
case 0x44: key4=0; //开关4开启
break;
case 0x45: key5=0; //开关5开启
break;
case 0x46: key6=0; //开关6开启
break;
case 0x47: key7=0; //开关7开启
break;
case 0x48: key8=0; //开关8开启
break;
case 0x4f: P0=0;P2=0;
break;
case 0x3f: temp1=P0;
temp2=P2;
temp=temp2;
temp<<=8;
temp=temp|temp1;
check=1;
break;*/
default:flag=1; //其他指令定义为错误操作
break; //置位错误操作位为1
}
}
else
{
if((CommandBuf[0]=='s')&&(CommandBuf[1]=='h')&&(CommandBuf[2]=='u')&&(CommandBuf[3]=='t')) //判断指令是否为关闭电器指令
{
switch(CommandBuf[4])
{
case 0x31: LED0=1; //关闭LED1
break;
case 0x32: LED1=1; //关闭LED2
break;
case 0x33: LED2=1; //关闭LED3
break;
case 0x34: LED3=1; //关闭继电器1
break;
case 0x35: MOTOR1=1; //关闭继电器2
break;
/*case 0x36: realy5=1; //关闭继电器6
break;
case 0x37: realy6=1; //关闭继电器7
break;
case 0x38: realy7=1; //关闭继电器8
break;
case 0x41: key1=1; //开关1关闭
break;
case 0x42: key2=1; //开关2关闭
break;
case 0x43: key3=1; //开关3关闭
break;
case 0x44: key4=1; //开关4关闭
break;
case 0x45: key5=1; //开关5关闭
break;
case 0x46: key6=1; //开关6关闭
break;
case 0x47: key7=1; //开关7关闭
break;
case 0x48: key8=1; //开关8关闭
break;
case 0x53:P0=0xff;P2=0xff;
break;*/
default:flag=1; //其他指令定义为错误操作
break; //置位错误操作位为1
}
}
else {flag=1;} //如果发送的指令既不是open也不是shut就定义为错误操作
}
}
/***********************************************************************************/
///////////////////函数void readstate;实现功能:将P0,P2口的状态转化为数组,///////////////////
/**********************************************************************************/
void readstate(void)
{
uint bitcnt,i,j;
for(bitcnt=0,i=0;bitcnt<16,i<16;bitcnt++,i++)
{
if((temp<<bitcnt)&0x8000){state1[i]=0x30;}
else state1[i]=0x31;
}
for(j=15,i=0;j>=0,i<16;j--,i++)
{
state[j]=state1[i];
}
}
/***********************************************************************************/
///////////////////函数 void delete_message;实现功能:删除读短信指令,////////////////
/********************************************************************************/
void delete_message(void)
{
uchar i;
Delay_ms(1000);
Delay_ms(1000);
Delay_ms(5000);
for(i=0;i<8;i++)
{
AT_delete[i]=AT_CMGD[i];
}
for(i=8;i<11;i++)
{
AT_delete[i]=numberbuf[i-8];
}
for(Rx=0;Rx<RxIn;Rx++)
{
SystemBuf[Rx]=0x00;
}
Rx=0;
sendstring(AT_delete); //发送AT+CMGR=?,?代表短信储存所在位置
}
/******************************************************************************/
///////////////////函数 void sendmessage(void);实现功能:发送回复短信指令,///////////////////////////////////////
/*********************************************************************************/
void sendmessage(void)
{
uchar i;
for(i=0;i<8;i++)
{
AT_SendNumber[i]=AT_CMGS[i];
}
for(i=8;i<24;i++)
{
AT_SendNumber[i]=SystemBuf[14+i]; //将对方号码提取用来回复给对方
}
sendstring(AT_SendNumber);
Delay_ms(400);
if(flag==0){ if(check==1){sendstring(state);} //如果查询位置1时,发送状态信息
sendstring(successfully);
check=0;
}
else
{
sendstring(fail);
}
Delay_ms(30);
sendchar(0X1A);
}
/*****************************************************************************//////////函数void main();实现功能:主函数,//////////////////
/************************************************************************/
void main()
{
Delay_ms(10000); //延时大约10秒 ,等待模块联网/
UART_init(); //串口初始化/
GSM_INIT();
P0=0XFF;
while(1)
{
receive_ready();
if(receiveready==1)
{
read_message();
receiveready=0;
sendready=1;
}
Delay_ms(300);
message_read();
if(send==1)
{
Delay_ms(2000);
readcommend();
readstate();
sendmessage();
Delay_ms(1000);
delete_message();
flag=0;
for(Rx=0;Rx<RxIn;Rx++) //每一次操作完成后对接收数组清零//
{
SystemBuf[Rx]=0x00;
}
Rx=0;
send=0;
}
LED3=1;
Delay_ms(1000);
LED3=0;
Delay_ms(1000);
}
}
加载中...
fylymanchen
2楼-- · 2019-07-18 20:48
直接找厂家呀!心疼楼主1秒钟!需要资料的话留个邮箱,给您发过去
加载中...
一周热门
更多
>
相关问题
STM32开发板免费用活动
7 个回答
无线通讯电子电路图
3 个回答
求3DA92 3DA89 3DA37 高频放大管的外围电路
1 个回答
中波收音机为什么通常要采用环形天线呢?
4 个回答
有谁知道这个元器件
19 个回答
315M无线模块
7 个回答
779M与315M
6 个回答
相关文章
物联网通信协议——物联网数据协议
0个评论
基于AM335X的物联网关解决方案
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
物联网
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define RxIn 90 //定义 接收的 数组长 度为90
/********************************** 宏定义*******************************************/
uchar code AT[]="AT"; //握 手信 号
uchar code ATE[]="ATE"; // 关回 显
uchar code AT_CNMI[]="AT+CNMI=2,1";//设置这组参数是来了新信息奖直接显示到串口,不作存储
uchar code AT_CSCA[]="AT+CSCA="+8615816497476""; //设置 服务中心 号码
uchar code AT_CMGF[]="AT+CMGF=1";//设置短信的格 式为 text格式
uchar code AT_CMGR[]="AT+CMGR=";//读取 短信指令
uchar code AT_CMGS[]="AT+CMGS=";//发送 短信指令
uchar code AT_CMGD[]="AT+CMGD=";//发送 短信指令
uchar code successfully[]="Operate Successfully!"; //发送操作成功信息到 目标号码
uchar code fail[]="Operate failed,try again!"; //发送操作失败 信息到目标号码
uchar AT_delete[12];
uchar AT_Read[12]; //用来存储发送读取短信指令
uchar AT_SendNumber[25]; //用来存储发送短信号码指令
uchar numberbuf[3]; //用来保存短信条数
uchar idata SystemBuf[RxIn]; //储存出口接收数据
uchar CommandBuf[6]; //用来储存指令
uchar idata state[17]; //用来存 储IO口状态
uchar idata state1[17]; //用来存储IO口状态
uchar Rx=0;
uint temp; //记录状 态
uchar temp1; // 用于 记录P0口状态
uchar temp2; // 用于记录P2口状态
bit check=0; //查询标志位
bit receiveready=0; //接收短信标志位
bit sendready=0; //发送短信准备标志位
bit send=0; //发送短信标志位
bit flag=0; //指令标志位
/*****************************位定义******************************************/
sbit P3_7=P2^5; //启动GSM的启动线连IGT
sbit LED0=P0^0; //LED1
sbit LED1=P0^1; //LED2
sbit LED2=P0^2; //LED3
sbit LED3=P0^3; //继电器1
sbit MOTOR1=P0^7; //继电器5
/*********************************函数声明*************************************/
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);
void receive_ready(void);
void message_read(void);
void read_message(void);
void sendmessage(void);
/*************************************************************************************/
////////////////////////////////函数void Delay_ms(uint i); 实现功能:进行毫秒延时//////////////////////////////
/*************************************************************************************/
void Delay_ms(uint i)
{
unsigned int j;
for(;i>0;i--){
for(j=0;j<125;j++)
{;}
}
}
/*************************************************************************************/
//////////////////////函数void UART_init; 实现功能:对串口进行初始化//////////////////////////////////////////////
/*************************************************************************************/
void UART_init (void)
{
TMOD=0x20; //选择定时器1
PCON=0x00; ///波特率不加倍
SCON=0x50; //串行工作方式1允许串行接收
TH1=0xFD; //实验板上晶振位11.0592MHZ,选择波特率为9600
TL1=0xFD; //在相应计数器上赋值
EA=1; //总中断开启
ES=1; //串行中断开启
TR1=1; //开启定时器1
}
/************************************************************************************/
//////////////////////函数void sendchar(uchar ch);实现功能:发送一字节数据///////////////////////////////////////
/************************************************************************************/
void sendchar(uchar ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}
/***********************************************************************************/
//////////////////////函数void sendstring(uchar *p);实现功能:通过串口发送字符串///////////////////
/***********************************************************************************/
void sendstring(uchar *p)
{
while(*p)
{
sendchar(*p);
p++;
}
sendchar(0x0D);
sendchar(0x0A);
}
/************************************************************************************/
///////////////////函数void receive(void) interrupt 4 using 1;实现功能:通过串口接收数据/////////////////////////
/************************************************************************************/
void receive(void) interrupt 4 using 1
{
if(RI)
{
if(Rx<RxIn)
{
SystemBuf[Rx]=SBUF;
Rx++;
}
RI=0;
}
}
/*************************************************************************************/
///////////////////函数void GSM_INIT(void);实现功能:初始化TC35模块///////////////////////////////////////////////
/*************************************************************************************/
void GSM_INIT(void)
{
LOOP:
Delay_ms(1000);
sendstring(AT);
Delay_ms(1000);
sendstring(ATE);
Delay_ms(1000);
sendstring(AT_CNMI);
Delay_ms(1000);
//sendstring(AT_CSCA);
Delay_ms(1000);
for(Rx=0;Rx<RxIn;Rx++)
{
SystemBuf[Rx]=0x00;
}
Rx=0;
sendstring(AT_CMGF);
Delay_ms(1000);
if((SystemBuf[2]=='O')&&(SystemBuf[3]=='K')) //判断是否模块初始化成功,成功的话模块会回复"OK"给单片机
{
//如果单片机没有收到OK,就继续发送初始化指令/
for(Rx=0;Rx<RxIn;Rx++)
{
SystemBuf[Rx]=0x00;
}
Rx=0;
}
else
{
for(Rx=0;Rx<RxIn;Rx++)
{
SystemBuf[Rx]=0x00;
}
Rx=0;
goto LOOP;
}
}
/*************************************************************************************/
///////////////////函数void receive_ready(void);实现功能:接收短信准备///////////////////////////////////////////
/*************************************************************************************/
void receive_ready(void)
{
uchar i;
if((SystemBuf[5]==0x54)&&SystemBuf[6]==0x49) //如果有新短信来,模块会通过串口向单片机发送字符串,TI
{ //此函数的功能是判断是否有新短信来,如果来的话就置位准备接受位标志为1
receiveready=1; //如果不是新短信的指令,就舍弃,并将接收数组清零/
}
else{
for(i=0;i<Rx;i++)
{
SystemBuf[i]=0x00;
}
Rx=0;
}
}
/*************************************************************************************/
/////////////函数 void message_read(void);实现功能:判断短信,准备是否回复短信给目标号码////////
/*************************************************************************************/
void message_read(void)
{
if((sendready==1)&&(SystemBuf[5]==0x47)&&(SystemBuf[6]==0x52)) //GR
send=1;
}
/*************************************************************************************/
///////////////////函数 void read_message(void);实现功能:发送读取短信指令,/////////////////////////////////////
/*************************************************************************************/
void read_message(void)
{
uchar i;
Delay_ms(1000);
for(i=0;i<3;i++)
{
numberbuf[i]=SystemBuf[14+i];
}
for(i=0;i<8;i++)
{
AT_Read[i]=AT_CMGR[i];
}
for(i=8;i<11;i++)
{
AT_Read[i]=numberbuf[i-8];
}
for(Rx=0;Rx<RxIn;Rx++)
{
SystemBuf[Rx]=0x00;
}
Rx=0;
sendstring(AT_Read); //发送AT+CMGR=?,?代表短信储存所在位置
}
/*************************************************************************/
///////////////////函数void readcommend(void);实现功能:读取短信内容,判断相应指令是否正确///////////////////
/********************************************************************************/
void readcommend(void)
{
uchar i;
for(i=0;i<5;i++) //将短信内容中的指令部分截取出来放到
{ //CommandBuf数组中
CommandBuf[i]=SystemBuf[64+i];
}
if((CommandBuf[0]=='o')&&(CommandBuf[1]=='p')&&(CommandBuf[2]=='e')&&(CommandBuf[3]=='n')) //判断指令是否为开继电器指令
{
switch(CommandBuf[4])
{
case 0x31: LED0=0; //LED1开启
break;
case 0x32: LED1=0; //LED 2开启
break;
case 0x33: LED2=0; //LED 3开启
break;
case 0x34: LED3=0; //继电器1开启
break;
case 0x35: MOTOR1=0; //继电器 2开启
break;
/*case 0x36: realy5=0; //继电器 6开启
break;
case 0x37: realy6=0; //继电器 7开启
break;
case 0x38: realy7=0; //继电器 8开启
break;
case 0x41: key1=0; //开关1开启
break;
case 0x42: key2=0; //开关2开启
break;
case 0x43: key3=0; //开关3开启
break;
case 0x44: key4=0; //开关4开启
break;
case 0x45: key5=0; //开关5开启
break;
case 0x46: key6=0; //开关6开启
break;
case 0x47: key7=0; //开关7开启
break;
case 0x48: key8=0; //开关8开启
break;
case 0x4f: P0=0;P2=0;
break;
case 0x3f: temp1=P0;
temp2=P2;
temp=temp2;
temp<<=8;
temp=temp|temp1;
check=1;
break;*/
default:flag=1; //其他指令定义为错误操作
break; //置位错误操作位为1
}
}
else
{
if((CommandBuf[0]=='s')&&(CommandBuf[1]=='h')&&(CommandBuf[2]=='u')&&(CommandBuf[3]=='t')) //判断指令是否为关闭电器指令
{
switch(CommandBuf[4])
{
case 0x31: LED0=1; //关闭LED1
break;
case 0x32: LED1=1; //关闭LED2
break;
case 0x33: LED2=1; //关闭LED3
break;
case 0x34: LED3=1; //关闭继电器1
break;
case 0x35: MOTOR1=1; //关闭继电器2
break;
/*case 0x36: realy5=1; //关闭继电器6
break;
case 0x37: realy6=1; //关闭继电器7
break;
case 0x38: realy7=1; //关闭继电器8
break;
case 0x41: key1=1; //开关1关闭
break;
case 0x42: key2=1; //开关2关闭
break;
case 0x43: key3=1; //开关3关闭
break;
case 0x44: key4=1; //开关4关闭
break;
case 0x45: key5=1; //开关5关闭
break;
case 0x46: key6=1; //开关6关闭
break;
case 0x47: key7=1; //开关7关闭
break;
case 0x48: key8=1; //开关8关闭
break;
case 0x53:P0=0xff;P2=0xff;
break;*/
default:flag=1; //其他指令定义为错误操作
break; //置位错误操作位为1
}
}
else {flag=1;} //如果发送的指令既不是open也不是shut就定义为错误操作
}
}
/***********************************************************************************/
///////////////////函数void readstate;实现功能:将P0,P2口的状态转化为数组,///////////////////
/**********************************************************************************/
void readstate(void)
{
uint bitcnt,i,j;
for(bitcnt=0,i=0;bitcnt<16,i<16;bitcnt++,i++)
{
if((temp<<bitcnt)&0x8000){state1[i]=0x30;}
else state1[i]=0x31;
}
for(j=15,i=0;j>=0,i<16;j--,i++)
{
state[j]=state1[i];
}
}
/***********************************************************************************/
///////////////////函数 void delete_message;实现功能:删除读短信指令,////////////////
/********************************************************************************/
void delete_message(void)
{
uchar i;
Delay_ms(1000);
Delay_ms(1000);
Delay_ms(5000);
for(i=0;i<8;i++)
{
AT_delete[i]=AT_CMGD[i];
}
for(i=8;i<11;i++)
{
AT_delete[i]=numberbuf[i-8];
}
for(Rx=0;Rx<RxIn;Rx++)
{
SystemBuf[Rx]=0x00;
}
Rx=0;
sendstring(AT_delete); //发送AT+CMGR=?,?代表短信储存所在位置
}
/******************************************************************************/
///////////////////函数 void sendmessage(void);实现功能:发送回复短信指令,///////////////////////////////////////
/*********************************************************************************/
void sendmessage(void)
{
uchar i;
for(i=0;i<8;i++)
{
AT_SendNumber[i]=AT_CMGS[i];
}
for(i=8;i<24;i++)
{
AT_SendNumber[i]=SystemBuf[14+i]; //将对方号码提取用来回复给对方
}
sendstring(AT_SendNumber);
Delay_ms(400);
if(flag==0){ if(check==1){sendstring(state);} //如果查询位置1时,发送状态信息
sendstring(successfully);
check=0;
}
else
{
sendstring(fail);
}
Delay_ms(30);
sendchar(0X1A);
}
/*****************************************************************************//////////函数void main();实现功能:主函数,//////////////////
/************************************************************************/
void main()
{
Delay_ms(10000); //延时大约10秒 ,等待模块联网/
UART_init(); //串口初始化/
GSM_INIT();
P0=0XFF;
while(1)
{
receive_ready();
if(receiveready==1)
{
read_message();
receiveready=0;
sendready=1;
}
Delay_ms(300);
message_read();
if(send==1)
{
Delay_ms(2000);
readcommend();
readstate();
sendmessage();
Delay_ms(1000);
delete_message();
flag=0;
for(Rx=0;Rx<RxIn;Rx++) //每一次操作完成后对接收数组清零//
{
SystemBuf[Rx]=0x00;
}
Rx=0;
send=0;
}
LED3=1;
Delay_ms(1000);
LED3=0;
Delay_ms(1000);
}
}
一周热门 更多>