微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 新人求助C51的一个程序问题....万分感谢

新人求助C51的一个程序问题....万分感谢

时间:10-02 整理:3721RD 点击:
刚学单片机2天 ,有一定C语言基础。 刚编一个4个按键控制4种不同的流水灯,可是运行的时候,当按下其中一个键之后,它就一直循环那一个流水灯,剩下的怎么按也不管用了,下面是程序 ,请问应该用什么方法在检测到其他按键按下时就可以调到那个流水灯的循环下工作- -
void main()
{
        while(1)
        {
                if(K1==0)
                {
                        while(1)
                        {
                                right();
                        }
                }
                if(K2==0)
                {
                        while(1)
                        {
                                left();
                        }
                }
                if(K3==0)
                {
                        while(1)
                        {
                                middle();
                        }
                }
                if(K4==0)
                {
                        while(1)
                        {
                                side();
                        }
                }
        }
}

..悲剧了么

while(1)是死循环,所以一直循环那个流水灯,跳不出来。

那我定义一个变量判断怎么样

最简单的解决办法:每个流水灯程序都加入按键检查,并跳出

好的 谢谢啦

可定义个变量temp用来对应4个按键,即每一个按键情况对应个temp常数值,然后写个switch……case语句即可,这样就可以只用一个while(1)大循环即可。当然你的每个小while(1)里加按键检测跳出也可以。
简单写了仿真了一下:
void main()
{
init();
unsigned char temp=0;
while(1)
{
  if(k1==0)temp=0x01;
  if(k2==0)temp=0x02;
  if(k3==0)temp=0x03;
  if(k4==0)temp=0x04;
  switch(temp)
  {
   case 0x01:
        right();break;
   case 0x02:
        left();break;
   case 0x03:
        middle();break;
   case 0x04:
        side();break;
   default: break;
  }
  //delay();
}

}

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

网站地图

Top