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

📄 main.c

📁 车在定位程序
💻 C
字号:
/*
* Filename: main.c
*/

#include "c8051F020.h"
#include "main.h"
#include <string.h>

extern void Init_Device(void);

char const code AT_GPRS[] = "AT";
char const code ATplus_GPRS[] = "AT+";
char const code Text_GPRS[] = "CMGF=1";
char const code Read_GPRS[] = "CMGR=";
char const code Erase_GPRS[] = "CMGD=";
char const code Define_GPRS[] = "CGDCONT=";
char const code Active_GPRS[] = "CGATT=1";
char const code Set_GPRS[] = "CIPCSGP="; 
char const code Connect_GPRS[] = "CIPSTART=";
char const code Send_GPRS[] = "CIPSEND";
char const code Close_GPRS[] = "CIPCLOSE";
char const code Shut_GPRS[] = "CIPSHUT";
char const code AT_OK[] = "OK";
 


#define MAXSIZE 512
char xdata UartFIFO[MAXSIZE];
char xdata Buf[MAXSIZE];
unsigned char pIndex_In;
unsigned char pIndex_Out;
unsigned char *p=NULL;
unsigned char xdata GateData[27]="07P000000301200804211123118";
unsigned char xdata Powerdata[70]="0301200804251818181003220422041003220322031002220222032501506711110000";
//unsigned char xdata Powerdata[70]="0301111112341111123411111234111112341111123411111234111111111111";


void info_init(void)   //信息初始化
{

	unsigned int i;
	pIndex_In   = 0;
	pIndex_Out = 0;
	for (i=0; i<MAXSIZE; i++)
		{
		  UartFIFO[i] = 0;
		 }
	RTS_Set();
}

unsigned char get_CTS(void)  //得到CTS引脚的状态
{
	unsigned char dat;

	CTS_Set();
	dat = P4;
	dat &= CTS;
	return dat;
}

void gprs_sendbyte(char dat)  //发送字符
{
	bit es0=ES0;
    ES0=0;
	TI0=0;
	SBUF0 = dat;
	while(!TI0);
	TI0 = 0;
    ES0=es0;
}

void gprs_sendstr(char const *str)  //发送字符串
{
	if (!str) return;
	while (1)
	{
		if (*str == '\0') break;
		RTS_Clr();
		while (get_CTS());
		gprs_sendbyte(*str++);
	}
}

void clrBuf(void)  //清空缓冲区
{
	int i;
	for (i=0; i<MAXSIZE; i++)
		{
		  Buf[i] = 0;
		 }
}

/* 发送AT联机命令 */

void Send_AT(void)
{
	info_init();
	do
	{  
	    gprs_sendstr(AT_GPRS);
		gprs_sendbyte(OVER);
		delay(50);
		p=strstr(UartFIFO,AT_OK);
   }while (p == NULL);
} 

/* 设置短信文本 */
void SetText(void)
{  
    unsigned char *p=NULL;
    info_init();
  	do
   {
	gprs_sendstr(ATplus_GPRS);
	gprs_sendstr(Text_GPRS);
    gprs_sendbyte(OVER);
    delay(50);
	p=strstr(UartFIFO,AT_OK);
   }while(p==NULL);

} 

/* 删除短信 */

unsigned char EraseMsg(unsigned char index)
{  
	 info_init();
	 gprs_sendstr(ATplus_GPRS);
	 gprs_sendstr(Erase_GPRS);
     gprs_sendbyte(index);
     gprs_sendbyte(OVER);
     delay(200);
	 while(1)
	 {
	  p=strstr(UartFIFO,AT_OK);
	  if(p!=NULL)
	 {
	    return 1;	
	 }
     }
   return 0;
} 

/* 读取短信内容 */

char const code Ask_No[]="+CMGR:0,0";
char const code ERROR[]="ERROR";
char const code Ask_Gprs[]="AA55";

unsigned char ReadMsg(unsigned char index)
{   
    int i=0;
    info_init();
	gprs_sendstr(ATplus_GPRS);
	gprs_sendstr(Read_GPRS);
    gprs_sendbyte(index);
    gprs_sendbyte(OVER);
    delay(300);

   
    p=strstr(UartFIFO,ERROR);
	if(p!=NULL)
		{
			gprs_sendstr(AT_GPRS);
			return 0;
		}
	p=strstr(UartFIFO,Ask_No);
	if(p!=NULL)
		{
			return 0;
		}
  p=strstr(UartFIFO,Ask_Gprs);
    if(p==NULL)
		{
			return 0;
		}
		
	for(i=0;i<sizeof(Buf);i++)
	{
		Buf[i]=*p++;
	}
	if(EraseMsg(index)==0)
		{
			return 0;
		}

    return 1;
  
}


void Init_GPRS(void)
{
   Send_AT();
   SetText();
   //p=NULL;
}

/*  首先定义PDP移动场景 */

unsigned char ip[] = "1,\"IP\",\"CMNET\"";
void Define(unsigned char *mode)
{
	info_init();
	do
	{   
	    gprs_sendstr(ATplus_GPRS);
	    gprs_sendstr(Define_GPRS);
	    gprs_sendstr(mode);
		gprs_sendbyte(OVER);
		delay(50);
		p=strstr(UartFIFO,AT_OK);
   }while (p == NULL);
} 

