常用Keil-C51库函数_第1页
常用Keil-C51库函数_第2页
常用Keil-C51库函数_第3页
常用Keil-C51库函数_第4页
常用Keil-C51库函数_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、常用Keil C51库函数KeilC51有丰富的可直接调用的库函数,灵活使用库函数可使程序代码简单、结构清晰,并且易于调试和维护。每个库函数都在相应的头文件中给出了函数原型声明,用户如果需要使用库函数,必须在源程序的开始处用预处理命令“#include”将有关的头文件包含进来。1.:本征库函数本征库函数是指编译时直接将固定的代码插入到当前行,而不是用汇编语言中的“ACALL”和“LCALL”指令来实现调用,从而大大提高了函数的访问效率。KeilC51的本征库函数有9个,数量少但非常有用。使用本征库函数时,C51源程序中必须包含预处理命令“#include”。函数名及定义功能说明unsigned

2、char_crol_(unsignedcharval,unsignedcharn)将字符型数据val循环左移n位,相当于RL命令unsignedint_irol_(unsignedintval,unsignedcharn)将整型数据val循环左移n位,相当于RL命令unsignedlong_lrol_(unsignedlongval,unsignedcharn)将长整型数据val循环左移n位,相当于RL命令unsignedchar_cror_(unsignedcharval,unsignedcharn)将字符型数据val循环右移n位,相当于RR命令unsignedint_iror_(unsig

3、nedintval,unsignedcharn)将整型数据val循环右移n位,相当于RR命令unsignedlong_lror_(unsignedlongval,unsignedcharn)将长整型数据val循环右移n位,相当于RR命令bit_testbit_(bitx)相当于JBCbit指令unsignedchar_chkfloat_(floatual)测试并返回浮点数状态void_nop_(void)产生一个NOP指令2. 字符判断转换库函数:字符判断转换库函数的原型声明在头文件CTYPE.H中定义。函数名及定义功能说明bitisalpha(charc)检查参数字符是否为英文字母,是则返回

4、1,否则返回0bitisalnum(charc)检查参数字符是否为英文字母或数字字符,是则返回1,否则返回0bitiscntrl(charc)检查参数字符是否为控制字符(值在0x000x1f之间或等于0x7f)是则返回1,否则返回0bitisdigit(charc)检查参数字符是否为十进制数字09,是则返回1,否则返回0bitisgraph(charc)检查参数字符是否为可打印字符(不包括空格),值域0x210x7e,是则返回1,否则返回0bitisprint(charc)检查参数字符是否为可打印字符(包括空格),值域0x210x7e,是则返回1,否则返回0bitispunct(charc)检

5、查参数字符是否为标点、空格或格式字符,是则返回1,否则返回0bitislower(charc)检查参数字符是否为小写英文字母,是则返回1,否则返回0bitisupper(charc)检查参数字符是否为大写英文字母,是则返回1,否则返回0bitisspace(charc)检查参数字符是否为空格、制表符、回车、换行、垂直制表符和送纸(值为0x090x0d,或为0x20),是则返回1,否则返回0bitisxdigit(charc)检查参数字符是否为十六进制数字字符,是则返回1,否则返回0chartoint(charc)将ASCII字符的09、af(大小写无关)转换为十六进制数字chartolower

6、(charc)将大写字符转换成小写形式,如果字符参数不在AZ之间,则该函数不起作用char_tolower(charc)将字符参数c与常数0x20逐位相或,从而将大写字符转换成小写字符chartoupper(charc)将小写字符转换成大写形式,如果字符参数不在az之间,则该函数不起作用char_toupper(charc)将字符参数c与常数0xdf逐位相与,从而将小写字符转换成大写字符chartoascii(charc)将任何字符参数值缩小到有效的ASCII范围内,即将c与0x7f相与,去掉第7位以上的位3. 输入输出库函数:输入输出库函数的原型声明在头文件STDIO.H中定义,通过8051

7、的串行口工作。如果希望支持其他I/O接口,只需要改动_getkey()和putchar()函数。库中所有其他的I/O支持函数都依赖于这两个函数模块。在使用8051系列单片机的串行口之前,应先对其进行初始化。例如,以2400波特率(12MHz时钟频率)初始化串行口的语句如下:SCON=0x52;/SCON置初值TMOD=0x20;/TMOD置初值TH1=0xF3;/T1置初值TR1=1;/启动T1函数名及定义功能说明char_getkey(void)等待从8051串口读入一个字符并返回读入的字符,这个函数是改变整个输入端口机制时应做修改的唯一一个函数chargetchar(void)使用_get

