📄 stc串口gps.c
字号:
recive[recilen]=quanxian;
if (recilen>=7 && recilen<=9 ){
reciok=1;
for(i=0;i<7;i++){
if (recive[1+i]!=gpsdata[i]){
reciok=0;
break;
}
}
if (!reciok){//当检测到接收完后,跞出接收
recilen=0;
dxccwz=0;//标志是否接收到$
}
}else if(recilen>45) break;
}
// stapos++;
}
//接收GPS数据
//取出经度和纬度
//duanxinp1=strpos(recive,'3');
p21=1;
duanxinp1=searchstr3(12);
duanxinp2=searchstr4(12);
for (i=0;i<duanxinp2-duanxinp1-2;i++){
gpswz[0][i]=recive[duanxinp1+1+i];
}
gpswz[0][i]='\0';
duanxinp1=searchstr5(12);
for (i=0;i<duanxinp1-duanxinp2-3;i++){
gpswz[1][i]=recive[duanxinp2+2+i];
}
gpswz[1][i]='\0';
ss_gpsstore();//保存汽车位置入eprom
//取出经度和纬度
//fhxxgps();
//等待时间
p00=0;
p01=0;
p02=1;
p03=1;
for (i=0;i<20;i++)
{
for (cc=0;cc<10000;cc++){
}
}
//等待时间
p=text[0];
length = strlen(p);
for(i = 0; i<length; i++) //依次发送待合成的文本数据
{ SBUF = *p;
while (TI == 0) ;
TI = 0;
p++;
}
SBUF = 0x0d;
while (TI==0); //等待发送中断标志位置位
TI = 0;
//等待时间
for (i=0;i<40;i++)
{
for (cc=0;cc<10000;cc++){
}
}
//等待时间
p=text[3];
length = strlen(p);
for(i = 0; i<length; i++) //依次发送待合成的文本数据
{ SBUF = *p;
while (TI == 0) ;
TI = 0;
p++;
}
SBUF = 0x0d;
while (TI==0); //等待发送中断标志位置位
TI = 0;
//接收短信
clearrecive();
recilen=0;
dxccwz=0;
while(1){
recilen++;
while (RI==0); //等待接收中断标志位置位
RI = 0; //接收中断标志位清零
recive[recilen]=SBUF;
if (recilen>13){
reciok=1;
for(i=0;i<6;i++){
if (recive[recilen-5+i]!=mark[i]){
reciok=0;
break;
}
}
if (reciok){//当检测到接收完后,跞出接收
break;
}
}
}
//接收短信
strcpy(dxlist,"");
p22=1;
if (recilen<16){//没有未读短信
SBUF = 'N';
while (TI == 0) ;
TI = 0;
SBUF = 'O';
while (TI == 0) ;
TI = 0;
}
else{
findpos=0;
duanxinpi=0;
while (1){
stapos=searchstr(findpos);//查找第一个开始位置(+CMGL: )
if (stapos<0xff){
duanxinpos= searchstr2(stapos);//查找的"位置
duanxinwz=duanxinpos- stapos-7-1;//stapos+7为此条短信位置的第一位数
if (duanxinwz<=1){
duanxinp[duanxinpi++]=recive[stapos+7]-0x30;//保存查询未读短信的位置,以便处理完后删除
//提取手机号 开始位置duanxinpos+18,长度11
for(sji=0;sji<11;sji++){
sjh[sji]=recive[duanxinpos+17+sji];
}
yizhensjh(&quanxian,&dxccwz);//验证手机号合法性返回手机存储位置和权限
//判断手机存储位置如查大于0,则执行短信内空,如果等于0,则不执行短信内空
//listemp=checkisp();
//短信开始位置duanxinpos+56,结束位置
duanxinp1=searchstr(duanxinpos+56);//查找下一个+CMGL:
for(sji=0;sji<100;sji++){//清空短信缓存
//if (duanxin[sji]==0x0)
// break;
//else
duanxin[sji]=0x0;
}
//strcpy(duanxin,"");
if (duanxinp1<0xff)//如果有则表明还有第二条短信,则此短信内容结束位置=duanxinp1-1
{
if (dxccwz<200){//判断手机存储位置如查大于0,则执行短信内空,如果等于0,则不执行短信内空
p=duanxin;
for(sji=0;sji<duanxinp1-2-duanxinpos-55;sji++){
//duanxin[sji]=recive[duanxinpos+55+sji];
if (recive[duanxinpos+55+sji] <0x5B && recive[duanxinpos+55+sji]>=0x41) *(p++)=recive[duanxinpos+55+sji]+0x20;
else
*(p++)=recive[duanxinpos+55+sji];
//if (listemp==0x11){
// *(p++)=recive[duanxinpos+55+sji];
//}
/*
if (listemp==0x22){
if (sji%4 >=2){
if (sji%4==2){
*p=recive[duanxinpos+55+sji]-0x30;
*p=*p<<4;
}
if (sji%4==3){
*p=*p | (recive[duanxinpos+55+sji]-0x30);
p++;
}
}
}
*/
}
//duanxin[duanxinp1-2-duanxinpos-55]='\0';
duanxinzx();
//duanxinlist(dxlist);
fhxinxi();
}
}
else{//如果没有就查找结束标志
duanxinp2=findend(duanxinpos+56);
if (duanxinp2<333)//如果有则表明只有第一条短信,则此短信内容结束位置=duanxinp2-1
{
if (dxccwz<200){//判断手机存储位置如查大于0,则执行短信内空,如果等于0,则不执行短信内空
p=duanxin;
for(sji=0;sji<duanxinp2-2-duanxinpos-55;sji++){
//duanxin[sji]=recive[duanxinpos+55+sji];
if (recive[duanxinpos+55+sji] <0x5B && recive[duanxinpos+55+sji]>=0x41) *(p++)=recive[duanxinpos+55+sji]+0x20;
else
*(p++)=recive[duanxinpos+55+sji];
/*
if (listemp==0x11) *(p++)=recive[duanxinpos+55+sji];
if (listemp==0x22){
if (sji%4 >=2){
if (sji%4==2){
*p=recive[duanxinpos+55+sji]-0x30;
*p=*p<<4;
}
if (sji%4==3){
*p=*p | (recive[duanxinpos+55+sji]-0x30);
p++;
}
}
}
*/
}
//duanxin[duanxinp2-2-duanxinpos-55]='\0';
duanxinzx();
//duanxinlist(dxlist);
fhxinxi();
break;
}
}
else//如果没有就退出此次处理
{
break;
}
}
//判断手机存储位置如查大于0,则执行短信内空,如果等于0,则不执行短信内空
}
else{
duanxinp[duanxinpi]=0x0;
for(i=0;i<duanxinwz;i++) {
miof10=1;
if (duanxinwz-1-i>0){
for (sji=1;sji<=duanxinwz-1-i;sji++)
miof10=miof10*10;
}
duanxinp[duanxinpi]=duanxinp[duanxinpi]+(recive[stapos+7+i]-0x30)*miof10;
}
duanxinpi++;
//duanxinp[duanxinpi++]=recive[stapos+7]-0x30;//保存查询未读短信的位置,以便处理完后删除
//提取手机号 开始位置duanxinpos+18,长度11
for(sji=0;sji<11;sji++){
sjh[sji]=recive[duanxinpos+17+sji];//duanxinpos是查找的"位置
}
yizhensjh(&quanxian,&dxccwz);//验证手机号合法性返回手机存储位置和权限
//短信开始位置duanxinpos+56,结束位置
duanxinp1=searchstr(duanxinpos+56);//查找下一个+CMGL:
//listemp=checkisp();
//strcpy(duanxin,"");
for(sji=0;sji<100;sji++){//清空短信缓存
//if (duanxin[sji]==0x0)
// break;
//else
duanxin[sji]=0x0;
}
if (duanxinp1<0xff)//如果有则表明还有第二条短信,则此短信内容结束位置=duanxinp1-1
{
if (dxccwz<200){//判断手机存储位置如查大于0,则执行短信内空,如果等于0,则不执行短信内空
p=duanxin;
for(sji=0;sji<duanxinp1-2-duanxinpos-55;sji++){
//duanxin[sji]=recive[duanxinpos+55+sji];
if (recive[duanxinpos+55+sji] <0x5B && recive[duanxinpos+55+sji]>=0x41) *(p++)=recive[duanxinpos+55+sji]+0x20;
else
*(p++)=recive[duanxinpos+55+sji];
/*
if (listemp==0x11) *(p++)=recive[duanxinpos+55+sji];
if (listemp==0x22){
if (sji%4 >=2){
if (sji%4==2){
*p=recive[duanxinpos+55+sji]-0x30;
*p=*p<<4;
}
if (sji%4==3){
*p=*p | (recive[duanxinpos+55+sji]-0x30);
p++;
}
}
}
*/
}
//duanxin[duanxinp1-2-duanxinpos-55]='\0';
duanxinzx();
//duanxinlist(dxlist);
fhxinxi();
}//判断手机存储位置如查大于0,则执行短信内空,如果等于0,则不执行短信内空
}
else{//如果没有就查找结束标志
duanxinp2=findend(duanxinpos+56);
if (duanxinp2<333)//如果有则表明只有第一条短信,则此短信内容结束位置=duanxinp2-1
{
if (dxccwz<200){//判断手机存储位置如查大于0,则执行短信内空,如果等于0,则不执行短信内空
p=duanxin;
for(sji=0;sji<duanxinp2-2-duanxinpos-55;sji++){
//duanxin[sji]=recive[duanxinpos+55+sji];
if (recive[duanxinpos+55+sji] <0x5B && recive[duanxinpos+55+sji]>=0x41) *(p++)=recive[duanxinpos+55+sji]+0x20;
else
*(p++)=recive[duanxinpos+55+sji];
/*
if (listemp==0x11) *(p++)=recive[duanxinpos+55+sji];
if (listemp==0x22){
if (sji%4 >=2){
if (sji%4==2){
*p=recive[duanxinpos+55+sji]-0x30;
*p=*p<<4;
}
if (sji%4==3){
*p=*p | (recive[duanxinpos+55+sji]-0x30);
p++;
}
}
}
*/
}
//duanxin[duanxinp2-2-duanxinpos-55]='\0';
duanxinzx();
//duanxinlist(dxlist);
fhxinxi();
break;
}//判断手机存储位置如查大于0,则执行短信内空,如果等于0,则不执行短信内空
}
else//如果没有就退出此次处理
{
break;
}
}
}
findpos+=25;
}
else
{
break;
}
}
//删除相应的短信
for(i=0;i<9;i++) {
if (duanxinp[i]){
p=text[4];
length = strlen(p);
for(sji = 0; sji<length; sji++) //依次发送待合成的文本数据
{ SBUF = *p;
while (TI == 0) ;
TI = 0;
p++;
}
dxccwz=0;
//do{
// dxccwz=duanxinp[i]/10;
//}while(dxccwz>0)
//if (duanxinp[i]/100>0)
//{
// cc=duanxinp[i]/10+30;
// SBUF = duanxinp[i];//短信位置
// while (TI==0); //等待发送中断标志位置位
// TI = 0;
//}
for (sji=0;sji<3;sji++){
if ((duanxinp[i]/chushu[sji]>0) && (!dxccwz)){
dxccwz=1;
cc=duanxinp[i]-(duanxinp[i]/chushu[sji])*chushu[sji];
SBUF = duanxinp[i]/chushu[sji]+0x30;//短信位置
while (TI==0); //等待发送中断标志位置位
TI = 0;
continue;
}
if (dxccwz==1){
SBUF = cc/chushu[sji]+0x30;//短信位置
while (TI==0); //等待发送中断标志位置位
TI = 0;
cc=cc-(cc/chushu[sji])*chushu[sji];
}
}
//SBUF = duanxinp[i];//短信位置
//while (TI==0); //等待发送中断标志位置位
//TI = 0; //发送中断标志位清零
SBUF = 0x0d;
while (TI==0); //等待发送中断标志位置位
TI = 0; //发送中断标志位清零
for (sji=0;sji<40;sji++)
{
for (cc=0;cc<10000;cc++){
}
}
duanxinp[i]=0;
}
else
{
break;
}
}
//删除相应的短信
}
p=text[0];
length = strlen(p);
//TR1 = 1; //定时器1用作波特率发生
for(i = 0; i<length; i++) //依次发送待合成的文本数据
{ SBUF = *p;
while (TI == 0) ;
TI = 0;
p++;
}
SBUF = 0x0d;
while (TI==0); //等待发送中断标志位置位
TI = 0; //发送中断标志位清零
//while (RI==0); //等待接收中断标志位置位
//RI = 0; //接收中断标志位清零
//recive[0]=SBUF;
//while (RI==0); //等待接收中断标志位置位
//RI = 0; //接收中断标志位清零
//recive[1]=SBUF;
//if ((recive[0]=='O'||recive[0]=='o')&&(recive[1]=='k'||recive[1]=='K')){
// P2=0xff;
// for (i=0;i<10;i++)
// {
// for (cc=0;cc<10000;cc++){
// }
// }
// P2=0x00;
// for (i=0;i<10;i++)
// {
// for (cc=0;cc<10000;cc++){
// }
// }
//}
/*
for (i=0;i<40;i++)
{
for (cc=0;cc<10000;cc++){
}
}
p=text[1];
length = strlen(p);
for(i = 0; i<length; i++) //依次发送待合成的文本数据
{ SBUF = *p;
while (TI == 0) ;
TI = 0;
p++;
}
SBUF = 0x0d;
while (TI==0); //等待发送中断标志位置位
TI = 0; //发送中断标志位清零
for (i=0;i<40;i++)
{
for (cc=0;cc<10000;cc++){
}
}
p=text[2];
length = strlen(p);
for(i = 0; i<length; i++) //依次发送待合成的文本数据
{ SBUF = *p;
while (TI == 0) ;
TI = 0;
p++;
}
SBUF = 0x1a;
while (TI==0); //等待发送中断标志位置位
TI = 0; //发送中断标志位清零
*/
P2=0x00;
//P1=r;
for (i=0;i<20;i++)
{
for (cc=0;cc<10000;cc++){
}
}
goto Loop_1;
// P2=0xff;
//while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -