常用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) | 检查参数字符是否为控制字符(值在0x00~0x1f之间或等于0x7f)是则返回1,否则返回0 |
bit isdigit(char c) | 检查参数字符是否为十进制数字0~9,是则返回1,否则返回0 |
bit isgraph(char c) | 检查参数字符是否为可打印字符(不包括空格),值域0x21~0x7e,是则返回1,否则返回0 |
bit isprint(char c) | 检查参数字符是否为可打印字符(包括空格),值域0x21~0x7e,是则返回1,否则返回0 |
bit ispunct(char c) | 检查参数字符是否为标点、空格或格式字符,是则返回1,否则返回0 |
bit islower(char c) | 检查参数字符是否为小写英文字母,是则返回1,否则返回0 |
bit isupper(char c) | 检查参数字符是否为大写英文字母,是则返回1,否则返回0 |
bit isspace(char c) | 检查参数字符是否为空格、制表符、回车、换行、垂直制表符和送纸(值为0x09~0x0d,或为0x20),是则返回1,否则返回0 |
bit isxdigit(char c) | 检查参数字符是否为十六进制数字字符,是则返回1,否则返回0 |
char toint(char c) | 将ASCII字符的0~9、a~f(大小写无关)转换为十六进制数字molloc函数 |
char tolower(char c) | 将大写字符转换成小写形式,如果字符参数不在A~Z之间,则该函数不起作用 |
char _tolower(char c) | 将字符参数c与常数0x20逐位相或,从而将大写字符转换成小写字符 |
char toupper(char c) | 将小写字符转换成大写形式,如果字符参数不在a~z之间,则该函数不起作用 |
char _toupper(char c) | 将字符参数c与常数0xdf逐位相与,从而将小写字符转换成大写字符 |
char toascii(char c) | 将任何字符参数值缩小到有效的ASCII范围内,即将c与0x7f相与,去掉第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) | 将输入字符回送到输入缓冲区,因此下次gets或getchar可用该字符。成功时返回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小时内删除。
发表评论