1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > c语言超声波壁障源码 超声波避障小车源程序【精】【单片机吧】_百度贴吧...

c语言超声波壁障源码 超声波避障小车源程序【精】【单片机吧】_百度贴吧...

时间:2021-03-16 23:13:53

相关推荐

c语言超声波壁障源码 超声波避障小车源程序【精】【单片机吧】_百度贴吧...

该楼层疑似违规已被系统折叠隐藏此楼查看此楼

time=TH0*256+TL0; //读取脉宽长度

TH0=0;

TL0=0;

S=(time*1.7)/100; //算出来是CM

disbuff[0]=S%1000/100; //更新显示

disbuff[1]=S%1000%100/10;

disbuff[2]=S%1000%10 %10;

}

/************************************************************************/

//前速前进

void run(void)

{

Left_moto_go ; //左电机往前走

Right_moto_go ; //右电机往前走

}

/************************************************************************/

//前速后退

void backrun(void)

{

Left_moto_back ; //左电机往前走

Right_moto_back ; //右电机往前走

}

/************************************************************************/

//左转

void leftrun(void)

{

Left_moto_back ; //左电机往前走

Right_moto_go ; //右电机往前走

}

/************************************************************************/

//右转

void rightrun(void)

{

Left_moto_go ; //左电机往前走

Right_moto_back ; //右电机往前走

}

/************************************************************************/

//STOP

void stoprun(void)

{

Left_moto_Stop ; //左电机停走

Right_moto_Stop ; //右电机停走

}

/************************************************************************/

void COMM( void )

{

push_val_left=5; //舵机向左转90度

timer=0;

while(timer<=4000); //延时400MS让舵机转到其位置

StartModule(); //启动超声波测距

Conut(); //计算距离

S2=S;

push_val_left=23; //舵机向右转90度

timer=0;

while(timer<=4000); //延时400MS让舵机转到其位置

StartModule(); //启动超声波测距

Conut(); //计算距离

S4=S;

push_val_left=14; //舵机归中

timer=0;

while(timer<=4000); //延时400MS让舵机转到其位置 StartModule(); //启动超声波测距

Conut(); //计算距离

S1=S; if((S2<20)||(S4<20)) //只要左右各有距离小于20CM小车后退

{

backrun(); //后退

timer=0;

while(timer<=4000);

}

if(S2>S4)

{

rightrun(); //车的左边比车的右边距离小 右转

timer=0;

while(timer<=4000);

}

else

{

leftrun(); //车的左边比车的右边距离大 左转

timer=0;

while(timer<=4000);

}

} /************************************************************************/

/* PWM调制电机转速 */

/************************************************************************/

/* 左电机调速 */

/*调节push_val_left的值改变电机转速,占空比 */

void pwm_Servomoto(void)

{

if(pwm_val_left<=push_val_left)

Sevro_moto_pwm=1;

else

Sevro_moto_pwm=0;

if(pwm_val_left>=200)

pwm_val_left=0;

}

/***************************************************/

///*TIMER1中断服务子函数产生PWM信号*/

void time1()interrupt 3 using 2

{

TH1=(65536-100)/256; //100US定时

TL1=(65536-100)%256;

timer++; //定时器100US为准。在这个基础上延时

pwm_val_left++;

pwm_Servomoto(); timer1++; //2MS扫一次数码管

if(timer1>=20)

{

timer1=0;

Display();

}

}

/***************************************************/

///*TIMER0中断服务子函数产生PWM信号*/

void timer0()interrupt 1 using 0

{

} /***************************************************/ void main(void)

{ TMOD=0X11;

TH1=(65536-100)/256; //100US定时

TL1=(65536-100)%256;

TH0=0;

TL0=0;

TR1= 1;

ET1= 1;

ET0= 1;

EA = 1; delay(100);

push_val_left=14; //舵机归中

while(1) /*无限循环*/

{ if(timer>=1000) //100MS检测启动检测一次

{

timer=0;

StartModule(); //启动检测

Conut(); //计算距离

if(S<30) //距离小于20CM

{

stoprun(); //小车停止

COMM(); //方向函数

}

else

if(S>30) //距离大于,30CM往前走

run();

} }

}

/**************************************************************************

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。