打印

怎么跳出void zz()子程序

[复制链接]
2763|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
meimiao88|  楼主 | 2013-12-17 16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 meimiao88 于 2013-12-18 18:40 编辑

#include<reg52.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int

sbit left_f = P2^4;    //a左前
sbit left_b = P2^5;
sbit right_f = P2^6;   //a右前
sbit right_b = P2^7;
sbit c1 =P3^0;         //a右后
sbit c2 =P3^1;
sbit d1 =P3^2;         //a左后
sbit d2=P3^3;
unsigned int y;
unsigned char temp;

sbit  huidu_3=P1^3;
sbit  huidu_4=P1^4;
sbit  huidu_5=P1^5;
sbit  huidu_6=P1^6;
sbit  huidu_7=P1^7;
sbit  huidu_8=P1^0;
sbit  huidu_9=P1^1;
sbit  huidu_10=P1^2;

uchar count = 0;
void zz();
void init()
{
        TH0 = (65535-10)/256;
        TL0 = (65535-10)%256;
        TMOD = 0x01;
        TR0 = 1;
        ET0 = 1;
        EA = 1;

}

void Timer0_int()interrupt 1 //定时器中断计数
{
        TH0 = (65535-10)/256;
        TL0 = (65535-10)%256;
        count ++;
        if(count >= 100)
        {count = 0; }               
}

void dianji_a(uchar speed)
{
        if(count <= speed)           //count计数变量
        {        
                left_f = 1;
                left_b = 0;
        }        
        else
        {
                left_f = 1;
                left_b = 1;
        }
}
void dianji_b(uchar speed)          //同上
{
        if(count<= speed)
        {
        
                right_f =0;
                right_b = 1;        
        }
        else
        {
                right_f = 1;
                right_b = 1;
        }
}
void dianji_c(uchar speed)
{
        if(count <= speed)           //count计数变量
        {
        
                c1 = 0;
                c2 = 1;
        }        
        else
        {
                c1= 1;
                c2 = 1;
        }
}
void dianji_d(uchar speed)
{
        if(count <= speed)           //count计数变量
        {
        
                d1 = 1;
                d2 =0;
        }        
        else
        {
        d1= 1;
        d2 = 1;
        }
}

void bdianji_a(uchar speed)
{
        if(count <= speed)           //count计数变量
        {        
                left_f = 0;
                left_b = 1;
        }        
        else
        {
                left_f = 1;
                left_b = 1;
        }
}
void bdianji_b(uchar speed)          //同上
{
        if(count<= speed)
        {
        
                right_f =1;
                right_b = 0;        
        }
        else
        {
                right_f = 1;
                right_b = 1;
        }
}
void bdianji_c(uchar speed)
{
        if(count <= speed)           //count计数变量
        {
        
                c1 = 1;
                c2 = 0;
        }        
        else
        {
                c1= 1;
                c2 = 1;
        }
}
void bdianji_d(uchar speed)
{
        if(count <= speed)           //count计数变量
        {
        
                d1 = 0;
                d2 =1;
        }        
        else
        {
        d1= 1;
        d2 = 1;
        }
}


void contorlA()
{

        temp = P1;

if(temp==0xc0)
   {
    dianji_a(20);
    dianji_b(20);
    dianji_c(20);
    dianji_d(20);
    }


else if(temp==0x60)
   {
    dianji_a(40);
    dianji_b(5);
    dianji_c(5);
    dianji_d(40);
   }
  else if(temp==0x81)
   {
    dianji_a(3);
    dianji_b(50);
    dianji_c(50);
    dianji_d(3);
   }


else if(temp==0x20)//5
     {
    dianji_a(50);
    dianji_b(3);
    dianji_c(3);
    dianji_d(50);
     }

else if(temp==0x01)//8
  {
    dianji_a(5);
    dianji_b(50);
    dianji_c(50);
    dianji_d(5);
  }

else if(temp==0x02)//9
  {
    dianji_a(0);
    dianji_b(50);
    dianji_c(50);
    dianji_d(0);
   }
else if(temp==0x10)//4
  {
    dianji_a(50);
    dianji_b(0);
    dianji_c(0);
    dianji_d(50);
   }
else if(temp==0xf8)
{
   for(y=0;y<600;y++)
   {
    dianji_a(50);
    bdianji_b(35);
    bdianji_c(35);
    dianji_d(50);
   }

}
else if (temp==0x78)//3456
{
for(y=0;y<500;y++)
   {
    dianji_a(50);
    bdianji_b(35);
    bdianji_c(35);
    dianji_d(50);
   }

}
else if(temp==0xc7|temp==0x87)//678910
  {
   zz();
   }

else
     {
      dianji_a(5);
      dianji_b(5);
      dianji_c(5);
      dianji_d(5);
     }

}

