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

📄 car._c

📁 飞思卡尔系列单片机智能汽车程序源代码
💻 _C
字号:
//ICC-AVR application builder : 2008-4-29 16:08:41
// Target : M32
// Crystal: 12.000Mhz

#include <iom32v.h>
#include <macros.h>
unsigned int T=1000;
void port_init(void)
{
 PORTA = 0XFF;
 DDRA  = 0x00;//PA 为输入口
 PORTB = 0xff;
 DDRB  = 0xff;//PB 为输出口 
 PORTC = 0Xff;
 DDRC  = 0x00;//PC 为输入口
 PORTD = 0xFF;
 DDRD  = 0xff;//PD 为输出口 
}
//============================================================================================
//函数: void delay(int hh)
//语法:void delay(int hh)
//描述:延时子程序
//参数:
//返回:无
//============================================================================================	
void delay(unsigned int hh )
{
    int i;
    for(i=0;i<hh;i++)
	{
	;
	}
}
//============================================================================================
//函数: void pwma(int hh)
//语法:void pwma(int hh)
//描述: 用于控制右轮
//参数:占空比
//返回:无
//============================================================================================
/*void pwma( unsigned int hh)             
{ 
  unsigned int s=0;
   unsigned  int T0=10000;
   unsigned  int H;
      s=PORTA;
	switch(hh)                //占空比    
	{
		case 0:  s=s&0xfc; delay(T0);break;     //关占空比
		case 1:  delay(1000);s=s&0xfc; delay(9000);break;
		case 2:  delay(2000);s=s&0xfc; delay(8000);break;
		case 3:  delay(3000);s=s&0xfc; delay(7000);break;
		case 4:  delay(4000);s=s&0xfC; delay(6000);break;
		case 5:  delay(5000);s=s&0xfc; delay(5000);break;
		case 6:  delay(6000);s=s&0xfc; delay(4000);break;
		case 7:  delay(7000);s=s&0xfc; delay(3000);break;
		case 8:  delay(8000);s=s&0xfc; delay(2000);break;
		case 9:  delay(9000);s=s&0xfc; delay(1000);break;
		case 10: delay(10000);s=s&0xfc;break;
	}
}
//============================================================================================
//函数: void pwmb(int hh)
//语法:void pwmb(int hh)
//描述: 用于控制左轮
//参数:占空比
//返回:无
//============================================================================================		
void pwmb( unsigned int hh)                                     //设定TA_TIMEOUT/16=(time_cl)/0x1e00)/16=100Hz           
{ 
  unsigned int k=0;
   int T=10000;
   int H;
   k=PORTA;
	switch(hh)                //占空比    
	{
		case 0:  k=k&0xf3;            break;     //关占空比
		case 1:  delay(1000);k=k&0xf3; delay(9000);break;
		case 2:  delay(2000);k=k&0xf3; delay(8000);break;
		case 3:  delay(3000);k=k&0xf3; delay(7000);break;
		case 4:  delay(4000);k=k&0xf3; delay(6000);break;
		case 5:  delay(5000);k=k&0xf3; delay(5000);break;
		case 6:  delay(6000);k=k&0xf3; delay(4000);break;
		case 7:  delay(7000);k=k&0xf3; delay(3000);break;
		case 8:  delay(8000);k=k&0xf3; delay(2000);break;
		case 9:  delay(9000);k=k&0xf3; delay(1000);break;
		case 10: delay(10000);k=k&0xf3;break;
	}
}*/
//============================================================================================
//描述:车子方向控制子程序
//参数  无
//返回:无
//============================================================================================ 
void stop()   //停止
{
	 PORTB=0X00;
	 delay(1000);
}


void GO(unsigned int aa)   //直线前进
{
     PORTB=0X06;
	 delay(aa);
	 PORTB=0X00;
	 delay(T-aa);
	 
}

void BACK(unsigned int bb)   // 直线后退
{     
	 	PORTB=0X09;   
	    delay(bb);
		PORTB=0X00;   
	    delay(T-bb);
}

void GTOL(unsigned int cc)    //前左转
{
	
	PORTB=0X02;
	delay(cc); 
	PORTB=0X00;
	delay(T-cc);  
}

void GTOR(unsigned int dd)    //前右转
{
	 
	 PORTB=0X04;
	 delay(dd);
	 PORTB=0X00;
	 delay(T-dd);
}
void BTOR(unsigned int cc)    //后左转
{
	
	PORTB=0X01;
	delay(cc); 
	PORTB=0X00;
	delay(T-cc);  
}

void BTOL(unsigned int dd)    //后右转
{
	 
	 PORTB=0X08;
	 delay(dd);
	 PORTB=0X00;
	 delay(T-dd);
}
//============================================================================================
//函数: void  line_check_GO(void)
//语法:void  line_check_GO(void)
//描述: 前进黑白寻迹检测
//参数:无
//返回:无
//============================================================================================	
void  Linecheck_GO(void)
{ 
  unsigned char temp;
  PORTA = 0XFF;
  DDRA  = 0x00;//PA 为输入口
     NOP();
    temp=PINA;
     switch(temp)
	      {
		      case 0xf0:  GTOL(600); break;
		      case 0xF7:  GTOL(600); break;
			  case 0xFB:  GO(700);  break;
		      case 0XFD:  GTOR(600); break;
	          case 0xe1:  GTOR(600); break;
		      default :  GO(700); 
     }                      
}
//============================================================================================
//函数: void  line_check_BACK(void)
//语法:void  line_check_BACK(void)
//描述: 前进黑白寻迹检测
//参数:无
//返回:无
//============================================================================================	
void  Linecheck_BACK(void)
{ 
  unsigned char temp;
  PORTA = 0XFF;
  DDRA  = 0x00;//PA 为输入口
     _NOP();
    temp=PINA;
     switch(temp)
	      {
		      case 0xf0:  BTOR(600); break;
		      case 0xe8:  BTOR(600); break;
			  case 0xe4:  BACK(700);  break;
		      case 0Xe2:  BTOL(600); break;
	          case 0xe1:  BTOL(600); break;
		      default :  BACK(700); 
     }                      
}
//============================================================================================
//函数: void main() 
//语法:void main()
//描述:主函数
//参数  无
//返回:无
//============================================================================================ 
void main()
{  
    port_init(); 
    while(1)
	{ 
	  Linecheck_GO();
	  //Linecheck_BACK();
	  //GO(800);
      // BACK(700);
	  // TOR(700);
	  //TOL(500);
    }
}

⌨️ 快捷键说明

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