標(biāo)題: 求寫一段簡(jiǎn)單循環(huán)代碼 [打印本頁(yè)]

作者: lebronda    時(shí)間: 2017-11-12 14:31
標(biāo)題: 求寫一段簡(jiǎn)單循環(huán)代碼
當(dāng)按鍵按下時(shí),flag=1,當(dāng)flag=1時(shí),一直循環(huán)做某個(gè)函數(shù)

我是這樣寫的:

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

}

void main()
{
    anjian();
    while(flag==1)
        {
            **();    //某個(gè)函數(shù)
        }
}

我這樣寫每次都只是執(zhí)行一次,只有 while(flag==1) 改成 while(1) 才能無(wú)限循環(huán),這是為什么,如果我要用flag的值來循環(huán),應(yīng)該怎樣寫

作者: xbook_ben    時(shí)間: 2017-11-12 16:26
while(flag==1)的意思是:當(dāng)flag=1條件成立的時(shí)候才能執(zhí)行循環(huán),flag=0或者等于其他值,這個(gè)條件就不成立;
while(1),由于1是一個(gè)非零值,邏輯上判斷為真,所以條件一直都是成立的,換句話說,這就是一個(gè)死循環(huán),程序會(huì)一直在里面循環(huán)執(zhí)行;
main()主函數(shù)開始執(zhí)行后,在那么快的時(shí)間內(nèi),很難把按鍵按下將flag置1,程序到while之后判斷為假,就會(huì)直接跳過,然后停下來不動(dòng)了。
如果要用flag值做判斷,可以把程序修改為:
void main()
{
    while(1)
     {
           anjian();
           if (flag)
           {
                   **();    //某個(gè)函數(shù)
           }   
        }
}

作者: 包包大人在此    時(shí)間: 2017-11-12 20:03
1、按鍵檢測(cè)檢測(cè)要在循環(huán)中檢測(cè),或者放中斷里檢測(cè)
2、flag在按鍵松開要及時(shí)置0
以下我為你改動(dòng)的程序
void anjian()
{
    if(key==0)
        {
              delay(5); //延時(shí)5ms
              if(key==0)
                  flag=1;
        }
     else flag=0;   //按鍵松開,flag=0,不執(zhí)行某個(gè)程序
}

void main()
{   
    while(1)
    {
       anjian();   //循環(huán)檢測(cè)按鍵,你原程序放外邊只會(huì)執(zhí)行一次
       if(flag)
      {
         **();    //某個(gè)函數(shù)
        }
}
作者: lebronda    時(shí)間: 2017-11-13 12:08
包包大人在此 發(fā)表于 2017-11-12 20:03
1、按鍵檢測(cè)檢測(cè)要在循環(huán)中檢測(cè),或者放中斷里檢測(cè)
2、flag在按鍵松開要及時(shí)置0
以下我為你改動(dòng)的程序

你這樣不對(duì)啊,我是要一直循環(huán)這個(gè)函數(shù),你這樣是按一次動(dòng)一下
作者: 無(wú)畏造英雄    時(shí)間: 2017-11-13 16:50
FLAG==1,是只有FLAG和1相等的時(shí)候才執(zhí)行WHILE里面的程序,如果只給1那就是一直為真,可以一直死循環(huán)
作者: 李易峰    時(shí)間: 2017-11-13 18:37
void anjian()
{
    if(key==0)
        {
              delay(5); //延時(shí)5ms
              if(key==0)
                  flag=1;
        }

}

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

          anjian();
            **();    //某個(gè)函數(shù)
        }
}





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1