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

📄 ggb1.c

📁 51单片机实现gps(全球定位系统)
💻 C
字号:
#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

#define uchar unsigned char
#define uint  unsigned int

#define gps_LG0 XBYTE[0x0]
#define gps_LG1 XBYTE[0x1000]
#define gps_LG2 XBYTE[0x2000]
#define gps_LG3 XBYTE[0x3000]

#define gps_LAT0 XBYTE[0x4000]
#define gps_LAT1 XBYTE[0x5000]
#define gps_LAT2 XBYTE[0x6000]
#define gps_LAT3 XBYTE[0x7000]

#define GDJ_B0 XBYTE[0x8000]
#define GDJ_B1 XBYTE[0x9000]

#define UTC0 XBYTE[0xc000]
#define UTC1 XBYTE[0xd000]
#define UTC2 XBYTE[0xe000]
#define UTC3 XBYTE[0xf000]

#define SNum XBYTE[0xa000]

#define DTIME 40000

sbit sel_Pin=0x97;    //used in selceting series port (sleect GPS,GDJ)
sbit TESTPin1=0x94;       
sbit TESTPin2=0x95;       
sbit TESTPin3=0x93;       

/////////////////////////////
int Time;
long int Longitude,Latitude;
long int UTC_Time;
int hight;
int Star_Num=0;
int GPS_Flag=0; 
int GDJ_Flag=0;

void Delay(int TTT);

//Per 1ms interrupt once
timer0 () interrupt 1 using 1
 {
  TH0=0xfc; TL0=0x80;
  TESTPin2 = ~TESTPin2;
  Time++;
 }


int Read_GGA(void)
{
 int i;
 char Lt1[13],Lt2[13],UTC[10];
 char SN[3];  
 
 do
  { while(_testbit_(RI)==0);
  }while(SBUF != ',');

 i = 0;
 do
   {
    while(_testbit_(RI)==0);
    UTC[i] = SBUF;
    i++;
   }while( SBUF != ',' ); 
 UTC[i-1]=0x0; 
 
 i=0;
 do
   {
    while(_testbit_(RI)==0);
    if(SBUF!='.')
        {
         Lt1[i]=SBUF;       //latitude
         i++;
        }
   }while(SBUF!=',');
 Lt1[i-1]=0x0;
 
 while(1)
     {
      while(_testbit_(RI)==0);      
      if(SBUF=='N') 
        {
         while(_testbit_(RI)==0) ;
         if(SBUF==',') break; 
        }
     }
 
 i=0;    
 do
   {
    while(_testbit_(RI)==0);
    if(SBUF!='.')
      {
       Lt2[i]=SBUF;   //longitude
       i++;
      }
   }while(SBUF!=',');
 Lt2[i-1]=0x0;
 
 i=0;                           
 while(i<2)
     {
      while(_testbit_(RI)==0);
      if(SBUF==',') i++;
     }

 i=0;    
 do
   {
    while(_testbit_(RI)==0);
    SN[i] = SBUF;  
    i++;
   }while(SBUF!=',');
 SN[i-1]=0x0;
 

 Latitude=atol(Lt1);      
 Longitude=atol(Lt2); 
 UTC_Time = atol(UTC);
 Star_Num = atoi(SN);
 
 return 0;
}

int Read_GPS(void)
{
 int i,j;

 if( GPS_Flag == 0 ) return 0;    /////////////////

 sel_Pin = 1;
 
 for( j=0; j<10000; j++ ) ;
 
 RI = 0;
 
 for(;;)
  { 
   do
      { 
       while(_testbit_(RI)==0);
      } while(SBUF!='$');

   while(_testbit_(RI)==0);
   if(SBUF=='G')
      {  while(_testbit_(RI)==0);
         if(SBUF=='P')
            {   
             while(_testbit_(RI)==0);
             if(SBUF=='G') 
               {
                while(_testbit_(RI)==0);
                if(SBUF=='G')
                  {
                   while(_testbit_(RI)==0);
                   if(SBUF=='A')
                     {
                      Read_GGA(); return 0; 
                     } 
                  } 
               }                
            }      
      }
   }
}


