找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2870|回復: 6
打印 上一主題 下一主題
收起左側

求寫一段簡單循環(huán)代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:242890 發(fā)表于 2017-11-12 14:31 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
當按鍵按下時,flag=1,當flag=1時,一直循環(huán)做某個函數(shù)

我是這樣寫的:

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

}

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

我這樣寫每次都只是執(zhí)行一次,只有 while(flag==1) 改成 while(1) 才能無限循環(huán),這是為什么,如果我要用flag的值來循環(huán),應該怎樣寫
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

使用道具 舉報

板凳
ID:225732 發(fā)表于 2017-11-12 20:03 | 只看該作者
1、按鍵檢測檢測要在循環(huán)中檢測,或者放中斷里檢測
2、flag在按鍵松開要及時置0
以下我為你改動的程序
void anjian()
{
    if(key==0)
        {
              delay(5); //延時5ms
              if(key==0)
                  flag=1;
        }
     else flag=0;   //按鍵松開,flag=0,不執(zhí)行某個程序
}

void main()
{   
    while(1)
    {
       anjian();   //循環(huán)檢測按鍵,你原程序放外邊只會執(zhí)行一次
       if(flag)
      {
         **();    //某個函數(shù)
        }
}
回復

使用道具 舉報

地板
ID:242890 發(fā)表于 2017-11-13 12:08 | 只看該作者
包包大人在此 發(fā)表于 2017-11-12 20:03
1、按鍵檢測檢測要在循環(huán)中檢測,或者放中斷里檢測
2、flag在按鍵松開要及時置0
以下我為你改動的程序

你這樣不對啊,我是要一直循環(huán)這個函數(shù),你這樣是按一次動一下
回復

使用道具 舉報

5#
ID:242454 發(fā)表于 2017-11-13 16:50 | 只看該作者
FLAG==1,是只有FLAG和1相等的時候才執(zhí)行WHILE里面的程序,如果只給1那就是一直為真,可以一直死循環(huán)
回復

使用道具 舉報

6#
ID:248551 發(fā)表于 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();
            **();    //某個函數(shù)
        }
}

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表