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

📄 寻迹车.c

📁 智能车安装程序及教程
💻 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_moto_pwm     P2_0	  //PWM输出本寻迹小车不用
	#define Right_moto_pwm    P2_1	  //PWM输出本寻迹小车不用


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

    #define Right_1_led       P3_6	 //P3_6接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3
	#define Right_2_led       P3_7	 //P3_7接四路寻迹模块接口第四路输出信号即中控板上面标记为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;}	//右边两个电机停转   


    unsigned char pwm_val_left  =0;
	unsigned char push_val_left =1;// 左电机占空比10/40
	unsigned char pwm_val_right =0;
	unsigned char push_val_right=1;// 右电机占空比10/40
	bit Right_moto_stop=1;
	bit Left_moto_stop =1;
/************************************************************************/	
//延时函数	
   void delay(unsigned int k)
{    
     unsigned int x,y;
	 for(x=0;x<k;x++) 
	   for(y=0;y<2000;y++);
}
/************************************************************************/
//前速前进
     void  run(void)
{
     //push_val_left =4;
	 //push_val_right =4;
	 Left_moto_go ;
	 Right_moto_go ;
}

/************************************************************************/
/*                    PWM调制电机转速                                   */
/************************************************************************/
/*                    左电机调速                                        */
/*调节push_val_left的值改变电机转速,占空比            */
		void pwm_out_left_moto(void)
{  
   if(Left_moto_stop)
   {
    if(pwm_val_left<=push_val_left)
	       Left_moto_pwm=1; 
	else 
	       Left_moto_pwm=0;
	if(pwm_val_left>=10)
	pwm_val_left=0;
   }
   else  Left_moto_pwm=0;
}
/******************************************************************/
/*                    右电机调速                                  */  
   void pwm_out_right_moto(void)
{ 
  if(Right_moto_stop)
   { 
    if(pwm_val_right<=push_val_right)
	       Right_moto_pwm=1; 
	else 
	       Right_moto_pwm=0;
	if(pwm_val_right>=10)
	pwm_val_right=0;
   }
   else    Right_moto_pwm=0;
}
/***************************************************/
/*TIMER0中断服务子函数*/
 	void timer0()interrupt 1   using 2
{
     TH0=0XF8;	  //1Ms定时
	 TL0=0X30;
	 pwm_val_left++;
	 pwm_val_right++;
	 pwm_out_left_moto();
	 pwm_out_right_moto();
 }	



/*********************************************************************/		 
/*--主函数--*/
	void main(void)
{

	TMOD=0X01;
	TH0= 0XF8;		  //1ms定时
 	TL0= 0X30;
	TR0= 1;
	ET0= 1;
	EA = 1;

	delay(100);	   
    run();

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


			 //有信号为0  没有信号为1

              if(Left_2_led==0&&Right_1_led==0)

			  run();

			  else
			 {			  
			    
			    
			    if(Right_1_led==1&&Left_2_led==0)		//右边检测到黑线
				  {	  
		
			      Left_moto_go;						   //左边两个电机正转
			      Right_moto_back;					   //右边两个电机反转

				  }
				
				if(Left_2_led==1&&Right_1_led==0)	    //左边检测到黑线
			 	 {
			
				 Right_moto_go;						   //右边两个电机正转
			     Left_moto_back;					   //左边两个电机反式开始转
			     }
			   

	          }

					 
	 }
}
	

⌨️ 快捷键说明

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