亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gps.c

?? 51的GPS開發(fā)的NMEA數(shù)據(jù)讀取與解析.rar
?? C
字號:
/*************************************************/
//項  目:水利數(shù)碼通
//文件名:UART.C
//功  能: 串口0、1數(shù)據(jù)收發(fā)處理,軟件串口處理
//作  者:楊世峰
//日  期:2004-03-13
/*************************************************/

#include "upsd3300.h"
#include "hardware.h"
#include "gps.h"
#include "uart.h"

#include "string.h"
#include "const.h"
//////////////////////////////////
//====================變量定義=====================
extern	uchar	idata	ucGpsCommandStatus;//GPS信息處理狀態(tài)機
extern	uchar	xdata	ucGPSCommand[8];//GPS命令標(biāo)識頭
extern	uchar	xdata	ucGPSDataBuff[82];//GPS數(shù)據(jù)緩存
extern	uchar	xdata	ucCheckSum[2];//GPS命令校驗字節(jié)
extern	uchar idata	ucGPSBuffCnt;
//每月最大天數(shù)表
extern	uchar xdata GPS_Date[];
extern	uint	idata	unInBufCntComm1;	//緩沖區(qū)計數(shù)
extern	union 	ByteToFloatOrLong 	xdata 	ByteChang;

///////////////////////////////////
extern	INFO_GPS			xdata InfoGPS;
extern	INFO_GPS			xdata NowInfoGPS;//實時gps 信息
extern 	INFO_STAR		xdata ucSNR[12];
////////////////////////////////////
//=================================================
//GPS數(shù)據(jù)處理主循環(huán)
//=================================================
void  GPS_ProcessNMEA(void)
{
	uchar idata uch0;

	while(unInBufCntComm1)
	{
		switch (ucGpsCommandStatus)
		{
			case 0:
         {
				ReadCharComm1(&uch0);
				if (uch0=='$')
				{
					ucGpsCommandStatus++;
				}
				break;
			}

         case 1:
			{
				ReadCharComm1(&uch0);
				if (uch0=='G')
					ucGpsCommandStatus++;
				else
					ucGpsCommandStatus=0;
				break;
			}

			case 2:
			{
				ReadCharComm1(&uch0);
				if (uch0=='P')
					ucGpsCommandStatus++;
				else
					ucGpsCommandStatus=0;
				break;
			}

			case 3:
			{
				if(unInBufCntComm1 >= 3)
				{
					ReadCharComm1(&ucGPSCommand[0]);
					ReadCharComm1(&ucGPSCommand[1]);
					ReadCharComm1(&ucGPSCommand[2]);
					ucGPSCommand[3] = '\0';
					ucGPSDataBuff[0] = 'G';
					ucGPSDataBuff[1] = 'P';
					strcpy(ucGPSDataBuff+2,ucGPSCommand);
					ucGPSBuffCnt = 5;
					ucGpsCommandStatus++;
				}
				break;
			}

       	case 4: //process command
			{
				if(unInBufCntComm1 < 2) 
					break;
				else
				{
					if(ucGPSBuffCnt>80)
					{
						ucGpsCommandStatus = 0;
						break;
					}
					ReadCharComm1(ucGPSDataBuff+ucGPSBuffCnt);
					ReadCharComm1(ucGPSDataBuff+ucGPSBuffCnt+1);
					if((ucGPSDataBuff[ucGPSBuffCnt] =='\r')\
							&&(ucGPSDataBuff[ucGPSBuffCnt+1] =='\n'))
					{
						ucCheckSum[0] =ucGPSDataBuff[ucGPSBuffCnt-2] - 0x30;
						ucCheckSum[1] =ucGPSDataBuff[ucGPSBuffCnt-1] - 0x30;;
						if(GPS_CheckCommand())
						{
							ProcessGPSCommand();
						}
						ucGpsCommandStatus=0;
						break;
					}
					else
					{
						if(ucGPSDataBuff[ucGPSBuffCnt+1] =='\r')
							ucGpsCommandStatus++;
					}
					ucGPSBuffCnt+=2;
				}
				break;
        	}//end of case 4
			case 5:
			{
				if(ucGPSBuffCnt>81)
				{
					ucGpsCommandStatus = 0;
					break;
				}
				ReadCharComm1(ucGPSDataBuff+ucGPSBuffCnt);
				if(ucGPSDataBuff[ucGPSBuffCnt] =='\n');
				{
					ucCheckSum[0] =ucGPSDataBuff[ucGPSBuffCnt-3] - 0x30;
					ucCheckSum[1] =ucGPSDataBuff[ucGPSBuffCnt-2] - 0x30;;
					if(GPS_CheckCommand())
					{
						ProcessGPSCommand();
					}
				}
				ucGpsCommandStatus=0;
				break;
			}
			default :
				ucGpsCommandStatus=0;
		}//end of switch1
	}//end of if
}
////////////////////////
void	ProcessGPSCommand(void)
{
	if(strcmp(ucGPSCommand,"GGA") == 0)	
	{
		GPS_ProcessGGA();
	}
	else if(strcmp(ucGPSCommand,"GSV") == 0)
	{
		GPS_ProcessGSV();
	}
	else if(strcmp(ucGPSCommand,"RMC") == 0)
	{
		GPS_ProcessRMC();
	}
}
//--------------------------------------------------
//GPS命令異或校驗
//--------------------------------------------------
uchar GPS_CheckCommand( void )
{
	uchar idata uci;
	uint  idata Sum = 0;

	if(ucCheckSum[0]>0x0f)	ucCheckSum[0] -=0x07;
	if(ucCheckSum[1]>0x0f)	ucCheckSum[1] -=0x07;
	Sum = ucCheckSum[0] << 4;
	Sum +=ucCheckSum[1];
	for(uci=0; (ucGPSDataBuff[uci] != '*') && (uci < 80);uci++)
    	Sum ^=  ucGPSDataBuff[uci];

   if (Sum != 0)
		return FALSE;
	else
    	return TRUE;
}

