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

📄 gpscx.c

📁 GPS调试程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	
	//lcd_compass(arrow_point[2]);//
    //lcd_pressure(arrow_point[3]);//
    return (1);
  }
return (0);
}

char point_arrow1(float comp_cur)
{
  int x_arrow,y_arrow;
  char new_point=0;
  
    
      
  x_arrow=ceil(arrow_leng*sin((comp_cur-disp_rot)/180*PI))+ref_point[0]+1 ;
  y_arrow=ceil(arrow_leng*cos((comp_cur-disp_rot)/180*PI))+ref_point[1];
  new_point=(x_arrow==arrow_point1[0])&&(y_arrow==arrow_point1[1]);
  if(new_point==0)  
  {
    past_arrow1[0]=arrow_point1[0];
	past_arrow1[1]=arrow_point1[1];
	past_arrow1[2]=arrow_point1[2];
	past_arrow1[3]=arrow_point1[3];
	past_arrow1[4]=arrow_point1[4];
	past_arrow1[5]=arrow_point1[5];
  
    arrow_point1[0]=x_arrow;
    arrow_point1[1]=y_arrow;
    arrow_point1[2]=ceil(arrow_leng*0.6*sin((comp_cur-disp_rot)/180*PI+PI/6))+ref_point[0] ;
    arrow_point1[3]=ceil(arrow_leng*0.6*cos((comp_cur-disp_rot)/180*PI+PI/6))+ref_point[1];
    arrow_point1[4]=ceil(arrow_leng*0.6*sin((comp_cur-disp_rot)/180*PI-PI/6))+ref_point[0] ;
    arrow_point1[5]=ceil(arrow_leng*0.6*cos((comp_cur-disp_rot)/180*PI-PI/6))+ref_point[1];

	
	//lcd_compass(arrow_point[2]);//
    //lcd_pressure(arrow_point[3]);//
    return (1);
  }
return (0);
}

char point_arrow2(float comp_cur)
{
  int x_arrow,y_arrow;
  char new_point=0;
  
    
      
  x_arrow=ceil(arrow_leng*sin((comp_cur-disp_rot)/180*PI))+ref_point[0]-1 ;
  y_arrow=ceil(arrow_leng*cos((comp_cur-disp_rot)/180*PI))+ref_point[1];
  new_point=(x_arrow==arrow_point2[0])&&(y_arrow==arrow_point2[1]);
  if(new_point==0)  
  {
    past_arrow2[0]=arrow_point2[0];
	past_arrow2[1]=arrow_point2[1];
	past_arrow2[2]=arrow_point2[2];
	past_arrow2[3]=arrow_point2[3];
	past_arrow2[4]=arrow_point2[4];
	past_arrow2[5]=arrow_point2[5];
  
    arrow_point2[0]=x_arrow;
    arrow_point2[1]=y_arrow;
    arrow_point2[2]=ceil(arrow_leng*0.6*sin((comp_cur-disp_rot)/180*PI+PI/6))+ref_point[0] ;
    arrow_point2[3]=ceil(arrow_leng*0.6*cos((comp_cur-disp_rot)/180*PI+PI/6))+ref_point[1];
    arrow_point2[4]=ceil(arrow_leng*0.6*sin((comp_cur-disp_rot)/180*PI-PI/6))+ref_point[0] ;
    arrow_point2[5]=ceil(arrow_leng*0.6*cos((comp_cur-disp_rot)/180*PI-PI/6))+ref_point[1];

	
	//lcd_compass(arrow_point[2]);//
    //lcd_pressure(arrow_point[3]);//
    return (1);
  }
return (0);
}


/*流速系数的自适应更新*/
/*void adaptive_coe(void)
{
 	 float C_adap,K_adap,e0,e1,S0,S1;
	 long n;
	 C_adap=C_vel;K_adap=K_vel;
	 S0=dist[1]-wave_vel[0]*R_compass/f_compass;
	 S1=dist[3]-wave_vel[1]*R_compass/f_compass;
	 for (n=0;n<200;n++)
	 {
	  e0=S0-C_adap*V_coe[0]-K_adap*V_coe[2];
	  C_adap=C_adap+2*mu*e0*V_coe[0];
	  K_adap=K_adap+2*mu*e0*V_coe[2];
	  e1=S1-C_adap*V_coe[1]-K_adap*V_coe[3];
	  C_adap=C_adap+2*mu*e1*V_coe[1];
	  K_adap=K_adap+2*mu*e1*V_coe[3];
	  if (fabs(C_adap-C_vel)/C_vel>0.05 && fabs(K_adap-K_vel)/K_vel>0.05)  break;
	 }
	 C_vel=C_adap;
	 K_vel=K_adap;
}*/

/*获得过去的连续三个GPS*/
/*void get_pastxyz(void)
{
  signed char index,k_d,k_up;
  k_up=up_i;
  for (k_d=0;k_d<3;k_d++) 
  {
 	if (k_up==0) k_up=19;
	else k_up--;
    xyz_d[k_d][0]=xyz_cache[k_up][0];
	xyz_d[k_d][1]=xyz_cache[k_up][1];
	xyz_d[k_d][2]=xyz_cache[k_up][2];
  }
}*/


