zoukankan      html  css  js  c++  java
  • Keil C51的库函数

    转自:http://www.dwenzhao.cn/profession/mcu/mcu51clib.html

    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(大小写无关)转换为十六进制数字

    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,但接受一个指向变量表的指针,而不是变量表。返回值为实际写入到输出字符串中的字符数

    4. 字符串处理库函数:

    字符串处理库函数的原型声明包含在头文件STRING.H中,字符串函数通常接收指针串作为输入值。一个字符串包括两个或多个字符,字符串的结尾以空字符表示。在函数memcmp、memcpy、memchr、memccpy、memset和memmove中,字符串的长度由调用者明确规定,这些函数可工作在任何模式。

    函数名及定义

    功能说明

    void *memchr(void *s1, char val, int len)

    顺序搜索字符串s1的前len个字符,以找出字符val,成功时返回s1中指向val的指针,失败时返回NULL

    char memcmp(void *s1, void *s2, int len)

    逐个字符比较串s1和s2的前len个字符,成功时返回0,如果串s1大于或小于s2,则相应地返回一个正数或一个负数

    void *memcpy(void *dest, void *src , int len)

    从src所指向的内存中复制len个字符到dest中,返回指向dest中最后一个字符的指针。如果src与dest发生交迭,则结果是不可测的

    void *memccpy(void *dest, void *src, char val, int len)

    复制src中len个元素到dest中。如果实际复制了len个字符则返回NULL。复制过程在复制完字符val后停止,此时返回指向dest中下一个元素的指针

    void *memmove(void *dest, void *src, int len)

    它的工作方式于memcpy相同,但复制的区域可以交迭

    void memset(void *s, char val, int len)

    用val来填充指针s中的len个单元

    void *strcat(char *s1, char *s2)

    将串s2复制到s1的尾部。strcat假定s1所定义的地址区域足以接受两个串。返回指向s1中的第一个字符的指针

    char *strncat( char *s1, char *s2, int n)

    复制串s2中n个字符到s1的尾部,如果s2比n短,则只复制s2(包括串结束符)

    char strcmp(char *s1, char *s2)

    比较串s1和s2,如果相等则返回0;如果s1<s2,则返回一个负数;如果s1>s2,则返回一个正数

    char strncmp(char *s1, char *s2, int n)

    比较串s1和s2中的前n个字符。返回值同上

    char *strcpy(char *s1, char *s2)

    将串s2(包括结束符)复制到s1中,返回指向s1中第一个字符的指针

    char *strncpy(char *s1, char *s2, int n)

    与strcpy相似,但它只复制n个字符。如果s2的长度小于n,则s1串以0补齐到长度n

    int strlen(char *s1)

    返回串s1中的字符个数,不包括结尾的空字符

    char *strstr(const char *s1, char *s2)

    搜索字符串s2中第一次出现在s1中的位置,并返回一个指向第一次出现位置开始处的指针。如果字符串s1中不包括字符串s2,则返回一个空指针

    char *strchr(char *s1, char c)

    搜索s1串中第一个出现的字符c,如果成功则返回指向该字符的指针,否则返回NULL。被搜索的字符可以是串结束符,此时返回值是指向串结束符的指针

    int strpos(char *s1, char c)

    与strchr类似,但返回的是字符c在串s1中第一次出现的位置值,没有找到则返回-1。s1串首字符的位置是0

    char *strrchr(char *s1, char c)

    搜索s1串中最后一个出现的字符c,如果成功则返回指向该字符的指针,否则返回NULL。被搜索的字符可以是串结束符

    int strrpos(char *s1, char c)

    与strrchr相似,但返回值是字符c在s1串中最后一次出现的位置值,没有找到则返回-1

    int strspn(char *s1, char *set)

    搜索s1串中第一个不包括在set串中的字符,返回值是s1中包括在set里的字符个数。如果s1中的所有字符都包括在set里面,则返回s1的长度(不包括结束符)。如果set是空串,则返回0

    int strcspn(char *s1, char *set)

    与strspn相似,但它搜索的是s1串中的第一个包含在set里的字符。

    char *strpbrk(char *s1, char *set)

    与strspn相似,但返回指向搜索到的字符的指针,而不是个数;如果未找到,则返回NULL

    char *strrpbrk(char *s1, char *set)

    与strpbrk相似,但它返回s1中指向找到的set字符集中最后一个字符的指针

    5. 类型转换及内存分配库函数:

    类型转换及内存分配库函数的原型声明包含在头文件STDLIB.H中,利用该库函数可以完成数据类型转换以及存储器分配操作。

    函数名及定义

    功能说明

    float atof(char *s1)

    将字符串s1转换成浮点数值并返回,输入串中必须包含与浮点值规定相符的数。该函数在遇到第一个不能构成数字的字符时,停止对输入字符串的读操作

    long atoll(char *s1)

    将字符串s1转换成一个长整型数值并返回,输入串中必须包含与长整型数格式相符的字符串。该函数在遇到第一个不能构成数字的字符时,停止对输入字符串的读操作

    int atoi(char *s1)

    将字符串s1转换成整型数并返回,输入串中必须包含与整型数格式相符的字符串。该函数在遇到第一个不能构成数字的字符时,停止对输入字符串读操作

    void *calloc(unsigned int n, unsigned int size)

    为n个元素的数组分配内存空间,数组中每个元素的大小为size,所分配的内存区域用0初始化。返回值为已分配的内存单元起始地址,如不成功则返回0

    void free(void xdata *p)

    释放指针p所指向的存储器区域。如果p为NULL,则该函数无效,p必须是以前用calloc、malloc或realloc函数分配的存储器区域。调用free函数后,被释放的存储器区域就可以参加以后的分配了

    void init_mempool(void xdata *p, unsigned int size)

    对可被函数calloc、free、malloc或realloc管理的存储器区域进行初始化,指针p表示存储区的首地址,size表示存储区的大小

    void *malloc(unsigned int size)

    在内存中分配一个size字节大小的存储器空间,返回值为一个size大小对象所分配的内存指针。如果返回NULL,则无足够的内存空间可用

    void *realloc(void xdata *p, unsigned int size)

    用于调整先前分配的存储器区域大小。参数p指示该存储区域的起始地址,参数size表示新分配存储器区域的大小。原存储器区域的内容被复制到新存储器区域中。如果新区域较大,多出的区域将不作初始化。realloc返回指向新存储区的指针,如果返回NULL,则无足够大的内存可用,这时将保持原存储区不变。

    int rand()

    返回一个0~32767之间的伪随机数,对rand的相继调用将产生相同序列的随机数

    void srand(int n)

    用来将随机数发生器初始化成一个已知(或期望)值

    unsigned long strtod (const char *s, char **ptr)

    将字符串s转换为一个浮点型数据并返回,字符串前面的空格、/、tab符被忽略

    long strtol (const char *s, char **ptr, unsigned char base)

    将字符串s转换为一个long型数据并返回,字符串前面的空格、/、tab符被忽略

    long strtoul (const char *s, char **ptr, unsigned char base)

    将字符串s转换为一个unsigned long型数据并返回,溢出时则返回ULONG_MAX。字符串前面的空格、/、tab符被忽略

    6. 数学计算库函数:

    数学计算库函数的原型声明包含在头文件MATH.H中。

    函数名及定义

    功能说明

    int abs(int val)

    char cabs(char val)

    float fabs(float val)

    long labs(long val)

    abs计算并返回val的绝对值。如果val为正,则不做改变就返回;如果val为负,则返回相反数。其余3个函数除了变量和返回值类型不同之外,其他功能完全相同

    float exp(float x)

    float log(float x)

    float log10(float x)

    exp计算并返回浮点数x的指数函数

    log计算并返回浮点数x的自然对数(以e为底,e=2.718282)

    log10计算并返回浮点数x以10为底的对数

    float sqrt(float x)

    计算并返回x的正平方根

    float cos(float x)

    float sin(float x)

    float tan(float x)

    cos计算并返回x的余弦值

    sin计算并返回x的正弦值

    tan计算并返回x的正切值

    变量范围-π/2~+π/2

    值在-65535~+65535之间

    否则产生NaN错误

    float acos(float x)

    float asin(float x)

    float atan(float x)

    float atan2(float y, float x)

    acos计算并返回x的反余弦值

    asin计算并返回x的反正弦值

    atan计算并返回x的反正切值,值域为-π/2~+π/2

    atan2计算并返回y/x的反正切值,值域为-π~+π

    float cosh(float x)

    float sinh(float x)

    float tanh(float x)

    cosh计算并返回x的双曲余弦值

    sinh计算并返回x的双曲正弦值

    tanh计算并返回x的双曲正切值

    float ceil(float x)

    计算并返回一个不小于x的最小整数(作为浮点数)

    float floor(float x)

    计算并返回一个不大于x的最小整数(作为浮点数)

    float modf(float x, float *ip)

    将浮点数x分成整数和小数部分,两者都含有与x相同的符号,整数部分放入*ip,小数部分作为返回值

    float pow(float x, float y)

    计算并返回xy值,如果x不等于0而y=0,则返回1.当x=0且y<=0或当x<0且y不是整数时,则返回NaN

  • 相关阅读:
    centos基于.net的第一个asp项目
    centos创建第一个 .NET app
    centos搭建.net3.1环境
    ASP.NET Core 的 Docker 映像
    centos+python2+django+nginx+uwsgi环境搭建
    centos+python2+flask+nginx+uwsgi环境搭建
    centos+python2+apache2+flask环境搭建
    小程序字体转换
    小程序播放语音之wx.createInnerAudioContext()
    小程序隐藏scroll-view滚动条的实现
  • 原文地址:https://www.cnblogs.com/jasonleeee/p/6932819.html
Copyright © 2011-2022 走看看