//----------------------------------------
// GPS變量清空
//----------------------------------------
void GPS_ClearData(PINFO_GPS pInfoGPS)
{
	uchar xdata i;
	uchar *pb;

	pb = pInfoGPS->Reserved;
	for(i = 0;i < sizeof(INFO_GPS) - 16;i++)
		*pb++ = 0;
	for(i=0;i<12;i++)
	{
		ucSNR[i].ucNumber = 0;
		ucSNR[i].ucElevation = 0;
		ucSNR[i].unAzimuth = 0;
		ucSNR[i].ucSNR = 0;
	}
}
//////////////////////////////////
//得到第ucSum個都號的位置
///////////////////////////////////
uchar	GetNComma(uchar ucNum)
{
	uchar idata i,j;
	
	//*,c1,c2,\r,\n
	for(i = 5,j=0;i<77;i++)
	{
		if(ucGPSDataBuff[i] == ',')
		{
			j++;
			if(j == ucNum)
				return i;
		}		
	}
	return 0;
}
//------------------------------------------------
//	處理GGA命令	
//------------------------------------------------
void GPS_ProcessGGA(void)
{
	uchar  idata i,sign;
	//latitude
	i=GetNComma(2);
	if(i>0)
		i++;
	else
		return;
	if(ucGPSDataBuff[i]!=',')
	{
		NowInfoGPS.Info_Lat.ucDegree = (ucGPSDataBuff[i] - 0x30)*10+\
								   (ucGPSDataBuff[i+1]-0x30);
		NowInfoGPS.Info_Lat.ucMinute = (ucGPSDataBuff[i+2] -0x30)*10+\
								   (ucGPSDataBuff[i+3]-0x30);
		NowInfoGPS.Info_Lat.unSecond = (uint)((ucGPSDataBuff[i+5]-0x30)*1000+\
								   (ucGPSDataBuff[i+6]-0x30)*100+\
								   (ucGPSDataBuff[i+7]-0x30)*10+\
								   (ucGPSDataBuff[i+8]-0x30))*6;
		i += 10;
	}
	else
	{
		NowInfoGPS.Info_Lat.ucDegree = 0x00;
		NowInfoGPS.Info_Lat.ucMinute = 0x00;
		NowInfoGPS.Info_Lat.unSecond = 0x00;
		i++;
	}

	if(ucGPSDataBuff[i]!=',')
	{
		if(ucGPSDataBuff[i] == 'S')
			NowInfoGPS.Info_Lat.ucSign = 1;//s
		else
			NowInfoGPS.Info_Lat.ucSign = 0;//n
		i += 2;
	}
	else
	{
		i++;
	}
	//longitude
	if(ucGPSDataBuff[i]!=',')
	{
		NowInfoGPS.Info_Lon.ucDegree = (ucGPSDataBuff[i]-0x30)*100+\
									(ucGPSDataBuff[i+1]-0x30)*10+\
									(ucGPSDataBuff[i+2]-0x30);
		NowInfoGPS.Info_Lon.ucMinute = (ucGPSDataBuff[i+3]-0x30)*10+\
									(ucGPSDataBuff[i+4]-0x30);
		NowInfoGPS.Info_Lon.unSecond = (uint)((ucGPSDataBuff[i+6]-0x30)*1000+\
									(ucGPSDataBuff[i+7]-0x30)*100+\
									(ucGPSDataBuff[i+8]-0x30)*10+\
									(ucGPSDataBuff[i+9]-0x30))*6;
		i+=11;
	}
	else
	{
		NowInfoGPS.Info_Lon.ucDegree = 0x00;
		NowInfoGPS.Info_Lon.ucMinute = 0x00;
		NowInfoGPS.Info_Lon.unSecond = 0x00;
		i++;
	}

	if(ucGPSDataBuff[i]!=',')
	{
		if(ucGPSDataBuff[i]=='W')
			NowInfoGPS.Info_Lon.ucSign = 1;//w
		else
			NowInfoGPS.Info_Lon.ucSign = 0;//e
		i+=2;
	}
	else
	{
		i++;
	}

	if(ucGPSDataBuff[i]!=',')
	{
		NowInfoGPS.ucDStatue = ucGPSDataBuff[i]-0x30;
		i+=2;
	}
	else
	{
		NowInfoGPS.ucDStatue = 0x00;
		i++;
	}

	if(ucGPSDataBuff[i]!=',')
	{
		NowInfoGPS.ucSvSum = (ucGPSDataBuff[i]-0x30)*10+\
							 (ucGPSDataBuff[i+1]-0x30);
		i+=3;
	}
	else
	{
		NowInfoGPS.ucSvSum = 0x00;
		i++;
	}

	if(ucGPSDataBuff[i]!=',')
	{
		NowInfoGPS.unDop =(uint)((ucGPSDataBuff[i]-0x30)*10+\
					  (ucGPSDataBuff[i+2]-0x30));
		i+=4;
	}
	else
	{
		NowInfoGPS.unDop = 0x00;
		i++;
	}
	NowInfoGPS.iHigh = 0;
	if(ucGPSDataBuff[i] == '-')
	{
		sign = 1;
		i++;
	}
	for(; (ucGPSDataBuff[i]!='.') && (ucGPSDataBuff[i]!=','); i++)//舍去高度的小數(shù)
	{
		NowInfoGPS.iHigh *= 10;
		NowInfoGPS.iHigh += (ucGPSDataBuff[i]-0x30);
	}
	if(sign ==1)
		NowInfoGPS.iHigh *= -1;
	if(NowInfoGPS.iHigh > 90000)
		NowInfoGPS.iHigh = 0;
}

