
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语句
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)