二单片机C语言入门之判断语句
C语言中一个相当常用的语句结构就是判断语句,判断语句结构要求程序员指定一个或者多个需要判断的条件,以及条件满足或者不满足时程序需要执行的动作(可选)。
C语言中常用的判断语句如下:
判断语句
单片机按键状态读取图
if语句的格式及用法
第一种形式
if(条件表达式)
{
条件表达式为真时需要执行的语句1;
}
语句解释:当条件表达式为真时,程序将执行语句1,如果if条件表达式不为真,将跳转到大括号外继续执行后续的语句。
举个简单的例子,单片机中一般采用IO口来读取按键的状态(硬件如上图),需要实现的是按键每按下一次,自定义变量seft_count值自加1。
按上面要求,采用判断语句的程序如下:
Unsigned int seft_count //自定义变量
if(P3^0==0) //判断按键按下
{
seft_count = seft_count+1; //变量自加1
}
第二种形式
if(条件表达式)
{
条件表达式为真时需要执行的语句1;
}
else
{
上述if条件不满足,执行语句2;
}
语句解释:当if条件表达式为真时,程序将执行语句1,如果if条件表达式不为真时,将执行语句2。
同样上面硬件,需要实现的是按键每按下一次,自定义变量seft_count值自加1,如果按键没有按下,自定义变量值seft_count值自减1。
Unsigned int seft_count //自定义变量
if(P3^0==0) //按键按下
{
seft_count = seft_count+1; //变量自加1
}
else //按键没有按下
{
seft_count = seft_count-1; //变量自减1
}
第三种形式
if(条件表达式1)
{
条件表达式1为真时需要执行的语句1;
}
else if(条件表达式2)
{
条件1不为真,条件表达式2为真时需要 执行的语句2;
}
语句解释:当if条件表达式1为真时,程序将执行语句1,如果if条件表达式1不为真时,转而判断if表达式2是否为真,如果为真则将执行语句2。如果两个条件表达式都不为真,则执行if判断后续的语句。
同样上面硬件,需要实现的是按键每按下一次,自定义变量seft_count值自加1,按键没有按下的情况下,如果自定义的变量值seft_count大于0,则自定义变量值seft_count值自减1。
Unsigned int seft_count //自定义变量
if(P3^0==0)
{
seft_count = seft_count+1;
}
else if(seft_count>0) //变量值大于0为真
{
seft_count = seft_count-1; //变量自减1
}
第四种形式
if(条件表达式1)
{
条件表达式为真时需要执行的语句1;
}
else if(条件表达式2)
{
条件1不为真,条件表达式2为真时需要执行的语句2;
}
else
{
上述条件都不满足,则执行语句3;
}
语句解释:当if条件表达式1为真时,程序将执行语句1,如果if条件表达式1不为真时,转而判断if表达式2是否为真,如果条件2为真则将执行语句2。如果两个条件表达式都不为真,则执行语句3.
同样上面硬件,需要实现的是按键每按下一次,自定义变量seft_count值自加1,按键没有按下的情况下,如果自定义的变量值seft_count大于0,则自定义变量值seft_count值自减1,如果按键没有按下,并且seft_coun也不满足大于0的情况下,清除自定义变量seft_count的值。
Unsigned int seft_count //自定义变量
if(P3^0==0)
{
seft_count = seft_count+1;
}
else if(seft_count>0)
{
seft_count = seft_count-1;
}
else
{
seft_count = 0; //变量清零
}
switch语句的格式及用法
与if判断语句非此即彼的判断不一样,switch判断的条件可以选择很多分支,简单来说,if可以看作不是甲就是乙,而switch判断的分支可以是甲乙丙丁...等等分成很细致的条件,其格式及形式如下:
switch(表达式) //也可以是变量
{
case 常量表达式1://表达式必须是常量
{语句1;}break;
case 常量表达式2://表达式必须是常量
{语句2;}break;
case 常量表达式3://表达式必须是常量
{语句3;}break;
...
default://如果上述条件都不满足
{语句n;}break;
}
语句解释:switch判断语句,直观来说就是匹配语句,语句执行时,将switch(表达式)括号里的表达式运算的结果或变量,一个个跟case的常量去匹配,当两者相等时,相等的那个case满足判断条件,如果所有case的常量都跟表达式的结果不相等,那就执行default;
同样上面硬件,需要实现的是按键每按下一次,自定义变量seft_count值自加1,当按键按10次后,自定义变量值a加10,按键按20次后,变量值a加20,按键按30次后,变量值a加30。
unsigned int seft_count;
unsigned int a;
if(P3^0==0)
{
seft_count = seft_count+1;
Switch(seft_count)
{
case 10:{a = a+10;}break;
case 20: {a = a+20;}break;
case 30:{a = a+30;}break;
default:{;}break;
}
}
注意:举例只为了直观阐明判断语句用法,不代表单片机按键扫描的现实函数就是如此,别的不说,首先按键扫描读的端口状态就不能直接作为判断按键是否按下的直接条件,单片机应用后续再介绍,此处只介绍c语言。
另外,上述阐述的是判断语句的独立用法,判断语句还可以嵌套使用,大家可以自行理解[机智]
单片机C语言的流程控制语句
条件选择语句
条件选择语句的基本形式为:
上述结构流程如图3-1所示:如果表达式的值为非0即真,则执行语句1,执行完语句1从语句2后开始继续向下执行;如果表达式的值为0即假,则跳过语句1而执行语句2。
图3-1 条件选择语句流程
关于条件选择语句的使用,有以下几点需要注意:
(1)条件执行语句中“else 语句2”部分是选择项,缺省后条件语句变成:
if(表达式)语句1;
表示若表达式的值为非0则执行语句1,否则原程序将跳过语句1继续执行。
(2)如果语句1或语句2有多于一条语句要执行时,必须使用“{”和“}”把这些语句包括在其中,此时条件语句形式为:
(3)条件语句可以嵌套,但条件嵌套语句中if与else的对应关系容易出错。
例如:
if(x>20||x<-10)
if(y<=100&&y>x)
printf("Good");
else
printf("Bad");
对于上述情况,规定:else语句与最近的一个if语句匹配,上例中的else与f(y<=100&&y>x)相匹配。
若希望else与if(x>20||x<-10)相匹配,必须用花括号。
如下所示:
if(x>20||x<-10)
{
if(y<=100&&y>x)
printf("Good");
}
else
printf("Bad");
(4)可用阶梯式if-else-if结构
阶梯式结构的一般形式为:
这种结构是从上到下逐个对条件进行判断,一旦发现条件满点足就执行与它有关的语句,并跳过其它剩余阶梯;若没有一个条件满足,则执行最后一个else语句n。最后的else语句常起着“缺省条件”的作用。同样,如果每一个条件中有多于一条语句要执行时,必须使用“{”和“}”把这些语句包括在其中。
循环语句
C51中有三种基本的循环语句:for语句、while语句和do-while语句。
1. for循环
for循环的一般形式为:
for(<初始化>;<条件表过式>;<增量>) 语句;
初始化总是一个赋值语句,它用来给循环控制变量赋初值;条件表达式是一个关系表达式,它决定什么时候退出循环;增量定义循环控制变量每循环一次后按什么方式变化,这三个部分之间用“;”分开。for循环的流程如图3-2所示。
图3-2 for语句流程图
例如:
上例中先给i赋初值1,判断i是否小于等于10,若是则执行语句,之后值增加1。再重新判断,直到条件为假,即i>10时,结束循环。
关于for语句的使用,有以下几点需要注意:
(1)for循环中语句可以为语句体(即多条语句),但要用“{”和“}”将参加循环的语句括起来。
(2)for循环中的“初始化”、“条件表达式”和“增量”都是选择项(即可以缺省),但“;”不能缺省。
(3)for循环可以有多层嵌套。
2. while循环
while循环的一般形式为:
while(条件)
语句;
while循环表示当条件为真时,便执行语句。直到条件为假才结束循环。并继续执行循环程序外的后续语句,其流程如图3-3所示。
图3-3 while语句流程图
例如:
上例中,while循环是以检查c是否为回车符开始,因其事先被初始化为空,所以条件为真,进入循环等待键盘输入字符;一旦输入回车,则c=''\X0D'',条件为假,循环便告结束。
与for循环一样,while循环总是在循环的头部检验条件,因此,有时循环可能什么也不执行就退出。
提示
在while循环体内也允许空语句。
例如:
while((c=getche())!=''\X0D'');
3. do-while循环
do-while循环的一般格式为:
do
语句;
while(条件);
其流程如图3-4所示。
图3-4 do-while语句流程图
do-while循环与while循环的不同在于:它先执行循环中的语句,然后再判断条件是否为真。如果为真则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。
同样当有许多语句参加循环时,要用“{”和“}”把它们括起来。
开关语句
在编写程序时,经常会碰到按不同情况分转的多路问题,这时可用嵌套if-else-if语句来实现,但if-else-if语句使用不方便,并且容易出错。对这种情况,应该用开关语句。
开关语句格式为:
执行switch开关语句时,将变量逐个与case后的常量进行比较,若与其中一个相等,则执行该常量下的语句,若不与任何一个常量相等,则执行default分支后的语句。
关于for语句的使用,有以下几点需要注意:
(1)switch中变量可以是数值,也可以是字符。
(2)可以省略一些case和default。
(3)每个case或default后的语句可以是语句体,但不需要使用“{”和“}”括起来。
下例的switch中变量为整数型。
例:
下例的switch 中变量为字符型。
例:
其他常用函数语句
1. break语句
break语句通常用在循环语句和开关语句中。
当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起。即满足条件时便跳出循环。
当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;如果没有break语句,则将成为一个死循环而无法退出。
例:
注意
break语句对if-else的条件语句不起作用。在多层循环中,一个break语句只向外跳一层。
2. continue语句
continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。
continue语句用在for、while、do-while等循环体中,常与if条件语句一起使用,用来加速循环。
例:
3. goto语句
goto语句是一种无条件转移语句,goto语句的使用格式为:
goto 标号;
其中标号是一个有效的标识符,这个标识符加上一个“:”一起出现在函数内某处,执行goto语句后,程序将跳转到该标号处并执行其后的语句。另外标号必须与goto语句同处于一个函数中,但可以不在一个循环层中。通常goto语句与if条件语句连用,当满足某一条件时,程序跳到标号处运行。
编写程序时,goto语句通常不用,主要因为它将使程序层次不清,且不易读。但在多层嵌套退出时,使用goto语句则比较合理。
例:
4. 函数调用语句
函数调用语句是由一次函数调用加一个分号而构成的语句。
例如:
或
5. 空语句
只有一个分号的语句称为空语句,空语句什么也不做。C51定义一个空函数语句nop,用头文件intrins.h包含起来,然后在需要空语句的时候调用nop函数即可。
例如:
相关问答
单片机 一条 IF语句 所需要的时间?还真不好确定,这与变量的数据类型有关,char,int对应的IF语句所需时间是不一样的。因为处理方式不一样。还真不好确定,这与变量的数据类型有关,char,int对应...
else if 和 if语句 的用法,C语言 单片机 ?在C语言单片机编程中,if语句用于根据条件执行特定的代码块。而elseif语句则用于在前一个条件不满足时,进一步检查另一个条件并执行相应的代码块。这样可以实...
单片机 编程 for if 代表什么意思?二者都是循环结构,if的格式是if(条件){循环体},即满足条件的话执行循环体。for的格式是for(变量初始化;判断条件;循环因素){循环体},即如果初始化的值...二者...
单片机if语句 key1可以用key2按键无反应,急急急,大家帮一下谢谢了?key2,包在if(key1==0)之内.所以key1要按下後,才能按下key2,再放开key1,才有效.如果是要个别动作,应该key2要移出if(key1==0)之外.key2,...
51 单片机 汇编语言的ifelse如何实现?51单片机汇编语言的ifele语句实现如下:if语句由关键字“if”开始,后面跟随一个逻辑表达式。if语句根据该逻辑表达式的值来决定哪些语句会被执行。if语句可以...
单片机if (!x)和 if (x==0)谁运行得快,为什么?cpu判断汇编语句为逻辑操作时改变的只是寄存器的逻辑符号!所以都一样速度!所谓优化只是逻辑变数学我举个例子cmpx.0jnz和subx,1jae这...cp...
【 单片机 程序(source==RC)?(CLKCONCMD|=0X80):(CLKCONCMD& =0...[最佳回答]这是C语言的问号语句,等价于if(source==RC)CLKCONCMD|=0x80;elseCLKCONCMD&=0x80;也就是说如果时钟源是RC,那么就将CLKCONCMD寄存...
单片机 除了while还能有什么其他程序?除了while循环,单片机还可以使用其他程序结构来实现不同的功能。例如,单片机可以使用if语句来进行条件判断,根据不同的条件执行不同的代码块。还可以使用for循...
单片机 中计算器程序c语言加减乘除肿么写?-ZOL问答if(b==0){printf(Error.Youcan'tkeepthedivisorisequaltozero.);}else{printf(两数之商a/b为%...
单片机 在大括号跑空是什么意思?单片机在大括号跑空是if语句在执行时,先判断括号内语句是否为真,如果为真,则执行后续程序。当括号内为空时,语句判断为非真,后续所含语句不予执行。单片机在...