们分别来看。
1、if语句的默认形式:
if(条件表达式)
{
语句1;
}
其执行过程是,if(即如果)条件表达式的值为“真”,则执行语句1;如果条件表达式的值为“假”,则不执行语句1。真和假的概念不再赘述,参考第五章。
这里要提醒大家一点,C语言一个分号表示一条语句的结束,因此如果if后边只有一条执行语句的时候,可以省略大括号,但是如果有多条执行语句的话,必须加上大括号。
那么现在,我们上节课的语句就很好理解了:
if(sec>=16)
{
sec=0;
}
当sec的值大于或等于16的时候,括号里的值才是“真”,那么就执行sec=0这一句,当sec的值小于16时,那么括号里就为“假”,就不执行这一句。
2、if...else语句
有些情况下,我们除了要在括号里条件满足时执行相应的语句外,在不满足该条件的时候,也要执行一些另外的语句,这时候就用到了if...else语句,它的基本语法形式是:
if(条件表达式)
{
语句1;
}
else
{
语句2;
}
比如上节课的最后一段程序我们也可以写成:
P0=LedChar[sec];
if(sec>=15)
{
sec=0;
}
else
{
Sec++;
}
这个程序大家可以修改下载到单片机里验证一下,程序逻辑大家自己动脑筋分析,注意条件表达式内16到15的变化,想一下为什么,我就不多解释了。
3、if....elseif语句
if...esle语句是一个二选一的语句,或者执行if分支后的语句,或者执行else分支后的语句。还有一种多选一的用法就是if...elseif语句。他的基本语法格式是:
if(条件表达式1){语句1;}
elseif(条件表达式2){语句2;}
elseif(条件表达式3){语句3;}
......
else{语句n;}
他的执行过程是:依次判断条件表达式的值,当出现某个值为“真”时,则执行相对应的语句,然后跳出整个if的语句块,执行“语句n”后面的程序;如果所有的表达式都为“假”,则执行else分支的“语句n”后,再执行“语句n”后边的程序。
if语句在C语言编程中使用频率很高,用法也不复杂,所以必须要熟练掌握。
1.3switch语句
用if....else语句在处理多分支的时候,分支太多就会显得不方便,且容易出现if和else配对出现错误的情况,在C语言中提供了另外一种多分支选择的语句——switch语句,它的基本语法格式如下:
switch(表达式)
{
case常量表达式1:语句1;
case常量表达式2:语句2;
......
case常量表达式n:语句n;
default:语句n+1;
}
它的执行过程是:首先计算“表达式”的值,然后从第一个case开始,与“常量表达式x”进行比较,如果与当前常量表达式的值不相等,那么就不执行冒号后边的语句x,一旦发现和某个常量表达式的值相等了,那么它会执行之后所有的语句,如果直到最后一个“常量表达式n”都没有找到相等的值,那么就执行default后的“语句n+1”。请特别注意一点,当找到一个相等的case分支后,会执行该分支以及之后所有分支的语句,很明显这不是我们想要的结果。
在C语言中,有一条break语句,作用是跳出当前的循环语句,包括for循环和while循环,同时,它还能用来结束switch语句块。switch的分支语句一共有n+1种,而我们通常希望的都是选择其中的一个分支来执行,执行完后就结束整个switch语句,而继续执行switch后面的语句,此时就可以通过在每个分支后加上break语句来实现了。如下:
switch(表达式)
{
case常量表达式1:语句1;break;
case常量表达式2:语句2;break;
......
case常量表达式n:语句n;break;
default:语句n+1;break;
}
加了这个break语句后,一旦“常量表达式x”与“表达式”的值相等了,那么就执行“语句x”,执行完毕后,由于有了break则直接跳出switch语句,继续执行switch语句后面的程序了,这样就可以避免执行不必要的语句。了解了这个switch语句后,我们马上会在本章程序中使用巩固它。
1.4数码管的动态显示
1.4.1动态显示的基本原理
我们在上一章学习数码管静态显示的时候说到,74HC138只能在同一时刻导通一个三极管,而我们的数码管是靠了6个三极管来控制,那我们如何来让数码管同时显示呢?这就用到了动态显示的概念。
多个数码管显示数字的时候,我们实际上是轮流点亮数码管(一个时刻内只有一个数码管是亮的),利用人眼的视觉暂留现象(也叫余辉效应),就可以做到看起来是所有数码管都同时亮了,这就是动态显示,也叫做动态扫描。
例如:有2个数码管,我们要显示“12”这个数字,先让高位的位选三极管导通,然后控制段选
|