📄 gps.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 + -