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

📄 main.c

📁 基于飞思卡尔智能车比赛
💻 C
字号:
#include <hidef.h>      /* common defines and macros */
#include <mc9s12dg128.h>     /* derivative information */
#include <stdlib.h>
#include "RS232.h"
#include "systeminitial.h"
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"

void main(void) {
  int main_i=0,main_j=0;
  int row_limit=30;											//标记最近行取40个黑点,随着行数递增,它的值递减 
  int line_limit=32;		                //标记共取40场,每场一行
  //int main_tj_j=0,main_tj_k=0;
  //int main_i_error=0;                   //记录不符合条件的行数
  //int line_error_num=0;                 //记录不符合条件的行号
  //int sum_xy=0,main_xy=0;
  uchar flag_speed_30=0;
  //uint stop=0;
  //uint flag=0;
  //char threshold_difference=0;
  //static char index_ccd_init_temp[40]={0};			//初始化的index_ccd值
  //uchar distant_select=0; ///近中远选择标志
  
  DisableInterrupts;
  
  for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<50;main_j++);
	
	   
 
	/*	*/
 

  
  SYSTEM_Init();
  //while(1)PWMDTY01=3000;/**/
  PORTB=0xFF;

 /*	 while(PORTA_BIT2==1)	
  {
  PORTB=0X00;
    for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<50;main_j++);
    for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<50;main_j++);
    for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<50;main_j++);
    for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<50;main_j++);

  //PWMDTY23=2000;
 
  PWMDTY01=2750-shift_angle;
  for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<50;main_j++);
    for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<50;main_j++);
    for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<50;main_j++);
    for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<50;main_j++);
   PWMDTY01=3000-shift_angle;
  for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<50;main_j++);
    for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<50;main_j++);
    for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<50;main_j++);
    for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<50;main_j++);
  PWMDTY01=3250-shift_angle;
  }*/
 


  speed_v_min=(PTT&0x07)*10;   //取T口的低3位的值*10(开关值)  70
  speed_v_min+=110;            //min=180
  speed_v_unvisible=95;        //unvisible=95
  
  speed_v_max=speed_v_min;     //max=180


  while(PORTA_BIT2==1)
  {
    PORTB=0x55;
  
    for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<30;main_j++);
     
    speed_v_max+=10;                        //max=190
   
    for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<30;main_j++);
     
    PORTB=0xFF;
  
    for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<100;main_j++);
   }/**/
  



  PORTB=~(speed_v_max/5);                 //11011001
  
  for(main_i=0;main_i<20000;main_i++)			//摄像头预热
    for(main_j=0;main_j<400;main_j++);
    
  PORTB=0xFF;
  
  for(main_i=0;main_i<20000;main_i++)			//摄像头预热
    for(main_j=0;main_j<100;main_j++);
  
 
  while(PORTA_BIT2==1)
  {
    PORTB=0x55;
    
    for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<30;main_j++);
     
    speed_v_unvisible+=10;                  //unvisible=105
     
    for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<30;main_j++);
     
    PORTB=0xFF;
  
    for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<150;main_j++);
  }
  
  
  EnableInterrupts;

  PIEH_PIEH0=1;   //开启H口中断,即开始进入实时处理阶段
  
 
     
  for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<100;main_j++);
     
     
  for(main_i=0;main_i<20000;main_i++)			//摄像头预热
     for(main_j=0;main_j<100;main_j++);
  
 
  for(;;) 
  { 
    if(m>20)
   { 
     m=0;
#ifndef sci_cmos_select
 if(PORTA_BIT2==0)    
 {
  PID();
    //PWMDTY45=2500;
  }
 else 
 {
  PWMDTY45=0;
  PWMDTY23=0;
 }
#endif  
   } 
#ifdef sci_cmos_select
if(once1==1)
   { 
    once1=0;
    print_ad_video();
    print_string("\r\n");
    print_string("line_begin:");print_uchar(begin_line);print_string("   ");
    print_string("line_end:");print_uint(last_line);
    print_string("\r\n");
    for(line_i=0;line_i<=LINE_num/10;line_i++)
    {
      print_uchar(index_cmos[line_i]);print_string("  ");
    }
    print_string("\r\n");
    for(line_i=0;line_i<=LINE_num/10;line_i++)
    {
      print_uchar(index_cmos_flag[line_i]);print_string("  ");
    } 
    print_string("\r\n");
    for(line_i=0;line_i<=LINE_num/10;line_i++)
    {
    print_uchar(black_num_cmos[line_i]);print_string("  "); /**/
    }
    print_string("\r\n index_cmos_last:");
    print_uchar(index_cmos_last);print_string("\r\n");
    print_uchar(index_cmos[begin_line]);
    print_uchar((index_cmos[begin_line]-index_cmos[last_line]));
    print_string("\r\n k=");
    print_uint(k);
    
    print_string("\r\nbegin_line_flag:");print_uchar(begin_line_flag);
    print_string("\r\nflag_cmos_visible");print_uchar(flag_cmos_visible);
    print_string("\r\nright_line_cmos:");print_uchar(right_line_cmos);
    
    print_string("\r\nxxx:");print_uchar(xxx);
    PIEH_PIEH0=1;
   }
#endif													  

	 //PWMDTY23=0;
	 //PWMDTY45=2000;
	/* if(abs(index_cmos_last_50-index_center)<=2 && abs(index_cmos_last-index_center)<=2)
	   cmos_k=0; 
	 else if((index_cmos_last_50>index_center && index_cmos_last>index_cmos_last_50) || (index_cmos_last_50<index_center && index_cmos_last<index_cmos_last_50))
	   cmos_k=0.1;
	 else 
	   cmos_k=-0.1;
	 	 
	 if(c>70*22/infrared_value7)
	 {
	  index_cmos_last_50=index_cmos_last;
	  c=0;
	 }
	 */
	 	 
	 //if(abs(index_cmos_last-index_center)<7 && last_line<5)
	  // index_cmos_last=(index_cmos_last-index_center)*0.9f+index_center;
	// if(speed_v<70 && infrared_value7<55)
	//   speed_v=69;
	// else
	
     //speed_v=speed_v_max-(1.2f*(float)abs(3*index_cmos_last/*+index_cmos_begin_line_last*/-3*index_center));
	  
	   //speed_v=speed_v_max-10.0f/16.0f*(2.0f*(float)abs(3*index_cmos_last/*+index_cmos_begin_line_last*/-3*index_center));

	   //if(infrared_value7<35)
	//	{

		 //speed_v=120;
	//	}	 
	  
	  //speed_v=speed_v_max-(float)(speed_v_max-120)/14.0f*(float)(abs(index_cmos_last-index_center));
		//  /14.0f/3.0f+abs(PWMDTY01_temp-3000)/240.0f/3.0f+last_line/21.0f/3.0f
	  //speed_v=speed_v_max-(float)(speed_v_max-75)/48.0f*(float)(abs(3*index_cmos_last/*+index_cmos_begin_line_last*/-3*index_center));
		
		 
//		 speed_v=speed_v_max-(float)(speed_v_max-speed_v_min)*0.5f*(abs(PWMDTY01_temp-3000)/220.0f+(float)abs(index_cmos_last-index_center)/14.0f);
  		 
  		/*	*/
  		speed_v=speed_v_max-(float)(speed_v_max-10)*0.5f*(abs(PWMDTY01_temp-3000)/240.0f+(float)abs(index_cmos[last_line]-index_center)/14.0f);
			 if(speed_v<speed_v_min)speed_v=speed_v_min;
			 
		  if(flag_cmos_visible==0)speed_v=speed_v_unvisible;
		 	
	  /* if(infrared_value7<50)
		{
		 speed_v=100;
		}	 
	 if(infrared_value7>50)																																									  
    {
      //speed_v=20;
      flag_speed_30=0;
    }
    else if(infrared_value7<=30)flag_speed_30=1;
    if(flag_speed_30==1)speed_v=70; */
  /*if(abs(index_cmos_last-index_center)<4 && abs(index_cmos_begin_line_last-index_center)<6)
   {
    //index_angle=(float)(index_cmos_last-index_center)*1.4f*(1.0f+cmos_k);//2.5f;//40.0f/16.0f; //30
    //cmos_k=0;
    speed_v=85.0f;///(1.0f+cmos_k);
    //if(abs(index_cmos[begin_line]-index_center)<4)
      //PID_P=22.1;
    //  speed_v=(index_cmos_last-index_center);
   }
   else if(abs(index_cmos_last-index_center)<7)
   {
    //index_angle=(float)((index_cmos_last-index_center)-2)*3.3f*(1.0f+cmos_k);//(float)(index_cmos_last-index_center)*(float)(index_cmos_last-index_center)*40.0f/16.0f/16.0f/16.0f;
    //cmos_k=0;
    //speed_v=55.0f/(1.0f+cmos_k)*(1.0f-abs(index_cmos_last-index_center)/10.0f);
      //PID_P=12.1;
   speed_v=75.0f;
   }
   else
   {
    //PID_P=28.1;
    speed_v=38;//stop++;
   }  */
   //else index_angle=(float)(index_cmos_last-index_center)*2.5f;												  
   
   /*if(index_cmos_last>index_center)
     index_cmos_last=index_cmos_last+1;
   else if(index_cmos_last<index_center)
     index_cmos_last=index_cmos_last-1;
     */
   //print_string("01temp:");print_uint(PWMDTY01_temp);print_string("\r\n");
   //print_string("01:");print_uint(PWMDTY01);print_string("\r\n");
   //index_cmos_last=(index_cmos_last-index_center)*1.0+index_center;
 //#ifdef sci_cmos_select  
   //print_uchar(index_cmos_last);print_string(" ");/*print_uchar(index_center);print_string(" ");*/
   //print_uchar(abs(index_to_angle[index_cmos_last]));print_string("\r\n");
 //#endif	
   	
   //if(stop>=60000)while(1)
   //{
    //PWMDTY23=0;
   //}

  }
}

⌨️ 快捷键说明

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