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

📄 gps.lst

📁 基于STC51通过GPS自主定位导航FAT文件系统程序
💻 LST
字号:
C51 COMPILER V7.20   GPS                                                                   11/03/2007 17:08:50 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE GPS
OBJECT MODULE PLACED IN .\output\GPS.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\device\GPS.c LARGE ORDER INCDIR(.\src\include) DEBUG OBJECTEXTEND PRINT
                    -(.\output\GPS.lst) OBJECT(.\output\GPS.obj)

line level    source

   1          //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&GPS数据包处理&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
   2          //*文件名称:GPS.c
   3          
   4          //*文件作用:GPS数据包处理
   5          
   6          //*文件作者:翟  鹏
   7          
   8          //*创建日期:2004年5月
   9          //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  10          
  11          
  12          
  13          #include <include.h>
  14          
  15          
  16          
  17          //缓冲区定义
  18          static uchar xdata gps_receive_buffer[GPS_RECEIVE_BUF_SIZE];//接收缓冲区
  19          static uint  xdata gps_buf_point=0;//接收缓冲区指针
  20          static float xdata gps_longitude=117.238144;//经度
  21          static float xdata gps_latitude=39.117604;//纬度
  22          static float xdata temp_longitude=117.238144;//经度
  23          static float xdata temp_latitude=39.117604;//纬度
  24          static uint  xdata gps_velocity=0;//速度
  25          static uint  xdata gps_direction=0;//方向
  26          static uchar xdata gps_date_str[]="010101";//日期
  27          static uchar xdata gps_time_str[]="160000.00";//时间
  28          
  29          
  30          //状态位
  31          static uchar xdata gps_reset=1;//需要复位
  32          static uchar xdata gps_ant_state=0;//GPS天线检测
  33          static float xdata gps_trueness=99;//可信度
  34          static uchar xdata gps_satellite=0;//卫星数量
  35          static uchar xdata gps_3D=0;//3D
  36          static uchar xdata gps_not_active=0;//不定位的时间
  37          
  38          
  39          
  40          //*******************************************************************************************
  41          //函数作用:GPS坐标转化为度
  42          //参数说明:
  43          //注意事项:
  44          //返回说明:无
  45          //*******************************************************************************************
  46          static float GPSx_to_DUx(char *GPRMC)
  47          {
  48   1              uint i;
  49   1      
  50   1              i=atoi(GPRMC);
  51   1              i/=100;
  52   1              return (float)i+atof(GPRMC+3)/60;
  53   1      }
  54          static float GPSy_to_DUy(char *GPRMC)
C51 COMPILER V7.20   GPS                                                                   11/03/2007 17:08:50 PAGE 2   

  55          {
  56   1              uint i;
  57   1      
  58   1              i=atoi(GPRMC);
  59   1              i/=100;
  60   1              return (float)i+atof(GPRMC+2)/60;
  61   1      }
  62          
  63          //********************************************************************************************************
             -***************
  64          //函数作用:接收串口消息
  65          //参数说明:
  66          //注意事项:
  67          //返回说明:如果接受到了完整包 返回1
  68          //********************************************************************************************************
             -***************
  69          static uchar gps_get_msg(void)
  70          {       
  71   1              uchar temp;
  72   1              
  73   1              //接收直到没有数据
  74   1              while(GPS_RECEIVE_CHAR(&temp))
  75   1              {
  76   2                      DEBUG_SEND_CHAR(temp);
  77   2      
  78   2                      if(temp=='$')
  79   2                      {
  80   3                              gps_buf_point=0;//清缓冲区指针
  81   3                      }
  82   2                      else if(temp=='\r')//判断结束符号
  83   2                      {
  84   3                              if(gps_buf_point)
  85   3                              {
  86   4                                      gps_receive_buffer[gps_buf_point]=0;//添加结束符
  87   4                                      gps_buf_point=0;//清缓冲区指针
  88   4                                      return 1;
  89   4                              }
  90   3                      }
  91   2                      else if(temp=='\n')//过滤
  92   2                      {
  93   3      
  94   3                      }
  95   2                      else                    //其他字符送入缓冲区
  96   2                      {
  97   3                              gps_receive_buffer[gps_buf_point++]=temp;//向缓存送数据
  98   3                              if(gps_buf_point>=GPS_RECEIVE_BUF_SIZE-1)gps_buf_point=0;//判断是否超长
  99   3                      }
 100   2              }
 101   1              return 0;
 102   1      }
 103          
 104          
 105                  
 106          //********************************************************************************************************
             -***************
 107          //函数作用:处理GPS数据
 108          //参数说明:
 109          //注意事项:
 110          //返回说明:
 111          //********************************************************************************************************
             -***************
 112          static void gps_analyse(void)
