单片机原理与应用及C51程序设计(第2版)  谢维成 杨加国主编
附录B  C51的库函数
C51编译器提供了丰富的库函数,使用库函数可以大大简化用户的程序设计工作从而提高编程效率,基于MCS-51系列单片机本身的特点,某些库函数的参数和调用格式与ANSIC标准有所不同。
每个库函数都在相应的头文件中给出了函数原型声明,用户如果需要使用库函数,必须在源程序的开始处采用预处理命令#include,将有关的头文件包含进来。下面是C51中常见的库函数。
B.1  寄存器库函数REG×××.H
在REG×××.H的头文件中定义了MCS-51的所有特殊功能寄存器和相应的位,定义时都用大写字母。当在程序的头部把寄存器库函数REG×××.H包含后,在程序中就可以直接使用MCS-51中的特殊功能寄存器和相应的位。
B.2  字符函数CTYPE.H
函数原型:extern  bit  isalpha (char  c);
再入属性:reentrant
功能:检查参数字符是否为英文字母,是则返回1,否则返回0。
函数原型:extern  bit  isalnum(char  c);
再入属性:reentrant
功能:检查参数字符是否为英文字母或数字字符,是则返回1,否则返回0。
函数原型:extern  bit  iscntrl (char  c);
再入属性:reentrant
功能:检查参数字符是否在0x00~0x1f之间或等于0x7f,是则返回1,否则返回0。
函数原型:extern  bit  isdigit(char  c);
再入属性:reentrant
功能:检查参数字符是否为数字字符,是则返回1,否则返回0。
函数原型:extern  bit  isgraph (char  c);
再入属性:reentrant
功能:检查参数字符是否为可打印字符,可打印字符的ASCII值为0x21~0x7e,是则返回1,否则返回0。
函数原型:extern  bit  isprint (char  c);
附录B  C51的库函数349
再入属性:reentrant
功能:除了与isgraph相同之外,还接收空格符(0x20)。
函数原型:extern  bit  ispunct (char  c);
再入属性:reentrant
功能:检查参数字符是否为标点、空格和格式字符,是则返回1,否则返回0。
函数原型:extern  bit  islower (char  c);
再入属性:reentrant
功能:检查参数字符是否为小写英文字母,是则返回1,否则返回0。
函数原型:extern  bit  isupper (char  c);
再入属性:reentrant库函数printf详解
功能:检查参数字符是否为大写英文字母,是则返回1,否则返回0。
函数原型:extern  bit  isspace (char  c);
再入属性:reentrant
功能:检查参数字符是否为空格、制表符、回车、换行、垂直制表符和送纸之一,是则返回1,否则返回0。
函数原型:extern  bit  isxdigit (char  c);
再入属性:reentrant
功能:检查参数字符是否为十六进制数字字符,是则返回1,否则返回0。
函数原型:extern  char  toint (char  c);
再入属性:reentrant
功能:将ASCII字符的0~9、A~F转换为十六进制数,返回值为0~F。
函数原型:extern  char  tolower (char  c);
再入属性:reentrant
功能:将大写字母转换成小写字母,如果不是大写字母,则不作转换直接返回相应的内容。
函数原型:extern  char  toupper (char  c);
再入属性:reentrant
功能:将小写字母转换成大写字母,如果不是小写字母,则不作转换直接返回相应的内容。
B.3  一般输入/输出函数STDIO.H
C51库中包含的输入/输出函数STDIO.H是通过MCS-51的串行口工作的。在使用输入/输出函数STDIO.H库中的函数之前,应先对串行口进行初始化。例如,以2400波特率(时钟频率为12MHz),初始化程序为:
单片机原理与应用及C51程序设计(第2版) 谢维成 杨加国主编
350
SCON=0x52;
TMOD=0x20;
TH1=0xf3;
TR1=1;
当然也可以用其他的波特率。
在输入/输出函数STDIO.H中,库中的所有其他的函数都依赖getkey()和putchar()函数,如果希望支持其他I/O接口,只须修改这两个函数。
函数原型:extern  char  _getkey(void);
再入属性:reentrant
功能:从串口读入一个字符,不显示。
函数原型:extern  char  getkey(void);
再入属性:reentrant
功能:从串口读入一个字符,并通过串口输出对应的字符。
函数原型:extern  char  putchar(char  c);
再入属性:reentrant
功能:从串口输出一个字符。
函数原型:extern char *gets(char * string,int len);
再入属性:non-reentrant
功能:从串口读入一个长度为len的字符串存入string指定的位置。输入以换行符结束。输入成功则返回传入的参数指针,失败则返回NULL。
函数原型:extern  char  ungetchar(char  c);
再入属性:reentrant
功能:将输入的字符送到输入缓冲区并将其值返回给调用者,下次使用gets或getchar时可得到该字符,但不能返回多个字符。
函数原型:extern  char  ungetkey(char  c);
再入属性:reentrant
功能:将输入的字符送到输入缓冲区并将其值返回给调用者,下次使用_getkey时可得到该字符,但不能返回多个字符。
函数原型:extern  int  printf(const char * fmtstr[,argument]…);
再入属性:non-reentrant
功能:以一定的格式通过MCS-51的串口输出数值或字符串,返回实际输出的字符数。
函数原型:extern  int  sprintf(char * buffer,const char*fmtstr[,argument]);
再入属性:non-reentrant
功能:sprintf与printf的功能相似,但数据不是输出到串口,而是通过一个指针buffer,送入可寻址的内
存缓冲区,并以ASCII码形式存放。
附录B  C51的库函数351
函数原型:extern int puts (const char * string);
再入属性:reentrant
功能:将字符串和换行符写入串行口,错误时返回EOF,否则返回一个非负数。
函数原型:extern  int  scanf(const char * fmtstr[,argument]…);
再入属性:non-reentrant
功能:以一定的格式通过MCS-51的串口读入数据或字符串,存入指定的存储单元,注意,每个参数都必须是指针类型。scanf返回输入的项数,错误时返回EOF。
函数原型:extern  int  sscanf(char *buffer,const char * fmtstr[,argument]);
再入属性:non-reentrant
功能:sscanf与scanf功能相似,但字符串的输入不是通过串口,而是通过另一个以空结束的指针。
B.4  内部函数INTRINS.H
函数原型:unsigned char _crol_(unsigned char var,unsigned char n);
unsigned int _irol_(unsigned int var,unsigned char n);
unsigned  long  _irol_(unsigned long var,unsigned char n);
再入属性:reentrant/intrinse
功能:将变量var循环左移n位,它们与MCS-51单片机的RL  A指令相关。这3个函数的不同之处在于变量的类型与返回值的类型不一样。
函数原型:unsigned char _cror_(unsigned char var,unsigned char n);
unsigned int _iror_(unsigned int var,unsigned char n);
unsigned  long  _iror_(unsigned long var,unsigned char n);
再入属性:reentrant/intrinse
功能:将变量var循环右移n位,它们与MCS-51单片机的RR  A指令相关。这3个函数不同之处在于变量的类型与返回值的类型不一样。
函数原型:void _nop_(void);
再入属性:reentrant/intrinse
功能:产生一个MCS-51单片机的NOP指令。
函数原型:bit  _testbit_(bit  b);
再入属性:reentrant/intrinse
功能:产生一个MCS-51单片机的JBC指令。该函数对字节中的一位进行测试。如为1返回1,如为0返回0。该函数只能对可寻址位进行测试。
单片机原理与应用及C51程序设计(第2版) 谢维成 杨加国主编
352
B.5  标准函数STDLIB.H
函数原型:float  atof(void  *string);
再入属性:non-reentrant
功能:将字符串string转换成浮点数值并返回。
函数原型:long  atol(void  *string);
再入属性:non-reentrant
功能:将字符串string转换成长整型数值并返回。
函数原型:int  atoi(void  *string);
再入属性:non-reentrant
功能:将字符串string转换成整型数值并返回。
函数原型:void *calloc(unsigned int num,unsigned int len);
再入属性:non-reentrant
功能:返回n个具有len长度的内存指针,如果无内存空间可用,则返回NULL。所分配的内存区域用0进行初始化。
函数原型:void  *malloc(unsigned int size);
再入属性:non-reentrant
功能:返回一个具有size长度的内存指针,如果无内存空间可用,则返回NULL。所分配的内存区域不进行初始化。
函数原型:void *realloc (void xdata *p,unsigned int size);
再入属性:non-reentrant
功能:改变指针p所指向的内存单元的大小,原内存单元的内容被复制到新的存储单元中,如果该内存单元的区域较大,多出的部分不作初始化。
realloc函数返回指向新存储区的指针,如果无足够大的内存可用,则返回NULL。
函数原型:void  free(void xdata *p);
再入属性:non-reentrant
功能:释放指针p所指向的存储器区域,如果返回值为NULL,则该函数无效,p必须为以前用callon、malloc或realloc函数分配的存储器区域。
函数原型:void init_mempool(void *data *p,unsigned int size);
再入属性:non-reentrant
功能:对被callon、malloc或realloc函数分配的存储器区域进行初始化。指针p指向存储器区域的首地址,size表示存储区域的大小。