/*剔除GPS野值*/
/*void remove_errxyz(void)
{
 float dst;
 float dstx,dsty;
  char k_ture=10;
  dstx=xyz_d[0][0]-xyz_d[1][0];
  dsty=xyz_d[0][1]-xyz_d[1][1];
  dst=SQRT(dstx*dstx+dsty*dsty);
  if (dst<5)  
  {
    k_ture=0;
    dstx=xyz_d[0][0]-xyz_d[2][0];
    dsty=xyz_d[0][1]-xyz_d[2][1]; 
    dst=SQRT(dstx*dstx+dsty*dsty);
  }
  else if (dst<5)
  {
    k_ture=0;
	dstx=xyz_d[1][0]-xyz_d[2][0];
    dsty=xyz_d[1][1]-xyz_d[2][1]; 
    dst=SQRT(dstx*dstx+dsty*dsty);
  }
  else if (dst<5)
  {
  k_ture=1;
  }
  else 
  {
  xyz_m[0]=xyz_d[0][0]/3+xyz_d[1][0]/3+xyz_d[2][0]/3;
  xyz_m[1]=xyz_d[0][1]/3+xyz_d[1][1]/3+xyz_d[2][1]/3;
  xyz_m[2]=xyz_d[0][2]/3+xyz_d[1][2]/3+xyz_d[2][2]/3;
  }
  if (k_ture<10)
  { 
  xyz_m[0]=xyz_d[k_ture][0];
  xyz_m[1]=xyz_d[k_ture][1];
  xyz_m[2]=xyz_d[k_ture][2];  
  }
  
}*/








//
//```````````````````````````````````````````````````````````````````````````
/// 硬件子程序
///、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
///

void p_double_char(float a)
{
	unsigned int temp;
	float temp1;
	temp1=a;
	temp=a;
	buf_double_char[0]=temp/100;
	buf_double_char[1]=temp%100;
	temp1 =(temp1-temp)*100;
	buf_double_char[2]=temp=temp1;		//浮点数转换成字符用于USB存储
	buf_double_char[3]=(temp1-temp)*100;		//浮点数转换成字符用于USB存储
}

 float lcd_bit4dis(unsigned char lcd_ds,unsigned char lcd_dy,float fdata)
{
	unsigned int i;
	unsigned int p;
	static unsigned char buf_lcd[4];
	i=fdata;
	p=i%1000;
	buf_lcd[0]=i/1000;
	buf_lcd[1]=p/100;
	buf_lcd[2]=(p%100)/10;
	buf_lcd[3]=(p%100)%10;

	lcd_display(lcd_ds,lcd_dy,buf_lcd,4);
	return (fdata-i);
}



void ADprocess(void)
{
  unsigned char f,g,num;
  unsigned int h;
  num=5;
   for(f=1;f<=num-1;f++)
   {
       for(g=0;g<=num-f;g++)
	   {
           if(AD_chushi[g]>AD_chushi[g+1]) 
		   {
		   h=AD_chushi[g];
		   AD_chushi[g]=AD_chushi[g+1];
		   AD_chushi[g+1]=h;
		   }
		}
	}
	  
ADval=(AD_chushi[1]+AD_chushi[2]+AD_chushi[3])/3;
if(!power_first_flag) power_first_flag=1;
else power_first_flag=2;

}

double GPSprocess(double *pro,unsigned char num)
{
  unsigned char f,g;
  double h;
   for(f=1;f<=num-1;f++)
   {
       for(g=0;g<=num-f-1;g++)
	   {
           if(pro[g]>pro[g+1]) 
		   {
		   h=pro[g];
		   pro[g]=pro[g+1];
		   pro[g+1]=h;
		   }
		}
	}
	  
return pro[4];
}




void Powerclr(void)
{
unsigned char z,x,y;
lcd_stateadd=d_lcdini_state_word|0x01;					//电源,先设置lcd写寄存器的状态值
	 
  lcd_xadd=4;								
  lcd_yadd=z=194;
	
	for (y=0;y<41;y++)
	{
	for (x=0;x<14;x++) lcd_dataadd=d_darkc;
	lcd_yadd=z=z-1;
	lcd_xadd=4;
	}

}

