1、G单片机C+C51的库函数C51的常用库函数详解C51语言的编译器中包含有丰富的库函数,使用库函数可以大大简化用户程序设计的工作量,提高编程效率。每个库函数都在相应的头文件中给出了函数原型声明,在使用时,必须在源程序的开始处使用预处理命令#include将有关的头文件包含进来。C51库函数中类型的选择考虑到了8051单片机的结构特性,用户在自己的应用程序中应尽可能地使用最小的数据类型,以最大限度地发挥8051单片机的性能,同时可减少应用程序的代码长度。下面将C51的库函数分类列出并详细推荐其用法。.1 字符函数字符函数的原型声明包含在头文件CTYPE.H中。常用的一些字符函数推荐如下。1.1
2、检查英文字母函数检查英文字母函数用于检查形参字符是否为英文字母,其函数原型如下:bit isalpha(char c);其中,c为待判断的字符,如果是英文字母则返回1,否则返回0。程序示例如下:1.2 检查字母数字函数检查字母数字函数用于检查形参字符是否为英文字母或数字字符,其函数原型如下:bit isalnum(char c);1.3 检查控制字符函数检查控制字符函数用于检查形参字符是否为控制字符,其函数原型:bit iscntrl (char c);其中,c为待判断的字符。控制字符其取值范围为0x000xlF之间或等于0x7F,如果是,则返回1,否则返回0。.1.4 十进制数字检查函数十进
3、制数字检查函数用于检查形参字符是否为十进制数字,其函数原型如下:bit isdigit (char c);其中,c为待判断的字符,如果是十进制数字则返回1,否则返回0。1.5 可打印字符检查函数可打印字符检查函数用于检查形参字符是否为可打印字符,其函数原型如下:bit isgraph (char c);其中,c为待判断的字符。可打印字符的取值范围为0x210x7C,不包含空格,如果是可打印字符则返回1,否则返回0。.1.6 包含空格的可打印字符检查函数包含空格的可打印字符检查函数用于检查形参字符是否为可打印字符以及空格,其函数原型如下:bit isprint (char c);其中,c为待判断
4、字符。如果是则返回1,否则返回0。该函数与isgraph的区别在于包含了空格符,空格符为0x20。.1.7 格式字符检查函数格式字符检查函数用于检查形参字符是否为标点、空格或格式字符,其函数原型如下:bit ispunct (char c);其中,c为待判断字符,如果是则返回1,否则返回0。1.8 小写英文字母检查函数小写英文字母检查函数用于检查形参字符是否为小写英文字母,其函数原型如下:bit islower(char c);其中,c为待判断字符。如果是小写英文字母则返回1,否则返回0。1.9 大写英文字母检查函数大写英文字母检查函数用于检查形参字符是否为大写英文字母,其函数原型如下:bit
5、 isupper(char c);其中,c为待判断字符。如果是大写英文字母则返回1,否则返回0。1.10 控制字符检查函数控制字符检查函数用于检查形参字符是否为控制字符,其函数原型如下:bit isspace (char c);其中,c为待判断字符。如果是控制字符则返回1,否则返回0。控制字符包括:空格、制表符、回车、换行、垂直制表符和送纸,其取值范围为0x090x0d,或为0x20。.1.11 十六进制数字检查函数十六进制数字检查函数用于检查形参字符是否为十六进制数字,其函数原型如下:bit isxdigit (char c);其中,c为待判断字符。如果是16进制数字字符则返回1,否则返回0
6、。1.12 十六进制数字转换函数十六进制数字检查函数用于转换形参字符为十六进制数字,其函数原型如下:char toint (char c);其中,c为待转换字符。该函数将形参字符09、af(大小写无关)转换为16进制数字。其中,对于字符09,返回值为0H9H,对于ASCII字符af(大小写无关),返回值为0AH0FH。.1.13 大写字符转换函数大写字符转换函数用于将大写字符转换为小写字符,其函数原型如下:char tolower (char c);其中,c为待转换的大写字符。如果字符参数不在AZ之间,则该函数将不起作用,而直接返回原字符。1.14 小写字符转换函数小写字符转换函数用于将小写字
7、符转换为大写字符,其函数原型如下:char toupper (char c);其中,c为待转换的小写字符。如果字符参数不在az之间,则该函数将不起作用,而直接返回原字符。1.15 ASCII字符转换函数ASCII字符转换函数用于将任何字符型参数缩小到有效的ASCII范围之内,其函数原型如下:char toascii (char c);其中,c为待转换的字符。该函数执行的制作是将形参数值和0x7f做与运算,从而去掉第7位以上的所有位数。如果形参已是有效的ASCII字符,则不作处理,直接返回原字符。.1.16 大写字符宏转换函数大写字符宏转换函数用于大写字符转换为小写字符,其函数原型如下:char
8、 _tolower(char c);其中,c为待转换的大写字符。这其实是一个由宏定义完成的制作,其功能是将字符参数c与常数0x20逐位进行或运算,从而将大写字符转换为小写字符。.1.17 小写字符宏转换函数小写字符宏转换函数用于小写字符转换为大写字符,其函数原型如下:char _toupper (char c);其中,c为待转换的小写字符。这其实是一个由宏定义完成的制作,其功能是将字符参数c与常数0xdf逐位进行与运算,从而将小写字符转换为大写字符。.2 字符串函数字符串函数的原型声明包含在头文件STRING.H中。在C51语言中,字符串应包括2个或多个字符,字符串的结尾以空字符来表示。字符串
9、函数通过接受指针串来对字符串进行处理。常用的字符串函数推荐如下。.2.1 字符查找函数字符查找函数用于在字符串中顺序查找字符,其函数原型如下:void *memchr(void*sl,char val,int len);其中,s1为输入字符串,val为待查找的字符,len为查找的长度范围。该函数的功能是在字符串s1中顺序搜索前len个字符以找出字符val,如果找到则返回sl中指向val的指针,如果没有找到则返回NULL。.2.2 指定长度的字符串比较函数指定长度的字符串比较函数用于按照指定的长度比较两个字符串的大小,其函数原型如下:char memcmp(void*s1, void*s2,in
10、t len);其中,s1和s2为输入字符串,len为比较的长度。该函数的功能是逐个比较字符串sl和s2的前len个字符,如果相等则返回0,如果字符串s1大于s2,则返回一个正数,如果字符串s1小于s2,则返回一个负数。如果两个字符串的长度小于len,该函数仍将一直比较len个字符,这种情况下,有可能结果是不对的。因此应该保证len不能超过最短字符串的长度。.2.3 字符串复制函数字符串复制函数用于复制指定长度的字符串,其函数原型如下:void*memcpy(void*dest,void*src,int len);其中,dest为目标字符串,src为源字符串,len为复制的长度。该函数的功能是从
11、src所指向的字符串中复制len个字符到dest字符串中,其返回值指向dest中的最后一个字符的指针。.2.4 带终止字符的字符串复制函数带终止字符的字符串复制函数用于复制字符串,如果遇到终止字符则停止复制,其函数原型如下:void*memccpy(void*dest, void*src,char val,int len);.其中,dest为目标字符串,src为源字符串,val为终止字符,len为复制的长度。该函数的功能是复制字符串src中的len个字符到dest中,复制len个字符后则返回NULL。如果遇到字符val则停止复制,此时返回一个指向dest中的下一个元素的指针。.2.5 字符串移
12、动函数字符串移动函数同样用于复制字符串,其函数原型如下:void *memmove(void*dest,void*src,int len);其中,dest为目标字符串,src为源字符串,len为复制长度。该函数的功能是从src所指向的字符串中复制len个字符到dest字符串中,其返回值指向dest中的最后一个字符的指针。其功能与memcpy相同,但是复制区间src与dest可以发生交迭。.2.6 字符串填充函数字符串填充函数用于按要求的字符填充字符串,其函数原型如下:void*memset(void*s,char val,int len);其中,s为待填充的字符串,val为填充字符,len为填
13、充的长度。该函数实现的制作是用字符val来填充字符串s,共填充len个单元.2.7 字符串追加函数字符串追加函数用于复制字符串到另一个字符串的尾部,其函数原型如下:void *strcat(char *s1,char *s2);其中,s1为目标字符串,s2为待复制的字符串。该函数实现的制作是将字符串s2复制到字符串s1的尾部。其中字符串s1要有足够的大小来保存两个字符串。该函数的返回值指向字符串s1中的第一个字符的指针。.2.8 指定长度的字符串追加函数指定长度的字符串追加函数用于复制指定长度的字符串到另一个字符串的尾部,其函数原型如下:void*strncat(,char *s1,char
14、*s2,int n);其中,s1为目标字符串,s2为待复制的字符串,n为复制的长度。该函数实现的制作是从字符串s2中复制n个字符添加到字符串s1的尾部。其中,如果字符串s2的长度比n小,则将全部复制字符串s2(包括串结束符)。.2.9 字符串比较函数字符串比较函数用于比较两个字符串的大小,其函数原型如下:char strcmp(char *s1,char *s2);其中,s1和s2为待比较的字符串。该函数的功能是比较字符串s1和s2,如果两者相等则返回0。如果s1s2,则返回一个正数。.2.10 包含结束符的字符串比较函数包含结束符的字符串比较函数用于比较两个字符串的大小,其函数原型如下:ch
15、ar*strncmp(char *s1,char *s2,int n);其中,s1和s2为待比较的字符串,n为比较的长度。该函数的功能是比较字符串s1和s2的前n个字符,如果两者相等则返回0。如果s1s2,则返回一个正数。这里需要和memcmp函数相区别,如果字符串的长度小于n,则strncmp函数比较到字符串结束符后便停止,这和memcmp函数是不一样的。.2.11 字符串覆盖函数字符串覆盖函数用于将一个字符串覆盖另一个字符串,其函数原型如下:char* strcpy(char *s1,char *s2);其中,s1为目标字符串,s2为源字符串。该函数的功能是将字符串s2(包括结束符)复制到
16、字符串s1中的第1个字符指针处。这里需要注意和strcat函数相区别,strcat函数将字符串s2复制到字符串s1的末尾。.2.12 指定长度的字符串覆盖函数指定长度的字符串覆盖函数用于将一个指定长度的字符串覆盖另一个字符串,其函数原型如下:char*strncpy(char *s1,char *s2,int n);其中,s1为目标字符串,s2为源字符串,n为长度。该函数实现的制作是从字符串s2(包括结束符)中复制n个字符到字符串s1中的第1个字符指针处。如果字符串s2的长度小于n,则s1串以0补齐到长度n。.2.13 获取字符串个数函数获取字符串个数函数用于返回字符串中字符总数,其函数原型如
17、下:char*strlen(char *s1);其中,s1为输入字符串。该函数的功能是获取字符串s1中的字符个数,返回值的大小不包括结尾的字符串结束符。.2.14 搜索字符串函数搜索字符串函数用于搜索字符串出现的位置,其函数原型如下:char*strstr(const char *s1,char*s2);其中,s1为目标字符串,s2为搜索的字符串。该函数实现的制作是在字符串s1中搜索第一次出现字符串s2的位置,并返回该处的指针。如果字符串s1中不包括字符串s2,则该函数返回一个空指针。.2.15 搜索字符函数搜索字符函数用于搜索字符出现的位置,其函数原型如下:char*strchr(char
18、*s1,char c);其中,s1为目标字符串,c为待搜索的字符。该函数的功能是搜索字符串s1中是否包含字符c,如果包含则返回第一次指向该字符的指针,否则返回NULL。被搜索的字符可以是串结束符,此时返回值是指向串结束符的指针。.2.16 返回位置值的字符搜索函数返回位置值的字符搜索函数用于搜索并返回字符出现的位置,其函数原型如下:int strpos(char*s1,char c);其中,s1为目标字符串,c为搜索的字符。该函数的功能是查找并返回字符c在字符串s1中第一次出现的位置值,没有找到该字符则返回-1,s1串首字符的位置值是0。strpos函数的功能与strchr类似,只不过返回值不
19、同。.2.17 字符包含函数字符包含函数用于检查字符串中是否包含某字符,其函数原型如下:char*strrchr(char *s1,char c);其中,s1为目标字符串,c为查找的字符。该函数的功能是搜索字符串s1中是否包含字符c,如果包含则返回最后一次指向该字符的指针,否则返回NULL。被搜索的字符可以是串结束符,此时返回值是指向串结束符的指针。.2.18 返回位置值的字符包含函数返回位置值的字符包含函数同样用于检查字符串中是否包含某字符,其函数原型如下:int strrpos(char*s1,char c);其中,s1为目标字符串,c为查找的字符。该函数的功能是查找并返回字符c在字符串s
20、1中最后一次出现的位置值,没有找到该字符则返回-1,s1串首字符的位置值是0。strrpos函数的功能与strrchr类似,只不过返回值不同。.2.19 在指定字符集中查找不包含字符函数在指定字符集中查找不包含字符函数用于查找不包含在指定字符集中的字符,其函数原型如下:int strspn(char*s1,char*set);其中,s1为目标字符串,set为字符集。该函数的功能是搜索字符串s1中第一个不包含在set串中的字符,返回值是字符串s1中包括在set中的字符的个数。如果s1中所有的字符都包含在set中,则返回s1的长度(不包括结束符)。如果set是空字符串则返回0。.2.20 在指定字
21、符集中查找包含字符函数在指定字符集中查找包含字符函数用于查找包含在指定字符集中的字符,其函数原型如下:int strcspn(char*s1,char*set);其中,s1为目标字符串,set为字符集。该函数的功能是搜索的是第一个包含在set串中字符,返回值是字符串s1中包括在set中的字符的个数。如果s1中所有的字符都包含在set中,则返回s1的长度(不包括结束符)。如果set是空字符串则返回0。.2.21 查找第一个包含字符函数查找第一个包含字符函数用于查找第一个包含在指定字符集中的字符,其函数原型如下:char*strpbrk(char *s1,char*set);其中,s1为目标字符串
22、,set为字符集。该函数的功能是搜索字符串s1中第一个包含在set串中的字符,返回值指向搜索到的字符的指针,如果未找到,则返回NULL。.2.22 查找最后一个包含字符函数查找最后一个包含字符函数用于查找最后一个包含在指定字符集中的字符,其函数原型如下:char*strrpbrk(char *s1,char*set);其中,s1为目标字符串,set为字符集。该函数的功能是搜索字符串s1中最后一个包含在set串中的字符,返回值指向搜索到的字符的指针,如果未找到,则返回NULL。.3 I/O函数I/O函数主要用于数据的输入输出等制作,C51的I/O库函数的原型声明包含在头文件STDIO.H中。这些
23、I/O函数使用8051单片机的串行接口进行通信,因此,在使用之前需要先进行串口的初始化。例如:.SCON=0x50; /串口模式1,允许接收TMOD|=0x20; /初始化T1为定时功能,模式2PCON|=0x80; /设置SMOD=1TL1=0xF4; /波特率4800bit/s,初值TH1=0xF4;IE|=0x90; /中断TR1=1; /启动定时器3.1 字符读入函数字符读入函数用于从串口读入一个字符,其函数原型如下:char _getkey(void);该函数执行的制作是等待从8051的串口读入一个字符,并返回读入的原字符。程序示例如下:3.2 字符读入输出函数字符读入输出函数用于从
24、串口读入一个字符并输出该字符,其函数原型如下:char getchar (void);该函数与_getkey函数有细微的不同,其执行的制作是使用_getkey从串口读入的一个字符,然后使用putchar函数将读入的字符输出。.3.3 字符串读入函数字符串读入函数用于从串口读入一个字符串,其函数原型如下:char *gets (char*s, int n);其中,s保存读入的字符串,n为字符串的长度。该函数执行的制作是使用getchar函数从串口读入一个长度为n的字符串,并存入字符数组s中。如果遇到换行符,则结束字符的输入。输入成功时将返回传入的参数指针,失败时返回空指针NULL。.3.4 字符
25、回送函数字符回送函数用于将输入的字符回送到输入缓冲区,其函数原型如下:char ungetchar (char c);其中,c为输入字符。该函数执行的制作是将输入的字符回送到输入缓冲区,如果函数调用成功则返回char型值c,失败时则返回EOF。.3.5 字符输出函数字符输出函数用于通过8051串行口输出字符,其函数原型如下:char putchar (char c);其中,c为通过8051串行口输出的字符。3.6 格式化输出函数格式化输出函数用于按照一定的格式输出数据或字符串,其函数原型如下:int printf (const char *fmstr,argument);该函数的功能是以一定的
26、格式通过8051单片机的串行口输出数值和字符串。其中第一个参数fmstr是格式控制字符串,参数argument可以是字符串指针、字符或数值,该函数的返回值为实际输出的字符个数。.3.7 格式化内存缓冲区输出函数格式化内存缓冲区输出函数用于按照一定的格式将数据或字符串输出到内存缓冲区中,其函数原型如下:int sprintf (char*s,const char *fmstr,argument);.该函数执行的制作是通过指针s,将字符串送入内存数据缓冲区,并以ASCII码的形式储存。3.8 字符串输出函数字符串输出函数用于将字符串和换行符写入串行口,其函数原型如下:int puts (const
27、 char*s);其中,s为输出的字符串或换行符。如果执行成功则返回0,不对时返回EOF。程序示例如下:3.9 格式化输入函数格式化输入函数用于将字符串和数据按照一定的格式从串口读入,其函数原型如下:int scanf (const char *fmstr,argument);该函数的功能是在格式字符的控制下从串行口读入数据。其中每个参数都必须是指针。scanf返回值是所发现并转换的输入项数,如遇到不对则返回EOF。.该函数的格式控制字符串形式如下,方括号内是可选项。%*width Bhltype3.10 格式化内存缓冲区输入函数格式化内存缓冲区输入函数用于将格式化的字符串和数据送入数据缓冲区
28、,其函数原型如下:int sscanf (char*s,const char *fmstr,argument);该函数的功能是将输入的字符串通过指针s指向的数据缓冲区。输入数据根据格式控制字符串fmstr被存放到由argument指定的地址。其它方面,sscanf函数与scanf函数类似。.3.11 字符串内存输出函数字符串内存输出函数用于将格式化字符串输出到内存数据缓冲区,其函数原型如下:int vprintf (const char *fmstr,char *argptr);其中,fmstr为格式化字符串,argptr指向变量表的指针而不是变量表,函数返回值为实际写入到输出字符串中的字符数
29、。其它方面,vprintf函数与printf函数类似。.3.12 指向缓冲区的输出函数指向缓冲区的输出函数用于将格式化字符串和数字输出到由指针所指向的内存数据缓冲区,其函数原型如下:int vsprintf (char*s,const char *fmstr,char *argptr);.该函数执行的制作是将格式化字符串和数字输出到由指针所指向的内存数据缓冲区。其中,该函数接受的是一个指向变量表的指针而不是变量表,其返回值为实际写入到输出字符串中的字符数。其他方面vsprintf函数与sprintf函数类似。.4 数学函数数学函数主要用于进行数学运算,其原型声明包含在头文件MATH.H中。下面
30、推荐一些常用的数学函数。4.1 绝对值函数绝对值函数用于计算并返回输出数据的绝对值。按照其制作数的数据类型的不同,有如下几种形式:int abs(int val);char cabs(char val);float fabs(float val);long labs(long val)这些函数分别用于计算整型、字符型、浮点型以及长整型数据的绝对值。4.2 指数以及对数函数指数函数用于计算并返回输出数据的指数。对数函数用于计算并返回输出数据的对数。其函数原型示例如下:float exp(float x);float log(float x);float log10(float x);float
31、sqrt(float x);其中exp函数用于计算并返回浮点数x的指数,log函数用于计算并返回浮点数x的自然对数(自然对数以e为底,e=2.718282),log10函数用于计算并返回浮点数x的以10为底的对数值,sqrt函数用于计算并返回浮点数x的平方根。.4.3 三角函数三角函数用于计算数学中三角函数的值。在C51语言中包含如下几种三角函数:float cos(float x);float sin(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);fl
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1