单片机C51语言设计基础.pptx
单片机C语言设计基础第5讲
#includereg52.h//包含特殊功能寄存器库#includestdio.h//包含I/O函数库voidserial_initial();voidmain(void){inta,b;serial_initial();scanf(“pleaseinputa,b:%d,%d”,a,b);printf(“\n”);printf(“maxis:%d\n”,a=b?a:b);while(1);}voidserial_initial(void)//主函数{SCON=0x52;//串口初始化TMOD=0x20;TH1=0XF3;TR1=1;}
C语言程序组成结构预处理命令include功能子函数1delay(){函数体……}功能子函数2light1(){函数体……}……主函数main(){主函数体……}
C程序组成部分
C语言程序是由函数构成的,一个C源程序至少包括一个函数(主函数),一个C源程序有且只有一个名为main()的函数,也可能包含其它函数,函数是C程序的基本单位。函数后面一定有一对大括号{…….}”,在大括号里书写程序。C语言程序总是从main主函数开始执行的。而不管物理位置上这个main()放在什么地方。主函数通过直接书写语句和调用其它功能子函数来实现有关功能,这些功能子函数可以是由C语言本身提供给的库函数,也可以是用户自己编写的函数。
库函数和用户自定义子函数有什么区别?简单地说,库函数就是针对一些经常使用的算法,经前人开发、归纳、整理形成的通用功能子函数集供大家使用。而自己编写的功能子函数则称用户自定义功能子函数,显然,用户自定义功能子函数是用户根据自己需要而编写的。可以看出,使用C语言开发产品,可以大量使用库函数而减少用户自己编写程序的工作量。这样,产品开发的速度和质量是汇编语言绝对不能相比的。KeilC51内部有数百个库函数可供我们使用。调用KeilC51的库函数时只需包含具有该函数说明的相应的头文件即可。
C是模块化设计语言C程序结构C是函数式语言必须有且只能有一个名为main的主函数C程序的执行总是从main函数开始,在main中结束函数不能嵌套定义,可以嵌套调用模块化函数
函数分类从用户角度标准函数(库函数):由系统提供用户自定义函数从函数形式无参函数有参函数使用库函数应注意:1、函数功能2、函数参数的数目和顺序,及各参数意义和类型3、函数返回值意义和类型4、需要使用的包含文件
函数定义格式函数类型函数名(形参类型说明表){ 语句部分/*说明部分*/}/**********************************************函数名称:函数功能:参数说明:输出说明:设计人:设计时间:************************************************/
函数名()interruptnusingm{函数内部实现….}I/O口定义sbitbeep=P2^3;中断服务程序
必须是已存在的函数库函数:#include*.h用户自定义函数:函数类型说明010203对被调用函数的要求
宏定义、文件包含作用:对源程序编译之前做一些处理,生成扩展C源程序种类宏定义#define文件包含#include条件编译#if--#else--#endif等格式:“#”开头占单独书写行语句尾不加分号
宏定义不带参数宏定义一般形式:#define宏名[宏体]功能:用指定标识符(宏名)代替字符序列(宏体)宏展开:预编译时,用宏体替换宏名---不作语法检查宏体可缺省,表示宏名定义过或取消宏体定义位置:任意(一般在函数外面)作用域:从定义命令到文件结束#undef可终止宏名作用域格式:#undef宏名宏定义可嵌套,不能递归例#defineMAXMAX+10(?)引号中的内容与宏名相同也不置换宏定义中使用必要的括号()
文件包含功能:一个源文件可将另一个源文件的内容全部包含进来一般形式:#include“文件名”或#include文件名#include“file2.c”file1.cfile2.cfile1.cfile2.cABA处理过程:预编译时,用被包含文件的内容取代该预处理命令,再对“包含”后的文件作一个源文件编译直接按标准目录搜索“”先在当前目录搜索,再搜索标准目录可指定路径
被