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

📄 navigation.c

📁 这是用W77E58编写的控制GSM模块
💻 C
字号:


#include "global.h"
#include "util.h"
#include "navigation.h"
#include "mb90092.h"
#include "dsa.h"

void update_latitude(void);
void update_longtitude(void);
void update_satellites_used(void);
void send_latitude_longtitude(void);


extern unsigned char gps_task;
extern bit GPS_recieve_valid;

 
extern unsigned char xdata gps_recieve_buf[];

extern unsigned char        dsa_state;

bit NAVI_on = 0;


unsigned char gwmtest=0;
unsigned char xdata gps_locate;

void GPS_servo(void)
{
        unsigned char i;   	 	
  	
  	if(GPS_valid){
           
            //ES0 = 0; ES1=0;
            GPS_valid = 0;
            gps_locate = 0;
            dsa_task = DSA_send_gps;
            dsa_state = 1;
            gps_task = NAVI_FLUSH;    /*update lantitude,longtitude,sattelite position,etc.*/ 
            //"$GPRMC,153638.741,A,244 6.5243,N,12100.1494,E,0  00.0,000.0,061101,,*02\r\n";
            
            for(i=0;i<23;i++)OSD_main_symbol(3,i,CHARACTER_BLACK,1,gps_recieve_buf[i]);
            for(i=23;i<46;i++)OSD_main_symbol(4,i-23,CHARACTER_BLACK,1,gps_recieve_buf[i]);
            for(i=46;i<69;i++)OSD_main_symbol(5,i-46,CHARACTER_BLACK,1,gps_recieve_buf[i]);
	    
	    //OSD_main_symbol(6,7,CHARACTER_BLACK,1,gps_recieve_buf[66]);
	    //OSD_main_symbol(6,8,CHARACTER_BLACK,1,gps_recieve_buf[67]);
	          
	    
	    //OSD_main_symbol(7,9,CHARACTER_BLACK,1,gps_recieve_buf[6]);     	   
      	 
      	 
      	 
      	 }

         switch(gps_task)
         {
              case 0:
	     
	               switch(main_task)
                   {
                      case Main_task_NAVI:
                           if((main_selected_status & Navi_selected)!=0){
                              if((navi_selected_status & Real_selected)!=0){
                                  if((real_selected_status & TurnOnNavi_selected)==TurnOnNavi_selected)
							      {
							        timer2_system = 0x05;                              
                                    gps_task++;
							      }
                                  else if((real_selected_status & TurnOffNavi_selected)==TurnOffNavi_selected)
                                  {
                                  
							         timer2_system = 0x50;                              
                                     NAVI_on = 0;
									 gps_task=2;
								  }
							     
							  }
                            }
                           break;
                      case Main_task_RADIO:

                           break;
                      case Main_task_GSM:
                          

                           break;
                      default:
                           break;    
                   } 


                    break;
              case 1:
                    if(timer2_system) break;
   			        clear_main_screen(2,0);
                    OSD_main_string(3,6,CHARACTER_RED,1,"初始化,请稍等......");  
                    timer2_system = 0xf0;
                    NAVI_on = 1;
                    gps_task++;   
                    break;



              case 2:
	 	 		    if(timer2_system) return;
					clear_main_screen(0,0);
                    if(NAVI_on){
                       //OSD_main_string(2,2,CHARACTER_RED,1,"经度:");  
                       //OSD_main_string(2,8,CHARACTER_RED,1,"纬度:");  
                       //OSD_main_string(2,14,CHARACTER_RED,1,"速度:");  
                       //OSD_main_string(2,20,CHARACTER_RED,1,"方向:");  
                       gps_task++;

					}else gps_task++;
					break;

              case NAVI_FLUSH:
		    update_latitude();
                    update_longtitude();
                    update_satellites_used();
   				    //OSD_sub_char_display(0,0xa1a1);
                    gps_task++;
                    break;
              default:
			        break;



         }


}
 


#define LANTITUDE_LOCATE      43
#define LONGTITUDE_LOCATE     30    

#define LANTITUDE_A_MSB       20
#define LANTITUDE_A_LSB       21
#define LANTITUDE_M_MSB       22
#define LANTITUDE_M_LSB       23
#define LONGTITUDE_A_MSB      32    
#define LONGTITUDE_A_MB       33
#define LONGTITUDE_A_LSB      34
#define LONGTITUDE_M_MSB      35    
#define LONGTITUDE_M_LSB      36

 


