08 第八讲 C语言函数与预处理--力天手把手教你学单片机之基础篇四

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验题
设计C语言程序,求2~20的累加和,并将运算结果显示在流水灯上。 设计C语言程序,实现以下现象:板上流水灯显示的8位二进制数每隔1秒 自增1,从0开始增至255时,下一个数变回0继续自增。
主讲人:尹延辉
版权:力天电子
www.LT430.com
新语新知 ——C函数概述
一个较大的程序一般应分为若干个程序 模块,每一个模块用来实现一个特定的 功能。所有的高级语言中都有子程序这 个概念,用子程序实现模块的功能。在 C语言中,子程序的作用是由函数完成 的。一个C程序可由一个主函数和若干 个函数构成。由主函数调用其他函数, 其他函数也可以互相调用。同一个函数 可以被一个或多个函数调用任意多次。 图1是一个程序中函数调用的示意图。 在程序设计中,常将一些常用的功能模 块编写成函数,放在函数库中供公共选 用。要善于利用函数,以减少重复编写 程序段的工作量。
主讲人:尹延辉
版权:力天电子
www.LT430.com
新语新知 ——局部变量和全局变量
局部变量
在一个函数内部定义的变量是内部变量,它只在本函数范围内有 效,也就是说只有在本函数内才能使用它们,在此函数以外是不 能使用这些变量的。这称为“局部变量”。例如如果在main函数 中使用变量x或y会提示未定义的变量。几点说明: 主函数main中定义的变量a,b也只在主函数中有效,而不因为在 主函数中定义而在整个文件或程序中有效。 不同函数中可以使用相同名字的变量,它们代表不同的对象,互不干 扰。 形式参数也是局部变量。例如max函数中的形参x,y,也只在 max函数中有效,其他函数不能调用。



主讲人:尹延辉
版权:力天电子
www.LT430.com
新语新知 ——局部变量和全局变量
全局变量
前已介绍,程序的编 译单位是源程序文件, 一个源文件可以包含一 个或若干个函数。在函 数内定义的变量是局部 变量,而在函数之外定 义的变量称为外部变量 ,外部变量是全局变量 (也称全程变量)。全局 变量可以为本文件中其 他函数所共用。它的有 效范围为 从定义变量的
主讲人:尹延辉
版权:力天电子
www.LT430.com
ຫໍສະໝຸດ Baidu
新语新知 ——函数参数和函数的值
形式参数和实际参数
在调用函数时,大多数情况下 ,主调函数和被调用函数之间 有数据传递关系。这就是前面 提到的有参函数。前面已提到 :在定义函数时函数名后面括 弧中的变量名称为“形式参数 ”(简称“形参”),在主调 函数中调用一个函数时,函数 名后面括弧中的参数(可以是一 个表达式)称为“实际参数”( 简称“实参”)。 main() { int a=4 , b=6 , c; c=max(a,b); P0=c; while(1); }
main
a
b
c
d
e
f
g
g
h

