SengChuary 发表于 2012-11-10 14:47:31

两个死循环子程序按键怎么跳转,求助!

下面的程序怎么利用P3.2按键跳出第一个死循环CON1;然后跳到CON2一直循环CON2的死循环程序;如果我在按P3.2再跳到CON1死循环程序一直执行CON1的死循环,相互两者之间的死循环不能同时进行智能进行CON1或者CON2其中一个死循环程序,不想用中断怎么用,用计数功能怎么用。有谁知道帮忙指导一下。void CON2()
{
           while(1)
        {
          for(movetime=0;movetime<2;movetime++)
               R2_LED();//正向流水
      for(movetime=0;movetime<2;movetime++)
               L2_LED();//反向流水
        }
}

void CON1()
{
    while(1)
    {        
          for(movetime=0;movetime<2;movetime++)
               R1_LED();//正向流水
      for(movetime=0;movetime<2;movetime++)
               L1_LED();//反向流水       
          }
}
               

void main()
{          
        INTinit();//中断程序初始化
        P0=0x00;
        CON1();
   }

wangrwnyan123 发表于 2012-11-10 15:40:20

为什么不写到一个程序里,而要分成两个子程序来写。完全可以写到一个程序里呀。如果有不同的程序来调用,只需要设置和调用程序相应的标志位就行了。

SengChuary 发表于 2012-11-10 16:27:22

wangrwnyan123 发表于 2012-11-10 15:40 static/image/common/back.gif
为什么不写到一个程序里,而要分成两个子程序来写。完全可以写到一个程序里呀。如果有不同的程序来调用,只 ...

我这里面已经有四个子程序,我写了一个,利用中断功能,为什么转了一圈就停了,void INTinit()//外部中断初始化
   {
        EX0=1;//使能外部中断0开       
        EX1=1;
        IT0=1;//外部中断0下降沿使能
        IT1=1;
        EA=1;//总中断使能开                
   }

void CON2()
{
           while(1)
        {
          for(movetime=0;movetime<2;movetime++)
               R2_LED();//正向流水
      for(movetime=0;movetime<2;movetime++)
               L2_LED();//反向流水
        }
}

void CON1()
{
    while(1)
    {        
          for(movetime=0;movetime<2;movetime++)
               R1_LED();//正向流水
      for(movetime=0;movetime<2;movetime++)
               L1_LED();//反向流水       
          }
}
               

void main()
{          
        INTinit();//中断程序初始化
        P0=0x00;
        //CON1();
   if (P3==0xf7)
   {
          CON2();
          EX1=0;
          IT1=0;
          }
        else
          {
                CON1();
           }

sco518 发表于 2012-11-10 16:30:20

= =。。。。楼主对C语言完全没有概念啊。。。。

while(1)
{
   if(XXXX)
   {...
   }
   else
   {...
   }
}

SengChuary 发表于 2012-11-10 16:31:53

写了一个不行,按键最好是有点那种互锁的感觉,不知道怎么写!加两个按键独立运行也行好像!

SengChuary 发表于 2012-11-10 16:37:16

sco518 发表于 2012-11-10 16:30 static/image/common/back.gif
= =。。。。楼主对C语言完全没有概念啊。。。。

while(1)


我不是让按键一直死循环,需要手动按键按一次第一个CON1,再按一次是CON2的调用,就是相互之间不能影响。用两个按键可以解决这个问题好像!

sco518 发表于 2012-11-10 16:37:23

我已经不知道怎么和你解释了。。。多看看别人的程序框架吧。。。。。

lryxr2507 发表于 2012-11-10 16:49:06

SengChuary 发表于 2012-11-10 16:31 static/image/common/back.gif
写了一个不行,按键最好是有点那种互锁的感觉,不知道怎么写!加两个按键独立运行也行好像! ...

加标志位,按键1工作关闭按键2标志位,按键2工作关闭按键1标志位.

z903057128 发表于 2012-11-10 16:51:13

楼主陷在了自己的思维中

wangrwnyan123 发表于 2012-11-10 17:01:27

楼主可能很少看别人的例子吧,建议多参考别人的程序。一个很简单的程序,被你自己搞复杂了。

SengChuary 发表于 2012-11-10 17:12:28

wangrwnyan123 发表于 2012-11-10 17:01 static/image/common/back.gif
楼主可能很少看别人的例子吧,建议多参考别人的程序。一个很简单的程序,被你自己搞复杂了。 ...

你说对,我很少看别人的例程,我都是自己根据硬件要求写!有点随手掂来就写

yklstudent 发表于 2012-11-10 17:17:28

楼主是二次元的 没法交流是肯定了

tiancaigao7 发表于 2012-11-10 21:47:21

楼上起码应该让两端程序都执行,然后利用键值进行切换,或者专门有一个扫描的程序,去扫描按键,根据键值不断的调用不同的程序。
楼上那种写法优点FPGA的感觉,但是逻辑性又不强。引起估计楼主主要做硬件,但是有没有弄过FPGA编程。

beijinggood2008 发表于 2012-11-11 20:48:10

SengChuary 发表于 2012-11-10 17:12 static/image/common/back.gif
你说对,我很少看别人的例程,我都是自己根据硬件要求写!有点随手掂来就写 ...

建议LZ先把流程图写好,如果再大点的系统程序,用这个思维方式的话,写出来的东西也很乱!这也是我的前辈教我的!

iquer 发表于 2012-11-11 21:42:47

LZ的while(1)应该写到main函数中啊
while(1)
{
   if(P3==0xf7)
   ……
}

xinhoujue 发表于 2012-11-12 11:33:28

只看一下主程序就知道它无法完成你要的效果了。元芳,你说呢?
建议你看些别人写的程序框架,多学习学习。
我猜你的意思是:
程序一开始先让LED流水灯禁止流动,当按下按钮1时,LED正向流动;当按下按钮2时,LED反向流动。
只要逻辑思维清晰,写出这个程序不难。祝你早日成功!

xiaoyigechaos 发表于 2012-11-12 11:56:25

程序执行完了 停止了没事可以休息了

juwen163 发表于 2012-11-12 20:59:45

可以用keil 自带 的rtxtiny操作系统实现这个功能
页: [1]
查看完整版本: 两个死循环子程序按键怎么跳转,求助!