找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2004|回复: 6
打印 上一主题 下一主题
收起左侧

求写一段简单循环代码

[复制链接]
跳转到指定楼层
楼主
ID:242890 发表于 2017-11-12 14:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
当按键按下时,flag=1,当flag=1时,一直循环做某个函数

我是这样写的:

void anjian()
{
    if(key==0)
        {
              delay(5); //延时5ms
              if(key==0)
                  flag=1;
        }

}

void main()
{
    anjian();
    while(flag==1)
        {
            **();    //某个函数
        }
}

我这样写每次都只是执行一次,只有 while(flag==1) 改成 while(1) 才能无限循环,这是为什么,如果我要用flag的值来循环,应该怎样写
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:212797 发表于 2017-11-12 16:26 | 只看该作者
while(flag==1)的意思是:当flag=1条件成立的时候才能执行循环,flag=0或者等于其他值,这个条件就不成立;
while(1),由于1是一个非零值,逻辑上判断为真,所以条件一直都是成立的,换句话说,这就是一个死循环,程序会一直在里面循环执行;
main()主函数开始执行后,在那么快的时间内,很难把按键按下将flag置1,程序到while之后判断为假,就会直接跳过,然后停下来不动了。
如果要用flag值做判断,可以把程序修改为:
void main()
{
    while(1)
     {
           anjian();
           if (flag)
           {
                   **();    //某个函数
           }   
        }
}
回复

使用道具 举报

板凳
ID:225732 发表于 2017-11-12 20:03 | 只看该作者
1、按键检测检测要在循环中检测,或者放中断里检测
2、flag在按键松开要及时置0
以下我为你改动的程序
void anjian()
{
    if(key==0)
        {
              delay(5); //延时5ms
              if(key==0)
                  flag=1;
        }
     else flag=0;   //按键松开,flag=0,不执行某个程序
}

void main()
{   
    while(1)
    {
       anjian();   //循环检测按键,你原程序放外边只会执行一次
       if(flag)
      {
         **();    //某个函数
        }
}
回复

使用道具 举报

地板
ID:242890 发表于 2017-11-13 12:08 | 只看该作者
包包大人在此 发表于 2017-11-12 20:03
1、按键检测检测要在循环中检测,或者放中断里检测
2、flag在按键松开要及时置0
以下我为你改动的程序

你这样不对啊,我是要一直循环这个函数,你这样是按一次动一下
回复

使用道具 举报

5#
ID:242454 发表于 2017-11-13 16:50 | 只看该作者
FLAG==1,是只有FLAG和1相等的时候才执行WHILE里面的程序,如果只给1那就是一直为真,可以一直死循环
回复

使用道具 举报

6#
ID:248551 发表于 2017-11-13 18:37 | 只看该作者
void anjian()
{
    if(key==0)
        {
              delay(5); //延时5ms
              if(key==0)
                  flag=1;
        }

}

void main()
{
    flag=1;
    while(flag==1)
        {

          anjian();
            **();    //某个函数
        }
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表