找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3481|回復(fù): 19
打印 上一主題 下一主題
收起左側(cè)

怎么讓程序不循環(huán)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1040289 發(fā)表于 2022-7-28 11:29 來(lái)自觸屏版 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
流水燈依次流過(guò)后怎么讓它不重新循環(huán)再流一次
怎么樣流過(guò)后讓燈常亮?
我試過(guò)用結(jié)尾加上while(1),但是后面的程序就動(dòng)不了了,所以怎么樣讓流水燈流一次后常亮,而且不影響后面的程序。
望大佬解答。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:228467 發(fā)表于 2022-7-28 12:10 | 只看該作者
可以用for循環(huán),只執(zhí)行一次
回復(fù)

使用道具 舉報(bào)

板凳
ID:121859 發(fā)表于 2022-7-28 12:25 | 只看該作者
只執(zhí)行一次流水很容易實(shí)現(xiàn),但看你的意思貌似之后這個(gè)流水在不斷執(zhí)行,要解決這個(gè)問(wèn)題,你可以將流水程序放在While之前,也就是初始化之后執(zhí)行流水程序,之后再進(jìn)入while主循環(huán)里面。
回復(fù)

使用道具 舉報(bào)

地板
ID:1040766 發(fā)表于 2022-7-28 13:40 | 只看該作者
  1. a=1
  2. while(a)
  3. {
  4.     流水燈();
  5.     a--;
  6. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

5#
ID:1040766 發(fā)表于 2022-7-28 13:42 | 只看該作者
  1. a=1
  2. while(a)
  3. {
  4.         流水燈();
  5.         a--;
  6. }       
  7.        
復(fù)制代碼



試一下
回復(fù)

使用道具 舉報(bào)

6#
ID:331575 發(fā)表于 2022-7-28 14:31 | 只看該作者
把后面的程序放在while里面,流水燈放在while之前,也就是程序初始化,燈亮一次之后,再進(jìn)入到主體程序中。
回復(fù)

使用道具 舉報(bào)

7#
ID:61140 發(fā)表于 2022-7-28 15:02 | 只看該作者
放在main中的while(1)之前

比如這個(gè)程序中,在while(1)之前的函數(shù)在單片機(jī)上電后只執(zhí)行一次,在while(1)之后的函數(shù)則不斷重復(fù)執(zhí)行。
回復(fù)

使用道具 舉報(bào)

8#
ID:248705 發(fā)表于 2022-7-28 15:24 | 只看該作者
哥幾個(gè)說(shuō)的都沒(méi)錯(cuò),俺感覺(jué)這玩意加個(gè)標(biāo)志位不就行了
  1. static u8 flag = 0;  //全局變量或局部靜態(tài)變量
  2. if(!flag)
  3. {
  4. flag = 1;
  5.    /*流水燈代碼*/
  6. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

9#
ID:213173 發(fā)表于 2022-7-28 15:29 | 只看該作者
定義一個(gè)位變量bit sign=0,執(zhí)行完一次流水燈,sign=1,就沒(méi)有下次了。
        if(!sign)
        {
                //流水燈
                sign=1;
        }

評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
上善-若水 + 5 贊一個(gè)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

10#
ID:584639 發(fā)表于 2022-7-28 16:16 | 只看該作者
break;
回復(fù)

使用道具 舉報(bào)

11#
ID:1040698 發(fā)表于 2022-7-28 16:25 | 只看該作者
void main(void)
{
   //流水燈
  while(1)
{
   后面的程序;
}


}
回復(fù)

使用道具 舉報(bào)

12#
ID:8222 發(fā)表于 2022-7-28 23:28 | 只看該作者
祖國(guó)的花朵 發(fā)表于 2022-7-28 15:24
哥幾個(gè)說(shuō)的都沒(méi)錯(cuò),俺感覺(jué)這玩意加個(gè)標(biāo)志位不就行了

static u8 flag = 1;  //全局變量或局部靜態(tài)變量
if(flag)
{
flag = 0;
   /*流水燈代碼*/
}
這樣可以減少一個(gè)!邏輯判斷。
回復(fù)

使用道具 舉報(bào)

13#
ID:123289 發(fā)表于 2022-7-29 09:00 | 只看該作者
很簡(jiǎn)單自然的事,怎么就想不到呢?
在你的循環(huán)過(guò)程中,加入一個(gè)破壞循環(huán)的條件。條件具備時(shí),就退出循環(huán)。
回復(fù)

使用道具 舉報(bào)

14#
ID:1040289 發(fā)表于 2022-7-29 11:33 來(lái)自觸屏版 | 只看該作者
wulin 發(fā)表于 2022-7-28 15:29
定義一個(gè)位變量bit sign=0,執(zhí)行完一次流水燈,sign=1,就沒(méi)有下次了。
        if(!sign)
        {

okok,謝謝大佬解答,問(wèn)題解決啦
回復(fù)

使用道具 舉報(bào)

15#
ID:624769 發(fā)表于 2022-7-29 20:01 | 只看該作者
溫xyz 發(fā)表于 2022-7-28 23:28
static u8 flag = 1;  //全局變量或局部靜態(tài)變量
if(flag)
{

你需要了解一下跳轉(zhuǎn)原理。

if(!flag)  表示 為0繼續(xù)執(zhí)行, 為1跳過(guò)。
而:  if(flag) 表示 為1 繼續(xù)執(zhí)行, 為0跳過(guò)。
對(duì)于 51 擁有  為 0 跳轉(zhuǎn) 和 為1跳轉(zhuǎn) 的情況下,兩者一樣。
對(duì)于, 有些單片機(jī),只有為1跳轉(zhuǎn) 而沒(méi)有為0 跳轉(zhuǎn)的情況下, if(!flag)  才是真正的節(jié)約了,你這種寫(xiě)法反而需要多一條強(qiáng)制跳轉(zhuǎn)。
回復(fù)

使用道具 舉報(bào)

16#
ID:1040201 發(fā)表于 2022-7-30 16:37 | 只看該作者
用for循環(huán)  do..while()循環(huán),static u8 i =1;if(i--);或者放在main下面while(1)之前。
回復(fù)

使用道具 舉報(bào)

17#
ID:420836 發(fā)表于 2022-8-2 07:56 | 只看該作者
在程序中,使用標(biāo)志字啟用流動(dòng) LED,在 LED 全部點(diǎn)亮后,重置標(biāo)志字以禁用 LED 流動(dòng)。
回復(fù)

使用道具 舉報(bào)

18#
ID:275165 發(fā)表于 2022-8-13 09:24 來(lái)自觸屏版 | 只看該作者
利用定時(shí)器中斷
回復(fù)

使用道具 舉報(bào)

19#
ID:1042050 發(fā)表于 2022-8-14 10:17 | 只看該作者
設(shè)置標(biāo)志位,進(jìn)去時(shí)判斷標(biāo)志位,循環(huán)時(shí)清除標(biāo)志位
回復(fù)

使用道具 舉報(bào)

20#
ID:1042823 發(fā)表于 2022-8-24 16:11 | 只看該作者
while(1)是無(wú)限循環(huán),你想不重復(fù)循環(huán)可以用if判斷
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表