【夏新电视专区】报价 评测 导购 图片(Amoi)夏新电视大全
7960 2025-05-20 00:53:36
社区
单片机/工控 帖子详情 单片机编程中如何跳出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写文章