欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3194|回復: 12
收起左側

C語言程序while(!key)是循環哪?

  [復制鏈接]
ID:1087674 發表于 2023-8-14 23:20 來自觸屏版 | 顯示全部樓層 |閱讀模式
下面這個程序中while(!key),是指按鍵一直按著話,key=0,然后!key就=1嗎?然后就是while(1),但是這個是循環哪?是從上面if(key==0) dely(10)……這里開始一直到最后呢,還是說一直停在while(1)這句?這句while(!key)單獨出現的?沒有大括號里內容的?
void scan_key(void)

{

uchar j;

if(key==0)//判斷按鍵是否被按下

delay(10);//按鍵消抖

if(key==0)//再次判斷是否被下

{

while(!key);//等待按鍵釋放

j++;//J加1

}

}
回復

使用道具 舉報

ID:227393 發表于 2023-8-15 00:08 來自觸屏版 | 顯示全部樓層
停在當前行
回復

使用道具 舉報

ID:1085441 發表于 2023-8-15 01:03 | 顯示全部樓層
不建議這么檢測按鍵,否則單片機一只在等按鍵,做不了其他事。
應該設置一個定時器中斷,比如20mS,每20mS檢測一次按鍵,如果按鍵按下,(用一個寄存器)計數加1,按鍵放開后,讀測計數值,2次以下算是抖動,忽略。2次~50次是一秒,算是短按按鍵,50次~250次是1~5秒,算是長按,這樣檢測按鍵,不耽誤單片機跑其它程序。
回復

使用道具 舉報

ID:883242 發表于 2023-8-15 02:56 | 顯示全部樓層
本質上是循環,但用途是等待。用循環查詢來實現阻塞等待功能。
回復

使用道具 舉報

ID:517951 發表于 2023-8-15 08:13 | 顯示全部樓層
while(!key); 就是常按按鍵不松手就一直死循環, 直到放開按鍵.
回復

使用道具 舉報

ID:712097 發表于 2023-8-15 08:48 | 顯示全部樓層
檢測sbit key定義的IO口,如果為低電平就死循環。一般是指這個IO所接的按鍵按下時一直循環,松開后繼續執行下一語句。
回復

使用道具 舉報

ID:496636 發表于 2023-8-15 08:54 | 顯示全部樓層
while(!key);
這是一個循環語句,只有一個分號,表示這是一個空語句,如果循環體有多條語句,那么就要用大括號括起來。如果循環體只有一條語句,那么寫好這條語句后,分號結束就好了。
while(!key)這個是循環頭,用來判斷括號里面的值是否為零或非零,如果非零,執行完循環體里的語句后再次判斷括號里面的值是否為零或是非零。如果為非零,再次執行循環體,直到括號里面的值為0時,去執行循環語句后續的語句,這里就是去執行j++;語句。
緊跟的;就是一個沒有語句的循環體,你也可以把它看成這樣
while(!key)

或是
while(!key)
{

}
回復

使用道具 舉報

ID:34149 發表于 2023-8-15 10:35 | 顯示全部樓層
停止在(!key)這條語句,直到其值等于0,才會跳出。
回復

使用道具 舉報

ID:397054 發表于 2023-8-15 18:09 | 顯示全部樓層
樓主的這段程序很不老道,雖然編譯沒問題,執行也沒問題,但過程卻有不確定性,會有時候你的原意沒有被正確表達,這取決于按下按鍵的那個時刻,這樣改動就完美了:

void scan_key(void)

{

uchar j;

if(key==0)//判斷按鍵是否被按下

{

delay(10);//按鍵消抖

if(key==0)//再次判斷是否被下

{

while(!key);//等待按鍵釋放

j++;//J加1

}

}

}

這樣就能100%表達你的原意,跟按下按鍵的時刻沒關系。

如果能書寫成這種格式,就非常明了了:

void scan_key(void)
{
  uchar j;
  if(key==0)
    {
      delay(10);
      if(key==0)
       {
         while(!key);
         j++;
        }
     }
}
回復

使用道具 舉報

ID:1040201 發表于 2023-8-16 10:04 | 顯示全部樓層
while()要慎用,這個是卡在當前 ,如果一直卡著   程序就沒有辦法走下去了 ,最少要搞個超時判斷
回復

使用道具 舉報

ID:224580 發表于 2023-8-16 22:59 | 顯示全部樓層
還是建議用定時器判斷按鍵
回復

使用道具 舉報

ID:1087674 發表于 2023-8-17 14:46 來自觸屏版 | 顯示全部樓層
新昌小徐 發表于 2023-8-15 08:54
while(!key);
這是一個循環語句,只有一個分號,表示這是一個空語句,如果循環體有多條語句,那么就要用大 ...

原來如此,原來這個分號這么大用途,我一直以為是少了點什么。
回復

使用道具 舉報

ID:1087674 發表于 2023-8-17 14:47 來自觸屏版 | 顯示全部樓層
cnfloatleaf 發表于 2023-8-15 01:03
不建議這么檢測按鍵,否則單片機一只在等按鍵,做不了其他事。
應該設置一個定時器中斷,比如20mS,每20mS ...

我要編的很簡單,就是不想它做其他事,要它停著等下一步命令
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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