关于51单片机的避障小车程序问题。我是一个程序菜鸟,已经尽力写出这样程序但是不能完成目标。详细如下:

#include<reg51.h>
sbit lfback=P0^1; //左前轮后退//
sbit rfback=P0^3; //右前轮后退//
sbit lfgo=P0^0; //左前轮前进//
sbit rfgo=P0^2; //右前轮前进//
sbit lbback=P1^0; //左后轮后退//
sbit rbback=P1^2; //右后轮后退//
sbit lbgo=P1^1; //左后轮前进//
sbit rbgo=P1^3; //右后轮前进//
sbit echo=P3^0;
sbit trig=P3^1;
unsigned int time=0;
unsigned int timer=0;
float S=0;
unsigned char i,j,k;
void main(void)
{
lfgo=0;
rfgo=0;
lbgo=0;
rbgo=0;
while(1)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
trig=1;
delay_20us();
trig=0; //产生一个20us的脉冲,在Trig引脚
while(echo==0); //等待Echo回波引脚变高电平
EX0=1; //打开外部中断
TH1=0; //定时器1清零
TL1=0; //定时器1清零
TF1=0; //
TR1=1; //启动定时器1
EA=1;
while(TH1 < 30);//等待测量的结果,周期65.535毫秒(可用中断实现)
TR1=0; //关闭定时器1
EX0=0; //关闭外部中断
S=(time*1.87)/100; //算出来是CM
if(S>=250) //超出测量
{
lfgo=0;
rfgo=0;
lbgo=0;
rbgo=0;
}
else
{
lfgo=0;
rfgo=1;
rfback=0;
lbgo=0;
rbgo=1;
rbback=0;
for(i=1000;i>0;i--)
for(j=1000;j>0;j--)
for(k=1;k>0;k--);//原地右转//
rfback=1;
rbback=1;
lfgo=0;
rfgo=0;
lbgo=0;
rbgo=0;
for(i=1000;i>0;i--)
for(j=1000;j>0;j--)
for(k=2;k>0;k--);//直行一段距离//
lfgo=1;
lbgo=1;
rfgo=0;
rbgo=0;
lfback=0;
lbback=0;
for(i=1000;i>0;i--)
for(j=1000;j>0;j--)
for(k=1;k>0;k--);//原地zuo转//
lfback=1;
lbback=1;
lfgo=0;
rfgo=0;
lbgo=0;
rbgo=0;
}
}
}

第1个回答  2015-03-01
看着眼疼,建议整理好,让人看起来比较舒服在穿上来,否则,只能呵呵了本回答被网友采纳
相似回答