常用Keil C51库函数
Keil C51有丰富的可直接调用的库函数,灵活使用库函数可使程序代码简单、结构清晰,并且易于调试和维护。每个库函数都在相应的头文件中给出了函数原型声明,用户如果需要使用库函数,必须在源程序的开始处用预处理命令“#include”将有关的头文件包含进来。
1.:本征库函数
本征库函数是指编译时直接将固定的代码插入到当前行,而不是用汇编语言中的“ACALL”“LCALL”指令来实现调用,从而大大提高了函数的访问效率。Keil C51的本征库函数有9个,数量少但非常有用。
使用本征库函数时,C51源程序中必须包含预处理命令“#include  <intrins.h>”
函数名及定义
功能说明
unsigned char _crol_(unsigned char val,unsigned char n)
将字符型数据val循环左移n位,相当于RL命令
unsigned int _irol_(unsigned int val,unsigned char n)
将整型数据val循环左移n位,相当于RL命令
unsigned long _lrol_(unsigned long val,unsigned char n)
将长整型数据val循环左移n位,相当于RL命令
unsigned char _cror_(unsigned char val,unsigned char n)
将字符型数据val循环右移n位,相当于RR命令
unsigned int _iror_(unsigned int val,unsigned char n)
将整型数据val循环右移n位,相当于RR命令
unsigned long _lror_(unsigned long val,unsigned char n)
将长整型数据val循环右移n位,相当于RR命令
bit _testbit_(bit x)
相当于JBC  bit指令
unsigned char _chkfloat_(float ual)
测试并返回浮点数状态
void _nop_(void)
产生一个NOP指令
2. 字符判断转换库函数:
字符判断转换库函数的原型声明在头文件CTYPE.H中定义。
函数名及定义
功能说明
bit isalpha(char c)
检查参数字符是否为英文字母,是则返回1,否则返回0
bit isalnum(char c)
检查参数字符是否为英文字母或数字字符,是则返回1,否则返回0
bit iscntrl(char c)
检查参数字符是否为控制字符(值在0x000x1f之间或等于0x7f)是则返回1,否则返回0
bit isdigit(char c)
检查参数字符是否为十进制数字09,是则返回1,否则返回0
bit isgraph(char c)
检查参数字符是否为可打印字符(不包括空格),值域0x210x7e,是则返回1,否则返回0
bit isprint(char c)
检查参数字符是否为可打印字符(包括空格),值域0x210x7e,是则返回1,否则返回0
bit ispunct(char c)
检查参数字符是否为标点、空格或格式字符,是则返回1,否则返回0
bit islower(char c)
检查参数字符是否为小写英文字母,是则返回1,否则返回0
bit isupper(char c)
检查参数字符是否为大写英文字母,是则返回1,否则返回0
bit isspace(char c)
检查参数字符是否为空格、制表符、回车、换行、垂直制表符和送纸(值为0x090x0d,或为0x20),是则返回1,否则返回0
bit isxdigit(char c)
检查参数字符是否为十六进制数字字符,是则返回1,否则返回0
char toint(char c)
ASCII字符的09af(大小写无关)转换为十六进制数字molloc函数
char tolower(char c)
将大写字符转换成小写形式,如果字符参数不在AZ之间,则该函数不起作用
char _tolower(char c)
将字符参数c与常数0x20逐位相或,从而将大写字符转换成小写字符
char toupper(char c)
将小写字符转换成大写形式,如果字符参数不在az之间,则该函数不起作用
char _toupper(char c)
将字符参数c与常数0xdf逐位相与,从而将小写字符转换成大写字符
char toascii(char c)
将任何字符参数值缩小到有效的ASCII范围内,即将c0x7f相与,去掉第7位以上的位
3. 输入输出库函数:
输入输出库函数的原型声明在头文件STDIO.H中定义,通过8051的串行口工作。如果希望支持其他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串口读入一个字符并返回读入的字符,这个函数是改变整个输入端口机制时应做修改的唯一一个函数
char getchar(void)
使用_getkey从串口读入字符,并将读入的字符马上传给putchar函数输出,其他与_getkey函数相同
char *gets(char *s,int n)
该函数通过getchar从串口读入一个长度为n的字符串并存入由s指向的数组。输入时一旦检测到换行符就结束字符输入。输入成功时返回传入的参数指针,失败时返回NULL
char ungetchar(char c)
将输入字符回送到输入缓冲区,因此下次getsgetchar可用该字符。成功时返回char型值,失败时返回EOF,不能处理多个字符
char putchar(char c)
通过8051串行口输出字符,与函数_getkey一样,这是改变整个输出机制所需要修改的唯一一个函数
int printf(const char *fmstr[,argument]...)
以第一个参数指向字符串制定的格式通过8051串行口输出数值和字符串,返回值为实际输出的字符数
int sprintf(char *s,const char *fmstr[,argument]...)
printf功能相似,但数据是通过一个指针s送入内存缓冲区,并以ASCII码的形式存储
int puts(const char *s)
利用putchar函数将字符串和换行符写入串行口,错误时返回EOF,否则返回0
int scanf(const char *fmstr[,argument]...)
在格式控制串的控制下,利用getchar函数从串行口读入数据,每遇到一个符合格式控制串fmstr规定的值,就将它按顺序存入由参数指针argument指向的存储单元。其中每个参数都是指针,函数返回所发现并转换的输入项数,错误则返回EOF
int sscanf(char *s,const char *fmstr[,argument]...)
scanf的输入方式相似,但字符串的输入不是通过串行口,而是通过指针s指向的数据缓冲区
void vprintf(const char *s,char *fmstr,char *argptr)
将格式化字符串和数据值输出到由指针s指向的内存缓冲区内。类似于sprintf,但接受一个指向变量表的指针,而不是变量表。返回值为实际写入到输出字符串中的字符数

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。