51单片机之C语言-4.5基本语句之条件选择语句

发布者:SunshineHope最新更新时间:2016-03-29 来源: eefocus关键字:51单片机  C语言  条件选择语句 手机看文章 扫描二维码
随时随地手机看文章
1. 条件选择语句之if 

语句

前面我们讲了数据类型,运算符及表达式。C语言也是一种语言,既然是语言,一定有连接词。这些连接词可以用来表示假设,循环等等。我们先来看看假设if语句。这些连接词有一定的规则,我们只能按照这些规则来编写,否则编译器无法理解,就出错了。

第一种形式为基本形式: if

if(表达式)语句

其语义是:如果表达式的值为真,则执行后面的语句,否则不执行该语句。

这个很好理解,if就是’如果’的意思,如果外面下雨,就带雨伞。在这里“外面下雨”,就是表达式,如果这个表达式是对的,就执行后面的’带雨伞’这个动作。

第二种形式为: if-else

if(表达式)

语句1;

else

语句2;

其语义是:如果表示式的值为真,则执行语句1,否则执行语句2

其执行过程如下图:

举个例子,如果外面下雨就步行,否则就骑自行车。如果’外面下雨’是真的那么就执行’步行’的动作,否则就执行’骑自行车’的动作。

第三种形式为if-else-if形式

前面的表达式很好理解,只有一个,但是对于多个表达式怎么办?这里就用if-else-if语句。其一般形式为:

if(表达式)

语句1;

else if(表达式2)

语句2;

else (表达式3)

语句3;

...

else if(表达式m)

语句m;

else

语句n;

其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n。然后继续执行后续程序

在使用if语句中还应注意以下问题:

(1) 在三种形式的if语句中,在if关键字后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其他表达式,如赋值表达式等,甚至也可以是一个变量。

例如: if(a=5)语句; if(b)语句; if(a=b)语句;

(2) 在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。

(3)在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。但要注意的是在}之后不能再加分号。

(4) 在if嵌套语句中,C语言规定,else总是与它前面最近的if配对。

例子:

#include

void main(void)

{

        int a,b;

        scanf_s("%d%d",&a,&b);

        //if第一种形式

        if (a >= b) printf("The bigger number is %d\n",a);

        //if第二种形式

        if (a >= b)

        {

                printf("The bigger number is %d\n", a);

        }

        else

        {

                printf("The bigger number is %d\n", b);

        }

        system("pause");

}

 

2. 条件选择语句switch语句

如果分支语句太多,将会使用很多if语句,这样导致程序的可读性很差。这里再来了解一下另外一个条件选择语句,多分支选择switch语句, 其一般形式为:

switch(表达式){

    case  常量表达式1: 语句1;break;

    case  常量表达式2: 语句2;break;

    ...

    case  常量表达式n: 语句n;break;

    default      :语句n+1;break;

}

其语义是:计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。注意如果省略break语句,那么CPU会继续执行表达式对应的常量表达式后面的语句。比如,在switch(表达式)中表达式等于常量表达式2,如果语句2后面没有break,那么cpu执行完语句2将继续执行语句3,4,...语句n

现在我们来举个例子说明.

例4-5-1-2

 基本语句之switch

语句创建

LED流水灯

#include "reg52.h"

typedef unsigned char uchar;

void delayUs(uchar t);

void delayMs(uchar t);

void main(void)

{

        uchar i;

        while(1)

        {

                for(i=0;i<8;i++)

                {

                        switch(i){

                                 case 0:  P1=0XFE;break;//点亮第1个灯

                                 case 1:  P1=0XFD;break;//点亮第2个灯

                                 case 2:  P1=0XFB;break;//点亮第3个灯

                                 case 3:  P1=0XF7;break;//点亮第4个灯

                                 case 4:  P1=0XEF;break;//点亮第5个灯

                                 case 5:  P1=0XDF;break;//点亮第6个灯

                                 case 6:  P1=0XBF;break;//点亮第7个灯

                                 case 7:  P1=0X7F;break;//点亮第8个灯

                                default:  P1=0;break;

                        }

                        delayMs(255);        

        

                }        

        

        }

}

void delayUs(uchar t)

{

        while(--t);

}

void delayMs(uchar t)

{

        while(--t)

        {

                delayUs(245);

                delayUs(245);

        }

}

关键字:51单片机  C语言  条件选择语句 引用地址:51单片机之C语言-4.5基本语句之条件选择语句

上一篇:51单片机之C语言-4.5基本语句之循环语句
下一篇:51单片机之C语言-4.4运算符及表达式

推荐阅读最新更新时间:2024-03-16 14:48

