怎么让两个for循环的任务一起并列运行呢?

怎么让两个for循环的任务一起并列运行呢?,第1张

可以把两个循环合并在一起,格式如下

for(i的初始值,j的初始值i的结束值&&(或者||)j的初始值i的步长,j的步长)

{

第一个循环体

第二个循环体

}

程序并列是不是同时执行两个程序,如果是的话,可以将两个程序糅合在一起来实现,如:

修改前的程序:

#include<reg51.h>

sbit green=P2^0

sbit blue=P2^1

sbit red=P2^2

sbit shan=P1^0

sbit shan2=P1^1

void delay(int i)

{

while(--i)

{

}

}

void bianse(void)//这个函数程序是控制灯渐亮渐暗

{

int i,j

for(i=1i<2000i=i+100)

{

for(j=0j<1j++)

{

green=0

blue=0

red=0

delay(i)

green=1

blue=1

red=1

delay(2000-i)//红,绿,蓝一起上升

}

}

for(i=2000i>0i=i-100)

{

for(j=0j<1j++)

{

blue=1

green=1

red=1

delay(2001-i)

red=0

green=0

blue=0

delay(i)//红蓝绿下降

}

}

}

void shanshuo(void)//这个函数程序是控制灯闪烁

{

int i,k

for(k=0k<10k++)

{

shan=0

delay(5000)

shan=1

delay(4000)

}

for(i=0i<10i++)

{

shan2=0

delay(5000)

shan2=1

delay(4000)

}

}

void main(void)

{

while(1)

{

bianse()

green=1

blue=1

red=1

shanshuo()

}

}

按照以上程序运行起来的时候是先把P2口的灯先渐亮渐暗完后才轮到P1口的灯闪烁,但想改变一下方式,就是P2口的灯渐亮渐暗的同时,P1口的灯都在闪烁,就是渐亮渐暗跟闪烁的灯都同时显示出来。

修改后:

这个应该是两个功能同时实现,渐亮渐暗是用延时实现的PWM,而灯的闪烁其实就是单片机的输出为矩形波,两个功能同时实现时,就是在矩形波的波峰波谷时期加入了PWM。两个波形的叠加(将两个功能柔和在一起)。在灯渐亮渐暗子程序中,一个for循环for(i=1i<2000i=i+100)其实就是一个PWM的周期,是相同的、一定的,那么就可以利用判断是第几个周期来决定该周期是否要闪烁,还是关闭(也就是利用了PWM的周期来确定矩形波的周期)。

这个循环for(j=0j<1j++)是不是可以去掉呢。。。。。。。。

修改后的程序:调试过了(灯的端口改为P0了)

#include<reg51.h>

sbit green=P0^0

sbit blue=P0^1

sbit red=P0^2

sbit shan=P0^3

sbit shan2=P0^4

void delay(int i)

{

while(--i)

{

}

}

void bianse1(void)//这个函数程序是控制灯渐亮渐暗

{

int i

for(i=1i<2000i=i+100)

{

if(i%200==0)shan=~shan /*经过200个PWM周期灯的亮灭交替,改变这个参数可以改变灯的闪烁频率*/

green=0

blue=0

red=0

delay(i)

green=1

blue=1

red=1

delay(2000-i)//红,绿,蓝一起上升

}

for(i=2000i>0i=i-100)

{

if(i%200==0)shan=~shan

blue=1

green=1

red=1

delay(2001-i)

red=0

green=0

blue=0

delay(i)//红蓝绿下降

}

}

void bianse2(void)//这个函数程序是控制灯渐亮渐暗

{

int i

for(i=1i<2000i=i+100)

{

if(i%200==0)shan2=~shan2

green=0

blue=0

red=0

delay(i)

green=1

blue=1

red=1

delay(2000-i)//红,绿,蓝一起上升

}

for(i=2000i>0i=i-100)

{

if(i%200==0)shan2=~shan2

blue=1

green=1

red=1

delay(2001-i)

red=0

green=0

blue=0

delay(i)//红蓝绿下降

}

}

void shanshuo(void)//这个函数程序是控制灯闪烁

{

int i,k

for(k=0k<10k++)

{

shan=0

delay(5000)

shan=1

delay(4000)

}

for(i=0i<10i++)

{

shan2=0

delay(5000)

shan2=1

delay(4000)

}

}

void main(void)

{

shan=1

shan2=1

while(1)

{

bianse1()

bianse2() /*****两个灯的交替闪烁*****/

green=1

blue=1

red=1

//shanshuo()

}

}

依次判断,依次执行。

比如:

if()

{ }

if()

{ }

会依次判断条件来决定是否执行。

例如:

if(/*判断条件*/)

{

if(/*判断条件*/)

cout<<"这是嵌套if语句"

}

if(/*判断条件*/)    cout<<"这是第一条if语句"//这时候分号在cout的后面

if(/*判断条件*/)    cout<<"这是第二条if语句"//这时候分号在cout的后面

if语句的语法如下所示(if和else是C#的关键字):

if(booleanExpression)

statement-1

else

statement-2

如果booleanExpression(布尔表达式)求值为true,就运行statement-1否则运行statement-2。else关键字和后续的statement-2是可选的。如果没有else子句,而且booleanExpression求值为false,那么什么也不会发生,程序继续执行if语句之后的代码。注意,布尔表达式必须放在圆括号中,否则无法编译。

以上内容参考:百度百科-if语句


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11742465.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存