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

📄 gps_module.lst

📁 通过车载终端采集GPS数据
💻 LST
📖 第 1 页 / 共 3 页
字号:
 533   3      
 534   3      //            *gps_speed=(uint)mid_speed;     /*把ulong型强制转换为uint型,输出*/
 535   3      
 536   3              }
 537   2      
 538   2              return GPS_OK;
 539   2          }
 540   1          else
 541   1          {
 542   2              return GPS_ERROR;
 543   2          }
 544   1      }
 545          
 546          
 547          /********************************************************************************
 548          *                                                                               
C51 COMPILER V8.02   GPS_MODULE                                                            09/25/2008 19:29:39 PAGE 10  

 549          *   函数功能:取出GPS字符串中指定位置的一个逗号与下一个逗号间的子串(GPS_SUB_STR)
 550          *   输入    :GPS字符串数据                                                     
 551          *   输出    :指定位置的逗号与下一个逗号之间的子串                              
 552          *   数据包 :所有类型的包格式                                                  
 553          *                                                                               
 554          ********************************************************************************/
 555          
 556          /*修改"找第几个数据的函数"                        2006-4-3 24:20*/
 557          
 558          int get_sub_str(uchar *gps_buff, int first_comma, uchar *gps_sub_str)
 559          {
 560   1          uchar i=0;
 561   1          int comma_currrent=0;
 562   1          
 563   1              if((*gps_buff=='$')&&(first_comma>0))
 564   1              {
 565   2                      while(i<GPS_DATA_MAXLEN)
 566   2                      {
 567   3                          i++;
 568   3                          gps_buff+=1;
 569   3      
 570   3                          if(','==*gps_buff)    /*数逗号*/
 571   3                          {
 572   4                              comma_currrent+=1;
 573   4                          }
 574   3      
 575   3                          if(first_comma==comma_currrent)   /*当找到要找的第几个逗号后,也就找到了要找的数据*/
 576   3                          {
 577   4                              gps_buff+=1;                
 578   4                          
 579   4                      while(','!=*gps_buff)       /*在遇到下一个逗号之前的数据,即是要找的数据*/
 580   4                      {
 581   5                               *gps_sub_str=*gps_buff;
 582   5      
 583   5                               gps_sub_str++;
 584   5      
 585   5                               gps_buff++;
 586   5                           }
 587   4      
 588   4                          *gps_sub_str='\0';/*接收完要接收的数据(经度或纬度等)后,赋值零,表示接收完毕*/
 589   4      
 590   4                      break;   /*加break,使找到所要的数据后跳出循环    2006-4-4 11:04*/                
 591   4                          }
 592   3                      }
 593   2      
 594   2                      return GPS_OK;
 595   2              }
 596   1              else
 597   1              {
 598   2                      return GPS_ERROR;
 599   2              }
 600   1      }
 601          
 602          /********************************************************************************
 603          *                                                                               
 604          *   函数功能:当收到GPS数据包时,调用gps_mod()函数                     
 605          *
 606          ********************************************************************************/
 607          char gps_process(void)
 608          {
 609   1          static char data init=0;
 610   1          unsigned int tmp;
C51 COMPILER V8.02   GPS_MODULE                                                            09/25/2008 19:29:39 PAGE 11  

 611   1          char *gpsPtr;
 612   1          int i=0;
 613   1              if(gps_receive_flg==0) return 0;
 614   1          if( !init )
 615   1          {
 616   2              memset(&gps_struct, 0, sizeof(gps_struct));
 617   2              init = 1;
 618   2              uart1_init();
 619   2          }
 620   1      
 621   1      
 622   1          tmp = get_gps_packet(&gpsPtr);  /*得到缓冲区中一整串字符的长度*/
 623   1      
 624   1          if( tmp )
 625   1          {
 626   2              gps_struct.valid = 0;
 627   2      
 628   2              *(gpsPtr+tmp) = 0;          /*当缓冲区中的一整串数据接收完毕时,加零表示接收结束*/
 629   2              while(*gpsPtr!=0x00)        /*一直循环,直到遇到0*/
 630   2              {
 631   3                          if (*gpsPtr=='$')       /*如果找到'$',继续后移,并给gps_buff[0]赋以'$'*/
 632   3                  {                
 633   4                      gpsPtr+=1;
 634   4       
 635   4                      gGps_buff[0]='$';
 636   4      
 637   4                      i+=1;
 638   4      
 639   4                      while (*gpsPtr!='$'&& (i<GPS_DATA_MAXLEN))/*在遇到下一个'$'符号之前,一直填充 gps_buff[i]*
             -/
 640   4                      {
 641   5                          gGps_buff[i]=*gpsPtr;
 642   5      
 643   5                          i++;
 644   5      
 645   5                          gpsPtr++;      
 646   5                          
 647   5                      }                   
 648   4                    
 649   4                      if(GPS_ERROR==gps_mod(gGps_buff))/*调用此函数,对收到的一小串数据进行处理*/
 650   4                                      {
 651   5                                              return(0);
 652   5                                      }
 653   4                      i=0;  
 654   4                  } 
 655   3             
 656   3                  else 
 657   3                  {
 658   4                      gpsPtr++;/*如果未找到'$',一直找'$'*/
 659   4                  }
 660   3              }
 661   2              enable_rcv_gps();/*接收完一整串数据后,对串口进行清零*/
 662   2          }
 663   1      
 664   1          return(tmp);
 665   1      }
 666          
 667          /********************************************************************************
 668          *                                                                               
 669          *   函数功能:调用以上所有函数,并填充结构体GPS_DATA                          
 670          *
 671          ********************************************************************************/