/* 激活PDP,获得IP地址 */

void Active(void)
{  
    unsigned char *p=NULL;
    info_init();
  	do
   {
	gprs_sendstr(ATplus_GPRS);
	gprs_sendstr(Active_GPRS);
    gprs_sendbyte(OVER);
    delay(50);
	p=strstr(UartFIFO,AT_OK);
   }while(p==NULL);

} 

/* 设置模块连接方式为GPRS连接,接入点为“CMNET” */

unsigned char CMNET[] = "1,\"CMNET\"";
void SetGprs(unsigned char *mode)
{
	info_init();
	do
	{   
	    gprs_sendstr(ATplus_GPRS);
	    gprs_sendstr(Set_GPRS);
	    gprs_sendstr(mode);
		gprs_sendbyte(OVER);
		delay(50);
		p=strstr(UartFIFO,AT_OK);
   }while (p == NULL);
}

/* 建立连接 */ 

unsigned char SetConnect[] = "\"UDP\",\"218.199.82.13\",\"5000\"";
char const code AT_ALREADY[] = "ALREADY";
void ConnectGprs(unsigned char *mode)
{
    unsigned char *q = NULL;
	info_init();
	do
	{   
	    gprs_sendstr(ATplus_GPRS);
	    gprs_sendstr(Connect_GPRS);
	    gprs_sendstr(mode);
		gprs_sendbyte(OVER);
		delay(200);
		p=strstr(UartFIFO,AT_OK);
		q=strstr(UartFIFO,AT_ALREADY);
   }while (p == NULL && q == NULL);
}

void Init_Send(void)
{
  Define(ip);
  Active();
  SetGprs(CMNET);
  ConnectGprs(SetConnect);
}

char const code AT_CMD[] = ">";
char const code SEND_OK[] = "SEND OK";
void SendData_GPRS(unsigned char *str)
{
	unsigned char *p=NULL;
    info_init();
  	do
   {
	gprs_sendstr(ATplus_GPRS);
	gprs_sendstr(Send_GPRS);
    gprs_sendbyte(OVER);
    delay(150);
	p=strstr(UartFIFO,AT_CMD);
   }while(p==NULL);

    info_init();
    do
   {
   	 p=NULL;
   	 gprs_sendstr(str);
     //delay(200);
     gprs_sendbyte(SEND);
	 delay(300);
     p=strstr(UartFIFO,SEND_OK);
   }while(p==NULL);

}


/* 关闭GPRS连接 */
char const code Close_OK[] = "CLOSE OK";
char const code Shut_OK[] = "SHUT OK";
void CloseConnect(void)
{  
    unsigned char *p=NULL;
    info_init();
  	do
   {
	gprs_sendstr(ATplus_GPRS);
	gprs_sendstr(Close_GPRS);
    gprs_sendbyte(OVER);
    delay(50);
	p=strstr(UartFIFO,Close_OK);
   }while(p==NULL);

} 

void ShutConnect(void)
{  
    unsigned char *p=NULL;
    info_init();
  	do
   {
	gprs_sendstr(ATplus_GPRS);
	gprs_sendstr(Shut_GPRS);
    gprs_sendbyte(OVER);
    delay(50);
	p=strstr(UartFIFO,Shut_OK);
   }while(p==NULL);

} 

void CloseGPRS(void)
{
   CloseConnect();
   ShutConnect();	
}


void main(void)

{   
	EA = 0;
	WDTCN = 0xDE;			// 关看门狗
	WDTCN = 0xAD;
	
	Init_Device();
	info_init();

    EA = 1;
	Init_GPRS();
        
    while(1)
  {  
     int i;
     unsigned char id[1];
	 do 
   { 
     delay(300);
  	 p=strstr(UartFIFO,"SM");   
     	  
   }while(p==NULL);

     ReadMsg('1');

	 p=strstr(Buf,Ask_Gprs);
	 if(p!=NULL)
	{ 
	    p=p+4;
    	for(i=0;i<2;i++)
		{
			id[i]=*p++;
		}
	 clrBuf();
	}
     if(id[0]=='0'&&id[1]=='1')
	{
	   //RTC();
	   break;
	}
	 if(id[0]=='0'&&id[1]=='3')
	{
	  Init_Send();
	  SendData_GPRS(GateData);
	  CloseGPRS();
	  //UPimage();
	}
	if(id[0]=='0'&&id[1]=='7')
	{
	  //GetGatedata();	
	  Init_Send();
	  //SendData_GPRS(GateData);
	  SendData_GPRS(Powerdata);
      CloseGPRS();
      // UPdata();
   	}	
   }

}

void UART0(void) interrupt 4 using 1
{
	if (RI0)
	{
		RI0 = 0;
	    UartFIFO[pIndex_In] = SBUF0;
		pIndex_In = (pIndex_In + 1)%MAXSIZE;
		
	}
}

⌨️ 快捷键说明

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