关于智能小车循迹的问题
时间:10-02
整理:3721RD
点击:
函数如下
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit zuo1=P1^3;
sbit zuo2=P1^4;
sbit you1=P1^6;
sbit you2=P1^5;
sbit qian1=P1^7;
sbit qian2=P3^1;
sbit cesudu=P3^2;
sbit L1=P1^0; //左
sbit L2=P1^1; //右
uint time;
uchar flag,circle;
void delay_50us(uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
void delay_50ms(uint t)
{
uint j;
for(;t>0;t--)
for(j=6245;j>0;j--);
}
void go(uint t)
{
for(time=0;time<t;time++)
{
L1=1;
L2=0;
delay_50us(26);
L1=0;
L2=1;
delay_50us(34);
L2=0;
delay_50us(400);
}
}
void back(uint t)
{
for(time=0;time<t;time++)
{
L1=1;
L2=0;
delay_50us(34);
L1=0;
L2=1;
delay_50us(26);
L2=0;
delay_50us(400);
}
}
void left(uint t,uint sd)
{
for(time=0;time<t;time++)
{
L1=1;
delay_50us(30-sd);
L1=0;
L2=1;
delay_50us(30-sd);
L2=0;
delay_50us(400);
}
}
void left1(uint t)
{
for(time=0;time<t;time++)
{
L1=1;
delay_50us(28);
L1=0;
L2=1;
delay_50us(34);
L2=0;
delay_50us(400);
}
}
void left2(uint t)
{
for(time=0;time<t;time++)
{
L1=1;
delay_50us(29);
L1=0;
L2=1;
delay_50us(34);
L2=0;
delay_50us(400);
}
}
void right(uint t,uint sd)
{
for(time=0;time<t;time++)
{
L1=1;
delay_50us(30+sd);
L1=0;
L2=1;
delay_50us(30+sd);
L2=0;
delay_50us(400);
}
}
void right1(uint t)
{
for(time=0;time<t;time++)
{
L1=1;
delay_50us(26);
L1=0;
L2=1;
delay_50us(32);
L2=0;
delay_50us(400);
}
}
void right2(uint t)
{
for(time=0;time<t;time++)
{
L1=1;
delay_50us(26);
L1=0;
L2=1;
delay_50us(31);
L2=0;
delay_50us(400);
}
}
void stop(uint t)
{
for(time=0;time<t;time++)
{
L1=1;
L2=0;
delay_50us(30);
L1=0;
L2=1;
delay_50us(30);
L2=0;
delay_50us(400);
}
}
void xunji0() //循内迹
{
if(qian1==0)
{
if((zuo1==1)&&(zuo2==1)) //若左边两个都检测到黑线,则直走
go(5);
else if((zuo1==1)&&(zuo2==0)) //若左边第一个检测到黑线,第二个没有检测到黑线,则左边加速,右侧减速
right1(5);
else if((zuo1==0)&&(zuo2==1)) //若左边第一个没有检测到黑线,第二个检测到黑线
left2(5);
else if((zuo1==0)&&(zuo2==0)) //若左边两个都没有检测到黑线
left1(5);
}
else if(qian1==1)
right2(20);
}
void jishu()
{
flag=0;
if(qian2==1)
{
delay_50us(20);
if(qian2==1)
{
flag++;
while(flag<4)
xunji0();
while(4<=flag&&flag<=8)
stop(10);
while(flag==9)
{
flag=0;
xunji0();
}
}
}
}
void main()
{
jishu();
}
不知道为什么,jishu()这个函数里,当4<=flag&&flag<=8时,不执行我设定的 stop
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit zuo1=P1^3;
sbit zuo2=P1^4;
sbit you1=P1^6;
sbit you2=P1^5;
sbit qian1=P1^7;
sbit qian2=P3^1;
sbit cesudu=P3^2;
sbit L1=P1^0; //左
sbit L2=P1^1; //右
uint time;
uchar flag,circle;
void delay_50us(uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
void delay_50ms(uint t)
{
uint j;
for(;t>0;t--)
for(j=6245;j>0;j--);
}
void go(uint t)
{
for(time=0;time<t;time++)
{
L1=1;
L2=0;
delay_50us(26);
L1=0;
L2=1;
delay_50us(34);
L2=0;
delay_50us(400);
}
}
void back(uint t)
{
for(time=0;time<t;time++)
{
L1=1;
L2=0;
delay_50us(34);
L1=0;
L2=1;
delay_50us(26);
L2=0;
delay_50us(400);
}
}
void left(uint t,uint sd)
{
for(time=0;time<t;time++)
{
L1=1;
delay_50us(30-sd);
L1=0;
L2=1;
delay_50us(30-sd);
L2=0;
delay_50us(400);
}
}
void left1(uint t)
{
for(time=0;time<t;time++)
{
L1=1;
delay_50us(28);
L1=0;
L2=1;
delay_50us(34);
L2=0;
delay_50us(400);
}
}
void left2(uint t)
{
for(time=0;time<t;time++)
{
L1=1;
delay_50us(29);
L1=0;
L2=1;
delay_50us(34);
L2=0;
delay_50us(400);
}
}
void right(uint t,uint sd)
{
for(time=0;time<t;time++)
{
L1=1;
delay_50us(30+sd);
L1=0;
L2=1;
delay_50us(30+sd);
L2=0;
delay_50us(400);
}
}
void right1(uint t)
{
for(time=0;time<t;time++)
{
L1=1;
delay_50us(26);
L1=0;
L2=1;
delay_50us(32);
L2=0;
delay_50us(400);
}
}
void right2(uint t)
{
for(time=0;time<t;time++)
{
L1=1;
delay_50us(26);
L1=0;
L2=1;
delay_50us(31);
L2=0;
delay_50us(400);
}
}
void stop(uint t)
{
for(time=0;time<t;time++)
{
L1=1;
L2=0;
delay_50us(30);
L1=0;
L2=1;
delay_50us(30);
L2=0;
delay_50us(400);
}
}
void xunji0() //循内迹
{
if(qian1==0)
{
if((zuo1==1)&&(zuo2==1)) //若左边两个都检测到黑线,则直走
go(5);
else if((zuo1==1)&&(zuo2==0)) //若左边第一个检测到黑线,第二个没有检测到黑线,则左边加速,右侧减速
right1(5);
else if((zuo1==0)&&(zuo2==1)) //若左边第一个没有检测到黑线,第二个检测到黑线
left2(5);
else if((zuo1==0)&&(zuo2==0)) //若左边两个都没有检测到黑线
left1(5);
}
else if(qian1==1)
right2(20);
}
void jishu()
{
flag=0;
if(qian2==1)
{
delay_50us(20);
if(qian2==1)
{
flag++;
while(flag<4)
xunji0();
while(4<=flag&&flag<=8)
stop(10);
while(flag==9)
{
flag=0;
xunji0();
}
}
}
}
void main()
{
jishu();
}
不知道为什么,jishu()这个函数里,当4<=flag&&flag<=8时,不执行我设定的 stop
这个判断语句没看懂
是不是判断语句写的不规范
if(qian2==1)
这个里边没有循环啊
所以flag就执行一次就完啦