基于单片机的GPS开发 (six) 程序解析

//举例:$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("'");					
}	

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值