电子说
4.5while循环语句
在单片机C语言编程的时候,每个程序都会固定的加一句while(1),这条语句就可以起到死循环的作用。对于while语句来说,他的一般形式是:
while (表达式)
{
循环体语句;
}
在C语言里,通常“表达式”符合条件叫做真,不符合条件,叫做假。比如前边i<30000,当i等于0的时候,那这个条件成立,就是真;如果i大于30000的时候,i<30000条件不成立,就叫做假。
while(表达式)这个括号里的表达式,为真的时候,就会执行循环体语句,当为假的时候,就不执行。
还有另外一种情况,就是C语言里边,除了表达式外,还有常数,习惯上,把非0的常数都认为是真,只有0认为是假,所以程序中使用了while(1),这个数字1,可以改成2、3、4......等等都可以,都是一个死循环,不停的执行循环体的语句,但是如果把这个数字改成0,那么就不会执行循环体的语句了。
通过学习for循环和while循环,是不是会产生一个疑问?为何有的循环加上{},而有的循环却没加呢?什么时候需要加,什么时候不需要加呢?
前边讲过,在C语言中,分号表示语句的结束,而在循环语句里{}表示的是循环体的所有语句,如果不加大括号,则只循环执行一条语句,即第一个分号之前的语句,而加上大括号后,则会执行大括号中所有的语句,举个例子看一下,上节课的闪烁小灯程序如下所示。
程序(1): 程序(2):
while (1) while (1)
{ LED = 0;
LED = 0; for(i=0;i<30000;i++);
for(i=0;i<30000;i++); LED = 1;
LED = 1; for(i=0;i<30000;i++);
for(i=0;i<30000;i++);
}
程序(1)可以实现闪烁功能。而程序(2)没有加大括号,从语法上来看是没有任何错误的,写到Keil里编译一下也不会报错。但是从逻辑上来讲,程序(2)只会不停的循环“LED = 0;”这条语句,实际上和程序(3)效果是相同的。
程序(3):
while(1)
{
LED = 0;
}
for(i=0;i<30000;i++);
LED = 1;
for(i=0;i<30000;i++);
程序执行到while(1)已经进入死循环了,所以后边三条语句是一辈子也执行不到的。因此为了防止出类似的逻辑错误,推荐不管循环语句后边是一条还是多条语句,都加上{}以防出错。
4.6函数的简单介绍
函数定义的一般形式如下:
函数值类型 函数名 (形式参数列表)
{
函数体
}
1、函数值类型,就是函数返回值的类型。在后边章节的部分例程中,会有很多函数中有return x这条语句,这个返回值也就是函数本身的类型。还有一种情况,就是这个函数只执行操作,不需要返回任何值,那么这个时候它的类型就是空类型void,这个void按道理来说是可以省略的,但是一旦省略,Keil软件会报一个警告,所以通常也不省。
2、函数名,可以由任意的字母、数字和下划线组成,但数字不能作为开头。函数名不能与其他函数或者变量重名,也不能是关键字。什么是关键字呢,后边慢慢接触,比如char这类,都是关键字,是程序中具备特殊功能的标志符,这种东西不可以命名函数。
3、形式参数列表,也叫做形参列表,这个是函数调用的时候,相互传递数据用的。有的函数不需要传递参数给它,那么可以用void来替代,void同样可以省略,但是那个括号是不能省略的。
4、函数体,包含了声明语句部分和执行语句部分。声明语句部分主要用于声明函数内部所使用的变量,执行语句部分主要是一些函数需要执行的语句。特别注意,所有的声明语句部分必须放在执行语句之前,否则编译的时候会报错。
5、一个工程文件必须有且仅有一个main函数,程序执行的时候,都是从main函数开始的。
6、关于形参和实参的概念,后边再总结,如果遇到程序里有,大家再跟着抄一段时间。先用,后讲解,这样更有利于理解。
来回顾一下闪烁LED程序中的主函数,根据注释再认真分析一遍,是不是对函数的认识就清楚多了。
void main() //void即函数类型
{
//以下为声明语句部分
unsigned int i = 0; //定义一个无符号整型变量i,并赋初值0
//以下为执行语句部分
ENLED = 0; //U3、U4两片74HC138总使能
ADDR3 = 1; //使能U3使之正常输出
ADDR2 = 1; //经U3的Y6输出开启三极管Q16
ADDR1 = 1;
ADDR0 = 0;
while (1)
{
LED = 0; //点亮小灯
for (i=0; i<30000; i++); //延时一段时间
LED = 1; //熄灭小灯
for (i=0; i<30000; i++); //延时一段时间
}
}
代码中的“//”是注释符,意思是说在这之后的内容都是注释。注释是给程序员自己或其他人看的,用于对程序代码做一些补充说明,对程序的编译和执行没有任何影响。
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !