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

📄 stc串口gps.c

📁 #include <reg52.h> #include <stdio.h> #include <string.h> #define uchar unsigne
💻 C
📖 第 1 页 / 共 3 页
字号:
#include <reg52.h>
#include <stdio.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define isp_iap_byte_read 0x1;
#define isp_iap_byte_program 0x2;
#define isp_iap_sector_erase 0x3;
#define wait_time 0x1;
sbit p00=P0^0;
sbit p01=P0^1;
sbit p02=P0^2;
sbit p03=P0^3;
sbit p20=P2^0;
sbit p21=P2^1;
sbit p22=P2^2;
sbit p23=P2^3;
sfr ISP_DATA=0xe2;
sfr ISP_ADDRH=0xe3;
sfr ISP_ADDRL=0xe4;
sfr ISP_CMD=0xe5;
sfr ISP_TRIG=0xe6;
sfr ISP_CONTR=0xe7;
sfr AUXR=0x8e;
char epsjh[12];
struct pprec{
char jid[9];
char wed[10];
}rrrec,gpst[26];
char code chushu[3]={100,10,1};
char xdata recive[256]="1234567890";
char code isp1[3][3]={"130","131","133"};
char code isp2[7][3]={"132","134","136","135","137","138","139"};
char xdata gpswz[2][11]={"111111","22222"};
char code hanzi[2][8]={"weidu:","jingdu:"};
//char recive[256]={0x25,0x24,0x47,0x50,0x47,0x47,0x41,0x2C,0x30,0x37,0x32,0x32,0x35,0x38,0x2E,0x35,0x35,0x35,0x2C,0x33,0x36,0x33,0x38,0x2E,0x36,0x37,0x31,0x36,0x2C,0x4E,0x2C,0x31,0x31,0x34,0x32,0x39,0x2E,0x31,0x31,0x31,0x31,0x2C,0x45,0x2C,0x31,0x2C,0x30,0x35,0x2C,0x32,0x2E,0x34,0x2C,0x37,0x30,0x2E,0x39,0x2C}; 

uchar recilen;
void clearrecive();
void fhxinxi();
void fhxxgps();