C51 COMPILER V8.02   GPS_MODULE                                                            09/25/2008 19:29:39 PAGE 12  

 672          extern unsigned char gps_str[80]; 
 673          int gps_mod(uchar *gps_buff)
 674          {   
 675   1          uint  tmp_alti_spe_dir=0;
 676   1          if(GPS_OK==gps_chk(gps_buff))       /*如果校验和正确*/
 677   1          {
 678   2                      if(get_format(gps_buff)==GPRMC)   /*判断出某种协议格式*/
 679   2                      {
 680   3                                      get_gps_state(gps_buff, &(gps_string.valid));
 681   3                                      if(gps_string.valid!='A')
 682   3                                              return GPS_ERROR;       
 683   3                                      memset(gps_str,0,80);
 684   3                                      if(station_key==1)
 685   3                                      {
 686   4                                              station_key=0;
 687   4                                              memcpy(gps_str+2,gps_buff,strlen(gps_buff));
 688   4                                              if(cur_direction==24)
 689   4                                              {
 690   5                                                      gps_str[0]=(gps_8line[cur_line].station_counter_up+1)/10+'0';
 691   5                                                      gps_str[1]=(gps_8line[cur_line].station_counter_up+1)%10+'0';
 692   5                                                      gps_8line[cur_line].station_counter_up++;
 693   5                                                      gps_8line[cur_line].gps_counter_up++;
 694   5                                              }
 695   4                                              else if(cur_direction==25)
 696   4                                              {
 697   5                                                      gps_str[0]=(gps_8line[cur_line].station_counter_down+1)/10+'0';
 698   5                                                      gps_str[1]=(gps_8line[cur_line].station_counter_down+1)%10+'0';
 699   5                                                      gps_8line[cur_line].station_counter_down++;
 700   5                                                      gps_8line[cur_line].gps_counter_down++;
 701   5                                              }
 702   4                                              //保存数据和结构体
 703   4      
 704   4                                              //
 705   4                                      }
 706   3                                      else if(corner_key==1)
 707   3                                      {
 708   4                                              corner_key=0;
 709   4                                              gps_str[0]='9';
 710   4                                              gps_str[1]='9';
 711   4                                              memcpy(gps_str+2,gps_buff,strlen(gps_buff));
 712   4                                              if(cur_direction==24)
 713   4                                              {
 714   5                                                      gps_8line[cur_line].corner_counter_up++;
 715   5                                                      gps_8line[cur_line].gps_counter_up++;
 716   5                                              }
 717   4                                              else if(cur_direction==25)
 718   4                                              {
 719   5                                                      gps_8line[cur_line].corner_counter_down++;
 720   5                                                      gps_8line[cur_line].gps_counter_down++;
 721   5                                              }
 722   4                                              //保存数据和结构体
 723   4      
 724   4                                              //
 725   4                                      }
 726   3                                      else
 727   3                                      {
 728   4                                              memcpy(gps_str,gps_buff,strlen(gps_buff));
 729   4                                              if(cur_direction==24)
 730   4                                              {
 731   5                                                      gps_8line[cur_line].gps_counter_up++;
 732   5                                              }
 733   4                                              else if(cur_direction==25)
C51 COMPILER V8.02   GPS_MODULE                                                            09/25/2008 19:29:39 PAGE 13  

 734   4                                              {
 735   5                                                      gps_8line[cur_line].gps_counter_down++;
 736   5                                              }
 737   4                                              //保存数据和结构体
 738   4      
 739   4                                              //
 740   4                                      }
 741   3                                      savegpstoflash();
 742   3                                      
 743   3      
 744   3                      get_sub_str(gps_buff, 3, gps_string.latitude);  /*得到纬度*/
 745   3                      get_sub_str(gps_buff, 5, gps_string.longitude); /*得到经度*/
 746   3                      tmp_alti_spe_dir=0;                         /*高度、速度、方向共用一个变量,用后清零*/    
             -           
 747   3                      get_speed(gps_buff, &tmp_alti_spe_dir);     /*得到速度*/
 748   3                      gps_string.speed[0]=(tmp_alti_spe_dir*18)/1000/10+'0';
 749   3                      gps_string.speed[1]=(tmp_alti_spe_dir*18)/1000%10+'0';
 750   3                                      gps_string.speed[2]=0;
 751   3                                      gps_string.valid='A';
 752   3                                      
 753   3                              return GPS_OK;
 754   3              }
 755   2                      gps_string.valid='V';
 756   2              return GPS_ERROR;
 757   2          }
 758   1          else
 759   1          {
 760   2                      gps_string.valid='V';
 761   2              return GPS_ERROR;
 762   2          }
 763   1      }
 764          
 765          /********************************************************************************
 766          *                                                                               
 767          *   函数功能:将结构体所有成员置零                      
 768          *
 769          ********************************************************************************/
 770          
 771          
 772          
 773          void get_gps_data(GPS_DATA **ptr)
 774          {
 775   1          if( gps_struct.valid == 0x41 )
 776   1              gps_struct.valid = 0x41;
 777   1          else
 778   1              gps_struct.valid = 0;
 779   1      
 780   1          *ptr = &gps_struct;
 781   1      }
 782          
 783          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   3372    ----
   CONSTANT SIZE    =     42    ----
   XDATA SIZE       =    129     196
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.

C51 COMPILER V8.02   GPS_MODULE                                                            09/25/2008 19:29:39 PAGE 14  


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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