📄 mobile.c
字号:
#include <reg52.h>
#include<string.h>
unsigned char code send_comm_text[]={"at+cmgf=1\r"};
unsigned char code TEXT_OK[]={0x61,0x74,0x2B,0x63,0x6D,0x67,0x66,
0x3D,0x31,0x0D,0x0D,0x0A,0x4F,0x4B,0x0D,0x0A,0x00};
unsigned char code send_phone1[]={0x61,0x74,0x2B,0x63,0x6D,0x67,0x73,
0x3D,0x22}; //发送at+cmgs="
unsigned char code send_phone2[]={"13884354148"}; //发送13884354148
unsigned char code send_phone3[]={0x22,0x0d}; //发送"
unsigned char code PHONE_OK[]={0x22,0x31,0x33,0x38,0x38,0x34,0x33,
0x35,0x34,0x31,0x34,0x38,0x22,0x3E,0x00};
unsigned char code s_at[]={"at\r"}; //发送AT测试指令
unsigned char code ATOK[]={0x61,0x74,0x0D,0x0D,0x0A,0x4F,0x4B,0x0D,0x0A,0x00};
unsigned char code s_read_msg[]={"at+cmgr=1\n"}; //发送读取信息命令
unsigned char code READ_MSG[]={0x2B,0x43,0x4D,0x47,0x52,0x3A,0x20,
0x22,0x52,0x45,0x43,0x20,0x52,0x45,0x41,0x44,0x22,0x00}; //有已读信息
unsigned char code UNREAD_MSG[]={0x2B,0x43,0x4D,0x47,0x52,0x3A,0x20,
0x22,0x52,0x45,0x43,0x20,0x55,0x4E,0x52,0x45,0x41,0x44,0x22,0x00}; //有未读信息
unsigned char code s_delete_msg[]={"at+cmgd=1\r"}; //发送删除信息命令
unsigned char code s_open_ok[]={"open_ok\r"}; //发送信息开灯正常
unsigned char code s_open_error[]={"open_error\r"}; //发送信息开灯异常
unsigned char code s_close_ok[]={"close_ok\r"}; //发送信息关灯正常
unsigned char code s_close_error[]={"close_error\r"}; //发送信息关灯异常
unsigned char code s_star_ok[]={"star_ok\r"}; //发送信息清洗开始正常
unsigned char code s_star_error[]={"star_error\r"}; //发送信息清洗开始异常
unsigned char code s_clear_ok[]={"clear_ok\r"}; //发送信息清洗完成
unsigned char code send_ok[]={0x1a,0x0d}; //发送信息开灯正常
unsigned char code OPEN[]={"open_light"}; //开灯
unsigned char code CLOSE[]={"close_light"}; //关灯
unsigned char code CLEAR[]={"clear_light"}; //清洗
//unsigned char code s_clear_error[]; //发送信息开灯正常
bit send_flag;
bit receive_flag;
bit receive_ok;
bit bit_text;
unsigned char *send_pointer ; //指向数组的指针
unsigned char *p_code ; //指向数组的指针
unsigned char send_amount;
unsigned char i,receive_i;
unsigned char receive_amount;
unsigned char receive_mode; //接收模式
unsigned char idata receive_buffer[100]="atcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmgatcmg";
unsigned int temp_text;
void delay(unsigned long int ms)
{
unsigned long int tms;
tms=46*ms;
while(tms)
{
tms--;
}
}
void system_init()
{
EA = 0; // CPU关中断
SCON = 0x50;
PCON = 0x00;
TMOD = 0x20;
TH1 = 0xFD; //波特率为9600 晶振11.0592MHZ的TH1=TL1=0xFD
TL1 = 0xFD;
TR1 = 1; //定时器1启动计数
ES = 1; //串口开中断
// PX1 = 1; //串口低优先级 =1可能不进中断
EA=1;
}
void mobile_init()
{
unsigned char yanshi;
/* yanshi=30; // 4*1000ms
while(yanshi--)//测试模块发送AT
{
delay(1000);
} */
while(1)//测试模块发送AT
{
send_pointer=s_at;
send_amount=sizeof(s_at)-1;
send_flag=1;
TI=1;
//while(send_flag);
delay(1000);
p_code=strstr(receive_buffer,ATOK);
if(p_code!=NULL)
{
i--;
break;
}
else
i++;
}
bit_text=0;
receive_i=0;
for(i=0;i<50;i++)
receive_buffer[i]=0xff;
while(0==bit_text)//设定信息模式发送AT+CMGF=1
{
send_pointer=send_comm_text;
send_amount=10;
send_flag=1;
TI=1;
delay(500);
p_code=strstr(receive_buffer,TEXT_OK);//
if(p_code!=NULL)
{
break;
}
}
receive_i=0;
for(i=0;i<50;i++)
receive_buffer[i]=0xff;
}
void send_msg(unsigned char *p,unsigned char p_count)
{
delay(100);//延时10MS
send_pointer=send_phone1;
send_amount=sizeof(send_phone1);
send_flag=1;
TI=1;
delay(30);
send_pointer=send_phone2;
send_amount=sizeof(send_phone2)-1;
send_flag=1;
TI=1;
delay(30);
send_pointer=send_phone3;
send_amount=sizeof(send_phone3);
send_flag=1;
TI=1;
delay(10);
send_pointer=p;
send_amount=p_count;
TI=1;
delay(100);
send_pointer=send_ok;
send_amount=2;
TI=1;
delay(100);
}
void delete_msg()
{
send_pointer=s_delete_msg;
send_amount=9;
send_flag=1;
TI=1;
delay(200);
}
void com_int_proc(void) interrupt 4 //using 3
{
if (TI) //是发送中断
{
TI =0;
if(send_amount)
{
SBUF = *send_pointer;
send_pointer++;
send_amount--;
}
else
{
send_flag=0;
}
}
if(RI)
{
RI =0;
temp_text++;
if(temp_text==30)
{ P0=~P0; temp_text=0; }
receive_buffer[receive_i]=SBUF;
receive_i++;
if(receive_i==100)
receive_i=0;
}
}
void scan_msg()
{
send_pointer=s_read_msg;
send_amount=sizeof(s_read_msg)-1;
send_flag=1;
TI=1;
delay(100);
p_code=strstr(receive_buffer,UNREAD_MSG);
if(p_code!=NULL) //有已读信息
{
p_code=strstr(receive_buffer,OPEN);
if(p_code!=NULL)
{
receive_mode=13; ////开灯
receive_i=0;
}
p_code=strstr(receive_buffer,CLOSE);
if(p_code!=NULL)
{
receive_mode=23; //关灯
receive_i=0;
}
p_code=strstr(receive_buffer,CLOSE);
if(p_code!=NULL)
{
receive_mode=33; //清洗灯
receive_i=0;
}
return;
}
p_code=strstr(receive_buffer,READ_MSG);
if(p_code!=NULL) //有已读信息
{
delete_msg();
delay(1000);
}
}
main()
{
system_init();
//send_msg(s_open_ok,8);
mobile_init();
send_msg(s_open_ok,sizeof(s_open_ok)-1);
delay(5000);
//delay(5000);
send_msg(s_open_error,sizeof(s_open_error)-1);
delay(5000);
//delay(5000);
send_msg(s_close_ok,sizeof(s_close_ok)-1);
delay(5000);
//delay(5000);
send_msg(s_close_error,sizeof(s_close_error)-1);
//delay(5000);
delay(5000);
send_msg(s_star_ok,sizeof(s_star_ok)-1);
delay(5000);
//delay(5000);
send_msg(s_star_error,sizeof(s_star_error)-1);
// delay(5000);
delay(5000);
while(1)
{
scan_msg();
for(i=0;i<100;i++)
receive_buffer[i]=0xff;
switch(receive_mode)
{
/*case 1://收到信息
{
send_pointer=s_read_msg;
send_amount=11;
TI=1;
delay(200);
break;
}
case 2://返回已读信息
{
break;
}*/
case 13://开
{
send_msg(s_open_ok,sizeof(s_open_ok)-1);
delay(5000);
receive_mode=0;
break;
}
case 23://关
{
send_msg(s_close_ok,sizeof(s_close_ok)-1);
delay(5000);
receive_mode=0;
break;
}
case 33://洗
{
send_msg(s_star_error,sizeof(s_star_error)-1);
delay(5000);
receive_mode=0;
break;
}
case 4://无信息
{
break;
}
case 5://成功删除信息
{
break;
}
case 6://成功删除信息出错
{
break;
}
default: break;
}
delay(1000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -