📄 w77e58.c
字号:
for(i=3;i<2;i++)
{
send_char_com0(JD[i]);//经度
}
send_char_com0('"');//经度
send_char_com0('#');
send_char_com0(WD_a);//纬度方向
for(i=0;i<9;i++)
{
send_char_com0(WD[i]);//纬度
}
send_char_com0('#');
send_char_com0('#');
send_char_com0('#');
send_char_com0('M');
send_char_com0('i');
send_char_com0('o');
send_char_com0('S');
send_char_com0('M');
send_char_com0('S');
send_char_com0('#');
/**/
SBUF=0x1A;
while(TI==0);
TI=0;
}
void sz(void)
{
//绑定手机号码
int i;
for(i=0;i<10;i++)
{
P0_4=~P0_4;
P0_5=~P0_5;
P0_6=~P0_6;
P0_7=~P0_7;
Delay400Ms();
Delay400Ms();
//---
smsPWD[0]=sms[3];
smsPWD[1]=sms[4];
smsPWD[2]=sms[5];
smsPWD[3]=sms[6];
smsPWD[4]=sms[7];
smsPWD[5]=sms[8];
smsPWD[6]=sms[9];
smsPWD[7]=sms[10];
//--
PhoneNum[0]=sms[12]; //1
PhoneNum[1]=sms[13]; //3
PhoneNum[2]=sms[14]; //5
PhoneNum[3]=sms[15]; //7
PhoneNum[4]=sms[16]; //7
PhoneNum[5]=sms[17]; //0
PhoneNum[6]=sms[18]; //6
PhoneNum[7]=sms[19]; //2
PhoneNum[8]=sms[20]; //6
PhoneNum[9]=sms[21]; //7
PhoneNum[10]=sms[22]; //9
//--
}
//SendSM("AT+CMGS=\"+8613577062697\"\r\n$");
SendSM("AT+CMGS=\"+86$");
for(i=0;i<11;i++)
{
send_char_com0(PhoneNum[i]);
}
SendSM("\"\r\n$");
Delay400Ms();
Delay400Ms();
send_char_com0('B');
send_char_com0('D');
for(i=0;i<12;i++)
{
send_char_com0(PhoneNum[i]);
}
send_char_com0('#');
for(i=0;i<8;i++)
{
send_char_com0(smsPWD[i]);
}
send_char_com0('#');
//SendSM("SYSTEM$");
SBUF=0x1A;
while(TI==0);
TI=0;
// sms_mode=-1;
// init_GSM();//复位GSM MODEM
}
void serial_0(void)interrupt 4
{
// GSM 短信猫
unsigned char tmp;
if(RI)
{
tmp=SBUF;
switch(tmp)
{
//忽略 +CMT: "+8613577062697",,"08/07/04,21:26:44+32"
case '+':
sms_count=0;
sms_mode=0;
break;
case '"':
sms_count=0;
sms_mode=0;
break;
case '>': //短信发送模式
sms_count=0;
sms_mode=-1;
break;
case '*':
sms_count=0; //接收位清空
sms_mode=1;
break;
case 'O': //OK
{
if(sms_mode==-1)
{
//段信发送成功
sms_mode=0;
sms_count=0;
}
break;
}
default:
if(sms_mode==1)
{
sms[sms_count++]=tmp;
if(tmp=='%')
{
sms_mode=2; //命令语句接收完毕
//开始处理
switch(sms[0])
{
case 'D': //DW 进行GPS定位
sms_mode=-1;
dw();
break;
case 'S': //SZ 进行手机号码绑定
sms_mode=-1;
sz();
break;
default:
fw(); //复位GSM
break;
}
}
}
break;
}
RI=0;
}
// if(TI)
// {
// TI=0;
// }
}
void serial_1(void)interrupt 7
{
unsigned char tmp;
if(RI_1)
{
P0_7=~P0_7;
tmp=SBUF1;
switch(tmp)
{
case '$':
cmd_number=0; //命令类型清空
mode=1; //接收命令模式
byte_count=0; //接收位数清空
break;
case ',':
seg_count++; //逗号计数加1
byte_count=0;
break;
case '*':
switch(cmd_number)
{
case 1:
buf_full|=0x01;
break;
case 2:
buf_full|=0x02;
break;
case 3:
buf_full|=0x04;
break;
}
mode=0;
break;
default:
if(mode==1)
{
//命令种类判断
cmd[byte_count]=tmp; //接收字符放入类型缓存
if(byte_count>=4)
{ //如果类型数据接收完毕,判断类型
if(cmd[0]=='G')
{
if(cmd[1]=='P')
{
if(cmd[2]=='G')
{
if(cmd[3]=='G')
{
if(cmd[4]=='A')
{
cmd_number=1;
mode=2;
seg_count=0;
byte_count=0;
}
}
else if(cmd[3]=='S')
{
if(cmd[4]=='V')
{
cmd_number=2;
mode=2;
seg_count=0;
byte_count=0;
}
}
}
else if(cmd[2]=='R')
{
if(cmd[3]=='M')
{
if(cmd[4]=='C')
{
cmd_number=3;
mode=2;
seg_count=0;
byte_count=0;
}
}
}
}
}
}
}
else if(mode==2)
{
//接收数据处理
switch (cmd_number)
{
case 1: //类型1数据接收。GPGGA
switch(seg_count)
{
case 2: //纬度处理
if(byte_count<9)
{
WD[byte_count]=tmp;
}
break;
case 3: //纬度方向处理
if(byte_count<1)
{
WD_a=tmp;
}
break;
case 4: //经度处理
if(byte_count<10)
{
JD[byte_count]=tmp;
}
break;
case 5: //经度方向处理
if(byte_count<1)
{
JD_a=tmp;
}
break;
case 6: //定位判断
if(byte_count<1)
{
lock=tmp;
}
break;
case 7: //定位使用的卫星数
if(byte_count<2)
{
use_sat[byte_count]=tmp;
}
break;
case 9: //高度处理
if(byte_count<6)
{
high[byte_count]=tmp;
}
break;
}
break;
case 2: //类型2数据接收。GPGSV
switch(seg_count)
{
case 3: //天空中的卫星总数
if(byte_count<2)
{
total_sat[byte_count]=tmp;
}
break;
}
break;
case 3: //类型3数据接收。GPRMC
switch(seg_count)
{
case 1:
if(byte_count<6)
{ //时间处理
time[byte_count]=tmp;
}
break;
case 7: //速度处理
if(byte_count<5)
{
speed[byte_count]=tmp;
}
break;
case 8: //方位角处理
if(byte_count<5)
{
angle[byte_count]=tmp;
}
break;
}
break;
}
}
byte_count++; //接收数位加1
break;
}
}
RI_1=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -