微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 《手把手教你学51单片机-C语言》之六 中断与数码管动态显示

《手把手教你学51单片机-C语言》之六 中断与数码管动态显示

时间:11-19 来源:互联网 点击:

们分别来看。

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”这个数字,先让高位的位选三极管导通,然后控制段选

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top