void yizhensjh(char *quanxian,char *abc);
int duanxinpos;
char duanxinwz;//短信位置位数(例:2位数,3位数)
char xdata sjh[11],duanxin[100];
long miof10;//10的幂
char quanxian;//手机号的操作权限
int sji;//读取手机号短信时的循环变量
uchar stapos;//+CMGL:位置
uchar duanxinp[9];//保存查询未读短信的位置,以便处理完后删除
uchar dxccwz;
uchar duanxinpi;
char dxlist[42];//返回查看当前手机注册名单
int  duanxinp1;//查找+GML:结果
int  duanxinp2;//查找结束结果
char listemp;
int searchstr(int start);
int searchstr2(int start);
int findend(int start);
void searchstrpos(char * arr,int start,char searh,int *reult);
void duanxinzx();
void duanxinlist(char *liss);
void duanxinedit(char *liss);
void duanxindel(char *liss);
int findpos;
char code caozuo[4][4]={"list","edit","dele","posi"};
char code mark[6]={0x0D,0x0A,0x4F,0x4B,0x0D,0x0A};
char code recistart[7]={0x2B,0x43,0x4D,0x47,0x4C,0x3A,0x20};
uchar reciok;
char code gpsdata[7]="$GPGGA,";
char code *text[5]={"at+cmgf=1",
"at+cmgs=",
"test,OK!!",
"at+cmgl",
"at+cmgd="
};
void ss_gpsstore(){
char gpst_sqs,gpst_star;
uint pp,qq;
uint dxy,dxc,dxk;
uchar d_h,d_l;
gpst_sqs=1;
gpst_star=6;
 EA=0;
 
			for(dxy=2;dxy>0;dxy--){
				//读取
				d_h=0x80+8+(dxy-1)*2;
				d_l=0x00;
				pp=0x00;
				pp=pp | d_h;
				pp=pp<<8;
				pp=pp | d_l;
				for(dxc=0;dxc<26;dxc++){
					for (dxk=0;dxk<9;dxk++){
						qq=pp+dxc*19+dxk;
						ISP_ADDRL=qq;
						qq=qq>>8;
						ISP_ADDRH=qq;
						EA=0;
						
						ISP_CONTR=0x81;
						ISP_CMD=isp_iap_byte_read;
						ISP_TRIG=0x46;
						ISP_TRIG=0xb9;
					
						listemp=ISP_DATA;
						ISP_CONTR=0x0;
						ISP_CMD=0x0;
						EA=1;
						gpst[dxc].jid[dxk]=listemp;
						
					}
					for (dxk=0;dxk<10;dxk++){
						qq=pp+dxc*19+dxk+9;
						ISP_ADDRL=qq;
						qq=qq>>8;
						ISP_ADDRH=qq;
						EA=0;
						
						ISP_CONTR=0x81;
						ISP_CMD=isp_iap_byte_read;
						ISP_TRIG=0x46;
						ISP_TRIG=0xb9;
					
						listemp=ISP_DATA;
						ISP_CONTR=0x0;
						ISP_CMD=0x0;
						EA=1;
						gpst[dxc].wed[dxk]=listemp;
						
					}
					
					
					//读取
				}
				////擦除
				d_h=0x80+8+(dxy-1)*2;
				d_l=0x00;
				pp=0x00;
				pp=pp | d_h;
				pp=pp<<8;
				pp=pp | d_l;
				for (dxk=0;dxk<510;dxk++){

					qq=pp+dxk;
					ISP_ADDRL=qq;
					qq=qq>>8;
					ISP_ADDRH=qq;
					EA=0;
					
					ISP_CONTR=0x81;
					ISP_CMD=isp_iap_sector_erase;
					ISP_TRIG=0x46;
					ISP_TRIG=0xb9;
					ISP_CONTR=0x0;
					ISP_CMD=0x0;
					EA=1;
				}
				//擦除
				for(dxc=25;dxc>0;dxc--){

					gpst[dxc]=gpst[dxc-1];
				}
				//读取上一个扇区最后一个数据
				if (dxy>1){
					d_h=0x80+8+(dxy-1-1)*2;
					d_l=0x00;
					pp=0x00;
					pp=pp | d_h;
					pp=pp<<8;
					pp=pp | d_l;
					for (dxk=0;dxk<9;dxk++){
						qq=pp+dxk +25*19;
						ISP_ADDRL=qq;
						qq=qq>>8;
						ISP_ADDRH=qq;
						EA=0;
						ISP_CONTR=0x81;
						ISP_CMD=isp_iap_byte_read;
						ISP_TRIG=0x46;
						ISP_TRIG=0xb9;
					
						listemp=ISP_DATA;
						ISP_CONTR=0x0;
						ISP_CMD=0x0;
						EA=1;
						gpst[0].jid[dxk]=listemp;
						

						
					}
					for (dxk=0;dxk<10;dxk++){
						qq=pp+dxk +25*19+9;
						ISP_ADDRL=qq;
						qq=qq>>8;
						ISP_ADDRH=qq;
						EA=0;
						
						ISP_CONTR=0x81;
						ISP_CMD=isp_iap_byte_read;
						ISP_TRIG=0x46;
						ISP_TRIG=0xb9;
					
						listemp=ISP_DATA;
						ISP_CONTR=0x0;
						ISP_CMD=0x0;
						EA=1;
						gpst[0].wed[dxk]=listemp;
						

					}

				}
				else{
					for (dxc=0;dxc<2;dxc++)
					{
							
						gpst_star=(dxc)?10:9;	
							for(dxk = 0; dxk<gpst_star; dxk++) //
							{	
 								if(dxc==0)	gpst[0].jid[dxk]=gpswz[dxc][dxk];
								else gpst[0].wed[dxk]=gpswz[dxc][dxk];
							}
							
						
					}
					
				}
				//读取上一个扇区最后一个数据
				d_h=0x80+8+(dxy-1)*2;
				d_l=0x00;
				pp=0x00;
				pp=pp | d_h;
				pp=pp<<8;
				pp=pp | d_l;
				for(dxc=0;dxc<26;dxc++){
					//入写
						
					for (dxk=0;dxk<9;dxk++){
						ISP_DATA=gpst[dxc].jid[dxk];
						qq=pp+dxc*19+dxk;
						ISP_ADDRL=qq;
						qq=qq>>8;
						ISP_ADDRH=qq;
						EA=0;
						
						ISP_CONTR=0x81;
						ISP_CMD=isp_iap_byte_program;
						ISP_TRIG=0x46;
						ISP_TRIG=0xb9;
					
						
						ISP_CONTR=0x0;
						ISP_CMD=0x0;
						EA=1;
						
					}
					for (dxk=0;dxk<10;dxk++){
						ISP_DATA=gpst[dxc].wed[dxk];
						qq=pp+dxc*19+dxk+9;
						ISP_ADDRL=qq;
						qq=qq>>8;
						ISP_ADDRH=qq;
						EA=0;
						
						ISP_CONTR=0x81;
						ISP_CMD=isp_iap_byte_program;
						ISP_TRIG=0x46;
						ISP_TRIG=0xb9;
					
						
						ISP_CONTR=0x0;
						ISP_CMD=0x0;
						EA=1;
						
					}
					
					
					//入写
				}

					
			}
			
				
		        
		
	 EA=1;
}
/*
char checkisp(){
uchar cci,cck,ccrslt;
		for(cci=0;cci<3;cci++){
			ccrslt=1;
			for (cck=0;cck<3;cck++){
				if(sjh[cck]!=isp1[cci][cck]) {
				ccrslt=0;
				break;
				}
			
			}
			if (ccrslt){
				return(0x11);

			}
		}

		for(cci=0;cci<3;cci++){
			ccrslt=1;
			for (cck=0;cck<3;cck++){
				if(sjh[cck]!=isp1[cci][cck]) {
				ccrslt=0;
				break;
				}
			
			}
			if (ccrslt){
				return(0x11);

			}
		}
		for(cci=0;cci<7;cci++){
			ccrslt=1;
			for (cck=0;cck<3;cck++){
				if(sjh[cck]!=isp2[cci][cck]) {
				ccrslt=0;
				break;
				}
			
			}
			if (ccrslt){
				return(0x22);

			}
		}
		return(0x0);
		

}
*/
void fhxxgps(){
char *po;
uchar flength;
int fi,fcc;
p20=0x0;

				for (fi=0;fi<40;fi++)
				{
					for (fcc=0;fcc<10000;fcc++){
					}
				}
				p20=0xff;
				//po=recive;
				//flength = strlen(po);
				//SBUF = flength;
				//		while (TI==0); //等待发送中断标志位置位
				//		TI = 0; 
				//for(fi = 0; fi<45; fi++) //依次发送待合成的文本数据
				//{ SBUF = *po;
				//	while (TI == 0) ;
				//	TI = 0;
				//	po++;
				//}
				//SBUF = 0x0d;
				//while (TI==0); //等待发送中断标志位置位
				//TI = 0; //发送中断标志位清零

				for (fi=0;fi<2;fi++)
				{
						po=hanzi[fi];
						flength = strlen(po);
						for(fcc = 0; fcc<flength; fcc++) //依次发送待合成的文本数据
						{ SBUF = *po;
							while (TI == 0) ;
							TI = 0;
							po++;
						}
						po=gpswz[fi];
						flength = strlen(po);
						
						for(fcc = 0; fcc<flength; fcc++) //依次发送待合成的文本数据
						{ SBUF = *po;
							while (TI == 0) ;
							TI = 0;
							po++;
						}
						SBUF = 0x2c;
						while (TI==0); //等待发送中断标志位置位
						TI = 0; //发送中断标志位清零
					
				}

				for (fi=0;fi<40;fi++)
				{
					for (fcc=0;fcc<10000;fcc++){
					}
				}

}
void duanxinposi(char *liss){
char dxi,dxk,flength;
char *po;
strcpy(liss,"");

				for (dxi=0;dxi<2;dxi++)
				{
						po=hanzi[dxi];
						flength = strlen(po);
						for(dxk = 0; dxk<flength; dxk++) //依次发送待合成的文本数据
						{ 
						*(liss++) = *po;
							po++;
						}
						po=gpswz[dxi];
						flength = strlen(po);
						
						for(dxk = 0; dxk<flength; dxk++) //依次发送待合成的文本数据
						{ 
						*(liss++) = *po;
							po++;
						}
						*(liss++) = 0x2c;
						
					
				}
				*(liss++) = 0x00;
}

