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

📄 寻迹车.c

📁 4WD智能小车安装程序教程
💻 C
字号:
	/****************************************************************************
	 简单寻迹程序:接法
	 
     EN1 EN2 PWM输入端,本程序不输入PWM,直接使插上跳线帽,使能输出,这样就能全速运行


     P1_0 P1_1 接IN1  IN2    当 P1_0=1,P1_1=0; 时左上电机正转	左上电机接驱动板子输出端(蓝色端子OUT1 OUT2)
	 P1_0 P1_1 接IN1  IN2    当 P1_0=0,P1_1=1; 时左上电机反转	
	 P1_0 P1_1 接IN1  IN2    当 P1_0=0,P1_1=0; 时左上电机停转	

	 P1_2 P1_3 接IN3  IN4    当 P1_2=1,P1_3=0; 时左下电机正转	左下电机接驱动板子输出端(蓝色端子OUT3 OUT4)
	 P1_2 P1_3 接IN3  IN4    当 P1_2=0,P1_3=1; 时左下电机反转   
	 P1_2 P1_3 接IN3  IN4    当 P1_2=0,P1_3=0; 时左下电机停转	

	 P1_4 P1_5 接IN5  IN6    当 P1_4=1,P1_5=0; 时右上电机正转	右上电机接驱动板子输出端(蓝色端子OUT5 OUT6)
	 P1_4 P1_5 接IN5  IN6    当 P1_4=0,P1_5=1; 时右上电机反转
	 P1_4 P1_5 接IN5  IN6    当 P1_4=0,P1_5=0; 时右上电机停转

	 P1_6 P1_7 接IN7  IN8    当 P1_6=1,P1_7=0; 时右下电机正转	右下电机接驱动板子输出端(蓝色端子OUT7 OUT8)
	 P1_6 P1_7 接IN7  IN8    当 P1_6=0,P1_7=1; 时右下电机反转
	 P1_6 P1_7 接IN7  IN8    当 P1_6=0,P1_7=0; 时右下电机停转    

     P3_2接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1
     P3_3接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2	
     P3_4接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3
	 P3_5接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4	 四路寻迹传感器有信号(白线)为0  没有信号(黑线)为1
	 四路寻迹传感器电源+5V GND 取自于单片机板靠近液晶调节对比度的电源输出接口

																							 
	 关于单片机电源:本店驱动模块内带LDO稳压芯片,当电池输入6V时时候可以输出稳定的5V
	 分别在针脚标+5 与GND 。这个输出电源可以作为单片机系统的供电电源。
	****************************************************************************/
	
	
	#include<AT89x51.H>





    #define Left_1_led        P3_4	 //P3_2接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1
	#define Left_2_led        P3_5	 //P3_3接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2	

    #define Right_1_led       P3_6	 //P3_4接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3
	#define Right_2_led       P3_7	 //P3_5接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4



	#define Left_moto_go      {P1_0=1,P1_1=0,P1_2=1,P1_3=0;}    //左边两个电机向前走
	#define Left_moto_back    {P1_0=0,P1_1=1,P1_2=0,P1_3=1;} 	//左边两个电机向后转
	#define Left_moto_Stop    {P1_0=0,P1_1=0,P1_2=0,P1_3=0;}    //左边两个电机停转                     
	#define Right_moto_go     {P1_4=1,P1_5=0,P1_6=1,P1_7=0;}	//右边两个电机向前走
	#define Right_moto_back   {P1_4=0,P1_5=1,P1_6=0,P1_7=1;}	//右边两个电机向前走
	#define Right_moto_Stop   {P1_4=0,P1_5=0,P1_6=0,P1_7=0;}	//右边两个电机停转   



    #define Imax 14000    //此处为晶振为11.0592时的取值, 
    #define Imin 8000    //如用其它频率的晶振时,
    #define Inum1 1450    //要改变相应的取值。
    #define Inum2 700 
    #define Inum3 3000 

	unsigned char f=0;
    unsigned char Im[4]={0x00,0x00,0x00,0x00};
    unsigned char show[2]={0,0};
    unsigned long m,Tc;
    unsigned char IrOK;

   
/************************************************************************/	
//延时函数	
   void delay(unsigned int k)
{    
     unsigned int x,y;
	 for(x=0;x<k;x++) 
	   for(y=0;y<2000;y++);
}
/************************************************************************/	
//外部中断解码程序
  void intersvr1(void) interrupt 2 using 1
{
    Tc=TH0*256+TL0;                                               //提取中断时间间隔时长
    TH0=0; 
    TL0=0;              //定时中断重新置零
 if((Tc>Imin)&&(Tc<Imax))
      { 
        m=0;
        f=1;
        return;
      }       //找到启始码

   if(f==1)
      {
        if(Tc>Inum1&&Tc<Inum3) 
    {
   Im[m/8]=Im[m/8]>>1|0x80; m++; 
       }
      if(Tc>Inum2&&Tc<Inum1) 
        {
         Im[m/8]=Im[m/8]>>1; m++; //取码
  }
  if(m==32) 
   {
         m=0;  
         f=0;
         if(Im[2]==~Im[3]) 
      {
           IrOK=1; 
   }
        else IrOK=0;   //取码完成后判断读码是否正确
     }
               //准备读下一码
   }
 
}
/************************************************************************/
//前速前进
     void  run(void)
{
    
	 Left_moto_go ;   //左电机往前走
	 Right_moto_go ;  //右电机往前走
}

//前速后退
     void  backrun(void)
{
    
	 Left_moto_back ;   //左电机往前走
	 Right_moto_back ;  //右电机往前走
}

//左转
     void  leftrun(void)
{
    
	 Left_moto_back ;   //左电机往前走
	 Right_moto_go ;  //右电机往前走
}

//右转
     void  rightrun(void)
{
    
	 Left_moto_go ;   //左电机往前走
	 Right_moto_back ;  //右电机往前走
}
//STOP
     void  stoprun(void)
{
    
	 Left_moto_Stop ;   //左电机往前走
	 Right_moto_Stop ;  //右电机往前走
}


/*********************************************************************/		 
/*--主函数--*/
	void main(void)
{
	 
    m=0;
    f=0;

    IT1=1;
    EX1=1;
 
    TMOD=0x11;  
    TH0=0;
	TL0=0;
    TR0=1;
	EA=1;



	
	delay(100);	   


	while(1)							/*无限循环*/
	{ 

	    if(IrOK==1) 
     {
           	switch(Im[2])
   		{
     case 0x0e:  run(); 			     //前进
             break;
     case 0x1a:  backrun();  			 //后退
             break;
     case 0x0a:  leftrun(); 			 //左转
             break;
	 case 0x1e:  rightrun(); 			 //右转
             break;
	 case 0x05:  stoprun();			 //停止
             break;
	 default:break;

   		}

           IrOK=0;
     }
	 
					 
	 }
}
	

⌨️ 快捷键说明

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