关于智能小车循迹的问题

2019-07-15 22:59发布

函数如下
#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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
柯少
1楼-- · 2019-07-15 23:53
 精彩回答 2  元偷偷看……
极速style
2楼-- · 2019-07-16 03:34
是不是判断语句写的不规范
隐含
3楼-- · 2019-07-16 03:45
if(qian2==1)
这个里边没有循环啊  
隐含
4楼-- · 2019-07-16 04:24
所以flag就执行一次就完啦

一周热门 更多>