资源简介
自己写的简易版本的基于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
- 上一篇:WebService接口测试工具
- 下一篇:vqqsdl.dll
相关资源
- 程序员专用字体YaHei.Consolas.1.11b42517
- STC8951系列单片机中方指南
- 基于MCS_51单片机的工业屏柜散热方案
- 清翔电子MCS51开发板资料_新版 01_开发
- MCS_51单片机与8255A的接口设计
- Rtx51_tiny_RTOS中文版.pdf
- 51单片机PWM程序,占空比、周期可调整
- 51单片机多功能自行车测速仪
- proteus仿真 AT89C51输出各种波形
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 51单片机基于protues的几个仿真实例
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51模拟SPI读写SD卡(包括Fat和Fat32文件
- NRF24L01实现51与STM32双向通讯
- 基于c8051f020的AD转换程序及LCD显示程序
- 51单片机控制舵机程序
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- 课程设计蔬菜大棚自动控制系统,包
- 基于AT89C51的数据采集系统设计新方法
- C51单片机汇编指令查询、学习工具集
- 基于8051单片机的红外接收程序
- 基于89c51的数字钟
- 8251 全双工异步通信
- 8051F040SMBUS多机通信
- 基于单片机交通灯设计
- 51单片机频率计(很简单)
评论
共有 条评论