//-------------------------------------------------
//處理GSV命令
//-------------------------------------------------
void GPS_ProcessGSV(void)
{
	uchar idata i,frame,j,k,Statellite,cnt;

	frame = 0;
	i=GetNComma(2);
	if(i>0)
		i++;
	else
		return;
	if(ucGPSDataBuff[i]!=',')
	{
		frame = ucGPSDataBuff[i]-0x30;
		i+=2;
	}
	else
	{
		return;
	}

	Statellite = 0;
	for(;ucGPSDataBuff[i]!=',';i++)
	{
		Statellite *= 10;
		Statellite += ucGPSDataBuff[i]-0x30;
	}
	i++;
	if(ucGPSDataBuff[i]!=',')
	{
		k = (frame -1)*4;

		for(j=0;j<4;j++)
		{
			ucSNR[j+k].ucNumber = 0;
			ucSNR[j+k].unAzimuth = 0;
			ucSNR[j+k].ucElevation = 0;
			ucSNR[j+k].ucSNR = 0;
		}
		if(Statellite>=frame*4)
			cnt = 4;
		else
			cnt = Statellite - k;

		for(j=0;j<cnt;j++)
		{
			for(;ucGPSDataBuff[i]!=',';i++)
			{
				ucSNR[j+k].ucNumber *= 10;
				ucSNR[j+k].ucNumber += ucGPSDataBuff[i]-0x30;
			}
			i++;
			for(;ucGPSDataBuff[i]!=',';i++)
			{
				ucSNR[j+k].ucElevation *= 10;
				ucSNR[j+k].ucElevation += ucGPSDataBuff[i]-0x30;
			}
			i++;
			for(;ucGPSDataBuff[i]!=',';i++)
			{
				ucSNR[j+k].unAzimuth *= 10;
				ucSNR[j+k].unAzimuth += ucGPSDataBuff[i]-0x30;
			}
			i++;
			for(;(ucGPSDataBuff[i]!=',')&&(ucGPSDataBuff[i]!='*');i++)
			{
				ucSNR[j+k].ucSNR *=10;
				ucSNR[j+k].ucSNR += ucGPSDataBuff[i]-0x30;
			}
			i++;
		}
	}
}

