#include "stc8.h"
#include
#include "GPS.h"
unsigned char RX_Buffer[120]={0};
unsigned char RX_Count = 0;
unsigned char Hour = 0,Min_High = 0,Min_Low = 0,Sec_High = 0,Sec_Low = 0,Min=0,Sec=0;
unsigned char Month = 0,Day = 0,Month_High = 0, Month_Low = 0,Day_Low = 0,Day_High = 0, Year_High = 0,Year_Low = 0;
unsigned int Year = 0;
bit Flag_GPS_OK = 0;
unsigned char MaxDay = 0;
bit Page = 0;
unsigned char xdata Display_GPGGA_Buffer[120]={0};
unsigned char xdata Display_GPRMC_Buffer[120]={0};
bit Flag_OV = 0;
bit Flag_Calc_GPGGA_OK = 0;
bit Flag_Calc_GPRMC_OK = 0;
void gps(void)
{
int ii;
int jj;
Flag_OV =0;
if(RX_Buffer[0]==0x24&Flag_GPS_OK==1&RX_Buffer[1]==0x47&RX_Buffer[2]==0x50&RX_Buffer[4]==0x47&RX_Buffer[5]==0x41&RX_Buffer[6]==0x2C&RX_Buffer[17]==0x2C) //确定是否收到"GPGGA"这一帧数据
{
Flag_GPS_OK=0;
// Flag_OV =1;
for( ii = 0; ii < 120 ; ii++)
{
Display_GPGGA_Buffer[ii] = RX_Buffer[ii];
}
}
if(RX_Buffer[56]==0X2c&RX_Buffer[63]==0x2c&Flag_GPS_OK==1&RX_Buffer[18] == 0x41&RX_Buffer[0] == 0x24 & RX_Buffer[1] == 0x47 & RX_Buffer[2] == 0x50& RX_Buffer[3] == 0x52& RX_Buffer[4] == 0x4d& RX_Buffer[5] == 0x43) //确定是否收到"GPRMC"这一帧数据
{
Flag_GPS_OK=0;
Flag_OV =1;
for( jj = 0; jj < 120 ; jj++)
{
Display_GPRMC_Buffer[jj] = RX_Buffer[jj];
}
Year_High = Display_GPRMC_Buffer[61];
Year_Low = Display_GPRMC_Buffer[62];
Month_High = Display_GPRMC_Buffer[59];
Month_Low = Display_GPRMC_Buffer[60];
Day_High = Display_GPRMC_Buffer[57];
Day_Low = Display_GPRMC_Buffer[58];
Min_High = Display_GPRMC_Buffer[9];
Min_Low = Display_GPRMC_Buffer[10];
Sec_High = Display_GPRMC_Buffer[11];
Sec_Low = Display_GPRMC_Buffer[12];
// Day = (Day_High - 0x30) * 10 + (Day_Low-0x30); //日 加一
Month = (Month_High - 0x30) * 10 + (Month_Low - 0x30);
Year = (Year_High - 0x30) * 10 + (Year_Low - 0x30);
Hour = ((Display_GPRMC_Buffer[7]-0x30)*10+(Display_GPRMC_Buffer[8]-0x30)+8)%24; //UTC时间转换到北京时间 UTC+8
//0x30为ASCII转换为数字
if(Hour<=7)
{
Day = (Day_High - 0x30) * 10 + (Day_Low-0x30)+1; //日 加一
}
else
{
Day = (Day_High - 0x30) * 10 + (Day_Low-0x30);
}
Min = (Display_GPRMC_Buffer[9]-0x30)*10+(Display_GPRMC_Buffer[10]-0x30);
Sec= (Display_GPRMC_Buffer[11]-0x30)*10+(Display_GPRMC_Buffer[12]-0x30);
}
}
void UTCDate2LocalDate(void)
{
Day = (Day_High - 0x30) * 10 + (Day_Low-0x30) + 1; //日 加一
Month = (Month_High - 0x30) * 10 + (Month_Low - 0x30);
Year = 2000 + (Year_High - 0x30) * 10 + (Year_Low - 0x30);
}