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

📄 gps.c

📁 一个小的嵌入式os
💻 C
字号:
//============================================
//the driver for u-blox GPS model, in this file,include UART communication
//
//
//by kaka,080521
//
//=============================================

#include <string.h>
#include "44b0x.h"
#include "uart.h"
extern char *stpcpy(char *dest,char *src);  
char gps_a[200];
char	gps_char;
int   gps_flag=0; //IF 		gps_flag ==1,so you can receive the GPS DATA
int   gps_flag2=0;//when received '$',I will set gps_flag2 to '1'
int   gps_count=0;
int   gps_flag_temp=0;
int   gps_flag_for_gps_gga_factory=1;

struct GGA
{
char time[10];
char time_h[2];
char time_m[2];
char time_s[2];

char latitude[9];
char latitude_d[2];
char latitude_m[2];

char   NS_indicator[2];

char longitude[10];
char	longitude_d[3];
char longitude_m[2];

char	ew_indicator[2];

char	fix_indicator[2];

char satellites_used[2];

char hdop[4];

char altitude[7];
}GPGGA;


//=========================================================
//this function is not used,there has another function in "interrupt" do the work to storage 
//the gps frame
//by kaka,080521
//==========================================================
void gps_get_frame(void)
{ 
	int   f=0;	
	

	while(gps_flag==1)
		{
			gps_flag=0;
		if(gps_char=='$')
			{
		gps_flag2=1;
		gps_flag_temp++;
		gps_count=0;
		}
		
		if(gps_flag2==1)
			{
		gps_a[gps_count]=gps_char;
		gps_count++;
		}
		if(gps_char=='*') 
			{
			gps_flag2=0;
			gps_flag_temp++;
			gps_count=0;
			}
		}
	f++;
	
}
	
//===========================================================
//clear the gps depot
//by kaka,080521
//===========================================================
void gps_clear_array(void)
{
char a=0;
//char a='\0';
int b=0;
for(b=0;b<200;b++) gps_a[b]=a;
}
//============================================================
void gps_gga_factory(void)
{
char *p;int count=0,flag=0,temp=0,master=0;
char *time,*latitude,*n_indicator,*longitude,*e_indicator,*f_indicator,*satellites,*hdo,*altitud;
time=GPGGA.time;
latitude=GPGGA.latitude;
n_indicator=GPGGA.NS_indicator;
longitude=GPGGA.longitude;
e_indicator=GPGGA.ew_indicator;
f_indicator=GPGGA.fix_indicator;
satellites=GPGGA.satellites_used;
hdo=GPGGA.hdop;
altitud=GPGGA.altitude;

p=gps_a;
master++;
	if(gps_a[4]=='G') 
	//if((gps_a[4]=='G')&(gps_flag_for_gps_gga_factory==1)) 	//gps_flag_for_gps_gga_factory can pledge that the display function isn't useing the
														//gps frame	
	{
	
while(*p!='*')
{p++;
	if(*p==',') {count++;flag=1;}
	if((flag==1)&(*p!=','))
		{



		switch(count)
			{
			case 1:	{*time=(*p);			time++;break;}
			case 2:	{*latitude=(*p);			latitude++;break;}
			case 3:	{*n_indicator=(*p);		n_indicator++;break;}
			case 4: 	{*longitude=(*p);		longitude++;break;}
			case 5:	{*e_indicator=(*p);		e_indicator++;break;}
			//case 6:	{*f_indicator=(*p);		f_indicator++;break;}
			case 7:	{*satellites=(*p);	satellites++;break;}
			//case 8:  	{*hdo=(*p);			hdo++;break;}
			case 9:	{*altitud=(*p);			altitud++;break;}
			default:	temp++;
			}
		/*switch(count)
			{
			case 1:	{*(GPGGA.time)=(*p);			GPGGA.time++;break;}
			case 2:	{*GPGGA.latitude=(*p);			GPGGA.latitude++;break;}
			case 3:	{*GPGGA.NS_indicator=(*p);		GPGGA.NS_indicator++;break;}
			case 4: 	{*GPGGA.longitude=(*p);		GPGGA.longitude++;break;}
			case 5:	{*GPGGA.ew_indicator=(*p);		GPGGA.ew_indicator++;break;}
			case 6:	{*GPGGA.fix_indicator=(*p);		GPGGA.fix_indicator++;break;}
			case 7:	{*GPGGA.satellites_used=(*p);	GPGGA.satellites_used++;break;}
			case 8:  	{*GPGGA.hdop=(*p);			GPGGA.hdop++;break;}
			case 9:	{*GPGGA.altitude=(*p);			GPGGA.altitude++;break;}
			default:	temp++;
			}*/
		}
	
}

	}

}




⌨️ 快捷键说明

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