




已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C51函数,单片机原理与应用,在高级语言中,函数和另外两个名词“子程序”、“过程”用来描述同样的事情;在Cx51中,使用“函数”这个术语。它们都含有以同样的方法重复地去做某件事的意思。,C51函数定义的格式类型函数名(参数表)参数说明;数据说明部分;执行语句部分;,单片机原理与应用,函数的定义由函数类型、函数名、参数表和函数体四部分组成。函数名是一个标识符,标识符中大小写字母是有区别的,函数的类型(除整型外)均需在函数名前加以指定。(函数的类型就是返回值的类型)参数表是用圆括号括起来的若干参数,参数项与项之间用逗号分隔。函数体是用大括号括起来的若干C程序语句,语句与语句之间用分号隔开,最后一个语句一般是return(主函数可省略)。,单片机原理与应用,C51程序书写结构要点1.C程序书写格式一般情况下,一个语句占一行号。每个语句最后必须以分号结束,分号是C语句的一个组成部分。2.为了区分不同结构层次的语句,采用从不同起始位置开始书写语句,也就是同一结构层次的语句,在行中缩进相同的字数。3.表示层次的大括号,通常写在该结构语句的第一个字母的下方,与该结构语句对齐,并占一行。.C程序中用“/”或一对“/*/”对程序的任何地方作注释。,单片机原理与应用,主程序main()可以根据需要用来调用函数。当函数执行完毕时,就发出返回(return)指令,而主程序main()用后面的指令来恢复主程序流的执行。同一个函数可以在不同的地方被调用,并且函数可以重复使用。,主程序main(),单片机原理与应用,函数,单片机原理与应用,所谓函数,就是将一些语句集合起来,完成一个特定的功能。函数也相当于其它编程语言中的子程序。C语言中将函数分为主函数和其它函数。,函数调用的一般规则,单片机原理与应用,所有的函数在定义时都是相互独立的,一个函数中不能再定义其他函数,即函数不能嵌套定义,但可以互相调用。函数调用的一般规则是:主函数可以调用其它普通函数;普通函数之间也可以互相调用,但普通函数不能调用主函数。,函数的分类,单片机原理与应用,从C语言程序的结构上划分,C语言函数分为主函数和普通函数两种。从用户使用的角度划分,又可分为两类:一类是标准库函数,另一类是用户自定义函数。,标准库函数,单片机原理与应用,C语言系统一般都具有功能强大、资源丰富的标准函数库。因此,作为系统的使用者,在进行程序设计时,应该善于充分利用这些功能强大、内容丰富的标准库函数资源,以提高效率,节省时间。,用户自定义函数,单片机原理与应用,用户自定义函数,顾名思义,是用户根据自己的需要编写的函数。从函数定义的形式上划分可以有三种形式:无参数函数、有参数函数和空函数。,单片机原理与应用,无参数函数:此种函数在被调用时,既无参数输人,也不返回结果给调用函数。它是为完成某种操作而编写的。,有参数函数:在调用此种函数时,必须提供实际的输入参数。此种函数在被调用时,必须说明与实际参数一一对应的形式参数,并在函数结束时返回结果,供调用它的函数使用。,单片机原理与应用,空函数:此种函数体内无语句,是空白的。调用此种空函数时,什么工作也不做,不起任何作用。而定义这种函数的目的并不是为了执行某种操作,而是为了以后程序功能的扩充。,1无参数函数的定义方法,无参数函数的定义形式为:返回值类型标识符函数名()函数体语句无参数函数一般不带返回值,因此,函数返回值类型识别符可以省略。,单片机原理与应用,单片机原理与应用,例3-1:试编写一段程序,使P3口驱动的8个发光二极管亮一秒钟,再灭一秒钟,周而复始,闪烁不止。,图3-1,#includevoiddelay(void)unsignedinta;a=0;while(a50000)a+;,单片机原理与应用,应用程序:,main()while(1)P3=0;delay();P3=0 xff;delay();,上面的程序按标准C应改为:,#includevoiddelay(void);main(void)while(1)P1=0;delay();P1=0 xff;delay();,voiddelay(void)unsignedinta;a=0;while(a50000)a+;,2有参数函数的定义方法,有参数函数的定义形式为:返回值类型识别符函数名(形式参数列表)形式参数说明函数体语句,单片机原理与应用,单片机原理与应用,例3-2:试编写一段程序,使P3口驱动的发光二极管亮一秒,再灭两秒,周而复始,闪烁不止。,includemain()while(1)P1=0;delay(20);P1=0 xff;delay(40);,chardelay(chark)unsignedinta,b;for(a=0;ak;a+)for(b=0;b4000;b+);,程序分析,上面程序中,实际定义了两个函数main()和delay()。主程序中调用延时函数时,向延时函数传递了一个参数,延时时间的长短取决于参数的大小,参数的类型为字符型char。主程序两次调用延时函数时,传递的参数不一样。使得延时时间不一样。这里发光二极管亮的时间为1秒,灭的时间为2秒。,单片机原理与应用,C语言程序的一般组成结构,单片机原理与应用,C语言程序是由函数构成的。在构成C语言程序的若干个函数中,必有一个是主函数main()。一个C程序的执行从main()函数开始,调用其他函数后返回到主函数main()中,最后在主函数main()中结束整个C程序的运行。,下面所示为C语言程序的一般组成结构。全程变量说明main()/*主函数*局部变量说明执行语句,单片机原理与应用,Function_l(形式参数表)/*函数1*/形式参数说明局部变量说明执行语句,单片机原理与应用,function_n(形式参数表)/*函数n*/形式参数说明局部变量说明执行语句,单片机原理与应用,主函数,单片机原理与应用,主函数是C语言程序的开头,也就是说C语言都是从主函数开始执行的,main的数据格式是viod;无论何时都没有返回值。,例3-3:试编写一段延时程序。,应用程序:main()chara;for(a=1;a100;a+);,单片机原理与应用,其它函数,除了主函数main外,C语言的其他函数可归类为下列四大类:(1)无参数输入,无参数返回(2)无参数输入,有参数返回(3)有参数输入,无参数返回(4)有参数输入,有参数返回,单片机原理与应用,1、无参数输入,无参数返回,单片机原理与应用,这种函数在调用时,无须输入任何参数给函数,而函数结束时也无须返回任何参数。例3-4:试编写一段程序调用延时程序。,main()delay();,voiddelay(void)chara;for(a=1;a100;a+);,单片机原理与应用,应用程序,2、无参数输入,有参数返回,单片机原理与应用,此类函数在调用时无须输入任何参数,而函数结束时却要返回一个变量值,也可以是常量,但要注意,函数的数据格式与返回变量的数据格式须保持一致,常量也是如此。,main()chark;k=delay();,chardelay(void)chara;for(a=1;a100;a+);returna;,单片机原理与应用,例3-5:试编写一段程序调用延时程序,延时函数结束时,返回一个参数。,3、有参数输入,无参数返回,单片机原理与应用,在调用这种函数时,可以输入一个或多个参数,传送参数的方法有多种,但多数情况下,调用函数向被调用函数以形式参数的方法来传递。编写函数时,一般在对其说明和定义时就规定了形式参数的类型,在调用时这些函数参数必须与子函数中的形式参数的数据类型保持一致,参数的顺序和数量也要完全相同。,main()delay(4);,voiddelay(charj)chara;for(a=1;aj;a+);,单片机原理与应用,例3-6:试编写一段程序,调用延时程序时,给函数传递一个参数。,4、有参数输入,有参数返回,单片机原理与应用,在调用这种函数时,需要输入一个或多个参数,函数向被调用函数以形式参数的方法传递。编写函数时,被传递参数的类型要与子函数中的形式参数的数据类型保持一致,参数的顺序和数量也要完全相同。返回参数时,被返回的参数要与接收参数的变量的数据类型保持一致。,单片机原理与应用,例3-7:试编写一段程序,调用延时程序时,给函数传递一个参数,延时程序结束时,返回一个参数。,main()chark;k=delay(4);,chardelay(charj)chara;for(a=1;aj;a+);a=200;returna;,函数的参数和函数值,单片机原理与应用,C语言采用函数之间的参数传递方式,使一个函数能对不同的变量进行功能相同的处理,从而大大提高了函数的通用性与灵活性。函数之间的参数传递,由函数调用时,主调用函数的实际参数与被调用函数的形式参数之间进行数据传递来实现。,被调用函数的最后结果由被调用函数的return语句返回给调用函数。,形式参数和实际参数,单片机原理与应用,形式参数:在定义函数时,函数名后面括号中的变量名称为“形式参数”,简称形参。实际参数:在函数调用时,主调用函数名后面括号中的表达式称为“实际参数”,简称实参。,main()chari;i=delay(500);,chardelay(charj)chara;for(a=1;av)return(u)elsereturn(v);,单片机原理与应用,单片机原理与应用,例3-8:试编写一段程序,用P31控制P1口驱动的8个发光二极管亮一秒钟,再灭两秒钟秒钟,周而复始,闪烁不止。如果开关k断开,发光二极管停止闪烁。,图3-2用P31控制P1口输出数据,应用程序:,includemain()chari;while(1)P1=0 xff;if(i=0),continue;i=delay(40);P1=0 x00;i=delay(20);,单片机原理与应用,chardelay(chark)unsignedinta,b;for(a=0;ay为真时,返回x值;否则,返回y值。,单片机原理与应用,函数的调用,函数调用的一般形式函数调用的一般形式为:函数名(实际参数表列);,单片机原理与应用,单片机原理与应用,对于有参数型函数,若包含多个实际参数则应将各参数之间用逗号分隔开。主调用函数的数目与被调用函数的形式参数的数目应该相等。实际参数与形式参数按实际顺序一一对应传递数据。如果调用的是无参数函数,则实际参数表可以省略,但函数名后面必须有一对空括号。,函数调用的方式,单片机原理与应用,主调用函数对被调用函数的调用可以有以下三种方式。(1)函数调用语句即把被调用函数名作为主调用函数中的一个语句。例delay();此时并不要求被调用函数返回结果数值,只要求函数完成某种操作。,(2)函数结果作为表达式的运算对象,例k=2*delay(20);此时被调用函数以一个运算对象的身份出现在一个表达式中。这就要求被调用函数带有return语句,以便返回一个明确的数值参加表达式的运算。被调用函数delay为表达式的一部分。它的返回值乘2再赋给变量k。,单片机原理与应用,(3)被调函数作为另一个函数的参数,单片机原理与应用,这种函数的调用方法是将被调函数作为另一个函数的实际参数。例如:a=delay1s(delay10ms(100);其中,delay10ms是调用了10ms的延时程序,它有一个返回值,该值又作为另一个函数调用delay1s()的实际参数。通过反复调用最后达到延时1秒的功能。,对被调用函数的说明,单片机原理与应用,在一个函数中调用另一个函数必须具有以下条件:1)被调用函数必须是已经存在的函数(库函数或用户自定义函数)。2)如果程序中使用了库函数,或使用了不在同一文件中的另外的自定义函数,则应该在程序的开头处使用include包含语句,将所用的函数信息包括到程序中来。,例:#include“stdio.h”将标准输入、输出头文件(在函数库中)包含到程序中来。例:#include“math.h”将函数库中专用数学库的函数包含到程序中来。,单片机原理与应用,单片机原理与应用,3)如果程序中使用自定义函数,且该函数与调用它的函数同在一个文件中,则应根据主调用函数与被调用函数在文件中的位置,决定是否对被调用函数作出说明。,如果被调用函数出现在主调用函数之后,一般应在主调用函数中,在对被调用函数调用之前,对被调用函数的返回值类型作出说明。一般的形式为:返回值类型说明符被调用函数的函数名();,单片机原理与应用,例3-9:试编写一段程序,调用函数时可以传递参数。,main()intdelay();inta=0,b=10,m;for(;a100;a+)delay(a);m=delay(b);printf(max=%dn,m);,intdelay(x)intx;return(x);,如果被调用函数的定义出现在主调用函数之前,可以不对被调用函数加以说明。因为C编译器在编译主调用函数之前,已经预先知道已定义了被调用函数的类型,并自动加以处理。,单片机原理与应用,例3-10:试编写一段程序,调用函数时可以传递可以传递多个参数。,intdelay(x,y)in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO 4504:2025 EN Plastics - Polyethylene (PE) - Determination of co-monomer content by solution state 13C-NMR spectrometry
- 【正版授权】 ISO 5461:2025 EN Space systems - Failure reporting,analysis and corrective action (FRACA) process requirements
- 【正版授权】 ISO 17987-3:2025 EN Road vehicles - Local Interconnect Network (LIN) - Part 3: Protocol specification
- GB 46030-2025建筑用安全玻璃安全技术要求
- 校本培训经验课件
- 校外培训机构安全知识培训课件
- 导数考试题型及答案
- 盐业局的考试试题及答案
- 北京音乐知识培训课件
- 医药耗材面试题及答案
- T-CACM 1064-2018 针刀医学临床 通.用要求
- 天津市南开区2025年数学五年级第二学期期末综合测试试题含答案
- 电气行业与市场分析
- 2025年乡村全科助理医师考试题库及答案
- 排水设施养护管理制度
- 小学植物百科知识
- 循环水地下管道安装施工方案
- 检验科生物安全风险评估报告
- 混合痔的中医个案护理
- 2023年广西现代物流集团社会招聘笔试真题
- 大数据开发工程师招聘笔试题及解答(某世界500强集团)2025年
评论
0/150
提交评论