单片机编程中如何跳出while()循环程序?

admin 1106 2025-06-02 19:19:39

社区

单片机/工控 帖子详情 单片机编程中如何跳出while()循环程序? enjoy21cn 2009-06-03 09:33:32 在此先谢谢大家!

下面的程序是一个输出多组字符串的,目前的问题是如何跳出这个循环主程序。

我用了break,return,都没成功。不知道大家有什么好的法子!

希望赐教一下。

#include

#define uint unsigned int

#define uchar unsigned char

uchar a[3]={'C','I','S'};

uchar b[5]={'S','K','5','3','0'};

uchar c[6]={'F','D','5','0','0','0'};

uchar d[2]={'T','W'};

uchar e[4]={'G','X','4','5'};

uchar f[8]={'M','A','2','0','0','0','0','0'};

uchar g[10]={'L','0','0','0','0','0','0','0','0','0'};

uchar h[4]={'B','V','4','0'};

/*************************************************************************************

延时函数

**************************************************************************************/

void delay(uint i)

{

uint k;

while(i--)

for(k=0;k <1200;k++){;}

}

/**************************************************************************************

//串口初始化过程

****************************************************************************************/

void uini()

{

TMOD=0x20;

TH1=0xfd;//波特率为9600

TL1=0xfd;

TR1=1;

SCON=0x50;

}

/**************************************************************************************

//主程序

**************************************************************************************/

void main()

{

uini();

while(1)

{

uint i;

for(i=0;i <3;i++) //发送第1个字符串

{

SBUF=a[i];

while(!TI);

TI=0;

}

delay(1200); //延迟1200ms

for(i=0;i <5;i++) //发送第2个字符串

{

SBUF=b[i];

while(!TI);

TI=0;

}

for(i=0;i <6;i++) //发送第3个字符串

{

SBUF=c[i];

while(!TI);

TI=0;

}

delay(1200); //延迟1200ms

for(i=0;i <2;i++) //发送第4个字符串

{

SBUF=d[i];

while(!TI);

TI=0;

}

delay(1200); //延迟1200ms

for(i=0;i <4;i++) //发送第5个字符串

{

SBUF=e[i];

while(!TI);

TI=0;

}

delay(1200); //延迟1200ms

for(i=0;i <8;i++) //发送第6个字符串

{

SBUF=f[i];

while(!TI);

TI=0;

}

delay(1200); //延迟1200ms

for(i=0;i <10;i++) //发送第7个字符串

{

SBUF=g[i];

while(!TI);

TI=0;

}

delay(3600); //延迟1200ms

for(i=0;i <4;i++) //发送第8个字符串

{

SBUF=h[i];

while(!TI);

TI=0;

}

delay(1200); //延迟1200ms

}

}

...全文

2912 13 打赏 收藏 单片机编程中如何跳出while()循环程序? 在此先谢谢大家! 下面的程序是一个输出多组字符串的,目前的问题是如何跳出这个循环主程序。 我用了break,return,都没成功。不知道大家有什么好的法子! 希望赐教一下。 #include #define uint unsigned int #define uchar unsigned char uchar a[3]={'C','I','S'}; uchar b[5]={'S','K','5','3','0'}; uchar c[6]={'F','D','5','0',' 复制链接

扫一扫 分享 转发到动态 举报

写回复 配置赞助广告取 消

确 定

用AI写文章 13 条回复 切换为时间正序 请发表友善的回复… 发表回复 打赏红包 需支付: 0.00 元 取 消 确 定 zyzhang365 2009-06-05 打赏举报 回复 如果是多进程的系统,你就可以让main()函数退出的。否则,应该是必须的,实用的程序应该不是你这个样子的。 enjoy21cn 2009-06-05 打赏举报 回复 在此先谢谢zyzhang365,zhanzongru,huleide,OK001

加了一句while(1);是可行的!一直循环对于系统运行是不是很耗资源?不知道影响大不大。

enjoy21cn 2009-06-03 打赏举报 回复 [Quote=引用 4 楼 zyzhang365 的回复:]

楼上说的都有道理。

楼主是不是按代码函数领薪水哈,开个玩笑。

我要说的是你还是需要在最后加一个无限循环,否则,程序到后面就飞了。

[/Quote]

谢谢你的指点,可能程序是有点麻烦。

不知道你所说的后面加个无限循环是什么意思?还望指点一下。 enjoy21cn 2009-06-03 打赏举报 回复 to lose_forest,zhkflying谢谢你们的指点。 zyzhang365 2009-06-03 打赏举报 回复 楼上说的都有道理。

楼主是不是按代码函数领薪水哈,开个玩笑。

我要说的是你还是需要在最后加一个无限循环,否则,程序到后面就飞了。 zhkflying 2009-06-03 打赏举报 回复 void main()

