找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2420|回复: 19
收起左侧

怎么让程序不循环

  [复制链接]
ID:1040289 发表于 2022-7-28 11:29 来自手机 | 显示全部楼层 |阅读模式
流水灯依次流过后怎么让它不重新循环再流一次
怎么样流过后让灯常亮?
我试过用结尾加上while(1),但是后面的程序就动不了了,所以怎么样让流水灯流一次后常亮,而且不影响后面的程序。
望大佬解答。
回复

使用道具 举报

ID:228467 发表于 2022-7-28 12:10 | 显示全部楼层
可以用for循环,只执行一次
回复

使用道具 举报

ID:121859 发表于 2022-7-28 12:25 | 显示全部楼层
只执行一次流水很容易实现,但看你的意思貌似之后这个流水在不断执行,要解决这个问题,你可以将流水程序放在While之前,也就是初始化之后执行流水程序,之后再进入while主循环里面。
回复

使用道具 举报

ID:1040766 发表于 2022-7-28 13:40 | 显示全部楼层
  1. a=1
  2. while(a)
  3. {
  4.     流水灯();
  5.     a--;
  6. }
复制代码
回复

使用道具 举报

ID:1040766 发表于 2022-7-28 13:42 | 显示全部楼层
  1. a=1
  2. while(a)
  3. {
  4.         流水灯();
  5.         a--;
  6. }       
  7.        
复制代码



试一下
回复

使用道具 举报

ID:331575 发表于 2022-7-28 14:31 | 显示全部楼层
把后面的程序放在while里面,流水灯放在while之前,也就是程序初始化,灯亮一次之后,再进入到主体程序中。
回复

使用道具 举报

ID:61140 发表于 2022-7-28 15:02 | 显示全部楼层
放在main中的while(1)之前 main.png

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

使用道具 举报

ID:248705 发表于 2022-7-28 15:24 | 显示全部楼层
哥几个说的都没错,俺感觉这玩意加个标志位不就行了
  1. static u8 flag = 0;  //全局变量或局部静态变量
  2. if(!flag)
  3. {
  4. flag = 1;
  5.    /*流水灯代码*/
  6. }
复制代码
回复

使用道具 举报

ID:213173 发表于 2022-7-28 15:29 | 显示全部楼层
定义一个位变量bit sign=0,执行完一次流水灯,sign=1,就没有下次了。
        if(!sign)
        {
                //流水灯
                sign=1;
        }

评分

参与人数 1黑币 +5 收起 理由
上善-若水 + 5 赞一个!

查看全部评分

回复

使用道具 举报

ID:584639 发表于 2022-7-28 16:16 | 显示全部楼层
break;
回复

使用道具 举报

ID:1040698 发表于 2022-7-28 16:25 | 显示全部楼层
void main(void)
{
   //流水灯
  while(1)
{
   后面的程序;
}


}
回复

使用道具 举报

ID:8222 发表于 2022-7-28 23:28 | 显示全部楼层
祖国的花朵 发表于 2022-7-28 15:24
哥几个说的都没错,俺感觉这玩意加个标志位不就行了

static u8 flag = 1;  //全局变量或局部静态变量
if(flag)
{
flag = 0;
   /*流水灯代码*/
}
这样可以减少一个!逻辑判断。
回复

使用道具 举报

ID:123289 发表于 2022-7-29 09:00 | 显示全部楼层
很简单自然的事,怎么就想不到呢?
在你的循环过程中,加入一个破坏循环的条件。条件具备时,就退出循环。
回复

使用道具 举报

ID:1040289 发表于 2022-7-29 11:33 来自手机 | 显示全部楼层
wulin 发表于 2022-7-28 15:29
定义一个位变量bit sign=0,执行完一次流水灯,sign=1,就没有下次了。
        if(!sign)
        {

okok,谢谢大佬解答,问题解决啦
回复

使用道具 举报

ID:624769 发表于 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)  才是真正的节约了,你这种写法反而需要多一条强制跳转。
回复

使用道具 举报

ID:1040201 发表于 2022-7-30 16:37 | 显示全部楼层
用for循环  do..while()循环,static u8 i =1;if(i--);或者放在main下面while(1)之前。
回复

使用道具 举报

ID:420836 发表于 2022-8-2 07:56 | 显示全部楼层
在程序中,使用标志字启用流动 LED,在 LED 全部点亮后,重置标志字以禁用 LED 流动。
回复

使用道具 举报

ID:275165 发表于 2022-8-13 09:24 来自手机 | 显示全部楼层
利用定时器中断
回复

使用道具 举报

ID:1042050 发表于 2022-8-14 10:17 | 显示全部楼层
设置标志位,进去时判断标志位,循环时清除标志位
回复

使用道具 举报

ID:1042823 发表于 2022-8-24 16:11 | 显示全部楼层
while(1)是无限循环,你想不重复循环可以用if判断
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表