void duanxindel(char *liss){
char dxp,dxz,dxp1,dxy;
char length;
char *p;
char *rrr[2]={"dele:error!","dele:OK!"};
strcpy(liss,"");
dxp=strpos(duanxin,':');
dxz=duanxin[dxp+1]-0x30-0x1;
dxp1=strpos(duanxin,'#');

	if (dxp1<=0){
	//返回错误信息
		p=rrr[0];
		length = strlen(p);
		TR1 = 1; //定时器1用作波特率发生
		
		for(dxy = 0; dxy<length; dxy++) //依次发送待合成的文本数据
		{ //SBUF = *p;
		//while (TI == 0) ;
		//TI = 0;
		*(liss++)=*p;
		p++;
		}
	}
	else{//执行修改指令
		
		//擦除
		EA=0;
			for(dxy=0;dxy<11;dxy++){
				ISP_ADDRH=0x80+dxz*2;
				ISP_ADDRL=dxy;
				
				ISP_CONTR=0x81;
				ISP_CMD=isp_iap_sector_erase;
				ISP_TRIG=0x46;
				ISP_TRIG=0xb9;
				
			}
		
		//擦除
		ISP_CONTR=0x0;
		ISP_CMD=0x0;
		EA=1;
	 //返回修改正确信息
		p=rrr[1];
		length = strlen(p);
		
		
		for(dxy = 0; dxy<length; dxy++) //依次发送待合成的文本数据
		{ //SBUF = *p;
		//while (TI == 0) ;
		//TI = 0;
		*(liss++)=*p;
		p++;
		}
	}
}
void duanxinedit(char *liss){
char dxp,dxz,dxu,dxp1,dxy;
char length;
char *p;
char *rrr[2]={"edit:error!","edit:OK!"};
strcpy(liss,"");
dxp=strpos(duanxin,':');
dxz=duanxin[dxp+1]-0x30-0x1;
dxp=strpos(duanxin,',');
dxp1=strpos(duanxin,'#');
	if ((dxp1-dxp)!=12){
	//返回错误信息
		p=rrr[0];
		length = strlen(p);
		
		
		for(dxy = 0; dxy<length; dxy++) //依次发送待合成的文本数据

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -