⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stc串口gps.c

📁 #include <reg52.h> #include <stdio.h> #include <string.h> #define uchar unsigne
💻 C
📖 第 1 页 / 共 3 页
字号:
		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 + -