|
include "string.h"
#include "delay.h"
#include "uart.h"
#include "timer0.h"
#include "SIMxxx.h"
sbit P10=P1^0; //用于提示程序進(jìn)行到哪里
sbit P11=P1^1; //用于提示程序進(jìn)行到哪里
sbit RUNING_LED=P1^2; //程序中控制的LED燈
unsigned char xdata Display_GPGGA_Buffer[68]={0}; //用于儲(chǔ)存GPGGA的數(shù)據(jù)
unsigned int k=0,qian_a=0,hou_a=0,qian_b=0,hou_b=0,qian_c=0,hou_c=0; //存儲(chǔ)前后逗號(hào)的位置序號(hào)的變量
bit qian_OK=0; //已找出前面的逗號(hào)的標(biāo)志變量
//bit First_Share_OK=0; //已開始LCD顯示的標(biāo)志變量
bit jiajian=1; //進(jìn)行加或減的標(biāo)志變量
//bit Page = 0;
bit Flag_Calc_GPGGA_OK = 0; //GPGGA完整有效的數(shù)據(jù)已收到的標(biāo)志變量
//u8 NUM[][10]={"0030","0031","0032","0033","0034","0035","0036","0037","0038","0039"};//數(shù)字編碼
//char a[10]={0,1,2,3,4,5,6,7,8,9};
//int x;
/************* 外部函數(shù)和變量聲明*****************/
/*******************************************************************************
* 函數(shù)名 : main
* 描述 : 主函數(shù)
* 輸入 :
* 輸出 :
* 返回 :
* 注意 :
*******************************************************************************/
void main(void)
{
unsigned char i = 0;
u8 res;
Uart1Init();
Timer0Init();
EA=1; //開總中斷
res=1;
P10=0;P11=0;
while(res)
{
res=sim900a_work_test();
}
res=1;
while(res)
{
res=sim900a_enmessage_mode_out();
}
P10=1;
res=1;
Delay_ms(10);
clrStruct();
while(1)
{
parseGpsBuffer();
if(Flag_Rec_Message==1)
{
Flag_Rec_Message=0;
res=SIM_HANDLE_MESSAGE_CMD();
if (
Flag_Calc_GPGGA_OK == 1
&& RX_Buffer[1] == 'G'
&& RX_Buffer[3] == 'G'
&& RX_Buffer[4] == 'G'
&& RX_Buffer[5] == 'A'
&& (RX_Buffer[28] == 'N'|| RX_Buffer[28] == 'S')
&& (RX_Buffer[41] == 'E'|| RX_Buffer[41] == 'W')
) //確認(rèn)是否收到"GPGGA"這一幀完整有效的數(shù)據(jù)
if(res)
{
if(res==1)
{
RUNING_LED=1;
// if(res==1)
// {
// for(x=0;x<10;x++)
// {
// a[x]=NUM[x];
// }
// }
res=sim900a_send_chmessage("00310037003600380039003200380039003000310039","4F60597D00680065006C006C006F");
}
else if(res==2)
{
RUNING_LED=0;
// if(res==2)
// {
// for(x=0;x<10;x++)
// {
// a[x]=NUM[x];
// }
// }
res=sim900a_send_chmessage("00310037003600380039003200380039003000310039","4F60597D00680065006C006C006F");
}
}
}
}
}
void errorLog(int num)
{
while (1)
{
UartPrintf("ERROR");
UartPrintASCII(num+0x30);
UartPrintf("\r\n");
}
}
void parseGpsBuffer()
{
char *subString;
char *subStringNext;
char i = 0;
if (Save_Data.isGetData)
{
Save_Data.isGetData = false;
UartPrintf("**************\r\n");
UartPrintf(Save_Data.GPS_Buffer);
for (i = 0 ; i <= 6 ; i++)
{
if (i == 0)
{
if ((subString = strstr(Save_Data.GPS_Buffer, ",")) == NULL)
errorLog(1); //解析錯(cuò)誤
}
else
{
subString++;
if ((subStringNext = strstr(subString, ",")) != NULL)
{
char usefullBuffer[2];
switch(i)
{
case 1:memcpy(Save_Data.UTCTime, subString, subStringNext - subString);break; //獲取UTC時(shí)間
case 2:memcpy(usefullBuffer, subString, subStringNext - subString);break; //獲取UTC時(shí)間
case 3:memcpy(Save_Data.latitude, subString, subStringNext - subString);break; //獲取緯度信息
case 4:memcpy(Save_Data.N_S, subString, subStringNext - subString);break; //獲取N/S
case 5:memcpy(Save_Data.longitude, subString, subStringNext - subString);break; //獲取經(jīng)度信息
case 6:memcpy(Save_Data.E_W, subString, subStringNext - subString);break; //獲取E/W
default:break;
}
subString = subStringNext;
Save_Data.isParseData = true;
if(usefullBuffer[0] == 'A')
Save_Data.isUsefull = true;
else if(usefullBuffer[0] == 'V')
Save_Data.isUsefull = false;
}
else
{
errorLog(2); //解析錯(cuò)誤
}
}
}
}
}
void printGpsBuffer()
{
if (Save_Data.isParseData)
{
Save_Data.isParseData = false;
UartPrintf("Save_Data.UTCTime = ");
UartPrintf(Save_Data.UTCTime);
UartPrintf("\r\n");
if(Save_Data.isUsefull)
{
Save_Data.isUsefull = false;
UartPrintf("Save_Data.latitude = ");
UartPrintf(Save_Data.latitude);
UartPrintf("\r\n");
UartPrintf("Save_Data.N_S = ");
UartPrintf(Save_Data.N_S);
UartPrintf("\r\n");
UartPrintf("Save_Data.longitude = ");
UartPrintf(Save_Data.longitude);
UartPrintf("\r\n");
UartPrintf("Save_Data.E_W = ");
UartPrintf(Save_Data.E_W);
UartPrintf("\r\n");
}
else
{
UartPrintf("GPS DATA is not usefull!\r\n");
}
}
}
|
評(píng)分
-
查看全部評(píng)分
|