




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌 入 式 系 统 C51单片机C语言程序设计本章内容:C51语言概述C51数据类型和数据存储类型C51运算符和表达式C51程序结构C51函数【任务导入】 基于C51语言的静态LED显示系统的实现:利用AT89C51单片机的I/O端口驱动两个八段数码管从“00”到“99”流水显示,即通电后,显示“00”,间隔一段时间后,显示“01”,再间隔一段时间后,显示“02”,直到“99”,然后再显示“00”,往复循环。【任务分析】要实现用两个数码管循环显示数字0099的功能,我们可把两个数码管的段选线分别连接到单片机的两组I/O口的共16根I/O口线上,再通过程序让单片机的两组I/O口分时输出09对应的
2、段码就可以了。 C51语言概述1、C语言和C51语言(1)C语言是由早期的BCPL语言发展而来的。1967年,剑桥大学的理查兹(Martin Richards)在对CPL语言进行简化的基础上设计了BCPL(Basic Combined Pogramming Language)语言。 1970年,美国贝尔实验室的汤普森(Ken Thompson)以BCPL语言为基础,设计出简单且接近硬件的B语言 。1972年,美国贝尔实验室的里奇(D. M. Ritchie)又以B语言为基础,最终设计出了C的语言 1978年,美国 电报公司(AT&T)贝尔实验室正式发表了C语言。 1983年,美国国家标准化协会
3、制定了一个C语言标准通常称为ANSI C。ANSI C在被国际标准化组织ISO所接受后,又经过多次修正,形成了目前的C语言标准。(2)C51语言 用C51编写单片机程序时,需要根据单片机存储结构及内部资源定义相应的数据类型和变量,而标准的C语言不需要考虑这些问题。另外,C51包含的数据类型、变量存储模式、输入输出处理、函数等方面与标准的C语言也有一定的区别。其他的语法规则、程序结构及程序设计方法则与标准的C语言相同。 C语言编译调试工具效率高,数据类型及运算符丰富,经过不断完善,能满足单片机的开发要求,形成了单片机C语言。为了和ANSI C区别,把51单片机C语言称为C51语言。 (3)C51
4、特点 编程者不需要了解单片机的指令系统,仅要求对单片 机的存储器结构 有初步的了解,至于存储器的分配、寻址方式及数据类型等完全由编译器管理。 程序有规范化的结构,可以分为不同的函数,这种方式可以使程序结构化,将可变的选择与特殊操作组合在一起,增强程序的可读性。 编程和程序的调试时间显著缩短,从而提高了编程的效率,提供的库函数包含许多标准的子程序,具有较强的数据处理能力,可以将编好的程序很容易地移植到新程序。 C51作为一种非常方便的语言得到了广泛的支持,目前已经成为单片机开发的主要编程语言。简单C51程序介绍【例1】 如图1所示,在口上接有一个LED发光二极管,要求让发光二极管发光。图1 接有
5、LED的单片机基本电路 #include sbit P1_0=P10;void main( ) P1_0=0;while(1);程序如下:程序的开始是一个文件包含处理。这段程序中包含的是文件,以.h为后缀的称为头文件,该头文件的作用是把特殊功能寄存器中的符号和地址对应起来,这里主要是应用到P1这个符号,如果没有包含文件,C51编译器不知道P1具体指什么,在编译过程中就会发生错误。给取名为P1_0,是通过编译器中增加的关键字sbit来定义的 程序最后是主函数,每一个C51程序有且只有一个主函数,函数后面使用一对大括号“”,在“”中书写具体内容。【例2】 如图1所示,要求口上接的LED发光二极管能
6、闪烁发光。#include #define uchar unsigned char#define uint unsigned intsbit P1_0=P10;void Mdelay (uint Delay); /* 被调函数申明*/void main(void ) for(;) P1_0=!P1_0; / 对P1_0取反 Mdelay(1000); void Mdelay (uint Delay)/ 延时子程序,由Delay参数确定延时时间 uchar i; for( ;Delay0; Delay-) for (i=0; i124;i+) ; 与上例相同宏定义,即用一个指定的标识符来代替一个
7、字符串,如第二行用uchar来代替unsigned char; 函数申明,如果被调函数在主调函数后面,一般需要声明 小结(1) C51程序和C程序一样,也是由函数构成的。一个C51程序至有且只有一个main函数,可以有零个或多个其他函数,因此函数是C51程序的基本单位。main函数可以直接书写语句或者调用其他函数来实现功能,被调用的函数可以是编译器提供的库函数,也可以是用户根据需要编写的函数(如例中的Mdelay函数)。使用Keil C编写的任何程序都可以直接调用其提供的库函数,调用时只需要包含具有该函数的头文件即可。Keil C提供了100多个库函数供用户直接使用。(2) 一个函数由以下两部
8、分组成。 函数的首部,包括函数名、函数类型、函数参数名、参数类型。如例中Mdelay函数的首部为void Mdelay (uint Delay) 函数类型 函数名 参数类型 参数名 函数体,即函数首部下面大括号里的内容。(3) 一个C51程序从main函数开始执行,不管main函数在什么位置。(4) C51中字母区分大小写,如定义是sbit P1_0=P10,若后面写成P1_0,在编译时就会出现错误。(5) C51书写自由,一行可以写几个语句,一个语句也能写在几行上。(6) 每个语句必须以分号结束。(7) C51中的注释可以采用两种符号。第一种是“/*/”符号,从“/*”开始直到“*/”为止,
9、中间的内容都是注释。第二种是“/”引导的注释语句,这种注释只对本行有效。2 C51数据类型和数据存储类型 2.1 常量与变量1、常量和符号常量 在程序运行过程中,其值不能改变的量称为常量,如10、0、0 x45等。常量一般从字面形式即可以判断,这样的常量称为字面常量或者直接常量。 常量也可以用一个标识符来表示,称之为符号常量。【例3】 如图1所示,要求点亮口上接的LED灯。程序如下。#define LIGHT 0 xfe#include void main( ) P1=LIGHT;while(1);定义符号常量LIGHT,在以后的程序中出现的所有LIGHT,实际上都是指0 xfe 使用符号常量
10、的优点如下: (1) 含义清楚。如上面程序中,从LIGHT就知道它代表灯亮,因此定义符号常量时,应考虑“见名知意”。在一个规范的C51程序中不提倡使用很多直接常量。如若定义sum=10+20+30,则在检查程序时往往会搞不清楚各个常数代表什么含义。(2) 在需要改变一个量时,可以做到一改全改。如#define PORTA 0 x7fff,在程序中要使用端口0 x7fff,可以用PORTA来代替,如果端口地址发生变化,变成0 x3fff,只要把定义语句改为#define PORTA 0 x3fff就行了。 变量值可以改变的量称为变量。 图2 变量2.2 整型数据1、整型常量的表示方法2、整型变量
11、 整型常量即整常数,包括正整数、负整数和0,不能是小数。 可以是十进制、八进制(以0开头)和十六进制(以0 x开头)。 整型变量的基本类型是int,可以根据数值的范围将变量定义为基本整型、短整型或长整型,在int之前分别加上修饰符:short(短整型)或long(长整型)。在实际应用中,变量的值常常是正的(如年龄、学号等),为了充分利用变量的表数范围,可以将上面的三类定义成无符号型,即对以上三类分别加上修饰符unsigned。 表4-1 整型变量的数据类型类 型字 节 数数值范围int2-215215-1unsigned int20216-1short int2-215215-1unsigne
12、d short int20216-1long int4-231231-1unsigned long int40232-1 C51中变量必须先定义才能使用,定义整型变量的方式为 修饰符 变量名 例如:int a; /定义一个整型变量a unsigned int a1,a2;/定义两个整型变量a1,a2 long b; /定义一个长整型变量b unsigned long b1,b2; /定义两个长整型变量b1,b22.3 实型数据1、实型常量的表示方法2实型变量实数又称为浮点数,实数有以下两种表示形式。(1)、十进制小数形式。由数字和小数点组成,如、等。(2)、指数形式。如34e2或34E2都代表
13、34102。 标准C语言中的实型变量分为单精度(float)、双精度(double)和长双精度(long double)三种,但Keil C不支持后两种,所以这里不做介绍。 float型占用4个字节,能提供的有效数字是有限的,在有效位以外的数字会被舍去 。C51中实型数的使用应该注意以下几点:(1)、在8位单片机中一般不要使用实型数,这样会降低程序的运行速度,增加程序的长度。(2)、程序中如果确实用到了实型数,一般不是因为要使用小数点,而是因为用其他类型的变量范围不够大。(3)、很多时候,可以用长整型来代替实型。2.4 字符型数据1、字符型常量的表示方法 C51中字符型常量是用单引号括起来的一
14、个字符,如a、x、? 等都是字符型常量。C51还允许一些特殊形式的字符型常量,就是以一个“”开头的字符序列。 表2 转义字符及其含义字符形式含 义ASCII代码n换行,将当前位置移到下一行开头10t水平制表,跳到下一个Tab位置9b退格,将当前位置移到前一列8r回车,将当前位置移到本行开头13f换页,将当前位置移到下页开头12反斜杠符“”92单引号字符39双引号字符34ddd13位八进制数代表的字符xhh12位十六进制数代表的字符2、字符型变量的表示方法 字符型变量用来存放字符常量,一个字符型变量只能存放一个字符。字符型变量的定义形式为: char 变量名 如:char a; 表示定义了一个字
15、符型变量a,a中可以存放一个字符,可以用下面的赋值语句给a赋值: a=c; 定义一个字符型变量,系统会为其分配一个字节的存储空间,实际上,给字符型变量赋值后,并不是存储字符型变量本身,而是存储该字符型变量的ASCII码,如上面是将c的ASCII码99存储在a中。由于ASCII码也一定是整数,字符型变量可以和前面所叙述的整型变量一样,通过整型数据来赋值,如: char a=99;2.5 数组类型1、一维数组的定义 数组的维数是指表示数组使用的下标个数,如果数组中每个元素只带有一个下标,称这样的数组为一维数组。一维数组的定义形式为:类型说明符 数组名常量表达式;如: int a4;2、一维数组的引
16、用 C51中,一个数组不能整体应用,数组名是一个地址常量,不能对其赋值,只能使用数组中的元素。方法如下: 数组名下标 下标可以是整型变量或整型表达式,如a0、ai(i是一个整型变量)。3、一维数组的初始化(1)、在定义数组时对数组元素初始化,如: int a4=1,2,3,4; 经过初始化后,a0=1、a1=2、a2=3、a3=4。(2)、可以只给一部分元素赋值,如: int a4=1,2; 经过初始化后,a0=1、a1=2、a2=0、a3=0。(3)、对全部数组元素赋值时,可以不指定数组长度。如: “int a4=1,2,3,4;”可以写成“int a=1,2,3,4;”。4、字符数组 字符
17、数组是指数组中元素的数据类型是字符类型的一维数组。字符数组引用、初始化的方法都与一维数组相同,只是要注意字符数组的元素是字符,有特殊的字面表示格式。 字符数组初始化的方法也和一维数组相同。如: char s5=1, 2, 3, 4, 5; char s5= 1, 2; char s=1, 2, 3, 4, 5; 2.6 指针类型 指针的含义是地址,所谓变量的指针就是指变量的地址,定义指针类型的变量实际上是定义一种用来存储地址的变量。单片机中存储器的地址有两种 一种是由8位二进制数(1字节)来表示的地址,如内部数据存储器 。还有一种是由16位二进制数(2字节)来表示的地址,如程序存储器、外部数据
18、存储器等。 1、基于存储器的指针类型 所谓基于存储器的指针类型是指在定义指针变量时,就确定好它存储的是什么地方变量的地址,如是在内部数据存储器,还是外部数据存储器,或者是程序存储器,这样,这些指针的长度就可以具体确定(1字节或2字节)。 具体定义为: char xdata *ptr;(1)、定义指针类型变量时,在变量名前加“*”,变量名取名规则和前面一般变量相同。(2)、xdata 是指ptr里存储的是定义在外部数据存储器里变量的地址,所以ptr占2个字节。 2、一般指针类型 一般指针包括3字节,其中的2字节用于存储地址,另外1字节用于存储类型,如表4-3所示。表3 一般指针构成地 址第1字节
19、第2字节第3字节内 容存储器类型地址高8位地址低8位 其中第1字节表示存储器类型,存储器类型编码如表4-4所示。 表4 一般指针存储器类型存储器类型内部数据存储器外部数据存储器外部数据存器一个页面(256字节)内部数据存储器程序存储器值12345 如一个一般指针指向地址为0 x1234的外部数据存储器时,其指针】值如表4-5所示。 表5 指向外部数据存储器的指针值地 址第1字节第2字节第3字节内 容0 x020 x120 x342.7 Keil C51中特有的数据类型1、位型变量 位型变量实际是定义一个二进制位来存储数据,其值有“0”和“1”两种。定义形式如下: bit 变量名;如: bit
20、flag;/定义一个位变量flag使用位变量时还要注意以下几点。(1)、不能定义位型数组。(2)、不能定义位型指针。2、sfr型数据 8051单片机内部的特殊功能寄存器并不能直接被C51所接受,为了定义这些特殊功能寄存器,增加了sfr、sfr16、sbit这3个关键词。(1)、sfr是定义特殊功能寄存器和其地址的对应关系,其用法为 sfr 变量名=地址值;(2)、在特殊功能寄存器中,有一些是由两个地址连续的8位寄存器组成,如DPTR是由DPH和DPL组成,可以分开定义这两个特殊功能寄存器,也可以用sfr16来定义,如: sfr16 DPTR=0 x82;(3)、sbit是定义特殊功能寄存器中可
21、以位寻址的相应位,sbit的用法有以下三种。 bit 位变量名=地址值; sbit 位变量名=SFR名称变量位地址值; sbit 位变量名=SFR地址变量位地址值;2.8 数据的存储类型表6 C51存储类型与8051存储空间的对应关系存 储 区描 述data片内RAM的低128字节,可在一个周期内直接寻址bdata片内RAM的位寻址区,16字节idata片内RAM的256字节,必须采用间接寻址xdata外部数据存储区,使用DPTR间接寻址pdata外部存储区的256字节,通过P0口的地址对其寻址。使用MOVX Ri,需要两个指令周期code程序存储区,使用DPTR寻址3 运算符和表达式3.1
22、算术运算符和算术表达式 (1)、+ 加法运算符,如4+3。(2)、- 减法运算符,如5-3。(3)、* 乘法运算符,如5*8。(4)、/ 除法运算符,如10/3。(5)、% 求模运算符或取余运算符,“%”两侧应该都为整型数据,如10%3。 需要说明,基本的算术运算符都是双目运算符,即需要两个操作数;对于“/”,若两个整数相除,结果为整数,如有小数自动舍去(注意不是四舍五入),如10/3,结果是3,而不是,如果需要得到真实结果,需要写成。1、基本的算术运算符(1)、+ 自增运算符。(2)、- 自减运算符。 需要说明,+和-是单目运算符;+和-只能用于变量,不能用与常量和表达式;+j 先自增,再使
23、用,j+ 先使用,后自增,如: a=2;b=+a; 结果是b=3,a=3。 a=2;b=a+; 结果是b=2,a=3。2、自增/自减运算符 用算术运算符和括号将操作数(运算对象)连接起来,形成符合C51语法规则的表达式,称为算术表达式,操作数包括常量、变量、函数等,如a*b+(5-c/3)。 C51规定了运算符的优先性和结合性,在表达式求值的时候,先按运算符的优先性运算,如先乘除求余,再运算加减,如a-b*c,b的左侧是减号,右侧是乘号,乘号的优先性大于减号,因此,相当于a-(b*c)。如果在一个表达式中前后运算符的优先性相同,则按规定的结合方向处理,C51规定了算术运算符的方向是自左向右,如
24、a+b-c,应先执行a+b的运算,再与c相减。3、算术表达式和运算符的优先性与结合性4、各类数值性数据间的混合运算 C51中,整型数据、字符型数据、实型数据都可以进行混合运算,转换规则如图3所示。图3 数据类型转换3.2 赋值运算符和赋值表达式1、赋值运算符 符号“=”为赋值运算符,其作用是将一个数据赋给一个变量,如x=5的作用是将常数5赋给变量x。也可以将一个表达式的值赋给变量,如x=5+y。2、类型转换 赋值运算符的两侧如果类型不一样,也是可以赋值的,但赋值时需要进行数据类型转换, 3赋值表达式赋值表达式的一般形式为变量 赋值运算符 表达式如a=5、a=5+6、a=b=5等都是赋值表达式。
25、注意:赋值运算符的优先性低于算术运算符。3.3 逗号运算符和逗号表达式 在C51中,多个表达式可以用逗号分开,如3+5,5+6,7+8,其中的逗号称为逗号运算符,由逗号运算符组成的表达式称为逗号表达式,其一般形式为表达式1,表达式2,表达式n 逗号表达式的求解过程是:先求表达式1,再求表达式2,直到最后一个表达式,但整个表达式的值是最后一个表达式的值。如3+5,5+6,7+8逗号表达式的值为15 注意:逗号运算符的优先性低于赋值运算符。3.4 关系运算符和关系表达式1、关系运算符C51中提供了以下6种关系运算符。(1) 小于。(2) 大于。(4)= 大于等于。(5)= 等于。(6)!= 不等于
26、。优先性的次序如下:(1)、前4种关系运算符(、=)的优先性相同,后2种(=、!=)的优先性也相同,前4种的优先性高于后2种。(2)、关系运算符的优先性低于算术运算符。(3)、关系运算符的优先性高于赋值运算符。2、关系表达式 用关系运算符将两个表达式连接起来的式子称为关系表达式,如:ab、a+bb+c、a!=b。 关系表达式的值只有两种:“真”和“假”。在C51中,运算结果如果是“真”,则用数值“1”表示;运算结果如果是“假”,则用“0”表示。3.5 逻辑运算符和逻辑表达式1逻辑运算符C51提供了以下3种逻辑运算符。(1)& 逻辑与。(2)| 逻辑或。(3)! 逻辑非。“!”的优先性高于算术运
27、算符,而“&”和“|”的优先性相同,处于关系运算符和赋值运算符之间。2、逻辑表达式 用逻辑运算符将两个表达式连接起来的式子称为逻辑表达式,逻辑表达式的运算结果用“1”表示“真”,用“0”表示“假”。但在判断一个量是否为“真”时,以0代表“假”,而以非0代表“真”,如(1)若a=5,!a的值为0;若a=-2,结果也一样。(2)若a=5、b=8,则a&b的值为1;若a=0、b=8,则a&b的值为0。 3.6 位操作运算符和表达式 C51提供了如下的位操作运算符。(1)& 按位与。(2)| 按位或。(3) 按位异或。(4) 按位取反。(5) 位右移。 4 C51程序结构 在结构上可以把C51程序分为
28、3类,即顺序结构、选择结构和循环结构。4.1 顺序结构 顺序结构是一种最基本、最简单的编程结构,在这种结构下,程序按低地址向高地址顺序执行指令代码,下面通过一个例子来熟悉C51的顺序结构。【例5】 求两个数的和。 定义两个变量,先对其进行赋值,再求出两个数的和,程序代码如下。 main( ) int a, b, sum; a=3; b=2;sum=a+b;4.2 选择结构1、if语句(1)if(表达式) 语句如果表达式为“真”,则执行语句,否则执行if语句后面的语句,如: if (a5) b=3;(2)if(表达式) 语句1 else 语句2 如果表达式为“真”,则执行语句1,否则执行语句2,
29、如: if (a10) b=1;else if (a6) b=2;else if (a2) b=3;else b=4;【例6】 电路如图5所示。要求:通电初始,灯全灭;按住K1,8个LED灯全亮;松开K1,灯全灭。图5 带8个LED灯和2个按钮的单片机电路程序如下:#include reg51.hvoid main( ) P1=0 xff; / 把P1口全部置1,8个灯灭 for(; ;) P3=P3|0 x01; / 把口置1 if (P3&0 x01)=0) / 判断K1是否按下 P1=0 x00; / K1按下后,点亮全部灯 else P1=0 xff; / K1松开后,熄灭全部灯 2、
30、if语句的嵌套if(表达式1) if (表达式2) 语句1 else 语句2else if (表达式3) 语句3 else 语句4使用if嵌套语句特别要注意if和else配对,else总是和最近的if配对 3、条件运算符 可以用max=(ab)? a:b来表示。其中(ab)? a:b为条件表达式,执行过程是:如果(ab)为“真”,表达式的值为a;如果(ab)为“假”,表达式的值为b。条件运算符的一般格式为:表达式1?表达式2:表达式3如:if (ab) max=a; else max=b;4、switch语句 实际问题中,往往遇到以一个变量或表达式的值为判断条件,将此变量或表达式的值分成几段,
31、每一段对应一种选择或操作,这种情况用if语句来嵌套非常麻烦,于是,C51提供了switch语句。 switch语句的一般结构如下:switch (表达式) case 常量表达式1:语句1,break; case 常量表达式2:语句2,break; case 常量表达式n:语句n,break; default:语句n+1,break;说明:(1)、switch语句后面的表达式可以是任何类型。 、若表达式的值与某一个case后面的常量表达式值相同,就 开始执行其后面的语句;如果没有一个case后面的常量表 达式值与表达式值相同,则执行default后面的语句。(3)、每一个case后面的常量表达式
32、值必须不同。、执行完一个case后面的语句后,系统并不跳出,而是执行 后面的case语句,直到结束。如果需要执行完当前case语 句后,系统就跳出,需要在后面加break,如: case 常量表达式:语句;break;4.3 循环结构构成循环结构的主要有while、do-while和for等语句。 1、while 循环语句while语句的一般表达形式为:while (表达式) 语句当表达式的判断为“真”时,执行大括号内的语句,否则不执行。2、do-while 循环语句 do-while语句是先执行循环体,然后判断循环条件是否成立,其一般形式为: do 语句 while(表达式); while和
33、do-while语句虽然都是循环语句,但是两者是有区别的,do-while语句不管条件是否成立,至少都会执行一次循环体;而while语句,如果条件不成立,则不会执行循环体。 3、for 循环语句for语句的一般形式为:for(表达式1;表达式2;表达式3)语句for循环语句的执行过程如下。(1)先求解表达式1。(2)求解表达式2,如果结果为“真”,即条件成立,则执行循环体语句;如果结果为“假”,转到第(5)步。(3)求解表达式3。(4)转回第(2)步。(5)退出for循环语句,执行下面的语句。for循环中有几种特例,分析如下。(1)表达式1可以没有,但其分号不能省略。(2)表达式2也可以没有,
34、同样分号不能省略,这样认为条件永远满足。(3)表达式3也可以省略。(4)如果三个表达式都省略,即for(; ;),它的作用相当于while(1),构成了一个无限循环的过程。4、break语句和continue语句 在一个循环语句中,可以通过判断条件来退出循环,也可以通过break语句来强制退出循环。 continue语句用于结束本次循环,即跳过循环体下面的语句,而直接进行下一次是否循环的判断。【例11】 电路如图5所示。要求:开机后,全部灯不亮;按下K1后,则从VD1开始依次点亮,至VD8后停止并全部熄灭;待再次按下K1,重复上面过程;如果中间K2被按下,则灯立即全部熄灭,并返回初始状态。#i
35、nclude reg51.h#include intrins.hvoid Delay( unsigned int delaytime)/ 延时子程序 unsigned char i; for( ; delaytime0;delaytime-) for( i=0; i=124; i+);void main( )unsigned char light=0 xfe; unsigned char i; for(;) P3=P3|0 x03; if (P3&0 x01)= =0) for(i=0;i=7;i+) light=0 xfe; Delay(1000); if (P3&0 x02)= =0) b
36、reak; light=_crol_(light, i); P1=light; P1=0 xff;5 C51函数5.1 函数的定义 一个完整的C51程序可由一个主函数和若干个子函数组成,由主函数调用子函数,子函数之间也可以互相调用,同一个函数可以被一个或多个函数调用任意次。 从函数的形式上划分,函数有无参函数和有参函数两种形式,下面分别讨论两种函数的定义方法。1、无参函数的定义 无参函数的定义形式为: 类型标识符 函数名(void) 函数体 类型标识符是指定函数返回值的类型,如果函数没有返回值,则可以定义“void”类型,函数名的取名规则和变量的取名规则一样。2、有参函数的定义有参函数的定义形
37、式为类型标识符 函数名(形式参数列表) 函数体 3、函数参数传递 函数之间参数的传递由函数调用时主调函数的实际参数(简称实参)和被调函数的形式参数(简称形参)之间的数据传递完成。所谓的实际参数是指调用时函数名后面括号里的表达式,其个数和被调函数的形式参数个数一致,以int max (int x, int y)为例,定义的形式参数有x和y两个,当主调函数调用时,将会写成如下形式: a=max(5,9); a是假设主调函数中的一个变量,5和9是实际参数,在调用时,把5赋给x、9赋给y。5.2 函数的调用1、函数的调用形式函数调用的一般形式为函数名(实参列表)函数在调用时一般有三种调用方式。(1)、
38、把函数作为一个语句,如: Delay(); 这时不要求函数有返回值,只要求函数完成一定的功能操作。、函数在一个表达式中,出现函数表达式,这要求函数带回 一个确定的值以参加表达式的运算。(3)、函数作为参数调用,如: c=max(a,max(b,c); max(b,c)的返回值是作为外部max的一个参数。2调用函数的声明和函数原型在一个函数中调用另一个函数必须同时具备以下一些条件。(1)、被调函数一定存在,可以自己编写,也可以是库函数。(2)、如果是库函数,一般应在文件开头用#include命令将调用库函数时所用到的信息包含到文件中。(3)、如果使用用户自定义的函数,而且该函数与调用它的函数(主
39、调函数)在同一文件中,一般还应该在主调函数中对被调用的函数做声明。函数原型的一般形式有以下两种。(1)、函数类型 函数名(参数类型1,参数类型2,)(2)、函数类型 函数名(参数类型1 参数名1,参数类型2 参数名2,)注意:如果被调函数在主调函数的后面,可以不用声明。 5.3 局部变量和全局变量 一个C51程序中的变量可以仅在一个函数中使用,也可以在所有的函数中使用,这就要引入局部变量和全局变量的概念。1局部变量 在一个函数内部定义的变量称为局部变量,它只在这个函数内有效。 2全局变量 一个源文件可以包含一个函数或若干个函数,在函数之外定义的变量称为全局变量,全局变量在本文件的任何函数中都可以使用 。库函数介绍1函数名_crol_2函数名_cror_3函数名_irol_4函数名_iror_5函数名_lrol_6函数名_lror_7函数名_nop_8函数名 _testbit_5.5 中断程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 语文-陕西省安康市2025届高三下学期第二次质量联考(安康二模)试题和答案
- 临漳门楼施工方案
- 楼顶装修电梯施工方案
- 2025年北京平谷区高三一模数学试题答案详解
- boot项目合同范本
- 公益林合同范例
- 建立行业合作提升竞争力计划
- 急诊护理质量提升行动计划
- 基础心理学知识培训课件
- 学校班主任的性别教育引导策略计划
- 认识DS3自动安平水准仪
- 《语文课程标准》义务教育2022年修订版【原版】
- 某大酒店弱电智能化系统清单报价
- 医院传染病登记簿
- GB/T 30490-2014天然气自动取样方法
- GB/T 17313-2009袋成型-充填-封口机通用技术条件
- 学习中国人民解放军新一代共同条令PPT模板
- 二轮 河流专题(精心)
- 11471劳动争议处理(第3章)
- 食堂工作人员安全培训内容资料
- 患者跌倒的预防及管理课件
评论
0/150
提交评论