8、key从串口读入字符,并将读入的字符马上传给putchar函数输出,其他与_getkey函数相同char*gets(char*s,intn)该函数通过getchar从串口读入一个长度为n的字符串并存入由s指向的数组。输入时一旦检测到换行符就结束字符输入。输入成功时返回传入的参数指针,失败时返回NULLcharungetchar(charc)将输入字符回送到输入缓冲区,因此下次gets或getchar可用该字符。成功时返回char型值,失败时返回EOF,不能处理多个字符charputchar(charc)通过8051串行口输出字符,与函数_getkey一样,这是改变整个输出机制所需要修改的唯一一

9、个函数intprintf(constchar*fmstr,argument.)以第一个参数指向字符串制定的格式通过8051串行口输出数值和字符串,返回值为实际输出的字符数intsprintf(char*s,constchar*fmstr,argument.)与printf功能相似,但数据是通过一个指针s送入内存缓冲区,并以ASCII码的形式存储intputs(constchar*s)利用putchar函数将字符串和换行符写入串行口,错误时返回EOF,否则返回0intscanf(constchar*fmstr,argument.)在格式控制串的控制下,利用getchar函数从串行口读入数据,每遇

10、到一个符合格式控制串fmstr规定的值,就将它按顺序存入由参数指针argument指向的存储单元。其中每个参数都是指针,函数返回所发现并转换的输入项数,错误则返回EOFintsscanf(char*s,constchar*fmstr,argument.)与scanf的输入方式相似,但字符串的输入不是通过串行口,而是通过指针s指向的数据缓冲区voidvprintf(constchar*s,char*fmstr,char*argptr)将格式化字符串和数据值输出到由指针s指向的内存缓冲区内。类似于sprintf,但接受一个指向变量表的指针,而不是变量表。返回值为实际写入到输出字符串中的字符数4.

11、字符串处理库函数:字符串处理库函数的原型声明包含在头文件STRING.H中,字符串函数通常接收指针串作为输入值。一个字符串包括两个或多个字符,字符串的结尾以空字符表示。在函数memcmp、memcpy、memchr、memccpy、memset和memmove中,字符串的长度由调用者明确规定,这些函数可工作在任何模式。函数名及定义功能说明void*memchr(void*s1,charval,intlen)顺序搜索字符串s1的前len个字符,以找出字符val,成功时返回s1中指向val的指针,失败时返回NULLcharmemcmp(void*s1,void*s2,intlen)逐个字符比较串s

12、1和s2的前len个字符,成功时返回0,如果串s1大于或小于s2,则相应地返回一个正数或一个负数void*memcpy(void*dest,void*src,intlen)从src所指向的内存中复制len个字符到dest中,返回指向dest中最后一个字符的指针。如果src与dest发生交迭,则结果是不可测的void*memccpy(void*dest,void*src,charval,intlen)复制src中len个元素到dest中。如果实际复制了len个字符则返回NULL。复制过程在复制完字符val后停止,此时返回指向dest中下一个元素的指针void*memmove(void*dest,

13、void*src,intlen)它的工作方式于memcpy相同,但复制的区域可以交迭voidmemset(void*s,charval,intlen)用val来填充指针s中的len个单元void*strcat(char*s1,char*s2)将串s2复制到s1的尾部。strcat假定s1所定义的地址区域足以接受两个串。返回指向s1中的第一个字符的指针char*strncat(char*s1,char*s2,intn)复制串s2中n个字符到s1的尾部,如果s2比n短,则只复制s2(包括串结束符)charstrcmp(char*s1,char*s2)比较串s1和s2,如果相等则返回0;如果s1s2

14、,则返回一个正数charstrncmp(char*s1,char*s2,intn)比较串s1和s2中的前n个字符。返回值同上char*strcpy(char*s1,char*s2)将串s2(包括结束符)复制到s1中,返回指向s1中第一个字符的指针char*strncpy(char*s1,char*s2,intn)与strcpy相似,但它只复制n个字符。如果s2的长度小于n,则s1串以0补齐到长度nintstrlen(char*s1)返回串s1中的字符个数,不包括结尾的空字符char*strstr(constchar*s1,char*s2)搜索字符串s2中第一次出现在s1中的位置,并返回一个指向

