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

📄 gn74w.c

📁 用C写的GPS测试软件
💻 C
📖 第 1 页 / 共 3 页
字号:
								SWP_NOMOVE					    		
								);
					break;
				case IDM_SAVEFILE:
					if(SaveFile(hWnd,hFrameInstance))
					{
        				if(recfp)
						{
							time(&t);       // get current time
							fprintf(recfp,"\n#Begin");
							fprintf(recfp,"\n开始时间:%s",ctime(&t));
							bSaveFile = TRUE;
						}	
                    } 
				case IDM_GETTIME:
				    GetTime(hWnd,hFrameInstance);
					idTimer = SetTimer(hWnd,1,1000,NULL); 
					break;
				case IDM_DISPLAY:
                 	bGetAver = TRUE;
        			break;
				case IDM_BEGINSAVE://数据存盘开始
					if(SaveDataFile(hWnd,hFrameInstance))
					{
        				if(datafp)
						{
							time(&t);       // get current time
							fprintf(datafp,"\n#Begin");
							fprintf(datafp,"\n开始时间:%s",ctime(&t));
						}	
                    } 
					break;
				case IDM_ENDSAVE://数据存盘结束
      				if(datafp)
						{
							time(&t);       // get current time
							fprintf(datafp,"\n#end");
							fprintf(datafp,"\n结束时间:%s",ctime(&t));
							fclose(datafp);
						}
					break;	
				case IDM_STOP:
    				if(recfp)
					{
						time(&t);       // get current time
						fprintf(recfp,"\n#end");
						fprintf(recfp,"\n结束时间:%s",ctime(&t));
						fprintf(recfp,"\n The average of Latitude is :%d Degree  %6.4f Minute",iLatDegAve,dLatMinAve);
						fprintf(recfp,"\n The average of Longitude is :%d Degree  %6.4f Minute",iLonDegAve,dLonMinAve);
						fprintf(recfp,"\n The average of Altitude is :%7.1f Meters",fHeightAve);
						fclose(recfp);
						bSaveFile = FALSE;
						MessageBox(hWnd,"计算结束!","消息",MB_OK);
						KillTimer(hWnd,idTimer);
					}
                    bGetAver = FALSE;
					break;
				case IDM_WINDOW:
	           		hChildWnd = CreateWindow(
					    "ChildWindow",
						"卫星位置图示",
						WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,
						GetSystemMetrics(SM_CXSCREEN)-280,//CW_USEDEFAULT,
						16,//CW_USEDEFAULT,
						280,//GetSystemMetrics(SM_CYSCREEN)/2,//CW_USEDEFAULT,
						300,//GetSystemMetrics(SM_CYSCREEN)/2,//CW_USEDEFAULT,
						hFrameWnd,
						NULL,//"OUTPUTMAPMENU",
						hFrameInstance,
						NULL
						);  
					ShowWindow(hChildWnd,SW_SHOW);       
					break;
				case IDM_CLEAR: //清屏
					InvalidateRect(hWnd,NULL,TRUE);
					break;
				case IDM_EXIT:     
	            	if(MessageBox(hWnd,"    您 是 否 要 结 束 系 统 操 作 ?","退出系统",MB_OKCANCEL|MB_ICONINFORMATION)==IDCANCEL)  
						break;	                              
					DestroyWindow(hWnd);
					break;
		   		
		   } break;
		case WM_DESTROY:
	        KillTimer(hWnd,idTimer);
			if(datafp)
				{
					time(&t);       // get current time
					fprintf(datafp,"\n#end");
					fprintf(datafp,"\n结束时间:%s",ctime(&t));
					fclose(datafp);
				}
	        if(recfp)
	        	fclose(recfp);

			PostQuitMessage(0);
	        return 0;
	    
	    default:
			return DefWindowProc(hWnd,message,wParam,lParam);       
	}
}
int InitCom(char * szComPort,char *szComMode)
//串口初始化
{
	DCB dcb;
	char str[128];
	int ret;

	if(nComID>=0)
	{
		FlushComm(nComID,0);  /*empty output queue */
		FlushComm(nComID,1);  /*empty input  queue */
		ClearCommBreak(nComID);
		ret=CloseComm(nComID);
	}
	nComID = OpenComm(szComPort,COMBUFFERSIZE,COMBUFFERSIZE);
	if(nComID < 0 )
	{
		sprintf(str,"%s 正在被其它设备占用!",szComPort);
		MessageBox(hFrameWnd,str,"消 息",MB_OK);

		return -1;
	}else{
		FlushComm(nComID,0);  /*empty output queue */
		FlushComm(nComID,1);  /*empty input  queue */
		BuildCommDCB(szComMode,&dcb);
		SetCommState(&dcb);
		EscapeCommFunction(nComID,RESETDEV);
	}
	return 0;
}
void SendCommand(char *str)
{
	int nStatus;
	
	if(nComID>=0){
		nStatus=WriteComm(nComID,str,strlen(str));

		if(nStatus<0)
			MessageBox(hFrameWnd,"Output comm error","Message",MB_OK);
	}

}
BOOL GetInterval()
{
	FARPROC lpDlg;
	BOOL  DlgRet;
	
	lpDlg=MakeProcInstance(GetIntervalDlgProc,hFrameInstance);
	DlgRet = DialogBox(hFrameInstance,"INPUTTIME",hFrameWnd,lpDlg);
	FreeProcInstance(lpDlg);
	
    return DlgRet;
}                    
BOOL FAR PASCAL GetIntervalDlgProc(HWND hDlg,unsigned message,WORD wParam,LONG lParam)
{
	switch (message) 
	{
		case WM_INITDIALOG:
		    SetFocus(GetDlgItem(hDlg,IDC_INTERVAL));
			return FALSE;
		case WM_COMMAND:
			switch (wParam) 
			{
                case IDOK:
                	iInterval = GetDlgItemInt(hDlg,IDC_INTERVAL,NULL,0);
                	if(iInterval>60||iInterval<0){
                		MessageBox(hDlg,"输入数据非法!","Message",MB_OK);
	                	EndDialog(hDlg, FALSE);	
						return FALSE;                                           	
		           	}
						EndDialog(hDlg, TRUE);	
					return TRUE;                                           	

                case IDCANCEL:
                	EndDialog(hDlg, FALSE);	
					return FALSE;                                           	
				
			}break;
	}	 //switch message
	return FALSE;
}
BOOL FAR PASCAL AboutDlgProc(HWND hDlg,unsigned message,WORD wParam,LONG lParam)
{
	switch (message) 
	{
		case WM_COMMAND:
			switch (wParam) 
			{
                case IDOK:
					EndDialog(hDlg, TRUE);	
					return TRUE;                                           	
			}break;
	}	 //switch message
	return FALSE;
}

