超声波避障小车程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/****************************************************************************** *****************************/
//5路超声波避障实验:51单片机 + HC-SR04超声波 //
/****************************************************************************** *****************************/
#include
#include
//小车左侧超声波HC-SR04接收端
#define TX1 P1_7 //发送端
#define RX2 P3_3 //左前方超声波
#define TX2 P0_2
#define RX3 P2_4 //正前方超声波
#define TX3 P2_5
#define RX4 P3_5 //右前方超声波
#define TX4 P3_4
#define RX5 P3_7 //右侧超声波
#define TX5 P1_6
#define Left_moto_pwm P1_5 //PWM信号端
#define Right_moto_pwm P1_4 //PWM信号端
//定义小车驱动模块输入IO口
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^2;
sbit IN4=P1^3;
sbit EN1=P1^4;
sbit EN2=P1^5;
bit Right_moto_stop=1;
bit Left_moto_stop =1;
#define Left_moto_go {IN1=0,IN2=1,EN1=1;} //左电机向前走
#define Left_moto_back {IN1=1,IN2=0,EN1=1;} //左边电机向后走
#define Left_moto_Stop {EN1=0;} //左边电机停转
#define Right_moto_go {IN3=1,IN4=0,EN2=1;} //右边电机向前走
#define Right_moto_back {IN3=0,IN4=1,EN2=1;} //右边电机向后走
#define Right_moto_Stop {EN2=0;} //右边电机停转
unsigned char pwm_val_left =0;//变量定义
unsigned char push_val_left =0;// 左电机占空比N/20
unsigned char pwm_val_right =0;
unsigned char push_val_right=0;// 右电机占空比N/20
unsigned int time=0;
unsigned int timer=0;
unsigned long S1=0;
unsigned long S2=0;
unsigned long S3=0;
unsigned long S4=0;
unsigned long S5=0;
void delay_1ms(unsigned char x) //1ms延时函数,100ms以内可用 { unsigned char i; while(x--) for(i=124;i>0;i--); }
/********************************************************/
void Count1() //计算左侧超声波距离的函数
{ while(!RX1); //当RX1为零时等待
TR0=1; //开启计数
while(RX1); //当RX1为1计数并等待
TR0=0; //关闭计数
time=TH0*256+TL0;
TH0=0;
TL0=0;
S1=(time*1.7)/100; //算出来是CM }
void Count2() //计算函数
{ while(!RX2); //当RX2为零时等待
TR0=1; //开启计数
while(RX2); //当RX2为1计数并等待
TR0=0; //关闭计数
time=TH0*256+TL0;
TH0=0;
TL0=0;
S2=(time*1.7)/100; //算出来是CM }
void Count3() //计算函数
{ while(!RX3); //当RX3为零时等待
TR0=1; //开启计数
while(RX3); //当RX3为1计数并等待
TR0=0; //关闭计数
time=TH0*256+TL0;
TH0=0;
TL0=0;
S3=(time*1.7)/100; //算出来是CM }
void Count4() //计算函数
{ while(!RX4); //当RX4为零时等待
TR0=1; //开启计数
while(RX4); //当RX4为1计数并等待
TR0=0; //关闭计数
time=TH0*256+TL0;
TH0=0;
TL0=0;
S4=(time*1.7)/100; //算出来是CM }
void Count5() //计算函数
{
while(!RX5); //当RX5为零时等待
TR0=1; //开启计数