教 案 纸        第  1 页
单片机
C51语句汇总
检  查
授课班级
2
授课时数
6
教具
授课时间
教学方法
演示、讲解、
教学目的
掌握C51语句格式和使用方法和范围
教学重点
和难点
C51语句格式和使用方法和范围
复习提问
教学内容、方法、过程和板书设计
教学追记
一、if语句
if 语句是用来判定所给定的条件是否满足根据判定的结果(真或假)决定执行给出的两
种操作之一。
C 语言提供了三种形式的if 语句
1. if(表达式) 语句
如果表达式的结果为真,则执行语句,否则不执行
2. if(表达式) 语句1 else 语句2
如果表达式的结果为真,则执行语句1,否则执行语句2
3if(表达式1 语句 1
else if(表达式2 语句2
else if(表达式3 语句3
else if(表达式m 语句 m
else 语句n
这条语句执行如图2 所示。
上述程序中的如下语句:
if((KeyV|0xc3)==0xff) //无键按下
return(0);
教 案 纸  附 页
第  2  页
教学内容、方法、过程和板书设计
教学追记
一种if 语句的应用:该语句中“|”符号是C 语言中的位运算符,按位相或的意思,
相当于汇编语言中“ORL”指令,将读取的P3 口的值KeyV 0xc3(即11000011B)按位或,如果结果为0xff(即11111111B)说明没有键被按下,因为中间4 位接有按键,如果有键按下,那么P3 口值的中间4 位中必然有一位或更多位是“0”。该语句中的“return0)”是返回之意,相当于汇编语言中的“ret”指令,通过该语句可以带返回值,即该号中的数值,返回值就是这个函数的值,在这个函数被调用时,用了如下的形式:KValue=Key();因此,返回的结果是该值被赋给Kvalue 这个变量。因此,如果没有键被按下,则直接返回,并且Kvalue 的值将变为0。如果有键被按下,那么return(0)将不会被执行。程序其他地方还有这样的用法,请注意观察与分析。
程序中:
if(Start)
{… 灯流动显示的代码 }
else
P1=0xff; //否则灯全灭
if 语句的第二种用法,其中Start 是一个位变量,该变量在main 函数的中被定义,并赋以初值0,该变量在按键K1 被按下后置为1,而K2 按下后被清为0,用来控制灯流动是否开始。这里就是判断该变量并决定灯流动是否开始的代码,观察if 后面括号中的写法,与其他语言中写法很不一样,并没有一个关系表达式,而仅仅只有一个变量名,C 根据这个量是0 还是1 来决定程序的走向,如果为1 则执行灯流动显示的代码,如果为0,则执行P1=0xff;语句。可见,在C 语言中,数据类型的概念比其他很多的编程语言要“弱化”,或者说C 更着重从本质的角度去考虑问题,if 后面的括号中不仅可以是关系表达式,也可以是算术表达式,还可以就是一个变量,甚至是一个常量,不管怎样,C 总是根据这个表达式的
值是零还是非零来决定程序的走向,这个特点是其他中所没有的,请注意理解。
if 语句的第三种用法在本程序中没有出现,下面我们举一例说明。在上述的键盘处理函数Key 中,如果没键被按下,返回值是0,如果有键被按下,经过去键抖的处理,将返回键
值,程序中的“return(KeyV);”即返回键值。当K1 被按下(P3.2 接地)时,返回值是0xfb
11111011B),而K2 被按下(P3.3 接地)时,返回值是0xf711110111B),K3 被按下(P3.4接地)时,返回值是0xef11101111B),K4 被按下(P3.5 接地)时,返回值是0xdf11011111B),该值将被赋给主程序中调用键盘程序的变量KValue。程序用了另一种选择结构switch 进行处理,关于switch 将在稍后介绍。下面用if 语句来改写:
教 案 纸  附 页
第  3  页
教学内容、方法、过程和板书设计
教学追记
ifKValue==0xfb
{Start=1;}
else ifKValue==0xf7
{Start=0;}
else ifKValue==0xef
{UpDown=1;}
else ifKValue==0xdf
{UpDown=0;}
else
{//意外处理}
……
ifKValue==0xfb
{Start=1;}
else ifKValue==0xf7
{Start=0;}
else ifKValue==0xef
{UpDown=1;}
else ifKValue==0xdf
{UpDown=0;}
else
{//意外处理}
……
程序中第一条语句判断Kvalue 是否等于0xfb,如果是就执行Start=1;执行完毕即退出if语句,执行if 语句下面的程序,如果Kvalue 不等于0xfb 就转去下一个else if 即判断Kvalue是否等于0xf7,如果等于则执行Start=0;,并退出if 语句这样一直到最后一个else if 后面的条件判断完毕为止,如果所有的条件都不满足,那么就去执行else 后面的语句(通常这意味着出现了异常,在这里来统一处理这种异常情况)。
二、 if 语句的嵌套
if 语句中又包含一个或多个语句称为if 语句的嵌套。一般形式如下
if()
if() 语句1
else 语句2
else
if() 语句3
教 案 纸  附 页
第  4  页
教学内容、方法、过程和板书设计
教学追记
while语句简单例子
else 语句4
应当注意if else 的配对关系,else 总是与它上面的最近的if 配对。如果写成
if()
if()语句1
else
语句 2
编程者的本意是外层的if else 配对,缩进的if 语句为内嵌的if 语句,但实际上else 将与缩进的那个if 配对,因为两者最近,从而造迈岐义。为避免这种情况,建议编程时使用大括号将内嵌的if 语句括起来,这样可以避免出现这样的问题。
三、swich 语句
当程序中有多个分支时,可以使用 if 嵌套实现,但是当分支较多时,则嵌套的if 语层数多,程序冗长而且可读性降低。C 语言提供了switch 语句直接处理多分支选择。Switch的一般形式如下:
switch(表达式)
{case 常量表达式1:语句1
case 常量表达式2:语句2
……
case 常量表达式n:语句n
default:语句n+1
}
说明:switch 后面括号内的“表达式”,ANSI 标准允许它为任何类型;当表达式的值与某一个case 后面的常量表达式相等时,就执行此case 后面的语句,若所有的case 中的常量表达式的值都没有与表达式值匹配的,就执行default 后面的语句;每一个case 的常量表达式的值必须不相同;各个case default 的出现次序不影响执行结果。另外特别需要说明的是,执行完一个 case 后面的语句后,并不会自动跳出switch,转而去执行其后面的语句,如上述例子中如果这么写switch (KValue)
{ case 0xfb: Start=1;
case 0xf7: Start=0;
case 0xef: UpDown=1;
case 0xdf: UpDown=0;
}
if(Start)
{ ……}
假如KValue 的值是0xfb,则在转到此处执行“Start=1;”后,并不是转去执行switch 语句下面的if 语句,而是将从这一行开始,依次执行下面的语句即“Start=0;”、“UpDown=1;”“UpDown=0;”,显然,这样不能满足要求,因此,通常在每一段case 的结束加入“break;”语句,使流程序退出switch 结构,即终止switch 语句的执行。
教 案 纸  附 页
第 5 页
教学内容、方法、过程和板书设计
教学追记
四、while 语句
While 语句用到实现“当型”循环结构,其一般形式如下:
while(表达式) 语句当表达式为非 0 值(真)时,执行while 语句中的内嵌语句。其特点是:先判断表达式,后执行语句。
在上述例子中,表达式使用了一个常数“1”,这是一个非零值,即“真”,条件总是满足,语句总是会被执行,构成了无限循环。下面再举一例说明:
4-2:当K1 键被按下时,流水灯工作,否则灯全部熄灭。
#include "reg51.h"
#include"intrins.h" //该文件包含有_crol_(…)函数的说明
void mDelay(unsigned int DelayTime)
{ unsigned int j=0;
for(;DelayTime>0;DelayTime--)
{ for(j=0;j<125;j++)
{;}
}
}
void main()
{ unsigned char OutData=0xfe;
while(1)
{ P3|=0x3c;
while((P3|0xfb)!=0xff)
{ P1=OutData;
OutData=_crol_(OutData,1); //循环左移
mDelay(1000); /*延时1000 毫秒*/}
P1=0xff;
}}
程序分析:这个程序中的第二个while 语句中的表达式用来判断K1 键是否被按下,如被按下,则执行循环体内的程序,否则执行P1=0xff;程序行。虽然整个程序是在一个无限循环过程中,但是由于外界条件的变化使得程序执行的过程发生了变化。
五、do-while 语句
do-while 语句用来实现“直到型”循环,特点是先执行循环体,然后判断循环条件是否成立。其一般形式如下:
do
循环体语句
while(表达式)
对同一个问题,既可以用while 语句处理,也可以用do-while 语句处理。但是这两个语句是有区别的,下面我们用do-while 语句改写例2。
教 案 纸  附 页

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。