void SetupCommID()
{
	FARPROC lpDlg;
	BOOL  DlgRet;

	lpDlg=MakeProcInstance(SetupCommIDDlgProc,hFrameInstance);
	DlgRet = DialogBox(hFrameInstance,"SETUPDLG",hFrameWnd,lpDlg);
	FreeProcInstance(lpDlg);

}
BOOL FAR PASCAL SetupCommIDDlgProc(HWND hDlg,unsigned message,WORD wParam,LONG lParam)
{
	char  szBuf[256],szStr[256] ;
	int  iCommID, wPosition ;
	
	switch (message) 
	{
		case WM_INITDIALOG:

			 for (iCommID =1 ;iCommID<=10;iCommID++)	
			 {
				  LoadString(hFrameInstance,iCommID,szStr,sizeof(szStr));					  
	
				  wPosition = SendMessage( GetDlgItem( hDlg, IDD_COMID), CB_ADDSTRING, 0,
							       (LPARAM)(LPSTR)szStr ) ;
				  SendDlgItemMessage(  hDlg, IDD_COMID, CB_SETITEMDATA,
				  		 (WPARAM)wPosition , (LPARAM) iCommID );
			 }	  		 
	  	     SendMessage( GetDlgItem( hDlg, IDD_COMID), CB_SETCURSEL, (WPARAM) 0, NULL ) ;

	//	    SetFocus(GetDlgItem(hDlg,IDC_COMID));
			return FALSE;
		case WM_COMMAND:
			switch (wParam) 
			{
                case IDOK:
					memset(szStr,0,sizeof(szStr));
					memset(szBuf,0,sizeof(szStr));					

					GetDlgItemText(hDlg,IDD_COMID,szStr,5);
					strcpy(szBuf,szStr);
					strcat(szStr,":4800,N,8,1");
					InitCom(szBuf,szStr);
					EndDialog(hDlg, TRUE);	
					return TRUE;                                           	

                case IDCANCEL:
                	EndDialog(hDlg, FALSE);	
					return FALSE;                                           	
				
			}break;
	}	 //switch message
	return FALSE;
}