15、第一次出现位置开始处的指针。如果字符串s1中不包括字符串s2,则返回一个空指针char*strchr(char*s1,charc)搜索s1串中第一个出现的字符c,如果成功则返回指向该字符的指针,否则返回NULL。被搜索的字符可以是串结束符,此时返回值是指向串结束符的指针intstrpos(char*s1,charc)与strchr类似,但返回的是字符c在串s1中第一次出现的位置值,没有找到则返回-1。s1串首字符的位置是0char*strrchr(char*s1,charc)搜索s1串中最后一个出现的字符c,如果成功则返回指向该字符的指针,否则返回NULL。被搜索的字符可以是串结束符intst

16、rrpos(char*s1,charc)与strrchr相似,但返回值是字符c在s1串中最后一次出现的位置值,没有找到则返回-1intstrspn(char*s1,char*set)搜索s1串中第一个不包括在set串中的字符,返回值是s1中包括在set里的字符个数。如果s1中的所有字符都包括在set里面,则返回s1的长度(不包括结束符)。如果set是空串,则返回0intstrcspn(char*s1,char*set)与strspn相似,但它搜索的是s1串中的第一个包含在set里的字符。char*strpbrk(char*s1,char*set)与strspn相似,但返回指向搜索到的字符的指针

17、,而不是个数;如果未找到,则返回NULLchar*strrpbrk(char*s1,char*set)与strpbrk相似,但它返回s1中指向找到的set字符集中最后一个字符的指针5. 类型转换及内存分配库函数:类型转换及内存分配库函数的原型声明包含在头文件STDLIB.H中,利用该库函数可以完成数据类型转换以及存储器分配操作。函数名及定义功能说明floatatof(char*s1)将字符串s1转换成浮点数值并返回,输入串中必须包含与浮点值规定相符的数。该函数在遇到第一个不能构成数字的字符时,停止对输入字符串的读操作longatoll(char*s1)将字符串s1转换成一个长整型数值并返回,输

18、入串中必须包含与长整型数格式相符的字符串。该函数在遇到第一个不能构成数字的字符时,停止对输入字符串的读操作intatoi(char*s1)将字符串s1转换成整型数并返回,输入串中必须包含与整型数格式相符的字符串。该函数在遇到第一个不能构成数字的字符时,停止对输入字符串读操作void*calloc(unsignedintn,unsignedintsize)为n个元素的数组分配内存空间,数组中每个元素的大小为size,所分配的内存区域用0初始化。返回值为已分配的内存单元起始地址,如不成功则返回0voidfree(voidxdata*p)释放指针p所指向的存储器区域。如果p为NULL,则该函数无效,

19、p必须是以前用calloc、malloc或realloc函数分配的存储器区域。调用free函数后,被释放的存储器区域就可以参加以后的分配了voidinit_mempool(voidxdata*p,unsignedintsize)对可被函数calloc、free、malloc或realloc管理的存储器区域进行初始化,指针p表示存储区的首地址,size表示存储区的大小void*malloc(unsignedintsize)在内存中分配一个size字节大小的存储器空间,返回值为一个size大小对象所分配的内存指针。如果返回NULL,则无足够的内存空间可用void*realloc(voidxdata

20、*p,unsignedintsize)用于调整先前分配的存储器区域大小。参数p指示该存储区域的起始地址,参数size表示新分配存储器区域的大小。原存储器区域的内容被复制到新存储器区域中。如果新区域较大,多出的区域将不作初始化。realloc返回指向新存储区的指针,如果返回NULL,则无足够大的内存可用,这时将保持原存储区不变。intrand()返回一个032767之间的伪随机数,对rand的相继调用将产生相同序列的随机数voidsrand(intn)用来将随机数发生器初始化成一个已知(或期望)值unsignedlongstrtod(constchar*s,char*ptr)将字符串s转换为一个

21、浮点型数据并返回,字符串前面的空格、/、tab符被忽略longstrtol(constchar*s,char*ptr,unsignedcharbase)将字符串s转换为一个long型数据并返回,字符串前面的空格、/、tab符被忽略longstrtoul(constchar*s,char*ptr,unsignedcharbase)将字符串s转换为一个unsignedlong型数据并返回,溢出时则返回ULONG_MAX。字符串前面的空格、/、tab符被忽略6. 数学计算库函数:数学计算库函数的原型声明包含在头文件MATH.H中。函数名及定义功能说明intabs(intval)charcabs(charval)floatfabs(floatval)longlabs(longval)abs计算并返回val的绝对值。如果val为正,则不做改变就返回;如果val为负,则返回相反数。其余3个函数除了变量和返回值类型不同之外,其他功能完全相同floatexp(floatx)floatlog(floatx)floatlog1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论