void update_latitude(void)
{  
#if 1    
     unsigned char i,j=0;
    
        for(i=0;i<69;i++)if(gps_recieve_buf[i]==','){
                 j++; 
                 //if(j==1)OSD_ASCII_output(10,8,j);
                 //else if(j==2)OSD_ASCII_output(10,10,j);         
                 //else 
                 if(j==3){
                   OSD_main_symbol(1,2,CHARACTER_BLACK,1,gps_recieve_buf[i+1]);
                   OSD_main_symbol(1,3,CHARACTER_BLACK,1,gps_recieve_buf[i+2]);
     	           OSD_main_string(1,4,CHARACTER_GREEN,1,"度");       
                   OSD_main_symbol(1,5,CHARACTER_BLACK,1,gps_recieve_buf[i+3]);
                   OSD_main_symbol(1,6,CHARACTER_BLACK,1,gps_recieve_buf[i+4]);
     	           OSD_main_string(1,7,CHARACTER_GREEN,1,"分"); 
     	         }        
                 else if(j==4){
                   	           
                     /*lontitude:*/
                     if(gps_recieve_buf[i+1]=='N')
	                OSD_main_string(1,9,CHARACTER_GREEN,1,"北纬");  
                     else 
                     if(gps_recieve_buf[i+1]=='S')
	                OSD_main_string(1,9,CHARACTER_GREEN,1,"南纬");
                    
                   
                 }
                 else if(j==5){
                    /*lontitude:*/
                    OSD_main_symbol(1,11,CHARACTER_BLACK,1,gps_recieve_buf[i+1]);
                    OSD_main_symbol(1,12,CHARACTER_BLACK,1,gps_recieve_buf[i+2]);
	            OSD_main_symbol(1,13,CHARACTER_BLACK,1,gps_recieve_buf[i+3]);
	            OSD_main_string(1,14,CHARACTER_GREEN,1,"度");  
                    OSD_main_symbol(1,15,CHARACTER_BLACK,1,gps_recieve_buf[i+4]);
                    OSD_main_symbol(1,16,CHARACTER_BLACK,1,gps_recieve_buf[i+5]);
                    OSD_main_string(1,17,CHARACTER_GREEN,1,"分");    
                }
                else if(j==6){
                    /*latitude:*/
                    if(gps_recieve_buf[i+1]=='E')      
                      OSD_main_string(1,0,CHARACTER_GREEN,1,"东经");  
                    else
                    if(gps_recieve_buf[i+1]=='W')      
                       OSD_main_string(1,0,CHARACTER_GREEN,1,"西经");     
                  
                }
        
        }
        	
     	
#if 0     	
     	
     	if(gps_recieve_buf[i]==',')
     	  gps_locate++; 
       
       
       
        
        
        switch(gps_locate)
        {
           case 1:
                break;
           case 2:
                break;
           case 3: /*latitude*/
                OSD_main_symbol(1,2,CHARACTER_BLACK,1,gps_recieve_buf[i+1]);
                OSD_main_symbol(1,3,CHARACTER_BLACK,1,gps_recieve_buf[i+2]);
     	        OSD_main_string(1,4,CHARACTER_GREEN,1,"度");       
                OSD_main_symbol(1,5,CHARACTER_BLACK,1,gps_recieve_buf[i+3]);
                OSD_main_symbol(1,6,CHARACTER_BLACK,1,gps_recieve_buf[i+4]);
     	        OSD_main_string(1,7,CHARACTER_GREEN,1,"分");  
  	        break;
           case 4:
                 /*latitude:*/
                if(gps_recieve_buf[i+1]=='E')      
                   OSD_main_string(1,0,CHARACTER_GREEN,1,"东经");  
                else
                if(gps_recieve_buf[i+1]=='W')      
                   OSD_main_string(1,0,CHARACTER_GREEN,1,"西经");  
                   
                break;
           case 5:
                /*lontitude:*/

                OSD_main_symbol(1,11,CHARACTER_BLACK,1,gps_recieve_buf[i+1]);
                OSD_main_symbol(1,12,CHARACTER_BLACK,1,gps_recieve_buf[i+2]);
	        OSD_main_symbol(1,13,CHARACTER_BLACK,1,gps_recieve_buf[i+3]);
	        OSD_main_string(1,14,CHARACTER_GREEN,1,"度");  
                OSD_main_symbol(1,15,CHARACTER_BLACK,1,gps_recieve_buf[i+4]);
                OSD_main_symbol(1,16,CHARACTER_BLACK,1,gps_recieve_buf[i+5]);
                OSD_main_string(1,17,CHARACTER_GREEN,1,"分");  
                break;
           case 6:
                 /*lontitude:*/
                if(gps_recieve_buf[i+1]=='N')
	           OSD_main_string(1,9,CHARACTER_GREEN,1,"北纬");  
                else 
                if(gps_recieve_buf[i+1]=='S')
	           OSD_main_string(1,9,CHARACTER_GREEN,1,"南纬");  
                break;
            default:
                break;                  	
        	
        		
        } 	
     	
     } 	
 #endif    
     gps_locate = 0;
     
    
#endif     	

   
        
	    
		
 

}

void update_longtitude(void)
{
     
     
     
     
 
}					 

unsigned char satellites=0;
void update_satellites_used(void)
{
      
     satellites =0x04; 
     OSD_ASCII_output(1,20,satellites);
 


}


void send_latitude_longtitude(void)
{
      #if 0
	    unsigned char i;
        for(i=0;i<20;i++){
		  dsa_task = 0xAB00|gps_recieve_buf[i];
          DSA_servo();
        }     

	   #endif

}		

⌨️ 快捷键说明

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