//举例:$GPGGA,093908.00,3114.55592,N,11717.22039,E,2,08,1.19,33.4,M,-1.9,M,,0000*76
//RX_Buffer[4]是G RX_Buffer[6]是, RX_Buffer[13]是.
/*
当temp=$的时候,Flag_GPS_OK=0
当存储完一帧数据,Flag_GPS_OK=1
此时RX_Buffer的60个数组已存储好一帧数据的
例如:$GPGGA,093908.00,3114.55592,N,11717.22039,E,2,08,1.19,33.4,M,-1.9,M,,0000*76
RX_Buffer[4]= G
RX_Buffer[6]= ,
RX_Buffer[13]= .
*/
if(Flag_GPS_OK == 1 && RX_Buffer[4] == 'G' && RX_Buffer[6] == ',' && RX_Buffer[13] == '.')//确定是否收到"GPGGA"这一帧数据
{
for( i = 0; i < 68 ; i++)
{
Display_GPGGA_Buffer[i] = RX_Buffer[i];//循环取出GPGGA这一帧数据中(一连串字符)的每一个字符 并保存起来
}
Hour = (Display_GPGGA_Buffer[7]-0x30)*10+(Display_GPGGA_Buffer[8]-0x30)+8;//UTC时间转换到北京时间 UTC+8
//0x30为ASCII转换为数字
if( Hour >= 24)//如果累计满24小时则溢出
{
Hour %= 24;//获取当前Hour
Flag_OV = 1;//日期进位
}
else
{
Flag_OV = 0;
}
Min_High = Display_GPGGA_Buffer[9];//将保存下来的GPGGA这一帧数据的数组[9]的字符取出 赋值给Min_High
Min_Low = Display_GPGGA_Buffer[10];
Sec_High = Display_GPGGA_Buffer[11];
Sec_Low = Display_GPGGA_Buffer[12];
Flag_Calc_GPGGA_OK = 1;//标志位更新
}
if(Flag_Calc_GPGGA_OK == 1)//如果数据全部保存下来,并保存到我们的缓存数组中
{
Flag_Calc_GPGGA_OK = 0;//标志位清零 保证下一帧数据的正常获取
LCD1602_write_com(0x80);//设置指针
LCD1602_write_data(Hour/10+0x30);//LCD1602显示数字:根据ASCII表我们需要加上0x30.比如Hour=1,那我们怎么在显示屏上显示1?就要加上0x30
LCD1602_write_data(Hour%10+0x30);
LCD1602_write_data(':');//在显示屏上显示分号
LCD1602_write_data(Min_High);
LCD1602_write_data(Min_Low);
LCD1602_write_data(':');
LCD1602_write_data(Sec_High);
LCD1602_write_data(Sec_Low);
LCD1602_write_word(" ");//在显示屏上显示两个空格
LCD1602_write_data(Display_GPGGA_Buffer[54]);
LCD1602_write_data(Display_GPGGA_Buffer[55]);
LCD1602_write_data(Display_GPGGA_Buffer[56]);
LCD1602_write_data(Display_GPGGA_Buffer[57]);
LCD1602_write_word("m");
/*下面是显示经纬度的具体操作*/
LCD1602_write_com(0x80+0x40); //设置指针(显示屏显示的起点)
LCD1602_write_data(Display_GPGGA_Buffer[28]); //N 或者 S
//举例3114.55592
//[17]=3
//[18]=1
//[19]=1
//[20]=4
LCD1602_write_data(Display_GPGGA_Buffer[17]); //纬度
LCD1602_write_data(Display_GPGGA_Buffer[18]); //纬度
LCD1602_write_data(0xdf); //度 液晶指令表里面的度数(那个圆圈)
LCD1602_write_data(Display_GPGGA_Buffer[19]);]//纬度
LCD1602_write_data(Display_GPGGA_Buffer[20]);]//纬度
LCD1602_write_word("'"); //秒
LCD1602_write_data(Display_GPGGA_Buffer[42]); //E 或者 W
//举例11717.22039
//[30]=3
//[31]=1
//[32]=1
//[33]=4
LCD1602_write_data(Display_GPGGA_Buffer[30]); //经度
LCD1602_write_data(Display_GPGGA_Buffer[31]);
LCD1602_write_data(Display_GPGGA_Buffer[32]);
LCD1602_write_data(0xdf); //度 液晶指令表里面的度数(那个圆圈)
LCD1602_write_data(Display_GPGGA_Buffer[33]);
LCD1602_write_data(Display_GPGGA_Buffer[34]);
LCD1602_write_word("'");
}