⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gn74w.c

📁 用C写的GPS测试软件
💻 C
📖 第 1 页 / 共 3 页
字号:
			ulLat = dwLat;
			ulLon = dwLon;
			
			iLatDeg = (int)(ulLat/1000000);
			dLatMin = (double)(ulLat-iLatDeg*1000000)/10000;
			
			iLonDeg = (int)(ulLon/1000000);
			dLonMin = (double)(ulLon-iLonDeg*1000000)/10000;
            if(datafp){
            	dwLat1 = (long)(dwLat/10);
            	dwLon1 = (long)(dwLon/10);

				memset(szData,0,64);				
				sprintf(szData,"$GGA%04d%06ld%7ld%8ld%1d%02d%04d%04d\r\n",1,tmptime,dwLat1,dwLon1,1,1,1,Height);
				fprintf(datafp,"%s",szData);            	
            }
            if(bSaveFile && iStatus)
            {
            	sprintf(str,"%8ld,%9ld,%d",dwLat,dwLon,Height);
				if(recfp)
					fprintf(recfp,"\n%s",str);
            }
            if(bGetAver && iStatus){

				fHeight = (float)(Height/10);
					
				ulLatDegSum += iLatDeg;
				dLatMinSum += dLatMin;
				ulLonDegSum += iLonDeg;
				dLonMinSum += dLonMin;
				fHeightSum += fHeight;			
				iDataNum++;
				iLatDegAve = (int)(ulLatDegSum/iDataNum);
				dLatMinAve = dLatMinSum/iDataNum;    
				iLonDegAve = (int)(ulLonDegSum/iDataNum);
				dLonMinAve = dLonMinSum/iDataNum;    
				fHeightAve = fHeightSum/iDataNum;
			}	
			
			SendMessage(hFrameWnd,(UINT)WM_USER,(WPARAM)0,(LPARAM)0);
			break;
        case GPGSV:
			if(!strncmp(strbuf,"$GPGSV",5)==0) 
				return FALSE;

		    j=sscanf(strbuf,"%6c%1d%1d%2d", &Mode,&MessNo,&iiSeries ,&SatellitesNo);

		    if(iiSeries >3 )
		    	return FALSE;
		    if((strlen(strbuf) >=10 ) && iiSeries == 1)
		    {
			    j=sscanf(strbuf,"%6c%1d%1d%2d%2d%2d%3d%2d%2d%2d%3d%2d%2d%2d%3d%2d%2d%2d%3d%2d",
			    			 &Mode,&MessNo,&Series,&SatellitesNo
			    			,&Satellites[0].SV,&Satellites[0].ElevateAngle
			    			,&Satellites[0].BearingAngle,&Satellites[0].SNR
			    			,&Satellites[1].SV,&Satellites[1].ElevateAngle
			    			,&Satellites[1].BearingAngle,&Satellites[1].SNR
			    			,&Satellites[2].SV,&Satellites[2].ElevateAngle
			    			,&Satellites[2].BearingAngle,&Satellites[2].SNR
			    			,&Satellites[3].SV,&Satellites[3].ElevateAngle
			    			,&Satellites[3].BearingAngle,&Satellites[3].SNR);
  		      	iiSeries = Series;
  		      	iSateNo = SatellitesNo;
  		    }else  	
			    if((strlen(strbuf)  ) && iiSeries != 1 && iiSeries != 3)
			    {
				    j=sscanf(strbuf,"%6c%1d%1d%2d%2d%2d%3d%2d%2d%2d%3d%2d%2d%2d%3d%2d%2d%2d%3d%2d",
				    			 &Mode,&MessNo,&Series,&SatellitesNo
				    			,&Satellites[4].SV,&Satellites[4].ElevateAngle
				    			,&Satellites[4].BearingAngle,&Satellites[4].SNR
				    			,&Satellites[5].SV,&Satellites[5].ElevateAngle
				    			,&Satellites[5].BearingAngle,&Satellites[5].SNR
				    			,&Satellites[6].SV,&Satellites[6].ElevateAngle
				    			,&Satellites[6].BearingAngle,&Satellites[6].SNR
				    			,&Satellites[7].SV,&Satellites[7].ElevateAngle
				    			,&Satellites[7].BearingAngle,&Satellites[7].SNR);
	  		      	iiSeries = Series;
	  		      	iSateNo = SatellitesNo;
        	    }else
				    {
					    j=sscanf(strbuf,"%6c%1d%1d%2d%2d%2d%3d%2d%2d%2d%3d%2d%2d%2d%3d%2d%2d%2d%3d%2d",
					    			 &Mode,&MessNo,&Series,&SatellitesNo
					    			,&Satellites[8].SV,&Satellites[8].ElevateAngle
					    			,&Satellites[8].BearingAngle,&Satellites[8].SNR
					    			,&Satellites[9].SV,&Satellites[9].ElevateAngle
					    			,&Satellites[9].BearingAngle,&Satellites[9].SNR
					    			,&Satellites[10].SV,&Satellites[10].ElevateAngle
					    			,&Satellites[10].BearingAngle,&Satellites[10].SNR
					    			,&Satellites[11].SV,&Satellites[11].ElevateAngle
					    			,&Satellites[11].BearingAngle,&Satellites[11].SNR);
		  		      	iiSeries = Series;
		  		      	iSateNo = SatellitesNo;
        	        }
        	if(hChildWnd)
        		InvalidateRect(hChildWnd,NULL,TRUE);
        	break;	
        case GPGLL:
        	break;
        case GPZDA:
        	break;
        case GPGSA:
        	break;			
        case GPRMC:
        	break;
        case GPVTG:
        	break;             
        			
	}	
}                 
long FAR PASCAL MessWndProc(hWnd, message, wParam, lParam)
HWND hWnd;
unsigned message;
UINT wParam;
LONG lParam;
{
	static HWND hListBox=NULL;
	static int WindowHeight,WindowWidth;
	static int MessageNum;
	
	switch (message) 
	{
		case WM_USER:
			if(!hListBox)
				break;
			if(MessageNum>=15)
			{
				SendMessage(hListBox,LB_DELETESTRING,0,0); // delete the first item
				MessageNum--;
			}
			SendMessage(hListBox,LB_ADDSTRING,0,lParam);
			MessageNum++;
			break;

		case WM_SIZE:
		{
			RECT rectClient;

			GetClientRect(hWnd,&rectClient);
			WindowHeight=rectClient.bottom-rectClient.top;
			WindowWidth =rectClient.right-rectClient.left;
			if(hListBox)
				DestroyWindow(hListBox);
			MessageNum=0;
			hListBox=CreateWindow("LISTBOX","数据信息",
				WS_CHILD | WS_VISIBLE | WS_VSCROLL | LBS_HASSTRINGS,
				0,0,WindowWidth,WindowHeight,hWnd,NULL,hFrameInstance,NULL);
			ShowWindow(hListBox,SW_SHOW);
			MoveWindow(hMessWnd,
				0,
				310,
				GetSystemMetrics(SM_CXSCREEN),
				GetSystemMetrics(SM_CYSCREEN)-310,
	    		TRUE);
			break;
		}
		case WM_DESTROY:
			hMessWnd=0;
			break;
		default:
			return (DefWindowProc(hWnd, message, wParam, lParam));
	 }
	 return (NULL);
}
long FAR PASCAL ChildWndProc(hWnd, message, wParam, lParam)
HWND hWnd;
unsigned message;
WORD wParam;
LONG lParam;
{
   	HDC hDC;
   	HPEN hPen1,hPen2,hPen3;
   	PAINTSTRUCT PtStr;
	POINT Point;   	        
	int i;
   	char Temp[24];
   	
   	switch (message) 
	{
		case WM_SIZE:
			MoveWindow(hWnd,
				GetSystemMetrics(SM_CXSCREEN)-290,
				17,
				290,
				294,
	    		TRUE);
			break;
		case WM_PAINT:
    		hDC = BeginPaint(hWnd,&PtStr);
    		
    		SetMapMode(hDC,MM_ANISOTROPIC);
    		SetTextColor(hDC,RGB(0,0,255));
    		hPen1 = CreatePen(PS_SOLID,1,RGB(159,85,107));
    		SelectObject(hDC,hPen1);
    		Ellipse(hDC,50,50,230,230);
    		hPen2 = CreatePen(PS_DASHDOT,1,RGB(159,85,107));
			SelectObject(hDC,hPen2);
			Ellipse(hDC,80,80,200,200);    		
    		hPen3 = CreatePen(PS_DASHDOTDOT,1,RGB(159,85,107));
			SelectObject(hDC,hPen3);
			Ellipse(hDC,110,110,170,170);    		

            sprintf(Temp,"%s","真北");
			TextOut(hDC,125,25,Temp,strlen(Temp));            
    		SelectObject(hDC,hPen1);

    		MoveTo(hDC,30,140);
    		LineTo(hDC,250,140);

    		SelectObject(hDC,hPen1);
    		MoveTo(hDC,140,30);
    		LineTo(hDC,140,250);
    		SelectObject(hDC,hPen1);
			for(i = 0;i<iSateNo;i++)
           	{	
				Point = CoordinateTransform(Satellites[i].BearingAngle,Satellites[i].ElevateAngle);
           		sprintf(Temp,"%02d",Satellites[i].SV);
           		TextOut(hDC,Point.x,Point.y,Temp,strlen(Temp));
    		}

    		EndPaint(hWnd,&PtStr);
			DeleteObject(hPen1);        	
			DeleteObject(hPen2);        	
			DeleteObject(hPen3);        	
    		break;
		case WM_DESTROY:
			break;
		default:
			return (DefWindowProc(hWnd, message, wParam, lParam));
	 }
	 return (NULL);
}
POINT  CoordinateTransform(int Bearing,int ElevateAngle)
{
	POINT Point;
	
	if( Bearing >=0 &&Bearing<90)
	{
		Point.x = 140 + (int)((90-ElevateAngle) * sin((PI*Bearing)/180));
		Point.y = 140 - (int)((90-ElevateAngle) * cos((PI*Bearing)/180));
	}
	if( Bearing >=90 &&Bearing<180)
	{
		Point.y = 140 + (int)((90-ElevateAngle) * sin(PI*(Bearing-90)/180));
		Point.x = 140 - (int)((90-ElevateAngle) * cos(PI*(Bearing-90)/180));

	}
	if( Bearing >=180 &&Bearing<270)
	{
		Point.x = 140 - (int)((90-ElevateAngle) * sin(PI*(Bearing-180)/180));
		Point.y = 140 + (int)((90-ElevateAngle) * cos(PI*(Bearing-180)/180));
	}
	if( Bearing >=270 &&Bearing<360)
	{
		Point.y = 140 - (int)((90-ElevateAngle) * sin(PI*(Bearing-270)/180));
		Point.x = 140 - (int)((90-ElevateAngle) * cos(PI*(Bearing-270)/180));
	}         
	return Point; 
}
void GetTime(HWND hWnd,HANDLE hInstance)
{
	FARPROC lpDlg;
	int DlgRet;

	lpDlg  = MakeProcInstance((FARPROC)GetTimeDlgProc,hInstance);
	DlgRet = DialogBox(hInstance,"GETTIMEDLG",hWnd,lpDlg);
	FreeProcInstance(lpDlg);

}
BOOL FAR PASCAL GetTimeDlgProc(HWND hDlg,unsigned message,
	WORD wParam,LONG lParam)
{
	static int WorkMode ;	
	
	switch (message) 
	{
		case WM_INITDIALOG:
			CheckRadioButton(hDlg, IDC_HOUR, IDC_SECOND,IDC_SECOND);
			SetDlgItemText(hDlg,IDC_MODE,"秒");
			SetFocus(GetDlgItem(hDlg,IDC_TIME));	
			WorkMode = 3;
			break;
		case WM_COMMAND:
			switch (wParam) 
			{  
				case IDC_HOUR: 
					CheckRadioButton(hDlg, IDC_HOUR, IDC_SECOND,IDC_HOUR);
					SetDlgItemText(hDlg,IDC_MODE,"小时");
					WorkMode = 1;	
					break;

				case IDC_MINUTE:
					CheckRadioButton(hDlg, IDC_HOUR, IDC_SECOND,IDC_MINUTE);
					SetDlgItemText(hDlg,IDC_MODE,"分钟");
					WorkMode = 2;
					break;
				case IDC_SECOND:
					CheckRadioButton(hDlg, IDC_HOUR, IDC_SECOND,IDC_SECOND);
					SetDlgItemText(hDlg,IDC_MODE,"秒");
					WorkMode = 3;	
					break;

	         	case IDOK:
					
					switch(WorkMode)
					{
						case 1:
		 					iTime =(unsigned long)3600 * GetDlgItemInt(hDlg,IDC_TIME,NULL,0);	
							break;
						case 2:
							iTime =(unsigned long)60 * GetDlgItemInt(hDlg,IDC_TIME,NULL,0);
							break;
						case 3:
							iTime = (unsigned long)GetDlgItemInt(hDlg,IDC_TIME,NULL,0);		
							break;
					}
					if(iTime)
						bCount = TRUE;
					bGetAver = TRUE;
					EndDialog(hDlg, TRUE);
					return (TRUE);
		  		case IDCANCEL:
			        if(recfp){
			        	fclose(recfp);
                    	remove(cFName);
					}
					EndDialog(hDlg, FALSE);
					return (FALSE);
		 	}//swith wParam
		 	break;
	 } //switch message
	 return FALSE;
}
int SaveFile(HWND hWnd,HANDLE hInstance)
{
	FARPROC lpDlg;
	int DlgRet;

	lpDlg  = MakeProcInstance((FARPROC)SaveFileDlgProc,hInstance);
	DlgRet = DialogBox(hInstance,"SAVEFILE",hWnd,lpDlg);
	FreeProcInstance(lpDlg);
	return DlgRet;
}
BOOL FAR PASCAL SaveFileDlgProc(HWND hDlg,unsigned message,	WORD wParam,LONG lParam)
{
	
	switch (message) 
	{
		case WM_INITDIALOG:
			SetFocus(GetDlgItem(hDlg,IDC_FILENAME));	
			break;
		case WM_COMMAND:
			switch (wParam) 
			{  
	         	case IDOK:
					memset(cFName,0,128);
					GetDlgItemText(hDlg,IDC_FILENAME, cFName, 128);
					if((recfp=fopen(cFName,"at"))==NULL)
					{
						MessageBox(hDlg,"Invalid file ","Message",MB_OK);
						return FALSE;
					}
					
					EndDialog(hDlg, TRUE);
					return (TRUE);
		  		case IDCANCEL:
					EndDialog(hDlg, FALSE);
					return (FALSE);
		 	}//swith wParam
		 	break;
	 } //switch message
	 return FALSE;
}
BOOL FAR PASCAL _export DialogWndProc(HWND hDlg, UINT message, UINT wParam, LONG lParam)
{
	static FILE *fp;                                       
	char szfpName[12],szPoint[64],str[32];
	
	switch (message) 
	{
		case WM_INITDIALOG:
			SetFocus(GetDlgItem(hDlg,IDC_FILE1));	
			break;
		case WM_COMMAND:
			switch (wParam) 
			{  
	         	case IDD_SAMPLE:
	
	            	if(!fp){
	            		GetDlgItemText(hDlg,IDC_FILE1, szfpName, 128);
	        			if((fp=fopen(szfpName,"at"))==NULL)
						{
							MessageBox(hDlg,"Invalid file ","Message",MB_OK);
							return FALSE;
						}

	            	}
	            	if(fp){
		            	GetDlgItemText(hDlg,IDC_RECPOINT, szPoint, 128);
		            	sprintf(str,"%s",szPoint);
						fprintf(fp,"%s\t",str);			            	
		            	sprintf(str,"%8ld,%9ld",dwLat,dwLon);
						fprintf(fp,"%s\n",str);
     	            }
	         		break;
	         	case IDD_SAVE:
	         		if(fp)
						fclose(fp);	         			
	         		break;	
	         	case IDOK:
	         		if(fp)
						fclose(fp);	         			
					EndDialog(hDlg, TRUE);
					return (TRUE);
		 	}//swith wParam
		 	break;
	 } //switch message
	 return FALSE;

}
int SaveDataFile(HWND hWnd,HANDLE hInstance)
{
	FARPROC lpDlg;
	int DlgRet;

	lpDlg  = MakeProcInstance((FARPROC)SaveDataFileDlgProc,hInstance);
	DlgRet = DialogBox(hInstance,"SAVEFILE",hWnd,lpDlg);
	FreeProcInstance(lpDlg);
	return DlgRet;
}
BOOL FAR PASCAL SaveDataFileDlgProc(HWND hDlg,unsigned message,	WORD wParam,LONG lParam)
{
	
	char DataFile[128];
	switch (message) 
	{
		case WM_INITDIALOG:
			SetFocus(GetDlgItem(hDlg,IDC_FILENAME));	
			break;
		case WM_COMMAND:
			switch (wParam) 
			{  
	         	case IDOK:
					memset(DataFile,0,128);
					GetDlgItemText(hDlg,IDC_FILENAME, DataFile, 128);
					if((datafp=fopen(DataFile,"at"))==NULL)
					{
						MessageBox(hDlg,"Invalid file ","Message",MB_OK);
						return FALSE;
					}
					
					EndDialog(hDlg, TRUE);
					return (TRUE);
		  		case IDCANCEL:
					EndDialog(hDlg, FALSE);
					return (FALSE);
		 	}//swith wParam
		 	break;
	 } //switch message
	 return FALSE;
}

 
int GetCheckNum(char *szCMD)
{
	int szlen ,i;
	static int iChkNum;
	szlen = strlen(szCMD);
	iChkNum = szCMD[1]^szCMD[2]	;	
	for(i=3;i<szlen;i++)
	{
		iChkNum = iChkNum ^szCMD[i];  
	}
	return iChkNum;	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -