微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于智能小车循迹的问题

关于智能小车循迹的问题

时间: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

这个判断语句没看懂

是不是判断语句写的不规范

if(qian2==1)
这个里边没有循环啊  

所以flag就执行一次就完啦

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top