///format:ALTxxxxxx
int Read_GDJ(void)
{
 int i,j;
 char HGT[10];

 if( GDJ_Flag == 0 ) return 0;    /////////////////

 sel_Pin = 0;
 
 RI = 0;
 Time = 0;
 for(;;)
  {
   if( RI == 1 ) break;
   if( Time > 1200 ) return 0;
  }

// for( j=0; j<100; j++ ) ;
 
 RI = 0;
  
 for(;;)
  { 
   do
     { 
      while(_testbit_(RI)==0);
     } while(SBUF!='A');
   
     while(_testbit_(RI)==0);
     if(SBUF=='L')
        {  
          while(_testbit_(RI)==0) ;
          if(SBUF=='T')
              {   
                i=0;
                do
                 { while(_testbit_(RI)==0) ;
                   HGT[i]=SBUF;
                   i++;
                 }while(i<6);
                HGT[6]=0x0;
                hight=atoi(HGT);
                return 0;
              }                     
        }  
  }
}

void InitSystem(void)
{
  TMOD=0x21;    /* Timer 1 mode 2; timer0 mode 1 */
  TH1=0xfd; TL1=0xfd;
  TR1=1;
  SCON=0x50;
  PCON=0x00;

  TH0=0xfc; TL0=0x80;	//setup time constant of 1ms delay  
  
  EA=1;
  EX0=0; EX1=0; ET0=0; ET1=0; ES=0;
  
}

///long int Longitude,Latitude;
///;int hight;

void WR_GPS(void)
{
 uchar ch0;
 long int ttt;

 ch0 = Longitude & 0x000000ff;
 gps_LG0 = ch0;

 ttt = Longitude >> 8;
 ch0 = ttt & 0x000000ff;
 gps_LG1 = ch0;

 ttt = Longitude >> 16;
 ch0 = ttt & 0x000000ff;
 gps_LG2 = ch0;

 ttt = Longitude >> 24;
 ch0 = ttt & 0x000000ff;
 gps_LG3 = ch0;

 //////////////////////////

 ch0 = Latitude & 0x000000ff;
 gps_LAT0 = ch0;

 ttt = Latitude >> 8;
 ch0 = ttt & 0x000000ff;
 gps_LAT1 = ch0;

 ttt = Latitude >> 16;
 ch0 = ttt & 0x000000ff;
 gps_LAT2 = ch0;

 ttt = Latitude >> 24;
 ch0 = ttt & 0x000000ff;
 gps_LAT3 = ch0;
 
// UTC_Time = 123456;
// Star_Num = 55;


 ////////////////////UTC
 ch0 = UTC_Time & 0x000000ff;
 UTC0 = ch0;

 ttt = UTC_Time >> 8;
 ch0 = ttt & 0x000000ff;
 UTC1 = ch0;

 ttt = UTC_Time >> 16;
 ch0 = ttt & 0x000000ff;
 UTC2 = ch0;

 ttt = UTC_Time >> 24;
 ch0 = ttt & 0x000000ff;
 UTC3 = ch0;
 
/////////////////////number of stars
 ch0 = Star_Num & 0x00ff;
 SNum = ch0;
 
}

void WR_GDJ(void)
{
 uchar ch0;
 int ttt;

 ch0 = hight & 0x00ff;
 GDJ_B0 = ch0;

 ttt = hight >> 8;
 ch0 = ttt & 0x00ff;
 GDJ_B1 = ch0;
}

void main(void)
{      
  int i,j;
  long int k;

  for(i=0;i<20000;i++) ;
    
  P0=0xff;
  P1=0xff;
  P2=0xff;
  P3=0xff;

  InitSystem();

  TR0=1; ET0=1;

///////////////////////////////
  GPS_Flag = 0; GDJ_Flag = 0;

  sel_Pin = 0;   ////select GDJ

  for(i=0;i<2000;i++) ;

  RI = 0; k = 0;

  while( k < DTIME )
    {
     if( RI == 0 ) k++;
     else 
       { 
         if( SBUF == 'A' ) { GDJ_Flag = 1; break; }
         else RI = 0;
       }
    }
///---------------------------------
  sel_Pin = 1;     //select GPS

  for(i=0;i<2000;i++) ;

  RI = 0; k = 0;

  while( k < 30000 )
    {
     if( RI == 0 ) k++;
     else 
      { 
       if( SBUF == '$' ) { GPS_Flag = 1; break; }
       else RI = 0;
      }
    }

//////////////////////////////////
 
  for(;;)
   { 
    Read_GPS();
    WR_GPS();
    
    Read_GDJ(); 
    WR_GDJ();
    TESTPin2 = ~TESTPin2; 
    P1=~P1;
   }         
}  

⌨️ 快捷键说明

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