• 大小: 40KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: 其他
  • 标签: 51  智能小车  

资源简介

自己写的简易版本的基于51单片机的超声波避障小车的工程文件,包含输出的.hex文件。如有写的不好的地方还请多多包涵。

资源截图

代码片段和文件信息

/*Author: 独木春
 date:  2018/7/20
 */
#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 LED=0;
return 0;
}
else{
LED=1;
flag=0;
return 1;
}
}
void main(){
LED=1;
EA=1;
ET0=1;
ET1=1;
TMOD=0x11;
TH1=0xff;
    TL1=0x9c;
servorTime=0;
while(1){
 stop();  
 control=15;//控制舵机使超声波模块正对前方
 servorTime=0;
 TR1=1;
 delay(200);
 TR1=0;
 turnUp();
 LED=0;
 delay(200);
 LED=1;
 while(getDistance()==1); //向前行驶,直到前方有障碍物
 do{
    stop();
control=22;    //使舵机向左摆动
servorTime=0;
TR1=1;
  delay(200);
TR1=0;
rFlag=getDistance();
  control=5;  //使舵机向右摆动
servorTime=0;
TR1=1;
  delay(200);
TR1=0;
lFlag=getDistance();
turnDown();
delay(220);
delay(220);
delay(220);
}while(lFlag==0&&rFlag==0);
 if(rFlag==1&&lFlag==0) //左侧没有障碍物
  turnLeft();
 else if(rFlag==0&&lFlag==1)//右侧没有障碍物
  turnRight();
 else if(rFlag==1&&lFlag==1)//两侧都没有障碍物,默认向左走
  turnLeft();
 delay(220);
 delay(220);
 delay(200);
}
}
void T1_int(void) interrupt 3{   //产生舵机所需要的脉冲
  TH1=0xff;
TL1= 0x9c;
servorTime++;
if(servorTime<=control)
servorControl=1;
else
servorControl=0;
if(servorTime>=200)
servorTime=0;
}
void T0_int(void) interrupt 1{   //超声波超出测量范围
flag=1;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-07-20 16:40  LIST\
     文件        8228  2018-07-20 16:39  LIST\main.lst
     文件       14345  2018-07-20 16:39  LIST\project.m51
     文件       14130  2018-07-20 16:39  LIST\STARTUP.lst
     目录           0  2018-07-20 16:40  OUT\
     文件        9846  2018-07-20 16:39  OUT\main.obj
     文件       10247  2018-07-20 16:39  OUT\project
     文件        3721  2018-07-20 16:39  OUT\project.hex
     文件          89  2018-07-20 16:39  OUT\project.lnp
     文件        3028  2018-07-19 22:13  OUT\project.plg
     文件         816  2018-07-20 16:39  OUT\STARTUP.obj
     文件        9276  2018-07-20 16:39  project.plg
     文件       73110  2018-07-20 16:39  project.uvopt
     文件       13412  2018-07-20 16:39  project.uvproj
     文件       73098  2018-07-19 18:19  project_uvopt.bak
     文件           0  2018-07-20 09:43  project_uvproj.bak
     目录           0  2018-07-20 16:40  SRC\
     文件        3234  2018-07-20 16:39  SRC\main.c
     文件        6376  2009-05-07 14:37  STARTUP.A51
     文件          74  2018-07-20 16:42  说明.txt

评论

共有 条评论