书签 分享 收藏 举报 版权申诉 / 85
上传文档赚钱

类型C51的常用库函数精品课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:3347621
  • 上传时间:2022-08-22
  • 格式:PPT
  • 页数:85
  • 大小:827.50KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《C51的常用库函数精品课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    C51 常用 库函数 精品 课件
    资源描述:

    1、第12章 C51的常用库函数详解 C51语言的编译器中包含有丰富的库函数,使用库函数可以大大简化用户程序设计的工作量,提高编程效率。每个库函数都在相应的头文件中给出了函数原型声明,在使用时,必须在源程序的开始处使用预处理命令#include将有关的头文件包含进来。C51库函数中类型的选择考虑到了8051单片机的结构特性,用户在自己的应用程序中应尽可能地使用最小的数据类型,以最大限度地发挥8051单片机的性能,同时可减少应用程序的代码长度。下面将C51的库函数分类列出并详细介绍其用法。第1页,共85页。12.1 字符函数 字符函数的原型声明包含在头文件CTYPE.H中。常用的一些字符函数介绍如下

    2、。第2页,共85页。12.1.1 检查英文字母函数检查英文字母函数用于检查形参字符是否为英文字母,其函数原型如下:bit isalpha(char c);其中,c为待判断的字符,如果是英文字母则返回1,否则返回0。程序示例如下:第3页,共85页。12.1.2 检查字母数字函数 检查字母数字函数用于检查形参字符是否为英文字母或数字字符,其函数原型如下:bit isalnum(char c);第4页,共85页。12.1.3 检查控制字符函数检查控制字符函数用于检查形参字符是否为控制字符,其函数原型如下:bit iscntrl(char c);其中,c为待判断的字符。控制字符其取值范围为0 x000

    3、 xlF之间或等于0 x7F,如果是,则返回1,否则返回0。第5页,共85页。12.1.4 十进制数字检查函数十进制数字检查函数用于检查形参字符是否为十进制数字,其函数原型如下:bit isdigit(char c);其中,c为待判断的字符,如果是十进制数字则返回1,否则返回0。第6页,共85页。12.1.5 可打印字符检查函数可打印字符检查函数用于检查形参字符是否为可打印字符,其函数原型如下:bit isgraph(char c);其中,c为待判断的字符。可打印字符的取值范围为0 x210 x7C,不包含空格,如果是可打印字符则返回1,否则返回0。第7页,共85页。12.1.6 包含空格的可

    4、打印字符检查函数包含空格的可打印字符检查函数用于检查形参字符是否为可打印字符以及空格,其函数原型如下:bit isprint(char c);其中,c为待判断字符。如果是则返回1,否则返回0。该函数与isgraph的区别在于包含了空格符,空格符为0 x20。第8页,共85页。12.1.7 格式字符检查函数格式字符检查函数用于检查形参字符是否为标点、空格或格式字符,其函数原型如下:bit ispunct(char c);其中,c为待判断字符,如果是则返回1,否则返回0。第9页,共85页。12.1.8 小写英文字母检查函数小写英文字母检查函数用于检查形参字符是否为小写英文字母,其函数原型如下:bi

    5、t islower(char c);其中,c为待判断字符。如果是小写英文字母则返回1,否则返回0。第10页,共85页。12.1.9 大写英文字母检查函数 大写英文字母检查函数用于检查形参字符是否为大写英文字母,其函数原型如下:bit isupper(char c);其中,c为待判断字符。如果是大写英文字母则返回1,否则返回0。第11页,共85页。12.1.10 控制字符检查函数 控制字符检查函数用于检查形参字符是否为控制字符,其函数原型如下:bit isspace(char c);其中,c为待判断字符。如果是控制字符则返回1,否则返回0。控制字符包括:空格、制表符、回车、换行、垂直制表符和送纸

    6、,其取值范围为0 x090 x0d,或为0 x20。第12页,共85页。12.1.11 十六进制数字检查函数 十六进制数字检查函数用于检查形参字符是否为十六进制数字,其函数原型如下:bit isxdigit(char c);其中,c为待判断字符。如果是16进制数字字符则返回1,否则返回0。第13页,共85页。12.1.12 十六进制数字转换函数 十六进制数字检查函数用于转换形参字符为十六进制数字,其函数原型如下:char toint(char c);其中,c为待转换字符。该函数将形参字符09、af(大小写无关)转换为16进制数字。其中,对于字符09,返回值为0H9H,对于ASCII字符af(大

    7、小写无关),返回值为0AH0FH。第14页,共85页。12.1.13 大写字符转换函数 大写字符转换函数用于将大写字符转换为小写字符,其函数原型如下:char tolower(char c);其中,c为待转换的大写字符。如果字符参数不在AZ之间,则该函数将不起作用,而直接返回原字符。第15页,共85页。12.1.14 小写字符转换函数 小写字符转换函数用于将小写字符转换为大写字符,其函数原型如下:char toupper(char c);其中,c为待转换的小写字符。如果字符参数不在az之间,则该函数将不起作用,而直接返回原字符。第16页,共85页。12.1.15 ASCII字符转换函数 ASC

    8、II字符转换函数用于将任何字符型参数缩小到有效的ASCII范围之内,其函数原型如下:char toascii(char c);其中,c为待转换的字符。该函数执行的操作是将形参数值和0 x7f做与运算,从而去掉第7位以上的所有位数。如果形参已是有效的ASCII字符,则不作处理,直接返回原字符。第17页,共85页。12.1.16 大写字符宏转换函数 大写字符宏转换函数用于大写字符转换为小写字符,其函数原型如下:char _tolower(char c);其中,c为待转换的大写字符。这其实是一个由宏定义完成的操作,其功能是将字符参数c与常数0 x20逐位进行或运算,从而将大写字符转换为小写字符。第1

    9、8页,共85页。12.1.17 小写字符宏转换函数 小写字符宏转换函数用于小写字符转换为大写字符,其函数原型如下:char _toupper(char c);其中,c为待转换的小写字符。这其实是一个由宏定义完成的操作,其功能是将字符参数c与常数0 xdf逐位进行与运算,从而将小写字符转换为大写字符。第19页,共85页。12.2 字符串函数 字符串函数的原型声明包含在头文件STRING.H中。在C51语言中,字符串应包括2个或多个字符,字符串的结尾以空字符来表示。字符串函数通过接受指针串来对字符串进行处理。常用的字符串函数介绍如下。第20页,共85页。12.2.1 字符查找函数 字符查找函数用于

    10、在字符串中顺序查找字符,其函数原型如下:void*memchr(void*sl,char val,int len);其中,s1为输入字符串,val为待查找的字符,len为查找的长度范围。该函数的功能是在字符串s1中顺序搜索前len个字符以找出字符val,如果找到则返回sl中指向val的指针,如果没有找到则返回NULL。第21页,共85页。12.2.2 指定长度的字符串比较函数 指定长度的字符串比较函数用于按照指定的长度比较两个字符串的大小,其函数原型如下:char memcmp(void*s1,void*s2,int len);其中,s1和s2为输入字符串,len为比较的长度。该函数的功能是逐

    11、个比较字符串sl和s2的前len个字符,如果相等则返回0,如果字符串s1大于s2,则返回一个正数,如果字符串s1小于s2,则返回一个负数。如果两个字符串的长度小于len,该函数仍将一直比较len个字符,这种情况下,有可能结果是错误的。因此应该保证len不能超过最短字符串的长度。第22页,共85页。12.2.3 字符串复制函数 字符串复制函数用于复制指定长度的字符串,其函数原型如下:void*memcpy(void*dest,void*src,int len);其中,dest为目标字符串,src为源字符串,len为复制的长度。该函数的功能是从src所指向的字符串中复制len个字符到dest字符串

    12、中,其返回值指向dest中的最后一个字符的指针。第23页,共85页。12.2.4 带终止字符的字符串复制函数 带终止字符的字符串复制函数用于复制字符串,如果遇到终止字符则停止复制,其函数原型如下:void*memccpy(void*dest,void*src,char val,int len);其中,dest为目标字符串,src为源字符串,val为终止字符,len为复制的长度。该函数的功能是复制字符串src中的len个字符到dest中,复制len个字符后则返回NULL。如果遇到字符val则停止复制,此时返回一个指向dest中的下一个元素的指针。第24页,共85页。12.2.5 字符串移动函数

    13、字符串移动函数同样用于复制字符串,其函数原型如下:void*memmove(void*dest,void*src,int len);其中,dest为目标字符串,src为源字符串,len为复制长度。该函数的功能是从src所指向的字符串中复制len个字符到dest字符串中,其返回值指向dest中的最后一个字符的指针。其功能与memcpy相同,但是复制区间src与dest可以发生交迭。第25页,共85页。12.2.6 字符串填充函数 字符串填充函数用于按规定的字符填充字符串,其函数原型如下:void*memset(void*s,char val,int len);其中,s为待填充的字符串,val为填

    14、充字符,len为填充的长度。该函数实现的操作是用字符val来填充字符串s,共填充len个单元。第26页,共85页。12.2.7 字符串追加函数 字符串追加函数用于复制字符串到另一个字符串的尾部,其函数原型如下:void*strcat(char*s1,char*s2);其中,s1为目标字符串,s2为待复制的字符串。该函数实现的操作是将字符串s2复制到字符串s1的尾部。其中字符串s1要有足够的大小来保存两个字符串。该函数的返回值指向字符串s1中的第一个字符的指针。第27页,共85页。12.2.8 指定长度的字符串追加函数 指定长度的字符串追加函数用于复制指定长度的字符串到另一个字符串的尾部,其函数

    15、原型如下:void*strncat(,char*s1,char*s2,int n);其中,s1为目标字符串,s2为待复制的字符串,n为复制的长度。该函数实现的操作是从字符串s2中复制n个字符添加到字符串s1的尾部。其中,如果字符串s2的长度比n小,则将全部复制字符串s2(包括串结束符)。第28页,共85页。12.2.9 字符串比较函数 字符串比较函数用于比较两个字符串的大小,其函数原型如下:char strcmp(char*s1,char*s2);其中,s1和s2为待比较的字符串。该函数的功能是比较字符串s1和s2,如果两者相等则返回0;如果s1s2,则返回一个正数。第29页,共85页。12.

    16、2.10 包含结束符的字符串比较函数 包含结束符的字符串比较函数用于比较两个字符串的大小,其函数原型如下:char*strncmp(char*s1,char*s2,int n);其中,s1和s2为待比较的字符串,n为比较的长度。该函数的功能是比较字符串s1和s2的前n个字符,如果两者相等则返回0;如果s1s2,则返回一个正数。这里需要和memcmp函数相区别,如果字符串的长度小于n,则strncmp函数比较到字符串结束符后便停止,这和memcmp函数是不一样的。第30页,共85页。12.2.11 字符串覆盖函数 字符串覆盖函数用于将一个字符串覆盖另一个字符串,其函数原型如下:char*strc

    17、py(char*s1,char*s2);其中,s1为目标字符串,s2为源字符串。该函数的功能是将字符串s2(包括结束符)复制到字符串s1中的第1个字符指针处。这里需要注意和strcat函数相区别,strcat函数将字符串s2复制到字符串s1的末尾。第31页,共85页。12.2.12 指定长度的字符串覆盖函数 指定长度的字符串覆盖函数用于将一个指定长度的字符串覆盖另一个字符串,其函数原型如下:char*strncpy(char*s1,char*s2,int n);其中,s1为目标字符串,s2为源字符串,n为长度。该函数实现的操作是从字符串s2(包括结束符)中复制n个字符到字符串s1中的第1个字符

    18、指针处。如果字符串s2的长度小于n,则s1串以0补齐到长度n。第32页,共85页。12.2.13 获取字符串个数函数 获取字符串个数函数用于返回字符串中字符总数,其函数原型如下:char*strlen(char*s1);其中,s1为输入字符串。该函数的功能是获取字符串s1中的字符个数,返回值的大小不包括结尾的字符串结束符。第33页,共85页。12.2.14 搜索字符串函数 搜索字符串函数用于搜索字符串出现的位置,其函数原型如下:char*strstr(const char*s1,char*s2);其中,s1为目标字符串,s2为搜索的字符串。该函数实现的操作是在字符串s1中搜索第一次出现字符串s

    19、2的位置,并返回该处的指针。如果字符串s1中不包括字符串s2,则该函数返回一个空指针。第34页,共85页。12.2.15 搜索字符函数 搜索字符函数用于搜索字符出现的位置,其函数原型如下:char*strchr(char*s1,char c);其中,s1为目标字符串,c为待搜索的字符。该函数的功能是搜索字符串s1中是否包含字符c,如果包含则返回第一次指向该字符的指针,否则返回NULL。被搜索的字符可以是串结束符,此时返回值是指向串结束符的指针。第35页,共85页。12.2.16 返回位置值的字符搜索函数 返回位置值的字符搜索函数用于搜索并返回字符出现的位置,其函数原型如下:int strpos

    20、(char*s1,char c);其中,s1为目标字符串,c为搜索的字符。该函数的功能是查找并返回字符c在字符串s1中第一次出现的位置值,没有找到该字符则返回-1,s1串首字符的位置值是0。strpos函数的功能与strchr类似,只不过返回值不同。第36页,共85页。12.2.17 字符包含函数 字符包含函数用于检查字符串中是否包含某字符,其函数原型如下:char*strrchr(char*s1,char c);其中,s1为目标字符串,c为查找的字符。该函数的功能是搜索字符串s1中是否包含字符c,如果包含则返回最后一次指向该字符的指针,否则返回NULL。被搜索的字符可以是串结束符,此时返回值

    21、是指向串结束符的指针。第37页,共85页。12.2.18 返回位置值的字符包含函数 返回位置值的字符包含函数同样用于检查字符串中是否包含某字符,其函数原型如下:int strrpos(char*s1,char c);其中,s1为目标字符串,c为查找的字符。该函数的功能是查找并返回字符c在字符串s1中最后一次出现的位置值,没有找到该字符则返回-1,s1串首字符的位置值是0。strrpos函数的功能与strrchr类似,只不过返回值不同。第38页,共85页。12.2.19 在指定字符集中查找不包含字符函数 在指定字符集中查找不包含字符函数用于查找不包含在指定字符集中的字符,其函数原型如下:int

    22、strspn(char*s1,char*set);其中,s1为目标字符串,set为字符集。该函数的功能是搜索字符串s1中第一个不包含在set串中的字符,返回值是字符串s1中包括在set中的字符的个数。如果s1中所有的字符都包含在set中,则返回s1的长度(不包括结束符)。如果set是空字符串则返回0。第39页,共85页。12.2.20 在指定字符集中查找包含字符函数 在指定字符集中查找包含字符函数用于查找包含在指定字符集中的字符,其函数原型如下:int strcspn(char*s1,char*set);其中,s1为目标字符串,set为字符集。该函数的功能是搜索的是第一个包含在set串中字符,

    23、返回值是字符串s1中包括在set中的字符的个数。如果s1中所有的字符都包含在set中,则返回s1的长度(不包括结束符)。如果set是空字符串则返回0。第40页,共85页。12.2.21 查找第一个包含字符函数 查找第一个包含字符函数用于查找第一个包含在指定字符集中的字符,其函数原型如下:char*strpbrk(char*s1,char*set);其中,s1为目标字符串,set为字符集。该函数的功能是搜索字符串s1中第一个包含在set串中的字符,返回值指向搜索到的字符的指针,如果未找到,则返回NULL。第41页,共85页。12.2.22 查找最后一个包含字符函数 查找最后一个包含字符函数用于查

    24、找最后一个包含在指定字符集中的字符,其函数原型如下:char*strrpbrk(char*s1,char*set);其中,s1为目标字符串,set为字符集。该函数的功能是搜索字符串s1中最后一个包含在set串中的字符,返回值指向搜索到的字符的指针,如果未找到,则返回NULL。第42页,共85页。12.3 I/O函数I/O函数主要用于数据的输入输出等操作,C51的I/O库函数的原型声明包含在头文件STDIO.H中。这些I/O函数使用8051单片机的串行接口进行通信,因此,在使用之前需要先进行串口的初始化。例如:SCON=0 x50;/串口模式1,允许接收TMOD|=0 x20;/初始化T1为定时

    25、功能,模式2PCON|=0 x80;/设置SMOD=1TL1=0 xF4;/波特率4800bit/s,初值TH1=0 xF4;IE|=0 x90;/中断TR1=1;/启动定时器第43页,共85页。12.3.1 字符读入函数字符读入函数用于从串口读入一个字符,其函数原型如下:char _getkey(void);该函数执行的操作是等待从8051的串口读入一个字符,并返回读入的原字符。程序示例如下:第44页,共85页。12.3.2 字符读入输出函数 字符读入输出函数用于从串口读入一个字符并输出该字符,其函数原型如下:char getchar(void);该函数与_getkey函数有细微的不同,其执

    26、行的操作是使用_getkey从串口读入的一个字符,然后使用putchar函数将读入的字符输出。第45页,共85页。12.3.3 字符串读入函数 字符串读入函数用于从串口读入一个字符串,其函数原型如下:char*gets(char*s,int n);其中,s保存读入的字符串,n为字符串的长度。该函数执行的操作是使用getchar函数从串口读入一个长度为n的字符串,并存入字符数组s中。如果遇到换行符,则结束字符的输入。输入成功时将返回传入的参数指针,失败时返回空指针NULL。第46页,共85页。12.3.4 字符回送函数 字符回送函数用于将输入的字符回送到输入缓冲区,其函数原型如下:char un

    27、getchar(char c);其中,c为输入字符。该函数执行的操作是将输入的字符回送到输入缓冲区,如果函数调用成功则返回char型值c,失败时则返回EOF。第47页,共85页。12.3.5 字符输出函数字符输出函数用于通过8051串行口输出字符,其函数原型如下:char putchar(char c);其中,c为通过8051串行口输出的字符。第48页,共85页。12.3.6 格式化输出函数 格式化输出函数用于按照一定的格式输出数据或字符串,其函数原型如下:int printf(const char*fmstr,argument);该函数的功能是以一定的格式通过8051单片机的串行口输出数值和

    28、字符串。其中第一个参数fmstr是格式控制字符串,参数argument可以是字符串指针、字符或数值,该函数的返回值为实际输出的字符个数。第49页,共85页。12.3.7 格式化内存缓冲区输出函数 格式化内存缓冲区输出函数用于按照一定的格式将数据或字符串输出到内存缓冲区中,其函数原型如下:int sprintf(char*s,const char*fmstr,argument);该函数执行的操作是通过指针s,将字符串送入内存数据缓冲区,并以ASCII码的形式储存。第50页,共85页。12.3.8 字符串输出函数字符串输出函数用于将字符串和换行符写入串行口,其函数原型如下:int puts(con

    29、st char*s);其中,s为输出的字符串或换行符。如果执行成功则返回0,错误时返回EOF。程序示例如下:第51页,共85页。12.3.9 格式化输入函数 格式化输入函数用于将字符串和数据按照一定的格式从串口读入,其函数原型如下:int scanf(const char*fmstr,argument);该函数的功能是在格式字符的控制下从串行口读入数据。其中每个参数都必须是指针。scanf返回值是所发现并转换的输入项数,如遇到错误则返回EOF。该函数的格式控制字符串形式如下,方括号内是可选项。%*width Bhltype第52页,共85页。12.3.10 格式化内存缓冲区输入函数 格式化内存

    30、缓冲区输入函数用于将格式化的字符串和数据送入数据缓冲区,其函数原型如下:int sscanf(char*s,const char*fmstr,argument);该函数的功能是将输入的字符串通过指针s指向的数据缓冲区。输入数据根据格式控制字符串fmstr被存放到由argument指定的地址。其它方面,sscanf函数与scanf函数类似。第53页,共85页。12.3.11 字符串内存输出函数 字符串内存输出函数用于将格式化字符串输出到内存数据缓冲区,其函数原型如下:int vprintf(const char*fmstr,char*argptr);其中,fmstr为格式化字符串,argptr指

    31、向变量表的指针而不是变量表,函数返回值为实际写入到输出字符串中的字符数。其它方面,vprintf函数与printf函数类似。第54页,共85页。12.3.12 指向缓冲区的输出函数 指向缓冲区的输出函数用于将格式化字符串和数字输出到由指针所指向的内存数据缓冲区,其函数原型如下:int vsprintf(char*s,const char*fmstr,char*argptr);该函数执行的操作是将格式化字符串和数字输出到由指针所指向的内存数据缓冲区。其中,该函数接受的是一个指向变量表的指针而不是变量表,其返回值为实际写入到输出字符串中的字符数。其他方面vsprintf函数与sprintf函数类似

    32、。第55页,共85页。12.4 数学函数 数学函数主要用于进行数学运算,其原型声明包含在头文件MATH.H中。下面介绍一些常用的数学函数。第56页,共85页。12.4.1 绝对值函数 绝对值函数用于计算并返回输出数据的绝对值。按照其操作数的数据类型的不同,有如下几种形式:int abs(int val);char cabs(char val);float fabs(float val);long labs(long val)这些函数分别用于计算整型、字符型、浮点型以及长整型数据的绝对值。第57页,共85页。12.4.2 指数以及对数函数 指数函数用于计算并返回输出数据的指数。对数函数用于计算并

    33、返回输出数据的对数。其函数原型示例如下:float exp(float x);float log(float x);float log10(float x);float sqrt(float x);其中exp函数用于计算并返回浮点数x的指数,log函数用于计算并返回浮点数x的自然对数(自然对数以e为底,e=2.718282),log10函数用于计算并返回浮点数x的以10为底的对数值,sqrt函数用于计算并返回浮点数x的平方根。第58页,共85页。12.4.3 三角函数 三角函数用于计算数学中三角函数的值。在C51语言中包含如下几种三角函数:float cos(float x);float si

    34、n(float x);float tan(float x);float acos(float x);float asin(float x);float atan(float x);float atan2(float y,float x);float cosh(float x);float sinh(float x);float tanh(float x);第59页,共85页。12.4.4 取整函数 取整函数用于取输入数据的整数。在C51语言中,包含两类取整函数,示例如下:float ceil(float x);float floor(float x);其中ceil函数用于计算并返回一个不小于x

    35、的最小正整数(作为浮点数),floor函数用于计算并返回一个不大于x的最小正整数(作为浮点数)。第60页,共85页。12.4.5 浮点型分离函数浮点型分离函数用于将浮点型数据的整数和小数部分分开,其函数原型如下:float modf(float x,float*ip);函数modf将浮点数x分成整数和小数两部分,整数部分放入*ip,返回值为小数部分。两者都含有与x相同的符号。第61页,共85页。12.4.6 幂函数 幂函数用于进行幂指数运算。其函数原型如下:float pow(float x,floaty);该函数用于计算并返回xy的值。如果x不等于0而y=0,则返回1。当x=0且y=0或x0

    36、且y不是整数时,返回NaN。第62页,共85页。12.5 标准函数 标准函数主要用于完成数据类型转换以及存储器分配等操作。标准函数的原型声明包含在头文件STDLIB.H中。下面介绍常用的一些函数。第63页,共85页。12.5.1 字符串转换函数 字符串转换函数用于将字符串转换成数值类型并输出。根据输出数值类型的不同,可以有如下几种形式:float atoi(char*sl);float atol(char*sl);float atof(char*sl);其中,atoi函数用于将字符串sl转换成整型数值并返回该值。输入字符串的格式为:whitespace+/-数字。其中,whitespace可由

    37、空格、/、制表符组成。这里的数字可以是一个或多个十进制数。第64页,共85页。12.5.2 带返回指针的字符串转换函数 带返回指针的字符串转换函数将字符串转换成数值类型并输出,同时返回未转换部分的指针。根据输出数值类型的不同,可以有如下几种形式:float strtod(const char*s,char*ptr);long strtol(const char*s,char*ptr,unsigned char base);unsigner long strtoul(const char*s,char*ptr,unsigned char base);第65页,共85页。12.5.3 随机函数 随

    38、机函数用于产生伪随机数。在C51语言中,包含两种随机函数,其函数声明如下:int rand();void srand(int n);其中,函数rand用于返回一个0到32767之间的伪随机数,而函数srand用来初始化随机数发生器的随机种子。如果不使用srand函数,则对rand函数的相继调用将产生相同的随机序列。第66页,共85页。12.5.4 数组内存分配函数 数组内存分配函数用于为n个元素的数组分配内存空间,其函数原型如下:void*calloc(unsighed int n,unsighed int size);其中n数组元素的个数,size为数组中每个元素的大小。该函数所分配的内存区

    39、域用0进行初始化。返回值为已分配的内存单元起始地址,如果不成功则返回0。第67页,共85页。12.5.5 释放内存函数 释放内存函数用于释放前面已分配的内存空间,其函数原型如下:void free(void xdata*p);其中,指针p指向待释放的存储区域。p必须是以前用calloc、malloc或realloc函数分配的存储区域,如果p为NULL,则该函数无效。经free函数所被释放的存储区域可以参与以后的分配。第68页,共85页。12.5.6 初始化内存函数 初始化内存函数用于对前面申请的内存进行初始化,其函数原型如下:void init_mempool(void xdata*p,uns

    40、ighed int size);其中,指针p表示存储区首地址,size表示存储区大小。该函数可对被函数calloc、malloc、free或realloc管理的存储区域进行初始化。第69页,共85页。12.5.7 内存分配函数 内存分配函数用于在内存中分配指定大小的存储空间,其函数原型如下:void*malloc(unsighed int size);其中,size为分配的空间大小,返回值为指向所分配内存的指针。如果返回NULL,则表示没有足够的内存空间可用。第70页,共85页。12.5.8 调整内存大小函数 调整内存大小函数用于调整先前分配的存储器区域大小,其函数原型如下:void*real

    41、loc(void xdata*p,unsighed int size);其中,参数p表示该存储区域的起始地址,参数size表示新分配的存储区域大小。该函数的返回值为新区域所指向的指针。如果返回NULL,则表示没有足够的内存空间可用。原存储器区域的内容被复制到新存储器区域中,如果新存储器区域较大,多出的区域不作初始化。第71页,共85页。12.6 内部函数 内部函数的原型声明包含在头文件INTRINS.H中。下面介绍常用的一些函数。第72页,共85页。12.6.1 循环左移函数循环左移函数主要用于将数据按照二进制循环左移n位。按照操作数据类型的不同,其函数原型如下几种形式:unsighed ch

    42、ar _crol_(unsighed char val,unsighed char n);unsighed int _irol_(unsighed int val,unsighed char n);unsighed long _lrol_(unsighed long val,unsighed char n);其中,val为待移位的变量,n为循环移位的次数。函数_crol_、_irol_和_lrol_分别用于字符型、整型和长整形变量的循环左移,其返回值分别为移位后的字符型、整型和长整形。该函数与8051单片机的RLA指令相关。第73页,共85页。12.6.2 循环右移函数循环右移函数主要用于将数

    43、据按照二进制循环右移n位。按照操作数据类型的不同,其函数原型如下几种形式:unsighed char_cror_(unsighed char val,unsighed char n);unsighed int _iror_(unsighed int val,unsighed char n);unsighed long _lror_(unsighed long val,unsighed char n);其中,val为待移位的变量,n为循环移位的次数。函数_cror_、_iror_和_lror_分别用于字符型、整型和长整形变量的循环右移,其返回值分别为移位后的字符型、整型和长整形。该函数与8051

    44、单片机的RRA指令相关。第74页,共85页。12.6.3 延时函数延时函数用于使单片机程序产生延时,其函数原型如下:void_nop_(void);该函数类似于 8051单片机的NOP指令。程序示例如下:#include /头文件#include voidmain(void)/主函数P1=0 xFF;/P1端口输出0 xFF_nop_();/延时_nop_();P1=0 x00;/P1端口输出0 x00第75页,共85页。12.6.4 位测试函数位测试函数用于对字节中的一位进行测试,其函数原型如下:void_testbit_(bit x);其中,x为待测位变量。如果该位变量置位则函数返回1,同

    45、时将该位复位为0,否则返回0。该函数产生一个 8051单片机的JBC指令,其只能用于可直接寻址的位,不允许在表达式中使用。第76页,共85页。12.7 绝对地址访问函数 绝对地址访问的函数包含在头文件ABSACC.H中,是一些宏定义的函数。下面分别介绍常用的一些函数。第77页,共85页。12.7.1 BYTE型存储空间访问函数 BYTE型存储空间访问函数用于对8051单片机的存储空间进行绝对地址访问,可以做字节寻址。其宏定义原型如下:#define CBYTE(unsighed char volatile code*)0)#define DBYTE(unsighed char volatile

    46、 idata*)0)#define PBYTE(unsighed char volatile pdata*)0)#define XBYTE(unsighed char volatile xdata*)0)第78页,共85页。12.7.2 WORD型存储空间访问函数 WORD型存储空间访问函数可以访问8051的所有存储器空间。其宏定义原型如下:#define CWORD(unsighed int volatile code*)0)#define DWORD(unsighed int volatile idata*)0)#define PWORD(unsighed int volatile pda

    47、ta*)0)#define XWORD(unsighed int volatile xdata*)0)第79页,共85页。12.7.3 far存储区访问函数 far存储区访问函数用于访问far存储器区域。其宏定义原型如下:#define FVAR(object,addr)(*(object volatile far*)(addr)+0 x10000L)#define FCVAR(object,addr)(*(object const far*)(addr)+0 x810000L)其中,FVAR用于访问far空间(存储类为HDATA),FCVAR用于访问const far 空间(存储类为HCON

    48、ST)。第80页,共85页。12.7.4 far存储区数组访问函数 far存储区数组访问函数用于访问far存储器区域的数组类型目标。其宏定义原型如下:#define FARRAY(object,base)(*(object volatile far*)(base)+0 x10000L)#define FCARRAY(object,base)(*(object const far*)(base)+0 x810000L)其中,FARRAY用于访问far空间(存储类为HDATA),FCARRAY用于访问const far 空间(存储类为HCONST)。第81页,共85页。12.8 变量参数表函数变量

    49、参数表函数用于函数参数的个数和类型可变的场合。C51编译器允许函数的参数个数和类型是可变的,可使用简略形式(记号为“.”),这时参数表的长度和参数的数据类型在定义时是未知的。C51的变量参数表函数包含在头文件STDARG.H中,主要包括如下几个。函数原型typedef char*va_list:其功能为将va_list定义成指向参数表的指针。函数原型void va_start(ap,v)。其功能为初始化ap参数,其一般在一个可变长度参数表的函数中使用。在使用宏va_ arg进行存取前,必须调用函数来初始化可变参数表。函数原型typedef va_arg(ap,type):其功能为从ap指向的可

    50、变长度参数表中检索type类型的值。对va_ arg的第一次调用将返回在va_start宏中指定的v参数后的第一个参数。继续调用va_ arg将返回剩下的后续参数。对于每一个参数可以只调用一次,而且必须按照参数表中的参数的次序进行。函数原型void va_end(ap)。其功能为终止在va_start宏中已被初始化的可变长度参数表的指针ap,并且关闭参数表,结束对可变参数表的访问。第82页,共85页。12.9 全程跳转函数全程跳转函数用于正常系列函数的调用和函数结束,还允许从深层函数调用中直接返回。其原型声明包含在头文件SETJMP.H中。这里介绍一些常用的全程跳转函数。函数原型typedef

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:C51的常用库函数精品课件.ppt
    链接地址:https://www.163wenku.com/p-3347621.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库