本人是一个学生可是由于听课不太认真加上脑子不够灵活想请教一下以下问题:
通过51单片机来实现小车从起点>沿着黑色线到终点>转一圈>再回到起点>停止 即小车沿着黑色线顺时针走到终点再逆时针走一圈回到起点:
本人同学写了一个可行的程序:
#include "STC89.h"
#define Led_R P10
#define Led_G P11
#define Led_B P12
#define S0 P32 //向左的传感器
#define S1 P33 //向右的传感器
#define S2 P34// 向前的传感器
#define M0 P24
#define M2 P25
#define M1 P26
#define M3 P27
bit Delay_time=30;
bit start=1;
bit car_mode=mode;
bit M_flag0=1;
bit M_flag1=1;
bit M_flag2=1;
void Delay_ms(int ms)
{
unsigned char i;
while(ms--)
for(i=0;i<125;i++);
}
void M0M1_forward()
{
M0=1;
M1=1;
M2=0;
M3=0;
Delay_ms(70);
M0=0;
M1=0;
M2=0;
M3=0;
Delay_ms(30);
}
void M0M1_back()
{
M0=0;
M1=0;
M2=1;
M3=1;
Delay_ms(70);
M0=0;
M1=0;
M2=0;
M3=0;
Delay_ms(30);
}
void M0_forward()
{
M0=1;
M2=0;
Delay_ms(70);
M0=0;
M2=0;
Delay_ms(30);
}
void M0_back()
{
M0=0;
M2=1;
Delay_ms(30);
M0=0;
M2=0;
Delay_ms(70);
}
void M1_forward()
{
M1=1;
M3=0;
Delay_ms(70);
M1=0;
M3=0;
Delay_ms(30);
}
void M1_back()
{
M1=0;
M3=1;
Delay_ms(30);
M1=0;
M3=0;
Delay_ms(70);
}
void M0M1_forward1()
{ int i;
M0=1;
Delay_ms(70);
M1=1;
M2=0;
M3=0;
Delay_ms(Delay_time);
M0=0;
M1=0;
M2=0;
M3=0;
Delay_ms(30);
i++;
if(i==10000)
{Delay_time=10; }
}
void main()
{
unsigned char i;unsigned char n=0;
while(1)
{
{ if(S0==1&&S1==1&&S2==1) //开始寻找黑线
{ while(1)
{M0M1_forward1();
if(S0==0||S1==0){break;}}
break;
}
}
if (S0==1&&S1==1&&S2==0) //前进
{
M0M1_forward();
}
else if(S0==0&&S1==1&&S2==0) //转右
{
M1_forward();
}
else if(S0==1&&S1==0&&S2==0) //转左
{
M0_forward();
}
else if(S0==0&&S1==0&&S2==0) //停止
{
n++;
switch(n)
{
case 1:
for(i=0;i<600;i++)
{M0_forward() ;}
break;
case 2:
M0=M1=M2=M3=0;
break;
default: break;
}
}
else if(S0==1&&S1==1&&S2==1) //调整方向
{ while(1)
{M0M1_back();if(S2==0)break;}
Delay_ms(1000);
while(1)
{if(S0==0||S1==0)break;
else if (S0==1&&S1==1)M1_forward();
M0M1_back();}
}
else if(S0==1&&S1==0&&S2==1)
{ while(1)
{if(S0==0)break;M0_forward();}
}
else if(S0==0&&S1==1&&S2==1)
{
while(1)
{if(S1==0)break;M1_forward();}
}
else if(S0==0&&S1==0&&S2==1)
{
while(1){
M0M1_forward();if(S2==0)break;
}
Delay_ms(1000);
}
}
}
以上是本人写的程序:我本来是想着 通过N++计数来判定第一次通过终点时候利用FOR语句来实现原地转一圈再往回走 到了起点就把M0~M3停止。
可是把程序烧录上去之后发现小车在每次在终点位置都不动了 求高手帮我看看是啥问题呢。
0