{

uini();

while(1)

{

uint i;

for(i=0;i <3;i++) //发送第1个字符串

{

SBUF=a[i];

while(!TI);

TI=0;

}

delay(1200); //延迟1200ms

break; //这里加break就可以退出while(1)循环,我调试也过OK!注意要注释掉下面无用的代码!!

/*

for(i=0;i <5;i++) //发送第2个字符串

{

SBUF=b[i];

while(!TI);

TI=0;

}

for(i=0;i <6;i++) //发送第3个字符串

{

SBUF=c[i];

while(!TI);

TI=0;

}

delay(1200); //延迟1200ms

for(i=0;i <2;i++) //发送第4个字符串

{

SBUF=d[i];

while(!TI);

TI=0;

}

delay(1200); //延迟1200ms

for(i=0;i <4;i++) //发送第5个字符串

{

SBUF=e[i];

while(!TI);

TI=0;

}

delay(1200); //延迟1200ms

for(i=0;i <8;i++) //发送第6个字符串

{

SBUF=f[i];

while(!TI);

TI=0;

}

delay(1200); //延迟1200ms

for(i=0;i <10;i++) //发送第7个字符串

{

SBUF=g[i];

while(!TI);

TI=0;

}

delay(3600); //延迟1200ms

for(i=0;i <4;i++) //发送第8个字符串

{

SBUF=h[i];

while(!TI);

TI=0;

}

delay(1200); //延迟1200ms

*/ }

} zhkflying 2009-06-03 打赏举报 回复 void main()

{

...

for(i=0;i <4;i++) //发送第8个字符串

{

SBUF=h[i];

while(!TI);

TI=0;

}

delay(1200); //延迟1200ms

break; //这里加break就可以退出while(1)循环,我调试过OK!

}

}

lose_forest 2009-06-03 打赏举报 回复

do{

uint i;

for(i=0;i <3;i++) //发送第1个字符串

{

SBUF=a[i];

while(!TI);

TI=0;

}

delay(1200); //延迟1200ms

for(i=0;i <5;i++) //发送第2个字符串

{

SBUF=b[i];

while(!TI);

TI=0;

}

for(i=0;i <6;i++) //发送第3个字符串

{

SBUF=c[i];

while(!TI);

TI=0;

}

delay(1200); //延迟1200ms

for(i=0;i <2;i++) //发送第4个字符串

{

SBUF=d[i];

while(!TI);

TI=0;

}

delay(1200); //延迟1200ms

for(i=0;i <4;i++) //发送第5个字符串

{

SBUF=e[i];

while(!TI);

TI=0;

}

delay(1200); //延迟1200ms

for(i=0;i <8;i++) //发送第6个字符串

{

SBUF=f[i];

while(!TI);

TI=0;

}

delay(1200); //延迟1200ms

for(i=0;i <10;i++) //发送第7个字符串

{

SBUF=g[i];

while(!TI);

TI=0;

}

delay(3600); //延迟1200ms

for(i=0;i <4;i++) //发送第8个字符串

{

SBUF=h[i];

while(!TI);

TI=0;

}

delay(1200); //延迟1200ms

}

}while(0);

这是一次循环;如果有其他触发条件 跳出循环,则适当修改while的条件。 lV运用 2009-06-03 打赏举报 回复 break huleide 2009-06-03 打赏举报 回复 开中断啊,如果有外部中断标识被置位,就跳出循环响应中断了,如果没有中断就让它不停的循环…… 小赌移情 2009-06-03 打赏举报 回复 跳出之後還是要到一個while(1)中循環的, 所以還不如不跳出, 加上一些條件判斷.

這個可以看看別人寫的superloop程序,把逻輯設計好一點即可. zyzhang365 2009-06-03 打赏举报 回复 [Quote=引用 7 楼 zyzhang365 的回复:]

如果没有这个循环,执行完main()函数退出后CPU的程序指针PC就是随机值了,这样你不知道会执行什么指令。

如果加了

while();

或者

for(;;);

这样程序就不会退出main()函数了,除非你真的希望程序退出。

[/Quote]

while(1); zyzhang365 2009-06-03 打赏举报 回复 如果没有这个循环,执行完main()函数退出后CPU的程序指针PC就是随机值了,这样你不知道会执行什么指令。

如果加了

while();

或者

for(;;);

这样程序就不会退出main()函数了,除非你真的希望程序退出。 蓝桥杯单片机数码管程序.zip 蓝桥杯单片机数码管程序,不用定时器和中断的数码管程序,放在WHILE循环里面,不断执行和刷新数码管,非常的好用,非常的银杏!蓝桥杯单片机数码管程序,不用定时器和中断的数码管程序,放在WHILE循环里面,不断执行和刷新数码管,非常的好用,非常的银杏! 单片机流水灯实验报告.docx 基于AT89C51的简易流水灯实验报告 单片机c语言教程:C51循环语句 循环语句是几乎每个程序都会用到的,它的作用就是用来实现需要反复进行多次的操 作。如一个 12M 的 51 芯片应用电路中要求实现 1 毫秒的延时,那么就要执行 1000 次空语句 才能达到延时的目的(当然能使用定时器来做,这里就不讨论),如果是写 1000 条空语 句那是多么麻烦的事情,再者就是要占用很多的存储空间。 十天学会单片机实例100 一些实用的例子,对学习单片机有一定的帮助 十天学会单片机实例100很不错哦 以C51为基础的教程,全部都是例子,详细的涵盖的51基础的所有内容,简单容易理解,便于生手学习!

单片机/工控

27,508

社区成员

28,796

社区内容

发帖 与我相关 我的任务 单片机/工控 硬件/嵌入开发 单片机/工控 复制链接

扫一扫 分享 确定 社区描述 硬件/嵌入开发 单片机/工控 社区管理员

加入社区

获取链接或二维码

近7日

近30日

至今

加载中

查看更多榜单

社区公告

暂无公告 试试用AI创作助手写篇文章吧

+ 用AI写文章

上一篇
下一篇
相关文章