C51 COMPILER V7.20   GPS                                                                   11/03/2007 17:08:50 PAGE 3   

 113          {
 114   1              uchar *gps_argv[GPS_ARGV_NUM];//参数指针
 115   1              uchar gps_argv_length[GPS_ARGV_NUM];//参数长度
 116   1              uchar gps_argc;//参数个数
 117   1              uchar i;
 118   1              uchar length;
 119   1              
 120   1              
 121   1              //接收消息
 122   1              if(!gps_get_msg())return;
 123   1      
 124   1              //分析参数
 125   1              i=0;
 126   1              gps_argc=0;
 127   1              length=0;
 128   1              while(gps_receive_buffer[i])
 129   1              {
 130   2                      if(gps_receive_buffer[i]==',')
 131   2                      {
 132   3                              gps_receive_buffer[i]=0;
 133   3                              if(gps_argc)gps_argv_length[gps_argc-1]=length;
 134   3                              length=0;
 135   3                              gps_argv[gps_argc++]=&gps_receive_buffer[i+1];
 136   3                              if(gps_argc>=GPS_ARGV_NUM)break;
 137   3                      }
 138   2                      else
 139   2                      {
 140   3                              length++;
 141   3                      }
 142   2                      i++;
 143   2              }
 144   1      
 145   1      
 146   1              //GPS可信度---GPGSA,A,3,01,05,07,30,14,31,,,,,,,6.99,4.33,5.49*0F
 147   1              if(strcmp(GPS_MSG_GSA,gps_receive_buffer)==0)
 148   1              {       
 149   2                      //判断参数
 150   2                      if(gps_argc!=17)return;
 151   2                      
 152   2                      gps_reset=0;
 153   2                      
 154   2                      //3D标志
 155   2                      gps_3D=atoi(gps_argv[1]);
 156   2                      
 157   2                      //长时间不定位重新启动
 158   2                      if(gps_3D<2)
 159   2                      {
 160   3                              gps_not_active++;
 161   3                              if(gps_not_active>=88)
 162   3                              {
 163   4                                      gps_not_active=0;
 164   4                                      gps_reset=1;
 165   4                              }
 166   3                      }
 167   2                      else
 168   2                      {
 169   3                              gps_not_active=0;       
 170   3                      }
 171   2              }
 172   1              //高度和卫星数量---GPGGA,100555.00,3905.95420,N,11710.08403,E,1,05,2.64,16.7,M,-3.0,M,,*7F
 173   1              else if(strcmp(GPS_MSG_GGA,gps_receive_buffer)==0)
 174   1              {       
C51 COMPILER V7.20   GPS                                                                   11/03/2007 17:08:50 PAGE 4   

 175   2                      //判断参数
 176   2                      if(gps_argc!=14)return;
 177   2                                                                              
 178   2                      //卫星数量
 179   2                      gps_satellite=atoi(gps_argv[6]);
 180   2                      //水平可信度
 181   2                      gps_trueness=atof(gps_argv[7]);
 182   2                      
 183   2                      //3D和卫星数量大于6 才能更新坐标
 184   2                      if(gps_3D==3)
 185   2                      {
 186   3                              //送坐标
 187   3                              if(*gps_argv[1] && gps_argv_length[1]==10)
 188   3                              {
 189   4                                      temp_latitude=GPSy_to_DUy(gps_argv[1]);
 190   4                                      if(*gps_argv[2]=='S')temp_latitude=-temp_latitude;
 191   4                              }
 192   3                              if(*gps_argv[3] && gps_argv_length[3]==11)
 193   3                              {
 194   4                                      temp_longitude=GPSx_to_DUx(gps_argv[3]);
 195   4                                      if(*gps_argv[4]=='W')temp_latitude=-temp_latitude;
 196   4                              }
 197   3                              gps_longitude=temp_longitude;
 198   3                              gps_latitude=temp_latitude;
 199   3                      }
 200   2                      
 201   2                      //计算高度
 202   2                      //if(gps_argv[7][0]==0)return;
 203   2                      //if(gps_argv[8][0]==0)return;
 204   2                      
 205   2                      //if(gps_argv[7][0]=='-')temp=0;
 206   2                      //else temp=atof(gps_argv[7]);
 207   2                      //gps_height=(long)(temp*1000);
 208   2                      
 209   2                      //if(gps_argv[8][0]=='-')temp=0;
 210   2                      //else temp=atof(gps_argv[8]);
 211   2                      //gps_height+=(long)(temp*1000);
 212   2              }       
 213   1              //速度方向---GPVTG,77.52,T,,M,0.004,N,0.008,K,A*06
 214   1              else if(strcmp(GPS_MSG_VTG,gps_receive_buffer)==0)
 215   1              {
 216   2                      if(gps_argc!=9)return;
 217   2                      
 218   2                      //送速度方向
 219   2                      if(*gps_argv[0] && *gps_argv[6])
 220   2                      {
 221   3                              gps_direction=atoi(gps_argv[0]);
 222   3                              gps_velocity=atoi(gps_argv[6]);
 223   3                      }       
 224   2              }       
 225   1              //GPS天线检测--GPTXT,01,01,02,ANTSTATUS=OK*3B
 226   1              else if(strcmp(GPS_MSG_TXT,gps_receive_buffer)==0)
 227   1              {       
 228   2                      //判断参数      
 229   2                      i=0;
 230   2                      gps_argc=0;
 231   2                      while(gps_receive_buffer[i])
 232   2                      {               
 233   3                              if(gps_receive_buffer[i]==',')
 234   3                              {
 235   4                                      gps_receive_buffer[i]=0;
 236   4                                      gps_argv[gps_argc++]=&gps_receive_buffer[i+1];
C51 COMPILER V7.20   GPS                                                                   11/03/2007 17:08:50 PAGE 5   

 237   4                                      if(gps_argc>=GPS_ARGV_NUM)break;
 238   4                              }
 239   3                              i++;
 240   3                      }
 241   2                      if(gps_argc!=4)return;
 242   2                      
 243   2                      //判断是开路,短路 还是OK                                       
 244   2                      if(strncmp("ANTSTATUS=OK",gps_argv[3],sizeof("ANTSTATUS=OK")-1)==0){gps_ant_state=1;DEBUG_SEND_STR("GPS

⌨️ 快捷键说明

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