微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机智能小车

51单片机智能小车

时间:10-02 整理:3721RD 点击:

#include<reg52.h>
sbit P1_0 = P1^0;
sbit P1_1 = P1^1;
sbit P1_2 = P1^2;
sbit P1_3 = P1^3;
sbit P1_4 = P1^4;
sbit P1_5 = P1^5;
sbit P1_6 = P1^6;
sbit P1_7 = P1^7;
sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;
sbit P2_4 = P2^4;
sbit P2_5 = P2^5;
sbit P2_6 = P2^6;
sbit P2_7 = P2^7;
sbit P3_2 = P3^2;
sbit P3_3 = P3^3;
sbit P3_4 = P3^4;
sbit P3_5 = P3^5;
sbit P3_6 = P3^6;
sbit P3_7 = P3^7;
#define uchar unsigned char
#define uint unsigned int
#define Left_1_led        P3_2  //P3_2接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1
#define Right_1_led       P3_3  //P3_3接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2
#define Left_2_led        P3_4  //P3_4接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3
#define Right_2_led       P3_5  //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;} //右边两个电机停转  
/*********************************延时函数 ***************************************/
void delay(uint k)
{   
  uint x,y;
  for(x=0;x<k;x++)
    for(y=0;y<2000;y++);
}
/**********************************前进**************************************/
void  run(void)
{
  Left_moto_go ;
  Right_moto_go ;
}
/**********************************后退**************************************/
void  back(void)
{
Left_moto_back;        //左边两个电机反式开始转
Right_moto_back;        //右边两个电机反转
}
/**********************************左转**************************************/
void  leftrun(void)
{
Right_moto_go;         //右边两个电机正转
Left_moto_back;        //左边两个电机反式开始转
}
/**********************************右转**************************************/
void  rightrun(void)
{
Left_moto_go;         //左边两个电机正转
Right_moto_back;        //右边两个电机反转
}
/**********************************停止**************************************/
void  stop(void)
{
Left_moto_Stop;         //右边两个电机正转
Right_moto_Stop;        //左边两个电机反式开始?
}
/**********************************遥控模块**************************************/
void remotecontrol()
{
   if(P2_0 == 1)
   {
      delay(10);//延时去抖动
   if(P2_0==1)
      {
  run();
      }
   }
   if(P2_1 == 1)
   {
      delay(10);//延时去抖动
   if(P2_1==1)
      {
  back();
      }
   }
   if(P2_2 == 1)
   {
      delay(10);//延时去抖动
   if(P2_2==1)
      {
  leftrun();
      }
   }
   if(P2_3 == 1)
   {
      delay(10);//延时去抖动
   if(P2_3==1)
      {
  rightrun();
      }
   }
}
/***********************************循迹模块***********************************/
void track()
{
if(Left_1_led==0&&Right_1_led==0)     //有信号为0  没有信号为1
     
  run();

else
{  
  if(Left_1_led==0&&Right_1_led==1)  //右边检测到黑线
  {  
   rightrun();
  }
  if(Right_1_led==0&&Left_1_led==1)     //左边检测到黑线
  {  
   leftrun();
  }
  if(Right_1_led==1&&Left_1_led==1)     //左边检测到黑线
  {  
   stop();
  }
}
}
/***********************************避障***************************************/
void bar()
{
if(Left_2_led==1&&Right_2_led==1)     //有信号为0  没有信号为1

  run();

else
{  
  if(Left_2_led==1&&Right_2_led==0)  //右边检测到障碍
  {  
   leftrun();
  }
  if(Right_2_led==1&&Left_2_led==0)     //左边检测到障碍
  {  
   rightrun();
  }
  if(Right_2_led==0&&Left_2_led==0)     //左右边都检测到障碍
  {  
   rightrun();
  }
}   
}
/**********************************主函数**************************************/
void main(void)
{
while(1)       /*无限循环*/
{
  if(P2_4 == 0)
  {
   delay(10);//延时去抖动
   if(P2_4==0)
   {
    stop();
    while(P2_5&P2_6)
    {
     remotecontrol();
    }

   }
  }
    if(P2_5 == 0)
    {
       delay(10);//延时去抖动
    if(P2_5==0)
   {
    while(P2_4&P2_6)
    {
     track();
    }   
    }
    }
    if(P2_6 == 0)
    {
       delay(10);//延时去抖动
    if(P2_6==0)
   {
    while(P2_4&P2_5)
    {
     bar();
    }   
    }
    }
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top