51单片机的超声波智障(避障)小车

51单片机制作的超声波智障(避障)小车

最近在学习51单片机,暑假闲着无聊,便从网上买了个51单片机和一些传感器模块,准备利用暑假时间做一超声波避障小车。
小车做的很简陋,因为是初学51单片机,所以代码可能写的不是很好。
小车需要用到的材料:

  • 51单片机小板
  • HC-SR04超声波模块
  • SG90舵机
  • L298n电机驱动模块
  • 两个电机

keil中的代码

#include
#include
#define uchar unsigned char
#define uint unsigned int
#define barrierDis 15      //距离障碍物的距离 
uint sum;
float L;
sbit LED = P0^0;
sbit Trig = P1^1;	   //超声波模块的TRIG
sbit Echo = P1^2;	   //超声波模块的ECHO
sbit motorDriver_1 =P2^1;  //控制第一个电机,从单片机出来后接L298n模块的IN1
sbit motorDriver_2 =P2^2;  //控制第一个电机,从单片机出来后接L298n模块的IN2
sbit motorDriver_3 =P2^3;  //控制第二个电机,从单片机出来后接L298n模块的IN3
sbit motorDriver_4 =P2^4;  //控制第二个电机,从单片机出来后接L298n模块的IN4
sbit servorControl =P1^0;  //舵机的控制引脚
uchar flag=0;
uchar control=5;
uchar servorTime=0;
uchar lFlag=0;//左方向是否有障碍的标志
uchar rFlag=0;//右方向是否有障碍的标志
void delay(uchar time){	 //延迟函数
	uchar i;
	for(;time>0;time--){
		for(i=0;i<255;i++);
	}
}
void stop(){	 //小车停止
	motorDriver_1=0;
	motorDriver_2=0;
	motorDriver_3=0;
	motorDriver_4=0;
}
void turnLeft(){		//小车向左转
	motorDriver_1=1;
	motorDriver_2=0;
	motorDriver_3=0;
	motorDriver_4=0;
}						 //小车向右转
void turnRight(){
	motorDriver_1=0;
	motorDriver_2=0;
	motorDriver_3=1;
	motorDriver_4=0;
}
void turnUp(){			  //小车向前走
	motorDriver_1=1;
	motorDriver_2=0;
	motorDriver_3=1;
	motorDriver_4=0;
}
void turnDown(){		  //小车向后走
	motorDriver_1=0;
	motorDriver_2=1;
	motorDriver_3=0;
	motorDriver_4=1;
}
void openHc(){
   Trig=1;
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   Trig=0;
}
uchar getDistance(){  //利用超声波模块判断有无障碍物
	TH0=0;
	TL0=0;
	openHc();
	while(!Echo);
	TR0=1;
	while(Echo);
	TR0=0;
	sum=TH0*256+TL0;
	L=(sum*1.78)/100;
	if(L=200)
			servorTime=0;
}
void T0_int(void) interrupt 1{	  //超声波超出测量范围
		flag=1;
}


###做好的实物图
51单片机的超声波智障(避障)小车_第1张图片

你可能感兴趣的:(51,C)