51单片机-呼吸灯
1.双定时器呼吸灯实现 呼吸灯的实现原理就是让小灯的IO端口在一段时间里PWM由大到小变化的占空比输出,接着又由小到大的占空比输出,小灯显示效果就是时亮时暗地交替闪烁。 首先我们用定时器0定时0.1ms,全局变量pwm在其中断函数里执行简单的从0到99的循环自加,这样周期就是10ms。 假如主函数里我们这样执行 if(pwm 90)P0=0xFF; else P0=0x00; 那么IO端口输出的一直是周期为10ms占空比为90%的波形,这样8盏小灯一直是处于较暗的显示状态不变,要想实现呼吸灯,就要不停改变PWM波形的占空比。 所以我们使用定时器1来做间隔10ms地改变占空比,我们再定义一个全局变量highv
[单片机]
<font color='red'>51单片机</font>-呼吸灯
51单片机篮球计分器程序+电路图
以下是篮球计分器的c语言程序源代码: #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int uchar secs = 0; uchar minutes = 1; uchar LED,num1,num2,num = 4; uchar flag1 = 1,flag2 = 0; uchar m_secs = 24; uchar key_value = 0; uchar table = {1,2,3,4,5,6,7,8,9,0,1,2,3}; uchar code LedNum = {0x3f,0x06
[单片机]
<font color='red'>51单片机</font>篮球计分器程序+电路图
老工程师对嵌入式学习之51单片机的一些心得体会
很多人问我嵌入式发展如何,单片机应该如何学习,今天就给大家带来我的一个朋友心得和经历。本人还是学生,现在大三,接触单片机一年多以来,从最基础的51开始,到更高级点的MSP430,一直到现在刚开始上手的STM32,编过的程序不算多,但加起来怎么也有上百个了,做过的东西仔细数数,能拿出手来算算的上是个样的也不下十个,算是小有所成吧。 但今天,我却发现,这一年我一直在走一条歪路。 先说一下情况吧,是这样的,最近同学几个合伙做个小项目,不算复杂,跟市面上的工程项目完全没法比,用难再需要使用的一个芯片是老师给的,从没用过,没有历程,至于一份电子版的数据手册,一切的一切都只能是从头开始,从底层开始,我们几个斌开始从最底层的逻辑时序、寄存器操
[单片机]
老工程师对嵌入式学习之<font color='red'>51单片机</font>的一些心得体会
51单片机的直流电机PWM调速系统设计
设计思路 直流电机PWM控制系统的主要功能包括:实现对直流电机的加速、减速以及电机的正转、反转和急停,并且可以调整电机的转速,能够方便的实现电机的智能控制。 主体电路:即直流电机PWM控制模块。这部分电路主要由AT89C52单片机的I/O端口、定时计数器、外部中断扩展等控制直流电机的加速、减速以及电机的正转和反转,并且可以调整电机的转速,能够很方便的实现电机的智能控制。其间是通过AT89C52单片机产生脉宽可调的脉冲信号并输入到L298驱动芯片来控制直流电机工作的。该直流电机PWM控制系统由以下电路模块组成:设计输入部分:这一模块主要是利用带中断的独立式键盘来实现对直流电机的加速、减速以及电机的正转、反转和急停控制。设计控制部
[单片机]
<font color='red'>51单片机</font>的直流电机PWM调速系统设计
基于51单片机信号发生器的设计
摘 要 本文介绍一种用STC89C51RC单片机构成的波形发生器,可产生方波、三角波、正弦波、锯齿波四种波形,波形的频率可由按键改变,并可根据需要选择单极性输出或双极性输出,具有线路简单、结构紧凑、性能优越等特点。文章给出了源代码,通过仿真测试,其性能指标达到了设计要求。 引 言 21世纪,单片机的发展非常的迅速。单片机是把主要计算机功能部件都集成在一块芯片上的微型计算机。它是一种集计数和多种接口于一体的微控制器,被广泛应用在智能产品和工业自动化上,而51单片机是个单片机中最为典型和最有代表性的一种。 最近几年来,随着科技的飞速发展,单片机领域正在不断的走向社会各个角落,还带动传统控制检测日新月异更新。在实时运作和自动控制的单
[单片机]
基于<font color='red'>51单片机</font>信号发生器的设计
51单片机如何进行模块化编程
本文主要是关于51单片机的相关介绍,并着重对51单片机的原理及其模块化编程进行了详尽的阐述。 51单片机 51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。 功能 ·8位CPU·4kbytes程序存储器(ROM)
[单片机]
<font color='red'>51单片机</font>如何进行模块化编程
c51单片机数码管的控制
电路图 注:实际中,我单片机的74HC573电路接法与P0端接反了 138译码器资料:https://pan.baidu.com/s/1COTcutsnMxMSc8tq0M2yVw 密码:1jww 138译码器的真值表: 74HC573资料:https://pan.baidu.com/s/1b5OJXniyd6gODyf_eA_sXA 密码:m7zx 如果学过数电,上面可以简单看下。如果没有,建议学过数电后再接触单片机,也可以直接看下面。 过程 一、 首先,得知道如何正确点亮一个数码管(静态显示)。 数码管内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的亮暗组合成字符。常见数码管有10
[单片机]
c<font color='red'>51单片机</font>数码管的控制
80C51单片机的定时计数器的结构和工作原理
单片机怎么学,先从哪入手开始学,怎么开始入门 无论是对于新手还是已经在行内的朋友,学习单片机技术,实战动手能力十分重要,如果只知道从网络上的视频以及配套教材来入手开始学,很肯定的说,你永远也学不会。为何?单片机的学习最重要的一点是需要去动手实战实操,单单只看培训教材,也许看的时候能懂一些,但过了一段时间就会遗忘得一干二净,中国有句成语交“纸上谈兵”,经常用来嘲讽一些完全没有实践过的人,单凭从书上了解的知识就胸有成竹的长篇大论。 在这里建议大家,一定要给自己构建一个合适的动手实战试验场所,结合具体的实操对象就很容易理解单片机的电路组态原理,以及理解单片机的程序编制原理,对于入行不深的人,建议给自己出一道居家智能化的物联网课题,采
[单片机]
80C<font color='red'>51单片机</font>的定时计数器的结构和工作原理
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved