您好,欢迎来到刀刀网。
搜索
您的当前位置:首页51单片机循迹小车源码

51单片机循迹小车源码

来源:刀刀网

#include <REGX52.H>

sbit PWMA=P2^5;
sbit AIN1=P2^4;
sbit AIN2=P2^3;
sbit STBY1=P2^6;
sbit PWMB=P2^0;
sbit BIN3=P2^2;
sbit BIN4=P2^1;

sbit PWMC=P1^5;
sbit AIN5=P1^3;
sbit AIN6=P1^4;
sbit STBY2=P1^6;
sbit PWMD=P1^0;
sbit BIN7=P1^1;
sbit BIN8=P1^2;

sbit R1=P0^0;
sbit M=P0^2;
sbit L1=P0^3;

unsigned char counter,compare,X;

void PWM_ON()
{
   PWMA=1;
    PWMB=1;
    PWMC=1;
    PWMD=1;
}
void PWM_OFF()
{
    
   PWMA=0;
    PWMB=0;
    PWMC=0;
    PWMD=0;


}

void Motor_Forward()//前进
{
   AIN1=1;
    AIN2=0;//右前轮
    BIN3=1;
    BIN4=0;//右后轮
    AIN5=1;
    AIN6=0;//左前轮
    BIN7=1;
    BIN8=0;//左后轮
}
void Motor_Back()//后退
{
   AIN1=1;
    AIN2=0;//右前轮
    BIN3=1;
    BIN4=0;//右后轮
    AIN5=1;
    AIN6=0;//左前轮
    BIN7=1;
    BIN8=0;//左后轮

}    
void Motor_start()//启动
{
   STBY1=1;//右两轮
    STBY2=1;//后两轮
}
void Motor_Stop()//停止
{
    STBY1=0;//右两轮
    STBY2=0;//后两轮
}

void Left_Motor_Forward()//左转
{
   AIN1=1;
    AIN2=0;//右前轮
    BIN3=1;
    BIN4=0;//右后轮
    AIN5=1;
    AIN6=0;//左前轮
    BIN7=1;
    BIN8=0;//左后轮
}

void Right_Motor_Forward()//右转
{
   AIN1=1;
    AIN2=0;//右前轮
    BIN3=1;
    BIN4=0;//右后轮
    AIN5=1;
    AIN6=0;//左前轮
    BIN7=1;
    BIN8=0;//左后轮

}
void Speed(char X)
{
   switch (X) 
      { case 1: compare=1;break; 
          case 2: compare=2;break;
        case 3: compare=3;break; 
          case 4: compare=4;break; 
          case 5: compare=5;break; 
          case 6: compare=6;break;
        case 7: compare=7;break; 
        case 8: compare=8;break; 
        case 9: compare=9;break;            
      }
}    


void Timer0_Init()  //100微秒@12MHz
{

 TMOD &= 0xF0;  //设置定时器模式
 TMOD |= 0x01;  //设置定时器模式
 TH0 = (65536-100)/256;  //设置定时初始值
 TL0 = (65536-100)%256;  //设置定时初始值
 TF0 = 0;  //清除TF0标志
 TR0 = 1;  //定时器0开始计时
 ET0 = 1;
 EA = 1;
 PT0 = 0;
}


void main()
{

  if((R1==0)&&(M==1)&&(L1==0))
  {
     Speed(2);
     Motor_Forward();//前进
  }
//  if((R1==1)&&(R2==1)&&(M==1)&&(L1==1)&&(L2==1))
//  {
//     Speed(2);
//      Left_Motor_Forward();//左转
//  }
//  if((R1==1)&&(R2==1)&&(M==1)&&(L1==1)&&(L2==1))
//  {
//     Speed(2);
//     Right_Motor_Forward();
//  }

}

void Timer0_Routine() interrupt 1
{
   TH0 = (65536-100)/256;  //设置定时初始值
   TL0 = (65536-100)%256;  //设置定时初始值
   counter++;
    if(counter==10)
    {
       counter=0;
    }
    if(counter<=compare)
    {
      PWM_ON();
    }
    if(counter>compare && counter<=10)
    {
      PWM_OFF();
    }
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务