标题: 怎么让程序不循环 [打印本页]

作者: 黄廣廣    时间: 2022-7-28 11:29
标题: 怎么让程序不循环
流水灯依次流过后怎么让它不重新循环再流一次
怎么样流过后让灯常亮?
我试过用结尾加上while(1),但是后面的程序就动不了了,所以怎么样让流水灯流一次后常亮,而且不影响后面的程序。
望大佬解答。
作者: 上善若水001    时间: 2022-7-28 12:10
可以用for循环,只执行一次
作者: zhxiufan    时间: 2022-7-28 12:25
只执行一次流水很容易实现,但看你的意思貌似之后这个流水在不断执行,要解决这个问题,你可以将流水程序放在While之前,也就是初始化之后执行流水程序,之后再进入while主循环里面。
作者: woshixy1    时间: 2022-7-28 13:40
  1. a=1
  2. while(a)
  3. {
  4.     流水灯();
  5.     a--;
  6. }
复制代码

作者: woshixy1    时间: 2022-7-28 13:42
  1. a=1
  2. while(a)
  3. {
  4.         流水灯();
  5.         a--;
  6. }       
  7.        
复制代码



试一下
作者: 15942379927    时间: 2022-7-28 14:31
把后面的程序放在while里面,流水灯放在while之前,也就是程序初始化,灯亮一次之后,再进入到主体程序中。
作者: xiaoyuxinke    时间: 2022-7-28 15:02
放在main中的while(1)之前

比如这个程序中,在while(1)之前的函数在单片机上电后只执行一次,在while(1)之后的函数则不断重复执行。

作者: 的花朵    时间: 2022-7-28 15:24
哥几个说的都没错,俺感觉这玩意加个标志位不就行了
  1. static u8 flag = 0;  //全局变量或局部静态变量
  2. if(!flag)
  3. {
  4. flag = 1;
  5.    /*流水灯代码*/
  6. }
复制代码

作者: wulin    时间: 2022-7-28 15:29
定义一个位变量bit sign=0,执行完一次流水灯,sign=1,就没有下次了。
        if(!sign)
        {
                //流水灯
                sign=1;
        }
作者: ytuffy    时间: 2022-7-28 16:16
break;
作者: zjh135    时间: 2022-7-28 16:25
void main(void)
{
   //流水灯
  while(1)
{
   后面的程序;
}


}
作者: 温xyz    时间: 2022-7-28 23:28
祖国的花朵 发表于 2022-7-28 15:24
哥几个说的都没错,俺感觉这玩意加个标志位不就行了

static u8 flag = 1;  //全局变量或局部静态变量
if(flag)
{
flag = 0;
   /*流水灯代码*/
}
这样可以减少一个!逻辑判断。
作者: yzwzfyz    时间: 2022-7-29 09:00
很简单自然的事,怎么就想不到呢?
在你的循环过程中,加入一个破坏循环的条件。条件具备时,就退出循环。
作者: 黄廣廣    时间: 2022-7-29 11:33
wulin 发表于 2022-7-28 15:29
定义一个位变量bit sign=0,执行完一次流水灯,sign=1,就没有下次了。
        if(!sign)
        {

okok,谢谢大佬解答,问题解决啦
作者: 188610329    时间: 2022-7-29 20:01
温xyz 发表于 2022-7-28 23:28
static u8 flag = 1;  //全局变量或局部静态变量
if(flag)
{

你需要了解一下跳转原理。

if(!flag)  表示 为0继续执行, 为1跳过。
而:  if(flag) 表示 为1 继续执行, 为0跳过。
对于 51 拥有  为 0 跳转 和 为1跳转 的情况下,两者一样。
对于, 有些单片机,只有为1跳转 而没有为0 跳转的情况下, if(!flag)  才是真正的节约了,你这种写法反而需要多一条强制跳转。
作者: liucan2020    时间: 2022-7-30 16:37
用for循环  do..while()循环,static u8 i =1;if(i--);或者放在main下面while(1)之前。
作者: TTQ001    时间: 2022-8-2 07:56
在程序中,使用标志字启用流动 LED,在 LED 全部点亮后,重置标志字以禁用 LED 流动。
作者: tyt_xa    时间: 2022-8-13 09:24
利用定时器中断
作者: sheep5618    时间: 2022-8-14 10:17
设置标志位,进去时判断标志位,循环时清除标志位
作者: 杰西Jesse    时间: 2022-8-24 16:11
while(1)是无限循环,你想不重复循环可以用if判断




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1