BOOL GetOutputCommmand()
{
	FARPROC lpDlg;
	BOOL  DlgRet;
	int iCheckNum;
	char szChkNum[4],szOCMD[64];

	lpDlg=MakeProcInstance(GetOutputCommandDlgProc,hFrameInstance);
	DlgRet = DialogBox(hFrameInstance,"OUTPUTCOMMAND",hFrameWnd,lpDlg);
	FreeProcInstance(lpDlg);
	                                                           
	if(DlgRet){	                                                           
		if(*szOutput!= '$')
		{
			MessageBox(hFrameWnd,"数据错误","消息",MB_OK|MB_ICONINFORMATION);
			return FALSE;
		}
		
		iCheckNum = GetCheckNum(szOutput);
		sprintf(szChkNum,"%02x",iCheckNum);
		sprintf(szOCMD,"%s*%s\r\n",szOutput,_strupr(_strdup(szChkNum)));
		SendCommand(szOCMD);
	}
    return DlgRet;
}
BOOL FAR PASCAL GetOutputCommandDlgProc(HWND hDlg,unsigned message,WORD wParam,LONG lParam)
{
//	char szOutput1[128];
	switch (message) 
	{
		case WM_INITDIALOG:
		    SetFocus(GetDlgItem(hDlg,IDC_OUTPUT));
			return FALSE;
		case WM_COMMAND:
			switch (wParam) 
			{
                case IDOK:
                	GetDlgItemText(hDlg,IDC_OUTPUT,szOutput,128);
					EndDialog(hDlg, TRUE);	
					return TRUE;                                           	

                case IDCANCEL:
                	EndDialog(hDlg, FALSE);	
					return FALSE;                                           	
				
			}break;
	}	 //switch message
	return FALSE;
}

void RecieveData()
{
	int 			nReadChars,j,i;
	COMSTAT         ComStat;
	static char     cBuf[COMBUFFERSIZE/2];
	
	if(nComID >= 0 )
	{   
		if((nReadChars = ReadComm(nComID,cBuf,COMBUFFERSIZE/2))>0 )
		{
				AddQueue(cBuf,nReadChars);
				
		}else{
			GetCommError(nComID,&ComStat);
		 	return ;
		}
	}
	for(i=0;i<4;i++)
	{
		if(!GetComLine(szCom))
		{
		 	return ;
		};	  
		if((j=strlen(szCom))>=10&&j<=100)		
		{	
			if(	hMessWnd!=NULL)
				SendMessage(hMessWnd,(UINT)WM_USER,(WPARAM)0,(LPARAM)szCom);

			AnalyseData(szCom); 
		}
	}
} 	
BOOL GetComLine(char far *szCom)
{
	register int i;
	char cTmp;

	if(!FindMessLine())
	{
		*szCom=0;
		return FALSE;
	}
	for(i=0;i<128;i++)
	{
		cTmp=DeleteOne();
		*szCom++=cTmp;
		if(cTmp=='\r' || cTmp=='\n' || cTmp==0)
		{
			*(szCom-1)='\r';
			*szCom=0;
			cTmp=DeleteOne();       /* delete \n */
			if(!(cTmp=='\r' || cTmp=='\n'))
				AddOne(cTmp);
			return TRUE;
		}
	}
	*(szCom-1)='\r';
	
	return TRUE;
}

