基于51单片机的巡线小车

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char

uint time,left, right,pwm0,pwm1,pwm2,pwm3;

sbit IN1 = P1^0;
sbit IN2 = P1^1;
sbit IN3 = P1^2;
sbit IN4 = P1^3;

sbit infrared1=P0^5;
sbit infrared2=P0^3;
sbit infrared3=P0^1;    

void speed(int left,int rihgt)//该函数的作用是给pwm0,pwm1,pwm2,pwm3赋值
{
   if(left>=0)
   {
           pwm0=left;
        pwm1=0;
   }
   else
   {
        pwm0=0;
     pwm1=0-left;
   }
       
     if(rihgt>=0)
   {
        pwm2=left;
        pwm3=0;
  }
   else
   {
        pwm2=0;
     pwm3=0-left;
   }
}
void main()
{
    TMOD =0x01;
    TH0=(65536-10)/256; 
    TL0=(65536-10)%256;
    EA=1;
    TR0=1;
    ET0=1;
    speed(0,0);

while(1)    
   {


     if(infrared1==0&&infrared2==1&&infrared3==0||infrared1==1&&infrared2==1&&infrared3==0||infrared1==0&&infrared2==1&&infrared3==1)
     /*传感器1低电平(白)传感器2高电平(黑)传感器3低电平(白)*/
     /*传感器1高电平(黑)传感器2高电平(黑)传感器3低电平(白)*/
     /*传感器1低电平(白)传感器2高电平(黑)传感器3高电平(黑)*/
       {
            speed(30,30);//A逆时针 B逆时针
       }                                                               
     
     if(infrared1==1&&infrared2==0&&infrared3==0)
     /*传感器1高电平(黑)传感器2低电平(白)传感器3低电平(白)*/
      {
              speed(26,-26); //A逆时针 B顺时针
       }
    
       if(infrared1==0&&infrared2==0&&infrared3==1)
       /*传感器1低电平(白)传感器2低电平(白)传感器3高电平(黑)*/
       {
                speed(-26,26);//A顺时针 B逆时针

       }
  } 

}

 void time_0(void) interrupt 1 
{
    TH0=(65536-10)/256; 
    TL0=(65536-10)%256;
    time++;
    if(time<=150)
    {                                                 
    if(time<=pwm0)
        IN1=0;
        else
        IN1=1;

    if(time<=pwm1)
        IN2=0;
        else
        IN2=1;

    if(time<=pwm2)
        IN3=0;
        else
        IN3=1;

    if(time<=pwm3)
        IN4=0;
        else
        IN4=1;    
    }
    else
    time=0;
}
 

猜你喜欢

转载自blog.csdn.net/Qinlong_Stm32/article/details/84503032