微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 怎么用一个按键按一次小灯不停闪烁,再按一次灭、

怎么用一个按键按一次小灯不停闪烁,再按一次灭、

时间:10-02 整理:3721RD 点击:
                if(key2 == 0)
                {
                        while(1)
                        {
                                while(!key2)
                                delay(20);
                                while(!key2);{you = 0;delay(400);you = 1;delay(300);}
                        }
                }       
这是我写的,开了就关不掉。

嵌套不对 记住 C语言只有一个main,main里面就一个while
int main (void)
{
  unsigned char i;
  unsigned char flag_key;
   while(1)
   {
        if(key1 == 0)
        {
            delay(10);                //消除抖动
            if(key1 == 0)
            {
                 i++;
                 if(i>2)
                 {
                    i = 0;
                    flag_key = 0;
                 }
                 else
                 {
                    flag_key = 1;
                 }     
            }
            else
            {
            }
        }
      if(flag==1)
     {
            LED = 0;             //0灯亮
            delay(50);
             LED = 1;            //1灯灭
             delay(50);
     }
    else
    {
        LED = 1;            //1灯灭
    }
   }
}

这个   if(flag==1)是什么?

这个i是做什么用的?另外,对于LED闪烁,改成:开头定义LED=0,然后闪烁那里写成 LED=!LED;delay(500);  可以不?

对此不了解   学习一下           

逻辑对的 ,有一点点小错
非常感谢分享!

你用了死循环

很明显,是笔误,不是flag,应该是flag_key

i是用于计数的,二楼的程序有点小错误,他的逻辑应该是当i为奇数和偶数时flag_key进行状态转换,然后根据flag_key的状态改变LED灯的亮灭,你的思路是可以得,但不是LED =! LED; 语法不对,应该是 LED = ~LED;

这个是标志位 跳转用的

你提醒了我  取反也是可以的  

恩 对的

恩 就是这个意思 其实最好用定时器做

嗯,不过估计小编也是刚入门,计数延时更容易理解些

我觉得用LabVIEW也很好实现

晓得了。谢谢

这个当然关不掉了,检测到key2==0以后 就直接进入了while(1) 死循环了

试过了,还是不行,有大神指教下吗?

我觉得用LabVIEW也很好实现

弄好了,谢谢大家!

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

网站地图

Top