標(biāo)題: 怎么讓程序不循環(huán) [打印本頁]

作者: 黃廣廣    時(shí)間: 2022-7-28 11:29
標(biāo)題: 怎么讓程序不循環(huán)
流水燈依次流過后怎么讓它不重新循環(huán)再流一次
怎么樣流過后讓燈常亮?
我試過用結(jié)尾加上while(1),但是后面的程序就動(dòng)不了了,所以怎么樣讓流水燈流一次后常亮,而且不影響后面的程序。
望大佬解答。
作者: 上善若水001    時(shí)間: 2022-7-28 12:10
可以用for循環(huán),只執(zhí)行一次
作者: zhxiufan    時(shí)間: 2022-7-28 12:25
只執(zhí)行一次流水很容易實(shí)現(xiàn),但看你的意思貌似之后這個(gè)流水在不斷執(zhí)行,要解決這個(gè)問題,你可以將流水程序放在While之前,也就是初始化之后執(zhí)行流水程序,之后再進(jìn)入while主循環(huán)里面。
作者: woshixy1    時(shí)間: 2022-7-28 13:40
  1. a=1
  2. while(a)
  3. {
  4.     流水燈();
  5.     a--;
  6. }
復(fù)制代碼

作者: woshixy1    時(shí)間: 2022-7-28 13:42
  1. a=1
  2. while(a)
  3. {
  4.         流水燈();
  5.         a--;
  6. }       
  7.        
復(fù)制代碼



試一下
作者: 15942379927    時(shí)間: 2022-7-28 14:31
把后面的程序放在while里面,流水燈放在while之前,也就是程序初始化,燈亮一次之后,再進(jìn)入到主體程序中。
作者: xiaoyuxinke    時(shí)間: 2022-7-28 15:02
放在main中的while(1)之前

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

作者: 的花朵    時(shí)間: 2022-7-28 15:24
哥幾個(gè)說的都沒錯(cuò),俺感覺這玩意加個(gè)標(biāo)志位不就行了
  1. static u8 flag = 0;  //全局變量或局部靜態(tài)變量
  2. if(!flag)
  3. {
  4. flag = 1;
  5.    /*流水燈代碼*/
  6. }
復(fù)制代碼

作者: wulin    時(shí)間: 2022-7-28 15:29
定義一個(gè)位變量bit sign=0,執(zhí)行完一次流水燈,sign=1,就沒有下次了。
        if(!sign)
        {
                //流水燈
                sign=1;
        }
作者: ytuffy    時(shí)間: 2022-7-28 16:16
break;
作者: zjh135    時(shí)間: 2022-7-28 16:25
void main(void)
{
   //流水燈
  while(1)
{
   后面的程序;
}


}
作者: 溫xyz    時(shí)間: 2022-7-28 23:28
祖國的花朵 發(fā)表于 2022-7-28 15:24
哥幾個(gè)說的都沒錯(cuò),俺感覺這玩意加個(gè)標(biāo)志位不就行了

static u8 flag = 1;  //全局變量或局部靜態(tài)變量
if(flag)
{
flag = 0;
   /*流水燈代碼*/
}
這樣可以減少一個(gè)!邏輯判斷。
作者: yzwzfyz    時(shí)間: 2022-7-29 09:00
很簡單自然的事,怎么就想不到呢?
在你的循環(huán)過程中,加入一個(gè)破壞循環(huán)的條件。條件具備時(shí),就退出循環(huán)。
作者: 黃廣廣    時(shí)間: 2022-7-29 11:33
wulin 發(fā)表于 2022-7-28 15:29
定義一個(gè)位變量bit sign=0,執(zhí)行完一次流水燈,sign=1,就沒有下次了。
        if(!sign)
        {

okok,謝謝大佬解答,問題解決啦
作者: 188610329    時(shí)間: 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跳過。
而:  if(flag) 表示 為1 繼續(xù)執(zhí)行, 為0跳過。
對(duì)于 51 擁有  為 0 跳轉(zhuǎn) 和 為1跳轉(zhuǎn) 的情況下,兩者一樣。
對(duì)于, 有些單片機(jī),只有為1跳轉(zhuǎn) 而沒有為0 跳轉(zhuǎn)的情況下, if(!flag)  才是真正的節(jié)約了,你這種寫法反而需要多一條強(qiáng)制跳轉(zhuǎn)。
作者: liucan2020    時(shí)間: 2022-7-30 16:37
用for循環(huán)  do..while()循環(huán),static u8 i =1;if(i--);或者放在main下面while(1)之前。
作者: TTQ001    時(shí)間: 2022-8-2 07:56
在程序中,使用標(biāo)志字啟用流動(dòng) LED,在 LED 全部點(diǎn)亮后,重置標(biāo)志字以禁用 LED 流動(dòng)。
作者: tyt_xa    時(shí)間: 2022-8-13 09:24
利用定時(shí)器中斷
作者: sheep5618    時(shí)間: 2022-8-14 10:17
設(shè)置標(biāo)志位,進(jìn)去時(shí)判斷標(biāo)志位,循環(huán)時(shí)清除標(biāo)志位
作者: 杰西Jesse    時(shí)間: 2022-8-24 16:11
while(1)是無限循環(huán),你想不重復(fù)循環(huán)可以用if判斷




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