您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第3章 单片机C51语言程序设计基础
第3章单片机C51语言程序设计基础3.1语句与流程控制3.2函数3.3本章小结3.4实训三简易十字路口交通信号灯控制返回首页教学提示C51语言程序是由函数组成的。函数是C51语言的基本模块。用C51语言设计程序就是编写函数。从来源看,函数可分为用户自定义函数和标准库函数两大类。在一个C51语言程序中有且只能有一个名为main的主函数。C51语言程序的执行部分是由语句组成的。程序的各种主要功能都是由语句实现的。C语言的语句可分为流程控制语句、表达式语句、复合语句、空语句。本章重点介绍C51语言中语句的使用方法以及C51语言中新增的函数类型——中断函数和重入函数。教学要求掌握C51语言基本语句的使用方法,包括赋值语句、函数调用语句、复合语句、空语句;掌握C51语言分支语句的使用方法,包括if语句、switch语句;掌握C51语言循环语句的使用方法,包括while语句、do-while语句、for语句;掌握辅助控制语句break、continue的使用方法;理解中断函数和重入函数的使用方法;掌握常用标准库函数的使用方法。3.1语句与流程控制3.1.1基本语句3.1.2分支语句3.1.3循环语句3.1.4辅助控制语句3.1.1基本语句基本语句主要用于顺序结构程序的编写。在C51语言中,语句的结束符为分号。1.赋值语句在任何合法的赋值表达式的尾部加上一个分号就构成了赋值语句。赋值语句的一般形式为变量=表达式;赋值语句的作用是先计算赋值号右边表达式的值,然后将该值赋给赋值号左边的变量。赋值语句是一种可执行语句,应当出现在函数的可执行部分。在C51语言中,若函数仅进行某些操作而不返回函数值,这时函数的调用可作为一条独立的语句,称为函数调用语句。其一般形式为函数名(实际参数表);2.函数调用语句【例3.1】从键盘输入一个3位整数,将其反向输出。例如,输入127,输出应为721。在C51语言中,把多条语句用一对大括号括起来组成的语句称为复合语句。复合语句又称为“语句块”,其一般格式为{语句1;语句2;…;语句n;}3.复合语句注意:大括号之后不再加分号。复合语句虽然可由多条语句组成,但它是一个整体,相当于一条语句,凡可以使用单一语句的位置都可以使用复合语句。在复合语句内,不仅可以有执行语句,还可以有变量定义(或说明)语句。如果一条语句只有语句结束符号“;”则称为空语句。4.空语句空语句在执行时不产生任何动作,但仍有一定的作用。比如,预留位置或用来作为空循环体。但是,在程序中随意加分号也会导致逻辑上的错误,需要慎用。3.1.2分支语句为了便于理解,图3.2给出一个简单的单片机应用系统。图3.2简单的单片机应用系统1.if语句if语句的一般形式为:if(表达式)语句;其中,if是关键字,表达式两侧的圆括号不可少,最后的语句可以是C51语言任意合法的语句。图3.3给出了if语句的执行过程。可见,if语句是一种单分支语句。【例3.2】基于图3.2,编程实现下列功能:按下K1键,发光二极管全亮;弹起K1键后,发光二极管全灭。图3.3if语句的执行过程2.if-else语句if-else语句的一般形式为:if(表达式)语句1;else语句2;其中,语句1、语句2可以是C51语言中任意合法的语句。注意:else不是一条独立的语句,只是if语句的一部分,在程序中else必须与if配对,共同组成一条if-else语句。【例3.3】基于图3.2,编程实现下列功能:开机后,全部发光二极管不亮。只有当K1键与K2键同时按下,发光二极管才全亮;否则发光二极管全灭。图3.4给出了if-else语句的执行过程。可见,if-else语句是一种二分支语句。图3.4if-else语句的执行过程3.if-else-if语句if-else-if语句的一般形式:if(表达式1)语句1;elseif(表达式2)语句2;else语句3;if-else-if语句又称为嵌套的if-else语句,其中,语句1、语句2、语句3可以是C51语言中任意合法的语句。图3.5给出了if-else-if语句的执行过程。可见,只要一直嵌套下去,if-else-if语句可实现多分支程序设计要求。【例3.4】基于图3.2,编程实现下列功能:分别用按键K1、K2、K3、K4控制发光二极管D0、D1、D2、D3的亮灭。当键按下时点亮对应的发光二极管;当键弹起时熄灭对应的发光二极管。4个按键的优先权从K1到K4依次减小,若4个按键都按下,则只有D0亮。图3.5if-else-if语句的执行过程4.switch语句switch语句的一般形式:switch(表达式){case常量表达式1:语句1;case常量表达式2:语句2;……case常量表达式n:语句n;default:语句n+1;}图3.6给出了switch语句的执行过程。图3.6switch语句的执行过程【例3.5】基于图3.2,编程实现下列功能:开机后,全部LED不亮。D0的亮灭仅受K1键控制,与其他按键无关,即不管其他按键处在什么状态,只要按下K1键就点亮D0,弹起K1键就熄灭D0。同理,要求D1的亮灭仅受K2键控制,D2的亮灭仅受K3键控制,D3的亮灭仅受K4键控制。5.在switch语句中使用break语句break语句又称为间断语句,其作用是使程序的执行立即跳出switch语句,从而使switch语句真正起到分支的作用。为了解决【例3.5】中存在的问题,必须在switch语句中使用break语句,即在每个语句的后面添加一条“break;”语句。使用break语句后,switch语句的一般格式:switch(表达式){case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;}使用break语句后,switch语句的执行过程如图3.7所示。【例3.6】在switch语句中使用break语句,对例3.5进行改写。图3.7使用break语句后switch语句的执行过程3.1.3循环语句在程序设计中经常会遇到需要重复执行的操作,如延时、累加、累乘、数据传递等,利用循环结构来处理各类重复操作既简单又方便。C51语言中提供了3种语句来实现循环结构,分别是while语句、do-while语句和for语句。其中,while语句又称为“当”型循环,do-while语句又称为“直到”型循环。1.while语句while语句的一般形式:while(表达式)循环体其中,“表达式”可以是C51语言中任意合法的表达式,其作用是控制循环体是否执行;“循环体”是循环语句中需要重复执行的部分,可以是一条简单的可执行语句,也可以是用大括号括起来的复合语句。while语句的执行过程如图3.8所示。while语句的特点是:先判断,后执行。(1)要定义循环控制变量。(2)要确定循环变量的初值、终值、增量(步长)。(3)要保证每执行一次循环体,循环控制变量的值按增量向终值靠近一些,即要避免死循环。图3.8while语句的执行过程【例3.7】基于图3.2,编程实现下列功能:开机后,全部发光二极管不亮;按下K1键,D0闪烁;松开K1键,D0停止闪烁并熄灭。while语句的使用注意事项:2.do-while语句do-while语句的一般格式:do循环体while(表达式);其中,“表达式”可以是C51语言中任意合法的表达式,其作用是控制循环体是否执行;“循环体”可以是C51语言中任意合法的可执行语句;最后的“;”不可丢,表示do-while语句结束。do-while语句的执行过程如图3.9所示。do-while语句的特点是:先执行,后判断。【例3.8】基于图3.2编写程序,用do-while语句实现下列功能:开机后,全部发光二极管不亮;按下K1键,D0闪烁;松开K1键,D0停止闪烁并熄灭。图3.9do-while语句的执行过程3.for语句for语句的典型应用形式:for(循环变量初值;循环条件;循环变量增值)循环体for语句的一般形式:for(表达式1;表达式2;表达式3)循环体其中,“表达式1”、“表达式2”、“表达式3”可以是C51语言中任意合法的表达式,3个表达式之间用“;”隔开,其作用是控制循环体是否执行;循环体可以是C51语言中任意合法的可执行语句。for语句的执行过程如图3.10所示。(1)for语句中的表达式可以部分或全部省略,但两个“;”不可省略。例如:for(;;)D0=!D0;3个表达式均被省略,因缺少条件判断,循环将会无限制地执行,形成无限循环(通常称为死循环)。在使用for语句时应注意以下两点:图3.10for语句的执行过程(2)所谓省略,只是在for语句中的省略。实际上是把所需表达式放在for的循环体中或for的语句前面。下面几种for语句的表达方式是等价的。表达方式1(正常情况):sum=0;for(i=1;i=100;i++)sum+=i;表达方式2(省略表达式1):sum=0;i=1;for(;i=100;i++)sum+=i;表达方式3(省略表达式3):sum=0;for(i=1;i=100;){sum+=i;i++;}表达方式4(省略表达式1和表达式3):sum=0;i=1;for(;i=100;){sum+=i;i++;}【例3.9】基于图3.2编程实现下列功能:开机后,全部LED不亮;按下K1键,D0闪烁;松开K1键,D0停止闪烁并熄灭。4.循环的嵌套在编写程序时,嵌套循环的书写要采用缩进形式,使程序层次分明,例如:for(i=1;i=10;i++){//外层循环…for(j=1;j=10;j++){//中层循环…for(k=1;k=10;k++){//内层循环循环语句}…}…}在一个循环体内又完整地包含了另一个循环称为循环嵌套。循环的嵌套可以有多层,但每一层循环在逻辑上必须是完整的。在进行循环嵌套时,应注意以下几点:【例3.10】利用双层循环打印9×9乘法表。(1)内外循环的循环变量不应相同。(2)内外循环不应交叉。(3)只能从循环体内转移到循环体外,反之不行。5.几种循环的比较(1)3种循环可相互替代处理同一问题。(2)do-while循环至少执行一次循环体,而while及for循环则不然。(3)while及do-while循环多用于循环次数不可预知的情况,而for循环多用于循环次数可以预知的情况。3.1.4辅助控制语句在循环过程中,有时不一定要执行完所有的循环后才终止,每次循环也不一定要执行完循环体中的所有语句,可能在一定的条件下跳出循环或进入下一轮循环。为了方便对程序流程的控制,除了前面介绍的流程控制语句外,C51语言还提供了两种辅助控制语句:break和continue语句。1.break语句【例3.11】求其平方数小于100的所有整数。break语句的一般形式:break;break语句的功能是:①终止所在的switch语句;②跳出本层循环体,从而提前结束本层循环。2.continue语句【例3.12】求1~100之间不能被3整除的数。continue语句的一般形式:continue;continue语句的功能是:用于循环体内结束本次循环,接着进行下一次循环的判定。3.2函数3.2.1中断函数3.2.2重入函数3.2.3标准库函数C51语言程序是由一个个函数构成的。所谓函数,是指可以被其他程序调用的具有特定功能的一段相对独立的程序。引入函数的主要目的有两个:一是为了解决代码的重复;二是结构化模块化编程的需要。C51语言中函数定义的一般格式:其中,大括号以外的部分称为函数头;大括号以内的部分称为函数体。如果函数体内无语句,则称之为空函数。空函数不执行任何操作,定义它的目的只是为了以后程序功能的扩充。[return_type]funcname([args])[{small|compact|large}][reentrant][interruptn][usingn]{局部变量定义可执行语句}用C51语言设计程序,就是编写函数。
本文标题:第3章 单片机C51语言程序设计基础
链接地址:https://www.777doc.com/doc-3878927 .html