教 案 纸 第 1 页
学 科 | 单片机 | C51语句汇总 | 检 查 | |||||
授课班级 | 2 | 授课时数 | 6 | 教具 | ||||
授课时间 | 教学方法 | 演示、讲解、 | ||||||
教学目的 | 掌握C51语句格式和使用方法和范围 | |||||||
教学重点 和难点 | C51语句格式和使用方法和范围 | |||||||
复习提问 | ||||||||
教学内容、方法、过程和板书设计 | 教学追记 | |||||||
一、if语句 if 语句是用来判定所给定的条件是否满足根据判定的结果(真或假)决定执行给出的两 种操作之一。 C 语言提供了三种形式的if 语句 1. if(表达式) 语句 如果表达式的结果为真,则执行语句,否则不执行 2. if(表达式) 语句1 else 语句2 如果表达式的结果为真,则执行语句1,否则执行语句2 3.if(表达式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”。该语句中的“return(0)”是返回之意,相当于汇编语言中的“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 接地)时,返回值是0xf7(11110111B),K3 被按下(P3.4接地)时,返回值是0xef(11101111B),K4 被按下(P3.5 接地)时,返回值是0xdf(11011111B),该值将被赋给主程序中调用键盘程序的变量KValue。程序用了另一种选择结构switch 进行处理,关于switch 将在稍后介绍。下面用if 语句来改写: | |
教 案 纸 附 页
第 3 页
教学内容、方法、过程和板书设计 | 教学追记 |
if(KValue==0xfb) {Start=1;} else if(KValue==0xf7) {Start=0;} else if(KValue==0xef) {UpDown=1;} else if(KValue==0xdf) {UpDown=0;} else {//意外处理} …… if(KValue==0xfb) {Start=1;} else if(KValue==0xf7) {Start=0;} else if(KValue==0xef) {UpDown=1;} else if(KValue==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小时内删除。
发表评论