e
h
图1
版权:力天电子
主讲人:尹延辉
www.LT430.com
新语新知 ——C函数概述
C函数调用举例
1. void main(void) 2. { 3. LED_BIT = 1;//74HC573的L引脚置高电平,使其处于 直通状态 4. P0 = 0xff;//8位流水灯全亮 5. delay_1s();//延时1秒 6. P0 = 0x00;//8位流水灯全灭 7. delay_1s();//延时1秒 8. P0 = 0xff;//8位流水灯全亮 9. while(1);//条件总为真,死循环 10. }
主讲人:尹延辉
www.LT430.com
新语新知 ——函数定义的一般形式
有参函数的定义形式
类型标识符 函数名(形式参数列表)
{
声明部分 语句
}
char max(char x,char y) { char z;//声明部分 if(x>y) z=x; else z=y; return(z); }
主讲人:尹延辉
版权:力天电子
www.LT430.com
新语新知 ——函数定义的一般形式
这是一个求x和y二者中大者的函数,笫1行第一个关键字char表 示函数值是字符型的。max为函数名。括号中有两个形式参数x和 y,它们都是字符型的。在调用此函数时,主调函数把实际参数的 值传递给被调用函数中的形式参数x和y。花括弧内是函数体,它 包括声明部分和语句部分。在声明部分定义所用的变量,此外对 将要调用的函数作声明在函数体的语句中求出z的值(为x与y中大 者),return(z)的作用是将z的值作为函数值带回到主调函数中 。return后面的括弧中的值(z)作为函数带回的值(或称函数返回 值)。在函数定义时已指定max函数为整型,在函数体中定义z为 整型,二者是一致的,将z作为函数max的值带回调用函数。
② ①
6. 从函数的形式看,函数分两类:

主讲人:尹延辉
版权:力天电子
www.LT430.com
新语新知 ——函数定义的一般形式
无参函数的定义形式
类型标识符 函数名()
{
声明部分 语句
} 例1中的delay_1s函数就是无参函数。用“类型标识符”指定函 数值的类型,即函数带回来的值的类型。此函数不需要带回函数 值,因此可以不写类型标识符。 版权:力天电子
主讲人:尹延辉
版权:力天电子
www.LT430.com
新语新知 ——函数参数和函数的值
形式参数和实际参数
max后面括弧内的a、b是实参。a和b是main函数中定义的变量 ,x和y是函数max中的形式参数。通过函数调用,使两个函数中 的数据发生联系。
c=max(a,b);


实 参 可 以 是常 量、 变 量 char max(char x, char y) 或表达式,如: { char z;//声明部分 max(3,a+b); if(x>y) z=x; 但 要 求 它 们有 确 定 的 值 else z=y; 。 在 调 用 时将 实 参 的 值 return(z); 赋给形参。 }
手把手教你学51单片机
——之MCS-51基础篇
主 策 讲: 尹延辉 划:张 勇
开发板:LT-Super51
QQ群:31646346 网址:www.lt430.com E-Mail:litianmcu@qq.com litianmcu@foxmail.com
基础篇 第四讲 ——C语言函数与预处理
本讲内容提要
a=2
值传送
b=3 y=3
形参改变
a=2 x=10
b=3 y=15
版权:力天电子
实参不改变
x=2
主讲人:尹延辉
www.LT430.com
新语新知 ——函数参数和函数的值
函数的返回值
通常,希望通过函数调用使主调函数能得到一个确定的值,这就 是函数的返回值。例如,max(2,3)的值是3,max(5,2)的值是5 。赋值语句将这个函数值赋给变量c。几点说明: 1. 函数的返回值是通过函数中的return语句获得的。return语句将 被调用函数中的一个确定值带回主调函数中去。一个函数中可以 有一个以上的return语句,执行到哪一个return语句,哪一个语 句起作用。 2. 如果函数值的类型和return语句中表达式的值不一致,则以函数 类型为准。对数值型数据,可以自动进行类型转换。即函数类型 决定返回值的类型。 3. 为了明确表示“不带回值”,可以用“void”定义“无类型”(或 称“空类型”)。
版权:力天电子
主讲人:尹延辉
www.LT430.com
释疑解惑 ——C的三种语句结构
填空题
C语言三种基本的语句结构分别是顺序结构、选择结构、循环结构。 两种基本的选择结构语句分别是基于if语句和switch...case语句。 三种最常用的循环结构语句分别是while语句、do...while语句、for语句 。 有char a=„a‟;则以下逻辑表达式的结果分别是(真、假):a>‟b‟ 假;a>‟B‟ 真;(a>‟0‟)&&(a<„A‟) 假;(a>‟0‟)||(a<„A‟) 真.
版权:力天电子
主讲人:尹延辉
www.LT430.com
新语新知 ——函数参数和函数的值
形式参数和实际参数
C语言规定,实参变量对形参变量的数据传递都是“值传递”,即 单向传递,只由实参传给形参,而不能由形参传回来给实参。 在调用函数时,给形参分配存储单元,并将实参对应的值传递给 形参,调用结束后,形参单元被释放,实参单元仍保留并维持原 值。因此,在执行一个被调用函数时,形参的值如果发生改变, 并不会改变主调函数的实参的值。例如,若在执行函数过程中x和 y的值变为10和15,而a和b仍为2和3
主讲人:尹延辉
版权:力天电子
www.LT430.com
温故知新 ——C的三种语句结构

• • • •
C语句概述 C语句用于实现数据操作,控制语句、函数调用语句、表达式语 句等等 程序的三种基本结构 顺序结构、选择结构、循环结构,此三种之组合可以处理任何复 杂问题 顺序结构程序设计 按顺序执行一系列的语句 选择结构程序设计 通过判断条件真假(非0,0)决定程序的走向。if与switch结构 循环结构程序设计 while、do...while、for三种形式的循环结构
全局变量 c1,c2 作用范围
位置开始到本源文件结 } 束。

主讲人:尹延辉
版权:力天电子
www.LT430.com
新语新知 ——局部变量和全局变量
全局变量的若干注意事项
1. 设全局变量的作用是增加了函数间数据联系的渠道。由于同一文 件中的所有函数都能引用全局变量的值,因此如果在一个函数中改变 了全局变量的值,就能影响到其他函数,相当于各个函数间有直接的 传递通道。由于函数的调用只能带回一个返回值,因此有时可以利用 全局变量增加与函数联系的渠道,从函数得到一个以上的返回值。 2. 建议不在必要时不要使用全局变量,因为: ① 全局变量在程序的全部执行过程中都占用存储单元,而不是仅在 需要时才开辟单元。 ② 它使函数的通用性降低了,因为函数在执行时要依赖于其所在的 外部变量。如果将一个函数移到另一个文件中,还要将有关的外部变 量及其值一起移过去。但若该外部变量与其他文件的变量同名时,就 会出现问题,降低了程序的可靠性和通用性。
主讲人:尹延辉
版权:力天电子
www.LT430.com
新语新知 ——C函数概述
关于C函数的6点说明
1. 2. 一个源程序文件由一个或多个函数组成。一个源程序文件是一个编译单位 ,即以源程序为单位进行编译,而不是以函数为单位进行编译。 一个C程序由一个或多个源程序文件组成。对较大的程序,一般不希望全 放在一个文件中,而将函数和其他内容(如预定义)分别放在若干个源文 件中,再由若干源文件组成一个C程序。这样可以分别编写、分别编译, 提高调度效率。一个源文件可以为多个C程序公用。 C程序的执行从main函数开始,调用其他函数后流程回到main函数,在 main函数中结束整个程序的运行。main函数是系统定义的。 所有函数都是平行的,即在定义函数时是互相独立的,一个函数并不从属 于另一函数,即函数不能嵌套定义,函数间可以互相调用,但不能调用 main函数。
概述 函数定义的一般形式 函数参数和函数的值 局部变量和全局变量 预处理命令概述 宏定义 条件编译 文件包含 多文件的程序
c=max(a,b); char max(char x, char y) { char z; if(x>y) z=x; else z=y; return(z); }
3. 4.
主讲人:尹延辉
版权:力天电子
www.LT430.com
新语新知 ——C函数概述
关于C函数的6点说明
5. 从用户使用的角度看,函数有两种:
① 标准函数,即库函数。这是由系统提供的,用户不必自己定义这些函数,可以直接 使用它们。应该说明,不同的C系统提供的库函数的数量和功能不同,当然有一些 基本的函数是共同的。 用户自己定义的函数。用以解决用户的专门需要。 无参函数。如例1中的printstar和print-message就是无参函数。在调用无参函 数时,主调函数并不将数据传送给被调用函数,一般用来执行指定的一组操作(例 如,例8.1那样),printstar函数的作用是输出18个星号。无参函数可以带回或 不带回函数值,但一般以不带回函数值的居多。 有参函数。在调用函数时,在主调函数和被调用函数之间有数据传递。也就是说, 主调函数可以将数据传给被调用函数使用,被调用函数中的数据也可以带回来供主 调函数使用。
int p=1,q=5;//全局变量 int f1(int a)//定义函数f1 { int b,c; } char c1,c2;//全局变量 char f2 (int x, int y)//定义函数f2 { int i,j; } main ( )//主函数 { int m,n;


全局变量 p,q 作用范围
相关文档
最新文档