/*******************************************************/
void Powerdis(void)
{

unsigned char z,t,x,y;
lcd_stateadd=d_lcdini_state_word|0x01;					//电源,先设置lcd写寄存器的状态值
	
if (power==1){   
  lcd_xadd=4;								
  lcd_yadd=z=164;
	
	for (y=0;y<10;y++)
	{
	for (x=0;x<14;x++) lcd_dataadd=dianliang[y][x];
	lcd_yadd=z=z-1;
	lcd_xadd=4;
	}
	lcd_yadd=z=z-1;
  }
else if (power==2){
    lcd_xadd=4;								
    lcd_yadd=z=174;
	for (t=0;t<2;t++)
	{   for (y=0;y<10;y++)
		{
		for (x=0;x<14;x++) lcd_dataadd=dianliang[y][x];
		lcd_yadd=z=z-1;
		lcd_xadd=4;
		}
		lcd_yadd=z=z-1;
	}
}
	
else if (power==3){
    lcd_xadd=4;								
    lcd_yadd=z=184;
	for (t=0;t<3;t++)
	{
	for (y=0;y<10;y++)
		{
		for (x=0;x<14;x++) lcd_dataadd=dianliang[y][x];
		lcd_yadd=z=z-1;
		lcd_xadd=4;
		}
	lcd_yadd=z=z-1;	
   }
}

else if (power==4){

    lcd_xadd=4;								
    lcd_yadd=z=194;
	for (t=0;t<4;t++)                     //修改
	{
		for (y=0;y<10;y++)
		{
		for (x=0;x<14;x++) lcd_dataadd=dianliang[y][x];
		lcd_yadd=z=z-1;
		lcd_xadd=4;
		}
	lcd_yadd=z=z-1;
	}
}
}
/****************************************************/
//添加AD//
/****************************************************/

void dianxian(unsigned char power)
{
Powerclr();
Powerdis();
}



/****************************************************/
//添加AD//
/****************************************************/


/****************************************************/
//初始化GPS接收板
/****************************************************/

/*void put_char1(unsigned char C)
{
while(!(UCSR0A&(1<<UDRE0)));
UDR0=C;

}
void put_s1( unsigned char*ptr)

{

while(*ptr)
 {
  
  put_char1(*ptr++);

 }
put_char1(0x0D);
put_char1(0x0A);

}*/
void GPS_ini(void)
{
/*unsigned char flag_RETR=1;
unsigned char K;*/
UCSR0B=(1<<TXEN0);
/*while(flag_RETR) 
{*/
  
  
  //put_s(NMEB);
 // put_s1(JGG100_GGA);
  delay(100);
  //put_s(PMD);
  // delay(100);
  //put_s(NMEA);
   //delay(100);
 // put_s(SAV);
/*UCSR0B=(1<<RXEN0);
 flag_gpsrhead=false;
 while(!flag_gpsrhead) 
 {
  while(!(UCSR0A&(1<<RXC0)));
    {
   K=UDR0;
    if(K==0x24)
      { gps_ctdohao=4;}
    else
       {
         gps_ctdohao--;
        if(gps_ctdohao==0)
          {
           if(K=='G')
             {
              flag_gpsrhead=TRUE;
              flag_RETR=0;
             }
           else
             {
             flag_gpsrhead=TRUE;
             }
          }
        }
       }
        
     }
 }*/
 UCSR0B=(1<<RXEN0)|(1<<RXCIE0);
// flag_gpsrhead=false;

}

double filter1(double *pro,unsigned char num)  //东北天坐标滤波
{
  unsigned char f,g;
  double h;
  
   for(f=1;f<=num-1;f++)
   {
       for(g=0;g<=num-f-1;g++)
	   {
           if(pro[g]>pro[g+1]) 
		   {
		   h=pro[g];
		   pro[g]=pro[g+1];
		   pro[g+1]=h;
		   }
		}
	}
 
  return pro[5];
}


/*void filter2(void)  //东北天坐标滤波
{ 
  if (fabs(xyz[0]-x_temp[0])<20) xyz[0]=(xyz[0]+x_temp[0])*0.5;
  else xyz[0]=x_temp[0]=x_temp[0]*0.8+xyz[0]*0.2;
  if (fabs(xyz[1]-y_temp[0])<20) xyz[1]=(xyz[1]+y_temp[0])*0.5;
  else xyz[1]=y_temp[0]=y_temp[0]*0.8+xyz[1]*0.2;
  if (fabs(xyz[2]-z_temp[0])<20) xyz[2]=(xyz[2]+z_temp[0])*0.5;
  else xyz[2]=z_temp[0]=z_temp[0]*0.8+xyz[2]*0.2;
}*/



void main(void)
{  
    unsigned char uch_power;   //电量暂存
	//unsigned char *point;
     char o;
   flag_check_gps=0;
	 SREG=0;
	 
//disp_x=20;
//disp_y=30;
	 
//calc_arrow ();	 
	 WDTCR=(1<<WDCE)|(1<<WDE);
	 WDTCR=(0<<WDE);
	 MCUCR|=(1<<SRE);		  			//|(1<<SRW10);
//	 XMCRA|=(1<<SRW11);//(1<<SRW01)|
	ini_rob();
	power=4;//电量显示
	ADval=830;
	dianxian(power);
	delay(5000);
	GPS_ini();
//	ptr_proc();
	SREG=0x80;
	
	//lcd_pwrbright();					//点亮LCD工作灯

⌨️ 快捷键说明

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