void zz()
{
  temp=P1;
while(temp!=0xc0)
   {
    bdianji_a(35);
    dianji_b(50);
    dianji_c(50);
    bdianji_d(35);
    if(temp==0xc0)
          {
          contorlA;
          }
     }

}

void main()
{
   init();
   while(1)
    {
      contorlA();
    }
}

相关帖子

沙发
ayb_ice| | 2013-12-17 16:26 | 只看该作者
return

使用特权

评论回复
板凳
huangxz| | 2013-12-17 17:02 | 只看该作者
temp == 0xc0不就出去了吗

使用特权

评论回复
地板
meimiao88|  楼主 | 2013-12-17 17:14 | 只看该作者
huangxz 发表于 2013-12-17 17:02
temp == 0xc0不就出去了吗

试过  不行的   break我也试过

使用特权

评论回复
5
ningling_21| | 2013-12-17 17:20 | 只看该作者
temp = 0xc0;

加到while()循环里面的最后

使用特权

评论回复
6
huangxz| | 2013-12-17 17:56 | 只看该作者
meimiao88 发表于 2013-12-17 17:14
试过  不行的   break我也试过

兄弟,讲笑话吧,这可是c的基本语法,如果出不去,那你程序堆栈可能出问题了。

使用特权

评论回复
7
meimiao88|  楼主 | 2013-12-17 19:22 | 只看该作者
huangxz 发表于 2013-12-17 17:56
兄弟,讲笑话吧,这可是c的基本语法,如果出不去,那你程序堆栈可能出问题了。 ...

真不开玩笑   程序是没问题的  你说是不是嵌入太深吗  

使用特权

评论回复
8
meimiao88|  楼主 | 2013-12-17 19:30 | 只看该作者
ningling_21 发表于 2013-12-17 17:20
temp = 0xc0;

加到while()循环里面的最后

这个就失去我的本意了

使用特权

评论回复
9
dirtwillfly| | 2013-12-17 20:03 | 只看该作者
额,好多else if,而且没对齐~~
看着好累,难道不能用个switch case~~

使用特权

评论回复
10
gegezaixiao| | 2013-12-17 21:22 | 只看该作者
单独调试这个ZZ函数,另外你这个函数名称取得
。。。。

使用特权

评论回复
11
rocdove| | 2013-12-17 21:24 | 只看该作者
楼主代码,需要整理下,不太规范。想跳出去可以,就是想知道你想什么情况下跳出

使用特权

评论回复
12
huangxz| | 2013-12-17 22:43 | 只看该作者
meimiao88 发表于 2013-12-17 19:22
真不开玩笑   程序是没问题的  你说是不是嵌入太深吗

temp是由P1赋值的,你可以软件仿真一下啊

使用特权

评论回复
13
MakeBetter| | 2013-12-17 22:58 | 只看该作者
if(temp==0xc7|temp==0x87)//678910

你看清楚了:|   和 || 符号的区别
以上语句最好写成:
if((temp==0xc7) || (temp==0x87))//678910

使用特权

评论回复
14
banalmaster| | 2013-12-17 23:57 | 只看该作者
你写的zz()函数确实退不出去。
将    if(temp==0xc0)
     {
      contorlA;
     }
放到while循环外面,然后加return或break试试。

使用特权

评论回复
15
天凉好个秋| | 2013-12-18 07:17 | 只看该作者
当然不能跳出去,因为循环中 temp 没有重新赋值

使用特权

评论回复
评论
zhaoyu2005 2013-12-18 09:32 回复TA
一语中的。另外就是得确保P1会出现0xc0的状态 
16
ningling_21| | 2013-12-18 10:12 | 只看该作者
meimiao88 发表于 2013-12-17 19:30
这个就失去我的本意了

那本意是什么呢?
不改变temp 就能跳出去?

使用特权

评论回复
17
meimiao88|  楼主 | 2013-12-18 16:13 | 只看该作者
ningling_21 发表于 2013-12-18 10:12
那本意是什么呢?
不改变temp 就能跳出去?

这是个小车的程序   我想让它转弯   当检测到灰度67的时候 进入寻线

使用特权

评论回复
18
meimiao88|  楼主 | 2013-12-18 16:14 | 只看该作者
banalmaster 发表于 2013-12-17 23:57
你写的zz()函数确实退不出去。
将    if(temp==0xc0)
     {

这个也试过了 兄弟

使用特权

评论回复
19
lzlz70707| | 2013-12-18 16:22 | 只看该作者
while里面应该继续对temp赋值才对
循环体里面加一句temp=P1 当P1为0xC0就出去了

使用特权

评论回复
20
meimiao88|  楼主 | 2013-12-18 18:34 | 只看该作者
rocdove 发表于 2013-12-17 21:24
楼主代码,需要整理下,不太规范。想跳出去可以,就是想知道你想什么情况下跳出 ...

这是个小车的程序   我想让它转弯   当检测到灰度67的时候 进入寻线

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

19

帖子

0

粉丝