|
|
楼主 |
发表于 2016-9-13 02:46:16
|
显示全部楼层
1.1 循环控制
在上一课中我们使用STC软件自动生成了一个延时1秒的函数,如果以后需要延时2秒、延时半秒呢,要是每次都生成一个这个的函数,那将不可想象。
幸好有一个巧妙的办法:函数调用。
如果我们有一个延时1ms的函数,执行1000次不就是1秒了么,执行500次不就是半秒?多么机智的想法。
调用一个函数两次,我们可以写两行,调用三次,可以写三行,那调用1000次呢……
幸好有“while”。在我们的主函数中,所有的程序都在一个无限循环的while(1)里,其实它循环的次数是可以控制的。
知识点(15) while(?)循环
while(?){} 当?的值是“真”的,括号里的程序会一直执行;当?的值是“假”的,括号里的程序程序不再执行。
什么是真?大于0的数都是真的,1是真,1000也是真。什么是假?0就是假。
如果我们想要循环1000次,可以while(1000),循环一次,变成while(999)……到最后,变成while(0),自然循环就停止了。
知识点(16) unsigned int n; 变量定义
想要一个数从1000减到0,就先要定义这个数。
unsigned int 定义变量的关键字,意思是定义一个数,范围是0到65535。
unsigned int n;定义了n这个数。n只是一个名字,你也可以写成abc等都可以。
知识点(17) 1000次循环的程序实例
n=1000;
while(n)
{
//被循环的程序
n=n-1;//每循环一次n减小1
}
把前面所讲的组合起来,自己写一个函数吧!
知识点(18) 定义延时n毫秒函数实例
void delay_n_ms(unsigned int n)//括号里面有值代表有参数的函数,在调用这个函数时,可以顺便写n的大小。
{
while(n) //注意什么地方有分号,什么地方没分号
{
Delay1ms();
n=n-1;//每循环一次n减小1
}
}
知识点(19) 调用带参数的函数
delay_n_ms(1000); //在调用时,1000这个值就传递给了n
有了能随意控制延时时间的函数,就能让彩灯变化更加灵活,写一个每种色彩亮0.1秒,白色亮1秒的程序吧!
是不是绚丽多了?你还能想到别的变化组合吗?
- #include<reg51.h>
- sbit LED_R=P3^4;//定义红灯
- sbit LED_G=P3^3;//定义绿灯
- sbit LED_B=P3^2;//定义蓝灯
- void Delay1ms() //@12.000MHz
- {
- unsigned char i, j;
- i = 12;
- j = 169;
- do
- {
- while (--j);
- } while (--i);
- }
- void delay_n_ms(unsigned int n) //自己定义的延时n毫秒函数
- {
- while(n)
- {
- Delay1ms();
- n=n-1;//每循环一次n减小1
- }
- }
- main()
- {
-
- while(1)
- {
- LED_R=1;
- LED_G=0;
- LED_B=0;
- delay_n_ms(100);//红色亮0.1秒
-
- LED_R=1;
- LED_G=1;
- LED_B=0;
- delay_n_ms(100);//黄色亮0.1秒
-
- LED_R=0;
- LED_G=1;
- LED_B=0;
- delay_n_ms(100);//绿色亮0.1秒
-
- LED_R=0;
- LED_G=1;
- LED_B=1;
- delay_n_ms(100);//青色亮0.1秒
-
- LED_R=0;
- LED_G=0;
- LED_B=1;
- delay_n_ms(100);//蓝色亮0.1秒
-
- LED_R=1;
- LED_G=0;
- LED_B=1;
- delay_n_ms(100);//紫色亮0.1秒
-
- LED_R=1;
- LED_G=1;
- LED_B=1;
- delay_n_ms(1000);//白色亮1.0秒
- }
-
- }
复制代码
|
| |