//-------------------------------------------------
//處理RMC命令
//-------------------------------------------------
void GPS_ProcessRMC(void)
{
	uchar idata i;	
	uint	idata temp;

	i=GetNComma(1);
	if(i>0)
		i++;
	else
		return;
/////////////////hhmmss
	if(ucGPSDataBuff[i]!=',')
	{
		NowInfoGPS.Info_DateTime.ucHour = (ucGPSDataBuff[i]-0x30)*10+(ucGPSDataBuff[i+1]-0x30);	
		//調(diào)整為北京時間
		NowInfoGPS.Info_DateTime.ucHour += 8;
		NowInfoGPS.Info_DateTime.ucHour%=24;
		NowInfoGPS.Info_DateTime.ucMinute = (ucGPSDataBuff[i+2]-0x30)*10+(ucGPSDataBuff[i+3]-0x30);
		NowInfoGPS.Info_DateTime.ucSecond = (ucGPSDataBuff[i+4]-0x30)*10+(ucGPSDataBuff[i+5]-0x30);
		i += 11;
	}
	else
	{
		NowInfoGPS.Info_DateTime.ucHour = 0x00;
		NowInfoGPS.Info_DateTime.ucMinute = 0x00;
		NowInfoGPS.Info_DateTime.ucSecond = 0x00;
		i++;
	}
//////////////
	i=GetNComma(9);
	if(i>0)
		i++;
	else
		return;
	if(ucGPSDataBuff[i]!=',')
	{
		NowInfoGPS.Info_DateTime.ucDay = (ucGPSDataBuff[i]-0x30)*10+(ucGPSDataBuff[i+1]-0x30);				
		NowInfoGPS.Info_DateTime.ucMonth = (ucGPSDataBuff[i+2]-0x30)*10+(ucGPSDataBuff[i+3]-0x30);
		NowInfoGPS.Info_DateTime.ucYear = (ucGPSDataBuff[i+4]-0x30)*10+(ucGPSDataBuff[i+5]-0x30);
		//時區(qū)調(diào)整
		//每天的凌晨0點0分0秒至早上7點59分59秒這段時間需要調(diào)整
		if(NowInfoGPS.Info_DateTime.ucHour < 8)
		{
			NowInfoGPS.Info_DateTime.ucDay ++;
			//天數(shù)如果大于本月的最大天數(shù),月加1,天數(shù)返回1
			if(NowInfoGPS.Info_DateTime.ucDay > GPS_Date[NowInfoGPS.Info_DateTime.ucMonth])
			{
				//閏年的2月的最大天數(shù)處理
				if(NowInfoGPS.Info_DateTime.ucMonth == 2)
				{
					temp = 2000+NowInfoGPS.Info_DateTime.ucYear;
					if(((temp%4 == 0) && (temp%100 != 0)) || (temp%400 == 0))//閏年
					{
						//閏年2月29日的處理
						if(NowInfoGPS.Info_DateTime.ucDay > 29)
						{
							NowInfoGPS.Info_DateTime.ucDay = 1;
							NowInfoGPS.Info_DateTime.ucMonth ++;
						}
					}
					else//非閏年
					{
						NowInfoGPS.Info_DateTime.ucDay = 1;
						NowInfoGPS.Info_DateTime.ucMonth ++;
					}
						
				}
				//其它月份的天數(shù)處理
				else
				{
					NowInfoGPS.Info_DateTime.ucDay = 1;
					NowInfoGPS.Info_DateTime.ucMonth ++;	
					//12月最大天數(shù),年加1
					if(NowInfoGPS.Info_DateTime.ucMonth > 12)
					{
						NowInfoGPS.Info_DateTime.ucYear ++;
						NowInfoGPS.Info_DateTime.ucMonth = 1;
					}
				}
			}
		}
	}
	else
	{
		NowInfoGPS.Info_DateTime.ucDay = 0x00;
		NowInfoGPS.Info_DateTime.ucMonth = 0x00;
		NowInfoGPS.Info_DateTime.ucYear = 0x00;
	}
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲高清三级视频| 91麻豆国产在线观看| 婷婷综合在线观看| 亚洲午夜私人影院| 亚洲欧美经典视频| 亚洲免费在线播放| 亚洲精品菠萝久久久久久久| 国产精品福利一区二区| 中文字幕一区二区视频| 自拍偷拍国产精品| 亚洲免费观看高清完整版在线| 亚洲欧洲另类国产综合| 亚洲女同女同女同女同女同69| 曰韩精品一区二区| 亚洲电影激情视频网站| 同产精品九九九| 麻豆国产精品视频| 国产一区日韩二区欧美三区| 国产精品白丝av| 成人福利视频网站| 色先锋久久av资源部| 欧美亚洲图片小说| 欧美一卡二卡在线观看| 精品久久久久久久久久久院品网| 精品国产电影一区二区| 欧美国产亚洲另类动漫| 亚洲精品少妇30p| 婷婷久久综合九色国产成人| 日日嗨av一区二区三区四区| 精品一区二区三区的国产在线播放| 激情文学综合网| 成人在线视频一区二区| 91美女蜜桃在线| 欧美日韩大陆在线| 亚洲精品一区二区三区蜜桃下载| 国产清纯白嫩初高生在线观看91 | 91精品国模一区二区三区| 91精品国产91综合久久蜜臀| 久久久久青草大香线综合精品| 国产精品夫妻自拍| 天堂va蜜桃一区二区三区漫画版| 经典三级视频一区| 色诱亚洲精品久久久久久| 欧美人与z0zoxxxx视频| 26uuu国产一区二区三区| 亚洲色图视频网| 青青草原综合久久大伊人精品优势| 国产精品69久久久久水密桃| 在线视频国内一区二区| 精品免费国产二区三区 | 高清日韩电视剧大全免费| 色综合天天性综合| 欧美videos大乳护士334| 国产精品久久网站| 蜜臀av性久久久久蜜臀av麻豆| 成人黄色一级视频| 91精品国产乱| 亚洲色图色小说| 国产一区二区美女诱惑| 欧美伊人久久久久久久久影院 | 久久精品欧美日韩精品| 亚洲高清免费观看 | 欧美精品v日韩精品v韩国精品v| 欧美激情一区二区三区不卡 | 欧美精选午夜久久久乱码6080| 久久久www成人免费毛片麻豆| 亚洲妇熟xx妇色黄| eeuss鲁片一区二区三区在线观看| 日韩三级.com| 亚洲在线成人精品| 成人在线综合网站| 久久亚洲精品国产精品紫薇| 午夜精品一区二区三区免费视频 | 欧美日韩黄色一区二区| 国产精品国产三级国产| 国产真实乱偷精品视频免| 欧美日韩国产三级| 亚洲精品免费视频| 成人精品视频.| 久久久久久免费网| 免费欧美高清视频| 欧美日韩一卡二卡三卡| 一区二区久久久久久| 成人爱爱电影网址| 中文字幕第一区综合| 国模一区二区三区白浆| 欧美一卡2卡三卡4卡5免费| 亚洲综合另类小说| 欧美性受xxxx黑人xyx| 亚洲视频在线观看一区| 成人免费视频网站在线观看| 国产三级精品在线| 国产精品99久久久久久久vr| 精品久久久网站| 极品少妇xxxx精品少妇偷拍| 日韩午夜激情免费电影| 日韩国产在线观看一区| 欧美蜜桃一区二区三区| 一区二区成人在线| 欧美专区亚洲专区| 亚洲精品日产精品乱码不卡| 一本一道久久a久久精品综合蜜臀| 国产精品久久99| 99免费精品在线观看| 亚洲婷婷国产精品电影人久久| 成年人网站91| 成人欧美一区二区三区| jlzzjlzz欧美大全| 亚洲三级小视频| 日本精品视频一区二区三区| 樱花影视一区二区| 欧美日韩激情一区二区三区| 亚洲成在线观看| 日韩欧美一级二级三级久久久| 卡一卡二国产精品| 久久综合久久鬼色| 成人激情电影免费在线观看| 日韩伦理免费电影| 欧美性猛交xxxx黑人交| 免费欧美日韩国产三级电影| 久久久久久久久久久电影| 成人av网站在线| 一区二区三区四区国产精品| 欧美日韩一本到| 美国十次了思思久久精品导航| 久久女同精品一区二区| 成人免费高清在线| 亚洲一区二区三区四区在线 | 国产日韩精品一区二区三区| 91在线观看视频| 午夜亚洲福利老司机| 欧美本精品男人aⅴ天堂| 成人一级视频在线观看| 亚洲精品乱码久久久久| 日韩视频一区二区三区在线播放| 国产精品一区免费视频| 亚洲人吸女人奶水| 欧美色爱综合网| 狠狠色丁香婷综合久久| 中文字幕在线一区免费| 欧美人伦禁忌dvd放荡欲情| 国内精品嫩模私拍在线| 亚洲精品乱码久久久久| 日韩欧美国产小视频| a美女胸又www黄视频久久| 香蕉久久夜色精品国产使用方法 | 欧美久久久久久蜜桃| 国产福利一区二区三区视频| 亚洲另类色综合网站| 日韩欧美久久久| 色综合久久久久久久久久久| 精品一区中文字幕| 中文字幕一区二区三区精华液 | 欧美日韩国产区一| 国产v综合v亚洲欧| 亚洲丰满少妇videoshd| 久久久www成人免费无遮挡大片| 欧美系列在线观看| 粉嫩绯色av一区二区在线观看| 亚洲电影一区二区三区| 国产午夜精品久久久久久久| 欧美麻豆精品久久久久久| 国产成人精品免费在线| 日韩二区在线观看| 亚洲人妖av一区二区| 日韩欧美中文一区| 欧美日韩免费电影| 波多野结衣91| 黑人巨大精品欧美黑白配亚洲 | 欧美日韩综合色| 成人免费福利片| 国产在线麻豆精品观看| 亚洲国产综合91精品麻豆| 中文字幕电影一区| 2019国产精品| 在线成人高清不卡| 色吊一区二区三区| 成人一区在线观看| 国产中文字幕一区| 开心九九激情九九欧美日韩精美视频电影| 亚洲免费观看高清完整版在线观看 | 99精品欧美一区二区三区综合在线| 美女一区二区视频| 亚洲bt欧美bt精品777| 成人欧美一区二区三区在线播放| 国产香蕉久久精品综合网| 日韩美女一区二区三区| 欧美卡1卡2卡| 欧美三区在线观看| 91高清视频免费看| 99热99精品| 97久久精品人人做人人爽| 国产高清在线观看免费不卡| 久久99久久99小草精品免视看| 午夜伊人狠狠久久| 一卡二卡欧美日韩| 亚洲精品精品亚洲| 一区二区三区国产豹纹内裤在线 | 狠狠色丁香久久婷婷综| 极品少妇一区二区|