void AddQueue(char *cBuf,int cn)
{
	register int i;

	for(i=0;i<cn;i++)
		AddOne(*cBuf++);
} 

void AddOne(char ch)
{
	register int cp;

	if(iComBuffTail+1==COMBUFFERSIZE)       // reach the end of buffer array
		cp=0;
	else
		cp=iComBuffTail+1;
	if(cp==iComBuffHead)    // buffer full
		DeleteOne();            // delete an element from queue
	aComBuffer[iComBuffTail]=ch;
	iComBuffTail=cp;
}

char DeleteOne()
{
	register int cp;
	char cTmp;

	if(iComBuffHead==iComBuffTail)  // buffer empty
		return 0;
	if(iComBuffHead+1==COMBUFFERSIZE)
		cp=0;
	else
		cp=iComBuffHead+1;
	cTmp=aComBuffer[iComBuffHead];
	iComBuffHead = cp;
	return cTmp;
}

BOOL FindMessLine(void)
//search \r \n
{
	register int cp;

	if(iComBuffHead==iComBuffTail)  // buffer empty
		return FALSE;
	cp=iComBuffHead;
	while(aComBuffer[cp]!='\r' && aComBuffer[cp]!='\n')
	{
		if(cp+1==COMBUFFERSIZE)
			cp=0;
		else
			cp++;
		if(cp==iComBuffTail)    // all data have been read
			return FALSE;
	}
	return TRUE;
} 
BOOL AnalyseData(char * pp) 
{
	enum GMessOrd    eGmess;	
	char strbuf[200],szData[64];
	int i,Num,j,ilen;
	char Mode[7];    
	static char  Status[2],SateNo[4];
	static unsigned long ulLon,ulLat,ulLatDegSum,ulLonDegSum; 	
	int Series,SatellitesNo; 
	char str[64];                        
	HDC hDC;                         
	char sss[] = "没有定位!";
	long dwLon1,dwLat1;

	memset(strbuf,0,strlen(strbuf));  
    for(i=0,Num=0;i<(int)strlen(pp);i++)
	{
        if((pp[i]!=',')&&(pp[i]!='.')&&(pp[i]!='N')&&(pp[i]!='E')&&(pp[i]!='M'))
        {
        	strbuf[Num]=pp[i];
			Num++;
		}	                      
    }	
	
	while(*pp && *pp!= '$') pp++;
	pp++;
	for(eGmess=0;eGmess<GPEND;eGmess++)
		if(strncmp(pp,GMess[eGmess],5)==0) break;
	if(eGmess==GPEND) return FALSE;
	
	switch(eGmess)
	{
		case GPGGA:   
			if(!strncmp(strbuf,"$GPGGA",5)==0) 
				return FALSE;

			ilen=strlen(strbuf);		    
			if (ilen <= 48){
			    j=sscanf(strbuf,"%6c%8ld%9ld%c%2c%4c%7ld",&Mode,&dwLat,
					&dwLon,&Status,&SateNo,&DOP,&Height);               
//	        	if(hFrameWnd)
//	        		InvalidateRect(hFrameWnd,NULL,TRUE);
				hDC=GetDC(hFrameWnd);  
				TextOut(hDC,60,142,sss,strlen(sss));	//620,142	        		
				ReleaseDC(hFrameWnd,hDC);                            

			}else
			    j=sscanf(strbuf,"%6c%6ld%8ld%9ld%c%2c%4c%7ld",&Mode,&tmptime,&dwLat,
					&dwLon,&Status,&SateNo,&DOP,&Height); 
//			if(j!=8)
//				return FALSE;
			iStatus = atoi(Status);
			//iSateNo = atoi(SateNo);
			iDop = atoi(DOP);
            

⌨️ 快捷键说明

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