




已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
21天学51单片机开发,第十讲:C51的函数,课程安排,函数函数的声明函数的参数和返回值函数的调用作用域C51常用库函数,函数,C51可以自定义任意多个函数。C51程序从main主函数开始执行。C51的编译环境提供了多种库函数供用户使用。合理使用函数来设计程序,可以有利于代码的模块化,促进团队协作和资源共享。,函数注意事项,在使用C51语言函数时,需要注意如下几点:在C51程序中,由main主函数调用其他函数。C51语言的源程序中的函数数目是不受限的。在一个函数的函数体内,不能再定义另一个函数。函数之间允许相互调用,也允许“嵌套调用”。函数可以自己调用自己,称为“递归调用”。同一个函数可以被一个或多个函数调用任意次。,函数的分类,从函数定义角度:用户自定义函数库函数从有无返回值角度:有返回值的函数无返回值的函数从数据传送角度:无参函数有参函数,main函数,一个典型的单片机程序都必须包含且只能包含一个主函数,即main函数。在主函数中调用其他的函数.最后由main函数结束整个程序。一个C51语言程序常由一个mian主函数和若干个其他函数构成。,函数的声明,函数声明就是定义函数的名称及函数代码。在C51语言中,函数的声明可以采用三种方法,下面分别进行介绍。,函数声明一,这种函数声明需要放在主调函数之前,一般放置在程序的最前面即可,其声明的一般形式如下:,类型声明符函数名(形式参数列表)形参类型声明语句return语句,声明函数的注意事项,在声明函数时,应该注意如下几点:如果没有类型说明符出现,函数返回一个整型值。如果函数没有返回值,则可以采用void说明符。函数类型的说明必须处于对它的首次调用之前。当函数被调用时,形式参数列表中的变量用来接收调用参数的值。如果函数没有返回值,则可以省略return语句。函数与变量一样,在使用前必须先定义。,函数声明二,在C51语言中,函数定义还可以采用如下的方式。这种函数声明也需要放在主调函数之前,一般放置在程序的最前面即可。,类型声明符函数名(形参类型声明,形式参数列表)语句return语句,函数声明三,一个函数的定义可以放在任意位置。如果放在主调函数之后,需要在主调函数执行之前对该函数进行声明。一般来说,需要在main函数之前进行声明即可。,函数的参数,函数的参数包括两类:形参实参,形参和实参,函数参数用于主调函数与被调函数间进行的数据交换。函数的形参和实参在使用时需要注意如下几点:形参变量只有在被调用时才分配内存单元。实参可以是常量、变量、表达式等。在C51语言中,实参和形参都可以采用多种数据类型。实参的类型和个数应该与形参的定义类型和个数完全相同。形参和实参在顺序上应保持严格一致。在函数调用过程中,形参的值发生改变,而实参中的值不会变化。在函数调用时,数据传送是单向的从实参传送给形参。,数组元素作为函数参数,在C51语言中,数组用做函数参数有两种形式:一种是把数组元素作为实参使用;另一种是把数组名直接作为函数的形参和实参使用。,数组名作为函数参数,在C51语言中数组名代表了数组的首地址,而非元素值。在用数组名作为函数参数时,是将实参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,也就等于有了实在的数组。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。,二维数组作为函数参数,二维数组作为函数参数也可以采用数组元素或者数组名两种。二维数组名作为函数的形参,在函数定义时对形参数组可以指定每一维的长度,也可省去第一维的长度。如下的两种书写方法都是正确的:intsum(inta34)intsum(inta4),指针变量作为函数参数,使用指针类型作为函数的参数,实际向函数传递的是变量的地址。指针作为函数参数是指在发生函数调用时,把指针变量传送给形参,实现单向的值传送。由于函数中获得了所传递变量的地址,因此,当函数结束后,该地址中的数据已经改变。,函数的返回值,函数的返回值是指函数被调用执行之后,最终返回给主调函数的计算结果。函数的返回值通过return语句返回给主调函数。return语句的一般形式如下:return表达式;return(表达式);,return语句的注意事项,在C51中,使用return语句应该注意如下几点:函数只能有一个返回值。函数返回值的类型和函数定义中的类型应保持一致。如函数返回值为整型,在函数定义时可省去类型说明。凡不要求返回值的函数都应定义为空类型。一旦函数被定义为空类型后,就不能使用return语句。,函数的调用,函数调用的方式就是我们在程序中如何使用函数的问题。在C51语言中,函数调用的一般形式如下:函数名(实参列表)初步总结一下,函数可以有以下几种调用方式:函数语句。示例如下:delay();函数表达式。示例如下:z=min(x,y);/函数min求x、y中的最小值函数参数。示例如下:z=min(x,min(y,z);/函数min求x、y、z中的最小值,函数的调用,主要有如下几类常用的:赋值调用引用调用递归调用嵌套调用,赋值调用,赋值调用(callbyvalue)中,函数的形参是数值变量,函数调用时把参数的值复制到函数的形式参数中。赋值调用不会影响主调函数中的实参变量的数值。,01#include/头文件02intmul(intx);/函数声明03voidmain()/主函数0405intt=10;06printf(mul(%d)=%dn,t,mul(t);/函数赋值调用,并输出0708intmul(intx)/定义函数0910 x=x*x;/计算平方11return(x);/返回结果12,引用调用,引用调用(callbyreference)中,函数的形参是指针,函数调用时是把参数的地址复制给形式参数。引用调用将会影响主调函数中的变量的数值,但这并不违背形参和实参的规则。,01#include/头文件02voidch(char*c)/定义函数,将大写字符改为小写字符0304if(*c=A/输出结果13,递归调用,递归调用就是自己调用自己的函数调用方式。递归调用只适用于递归函数中。在递归函数中,主调函数又是被调函数。执行递归函数将反复调用其自身。递归调用一定要防止无终止地进行调用,否则将是一个死循环。递归函数的缺点是执行速度慢。,递归调用实例,最经典的递归函数例子是计算n!。n!可用下述公式表示。n!=1;(n=0,1)n!=n(n-1)1;(n1),01#include/头文件02longnn(intn)/定义函数0304longf;05if(n1)06f=n*nn(n-1);/递归调用07else08f=1L;09returnf;1011voidmain()/主函数1213intnum;14longy;15num=6;/赋初值16y=nn(num);/调用函数计算阶乘17printf(6!=%ldn,y);/输出结果18,嵌套调用,嵌套调用就是一个函数内部调用了另外一个函数的情况。C51语言中对嵌套调用的次数没有限制,因为除了main主函数外,各个函数都是平行的。,voidmain()/主函数Func();/调用函数FuncvoidFunc()/定义函数FuncFunc1();/调用函数Func1voidFunc1()/定义函数Func1,作用域,作用域也就是作用范围。对于函数,这里涉及三类作用域:函数的作用域函数代码的作用域函数内部变量的作用域,函数的作用域,函数的作用域是函数的使用范围。在C51语言中,一个函数对于整个工程都是“可见”的。另外,C51语言中不可以在一个函数内再说明或定义另一个函数。,函数代码的作用域,函数代码作用域是函数内部程序语句的作用范围。在C51语言中,函数代码隐藏于函数内部,归该函数所有。在程序中除了对函数的调用以外,其他任何函数中的任何语句都不能访问它。,函数内部变量的作用域,函数内部变量的作用域是指在函数内部声明的变量的使用范围。函数内部的变量作用域仅在本函数内。由于作用域的不同,一个函数中的变量即使与另一个函数中的变量名字相同,它们之间也是互不干扰的。定义在一个函数内部的数据无法与定义在另一个函数内部的数据进行作用,除非使用全局变量。,C51常用库函数,在使用时,只需在源程序的开始处使用预处理命令#include将有关的头文件包含进来即可。下面便介绍KeilVision3编译环境提供的常用库函数。字符函数库字符串函数库输入输出函数库数学函数库标准函数库内部函数库,字符函数库,字符函数库用于对C51各种字符进行分类、转换和判断等操作。例如将小写字符转换为大写字符、判断是否为数字或字母等。在使用字符函数库时,需要添加ctype.h头文件。,字符函数库,字符串函数库,字符串函数用于执行字符串操作和处理。使用字符串函数库时,需要添加string.h头文件。,字符串函数库,输入输出函数库,输入输出函数库用于执行数据的输入输出功能,例如printf、scanf等。在使用输入输出函数库时,需要添加STDIO.H头文件。,输入输出函数库,数学
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 排水巡查员设备调试考核试卷及答案
- 财税顾问咨询方案价格
- 咨询老师奖励方案
- 荥阳公路局安全培训课件
- 2025年呼伦贝尔市纪委监委所属事业单位引进人才(8人)模拟试卷含答案详解(a卷)
- 2024广播电视编辑记者题库检测试题打印(典型题)附答案详解
- 羊亭安全员培训课件
- 2025年广东佛山顺德区公立医院招聘高层次人才40人笔试高频难、易错点备考题库及参考答案详解1套
- 2025年云南曲靖宣威市综合行政执法局招聘编制外工作人员10人笔试高频难、易错点备考题库及答案详解一套
- 2025年湖南工程学院第一批专任教师招聘(27人)模拟试卷及完整答案详解1套
- 《规训与惩罚》课件
- 【MOOC】声乐作品赏析与演唱-扬州大学 中国大学慕课MOOC答案
- 2024年版机电产品国际招标标准招标文件
- 糖尿病高血压健康教育
- 铜府字202322号铜鼓县革命文物保护利用专项规划(公布稿)
- 企业员工心理健康与欺凌防范政策
- 平面构成中的形式美法则
- 农贸市场装修施工方案
- 2022年广东双百社工笔试真题及答案
- 四川省兴文县建设煤矿2021年矿山储量年报
- EPLAN电气设计 课件全套 陈乾 任务1-15 初识Eplan、Eplan的安装-图纸设计与电气元件选型练习
评论
0/150
提交评论