c51库函数

合集下载

常用Keil C51库函数

常用Keil C51库函数
void *memcpy(void *dest, void *src , int len)
从src所指向的内存中复制len个字符到dest中,返回指向dest中最后一个字符的指针。如果src与dest发生交迭,则结果是不可测的
void *memccpy(void *dest, void *src, char val, int len)
bit isdigit(char c)
检查参数字符是否为十进制数字0~9,是则返回1,否则返回0
bit isgraph(char c)
检查参数字符是否为可打印字符(不包括空格),值域0x21~0x7e,是则返回1,否则返回0
bit isprint(char c)
检查参数字符是否为可打印字符(包括空格),值域0x21~0x7e,是则返回1,否则返回0
int printf(const char *fmstr[,argument]...)
以第一个参数指向字符串制定的格式通过8051串行口输出数值和字符串,返回值为实际输出的字符数
int sprintf(char *s,const char *fmstr[,argument]...)
与printf功能相似,但数据是通过一个指针s送入内存缓冲区,并以ASCII码的形式存储
将串s2(包括结束符)复制到s1中,返回指向s1中第一个字符的指针
char *strncpy(char *s1, char *s2, int n)
与strcpy相似,但它只复制n个字符。如果s2的长度小于n,则s1串以0补齐到长度n
int strlen(char *s1)
返回串s1中的字符个数,不包括结尾的空字符
char strcmp(char *s1, char *s2)

C51库函数详解

C51库函数详解

_chkfloat_:函数定义:unsigned char _chkfloat_ ( float val); /* number to check */函数功能:_chkfloat_函数检查浮点数val 的类型。

返回值:_chkfloat_函数返回浮点数val 的类型。

返回值意义0 标准浮点数1 浮点02 +INF 正溢出3 -INF 负溢出4 NaN 非数函数测试:#include <reg51.h>#include <intrins.h>/*本实验测试本征库中的_chkfloat_函数函数定义:unsigned char _chkfloat_(float val);返回值:Return Value Meaning0 Standard floating-point number.1 Floating-point value 0.2 +INF (positive overflow).3 -INF (negative overflow).4 NaN (Not a Number) error status.用P1指示返回值*/unsigned char f[4]={0xff,0xff,0xff,0xff};void delay(unsigned int time){while(time--);}void main(){P2=~_chkfloat_(1.2455); //Standard floating-point number.delay(50000);P2=~_chkfloat_(0.00); //Floating-point value 0.delay(50000);P2=~_chkfloat_(1000000000000000000000000000000000000000000000000000000000000000.0000 000000); //+INF (positive overflow).delay(50000);P2=~_chkfloat_(-1000000000000000000000000000000000000000000000000000000000000000.000 0000000); //-INF (negative overflow).delay(50000);P2=~_chkfloat_(*((float *)f)); //NaN (Not a Number) error status.while(1);_crol_:函数定义:unsigned char _crol_ ( unsigned char c, /* character to rotate left */unsigned char b); /* bit positions to rotate */ 函数功能:_crol_函数将一个字节c循环左移b位。

C51的库函数

C51的库函数

单片机原理与应用及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。

C51库函数

C51库函数

C51库函数积累:(1)_chkfloat_:函数定义:unsigned char _chkfloat_ ( float val); /* number to check */函数功能:_chkfloat_函数检查浮点数val 的类型。

返回值:_chkfloat_函数返回浮点数val 的类型。

P2=~_chkfloat_; delay(50000);P2=~_chkfloat_; delay(50000);P2=~_chkfloat_; delay(50000);P2=~_chkfloat_(*((float *)f)); while(1);}(2)_crol_:函数定义:unsigned char _crol_ ( unsigned char c, unsigned char b);/* character to rotate left *//* bit positions to rotate */函数功能:_crol_函数将一个字节c循环左移b位。

返回值:_crol函数返回将c循环左移b位后的值。

/*本实验测试本征库中的_crol_函数函数定义:unsigned char _crol_(unsigned char c,unsigned char b);返回值:_crol_函数返回将c循环左移b位后的值。

用P1指示返回值*/y=cos(x);y=cosh(x); //y=while(1);}(28)exp:函数定义:float exp ( float x); /* power to use for ex function */函数功能:取x的自然指数值。

返回值:x的自然指数值。

/*本实验测试标准库中的exp函数函数定义:float exp(float x);返回值:x的自然指数值。

*/函数测试:#include <>#include <>void main(){float x,y;x=;y=exp(x); //y=while(1);}(29)fabs:函数定义:float fabs ( float val); /* number to take absolute value of */函数功能:取浮点val的绝对值。

C语言中KeilC51库函数大全

C语言中KeilC51库函数大全

Keil C51库函‎数参考C51强大‎功能及其高‎效率的重要‎体现之一在‎于其丰富的‎可直接调用‎的库函数,多使用库函‎数使程序代‎码简单,结构清晰,易于调试和‎维护,下面介绍C‎51的库函‎数系统。

第一节本征库函数‎(intri‎nsic routi‎n e s)和非本征证‎库函数C51提供‎的本征函数‎是指编译时‎直接将固定‎的代码插入‎当前行,而不是用A‎C ALL和‎L CALL‎语句来实现‎,这样就大大‎提供了函数‎访问的效率‎,而非本征函‎数则必须由‎A CALL‎及LCAL‎L调用。

C51的本‎征库函数只‎有9个,数目虽少,但都非常有‎用,列如下:_crol‎_,_cror‎_:将char‎型变量循环‎向左(右)移动指定位‎数后返回_iror‎_,_irol‎_:将int型‎变量循环向‎左(右)移动指定位‎数后返回_lrol‎_,_lror‎_:将long‎型变量循环‎向左(右)移动指定位‎数后返回_nop_‎:相当于插入‎N OP_test‎b it_:相当于JB‎C bitva‎r测试该位‎变量并跳转‎同时清除。

_chkf‎l oat_‎:测试并返回‎源点数状态‎。

使用时,必须包含#inclu‎c le <intri‎n s.h>一行。

如不说明,下面谈到的‎库函数均指‎非本征库函‎数。

第二节几类重要库‎函数1. 专用寄存器‎i nclu‎d e文件例如803‎1、8051均‎为REG5‎1.h其中包括‎了所有80‎51的SF‎R及其位定‎义,一般系统都‎必须包括本‎文件。

2. 绝对地址i‎n clud‎e文件ab‎s acc.h该文件中实‎际只定义了‎几个宏,以确定各存‎储空间的绝‎对地址。

3. 动态内存分‎配函数,位于std‎l ib.h中4. 缓冲区处理‎函数位于“strin‎g.h”中其中包括拷‎贝比较移动‎等函数如:memcc‎p y memch‎r memcm‎p memcp‎y memmo‎v e memse‎t这样很方便‎地对缓冲区‎进行处理。

C语言中KeilC51库函数大全

C语言中KeilC51库函数大全

C51强大功能及其高效率的重要体现之一在于其丰富的可直接调用的库函数,多使用库函数使程序代码简单,结构清晰,易于调试和维护,下面介绍C51的库函数系统。

第一节本征库函数(i n t r i n s i c r o u t i n es)和非本征证库函数C51提供的本征函数是指编译时直接将固定的代码插入当前行,而不是用ACALL 和LCALL语句来实现,这样就大大提供了函数访问的效率,而非本征函数则必须由ACALL及LCALL调用。

C51的本征库函数只有9个,数目虽少,但都非常有用,列如下:_crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回_iror_,_irol_:将int型变量循环向左(右)移动指定位数后返回_lrol_,_lror_:将long型变量循环向左(右)移动指定位数后返回_nop_:相当于插入NOP_testbit_:相当于JBC bitvar测试该位变量并跳转同时清除。

_chkfloat_:测试并返回源点数状态。

使用时,必须包含#inclucle <>一行。

如不说明,下面谈到的库函数均指非本征库函数。

第二节几类重要库函数1. 专用寄存器include文件例如8031、8051均为其中包括了所有8051的SFR及其位定义,一般系统都必须包括本文件。

2. 绝对地址include文件该文件中实际只定义了几个宏,以确定各存储空间的绝对地址。

3. 动态内存分配函数,位于中4. 缓冲区处理函数位于“”中其中包括拷贝比较移动等函数如:memccpy memchr memcmp memcpy memmove memset这样很方便地对缓冲区进行处理。

5. 输入输出流函数,位于“”中流函数通8051的串口或用户定义的I/O口读写数据,缺省为8051串口,如要修改,比如改为LCD显示,可修改lib目录中的及源文件,然后在库中替换它们即可。

第三节K ei l C51库函数原型列表1.bit isalnum(char c);bit isalpha(char c);bit iscntrl(char c);bit isdigit(char c);bit isgraph(char c);bit islower(char c);bit isprint(char c);bit ispunct(char c);bit isspace(char c);bit isupper(char c);bit isxdigit(char c);bit toascii(char c);bit toint(char c);char tolower(char c);char __tolower(char c);char toupper(char c);char __toupper(char c);2.unsigned char _crol_(unsigned char c,unsigned char b);unsigned char _cror_(unsigned char c,unsigned char b);unsigned char _chkfloat_(float ual);unsigned int _irol_(unsigned int i,unsigned char b);unsigned int _iror_(unsigned int i,unsigned char b);unsigned long _irol_(unsigned long l,unsigned char b);unsigned long _iror_(unsigned long L,unsigned char b);void _nop_(void);bit _testbit_(bit b);3.char getchar(void);char _getkey(void);char *gets(char * string,int len);int printf(const char * fmtstr[,argument]…);char putchar(char c);int puts (const char * string);int scanf(const char * fmtstr.[,argument]…);int sprintf(char * buffer,const char *fmtstr[;argument]);int sscanf(char *buffer,const char * fmtstr[,argument]);char ungetchar(char c);void vprintf (const char *fmtstr,char * argptr);void vsprintf(char *buffer,const char * fmtstr,char * argptr);4.float atof(void * string);int atoi(void * string);long atol(void * string);void * calloc(unsigned int num,unsigned int len);void free(void xdata *p);void init_mempool(void *data *p,unsigned int size);void *malloc (unsigned int size);int rand(void);void *realloc (void xdata *p,unsigned int size);void srand (int seed);5.void *memccpy (void *dest,void *src,char c,int len);void *memchr (void *buf,char c,int len);char memcmp(void *buf1,void *buf2,int len);void *memcopy (void *dest,void *SRC,int len);void *memmove (void *dest,void *src,int len);void *memset (void *buf,char c,int len);char *strcat (char *dest,char *src);char *strchr (const char *string,char c);char strcmp (char *string1,char *string2);char *strcpy (char *dest,char *src);int strcspn(char *src,char * set);int strlen (char *src);char *strncat (char 8dest,char *src,int len);char strncmp(char *string1,char *string2,int len);char strncpy (char *dest,char *src,int len);char *strpbrk (char *string,char *set);int strpos (const char *string,char c);char *strrchr (const char *string,char c);char *strrpbrk (char *string,char *set);int strrpos (const char *string,char c);int strspn(char *string,char *set);系统分类:用户分类:标签:无标签来源:整理阅读全文(121) | 回复(0)发表于2009/6/23 13:41:24Hello位于\C51\excmples\Hello\目录,其功能是向串口输出“Hello,world”整个程序如下:#pragma DB OE CD#indule <>#include<>void main(void){SCOn=0x50;TMOD=0x20TH1=0xf3;Tri=1;TI=1;printf(“Hello,world \n”);while(1) { }}第一节u V i s i o n f o r W i n d o w s的使用步骤(1) file_new新建一个文件,输入如上内容或直接用目录下源文件。

c51中的intrins库函数

c51中的intrins库函数

c51中的intrins库函数流水灯循环左移右移,用C语言,要高效的话,只有用伪本征函数文件“intrins.h”中的_crol_(),_cror_()...等等函数,具体解释如蓝色文字,例如,要用P1口驱动8个共阳连接的二极管左循环一个一个地亮,语句是 P1=_crol_(a,1);//a储存被移位的字符。

_crol_ 字符循环左移_cror_ 字符循环右移_irol_ 整数循环左移_iror_ 整数循环右移_lrol_ 长整数循环左移_lror_ 长整数循环右移_nop_ 空操作8051 NOP 指令_testbit_ 测试并清零位8051 JBC 指令详解:函数名: _crol_,_irol_,_lrol_原型: unsigned char _crol_(unsigned char val,unsigned char n);unsigned int _irol_(unsigned int val,unsigned char n);unsigned int _lrol_(unsigned int val,unsigned char n);功能:_crol_,_irol_,_lrol_以位形式将val 左移n 位,该函数与8051“RLA”指令相关,上面几个函数不同于参数类型。

例:#includemain(){unsigned int y;C-5 1 程序设计 37y=0x00ff;y=_irol_(y,4); /*y=0x0ff0*/}函数名: _cror_,_iror_,_lror_原型: unsigned char _cror_(unsigned char val,unsigned char n);unsigned int _iror_(unsigned int val,unsigned char n);unsigned int _lror_(unsigned int val,unsigned char n);功能:_cror_,_iror_,_lror_以位形式将val 右移n 位,该函数与8051“RRA”指令相关,上面几个函数不同于参数类型。

单片机基础与应用(C语言版)第3章 C51程序设计基础

单片机基础与应用(C语言版)第3章 C51程序设计基础

选择语句
多分支选择的switch语句, 其一般形式如下: switch(表达式)
{ case常量表达式1: 语句组1;break; case常量表达式2: 语句组2;break; …… case常量表达式n: 语句组n;break; default : 语句组n+1;
} 该语句的执行过程是:首先计算表达式的值,并逐个与case后的常量表达 式的值相比较,当表达式的值与某个常量表达式的值相等时,则执行对应 该常量表达式后的语句组,再执行break语句,跳出switch语句的执行,继 续执行下一条语句。如果表达式的值与所有case后的常量表达式均不相同, 则执行default后的语句组。
位运算
按位或操作符: |
或操作
格式:x|y
规则:对应位均为0时才为0,否则为1 例如, i=i|0x0f; 等同于
i|=0x0f;
主要用途:将1个数的某(些)位置1,其余各位不变
位运算
异或操作
按位异或操作符:^ 格式:x^y 规则:对应位相同时为0,不同时为1
例如, i=i^0x0f; 等同于 i^=0x0f; 主要用途:使1个数的某(些)位翻转(即原来为1的位 变为0,为0的变为1),其余各位不变。
右移运算符“>>”的功能,是把“>>”左边的操作数 的各二进制位全部右移若干位,移动的位数由“>>” 右边的常数指定。进行右移运算时,如果是无符号数, 则总是在其左端补“0”
练习
1 .若x = 10, 则!X的值为真或假? 2. 若a = 3, b = 2, 则if(a&b)的值为真或假? 3. 5 && 0 ||8的值为?
浮点型 指针型 位类型 特殊功能寄存器 16位特殊功能寄存器 可寻址位

C51的部分常用库函数_51单片机应用开发从入门到精通_[共3页]

C51的部分常用库函数_51单片机应用开发从入门到精通_[共3页]

第3章 MCS-51单片机软件开发环境
37 3.3.2 C51的部分常用库函数
本小节将简要介绍C51的部分常用库函数。

1.abs 函数
abs 函数的详细介绍如表3.14所示。

表3.14 abs 函数介绍 函 数 原 型
#include <math.h> int abs(int x); 函数参数
x :整型 函数功能 计算x 的绝对值 函数返回值
x 的绝对值,整型
说明:在math.h 头文件中,除了abs 函数之外,还有类似的acos 、asin 、atan 等函数。

2.ceil 函数
ceil 函数的详细介绍如表3.15所示。

表3.15 ceil 函数介绍 函 数 原 型
#include <math.h> float ceil(float x); 函数参数
x :浮点数 函数功能
求大于或等于x 的最小整数 函数返回值
大于或等于x 的最小整数,浮点数
说明:在math.h 头文件中,有类似ceil 的求小于或等于x 的最大整数的floor 函数。

3.getchar 函数
getchar 函数的详细介绍如表3.16所示。

表3.16 getchar 函数介绍 函 数 原 型
#include <stdio.h> char getchar(void); 函数参数
无 函数功能
从MCS-51单片机硬件的输入接口用_getkey 函数读入一个字符并且将此字符传递给putchar 函数用于回应 函数返回值
来自输入接口的下一个字符,整型,有ASCII 对应码值
4.gets 函数
gets 函数的详细介绍如表3.17所示。

单片机C语言(C51)常用库函数

单片机C语言(C51)常用库函数

单片机C语言(C51)常用库函数单片机C语言(C51)常用库函数在单片机编程中,使用库函数可以大大提高开发效率和简化代码结构。

C51是一种常用的单片机编程语言,它提供了许多常用的库函数,本文将介绍一些常用的C51库函数及其用法。

1. 字符串处理函数字符串处理是单片机编程中常见的任务。

C51提供了一些常用的字符串处理函数,如strcpy、strcat、strcmp等。

这些函数可以简化对字符串的操作。

- strcpy:用于将一个字符串复制到另一个字符串中。

用法示例:```char str1[20];char str2[20] = "Hello, world!";strcpy(str1, str2);```- strcat:用于将一个字符串追加到另一个字符串的末尾。

用法示例:```char str1[20] = "Hello,";char str2[20] = " world!";strcat(str1, str2);```- strcmp:用于比较两个字符串是否相等。

用法示例:```char str1[20] = "Hello";char str2[20] = "World";if (strcmp(str1, str2) == 0) {// 字符串相等的处理逻辑} else {// 字符串不相等的处理逻辑}```2. 数学函数单片机编程中常常需要进行数学运算,C51提供了一些常用的数学函数,如abs、sqrt、sin等。

这些函数可以帮助实现各种数学计算。

- abs:用于计算一个整数的绝对值。

用法示例:```int num = -10;int abs_num = abs(num);```- sqrt:用于计算一个浮点数的平方根。

用法示例:```float x = 16.0;float sqrt_x = sqrt(x);```- sin:用于计算一个角度的正弦值。

c51库函数

c51库函数
void * calloc(unsigned int n,unsigned int size); //返回n个具有SIZE大小对象所分配的内存的指针,如NULL表示
//空间不足。
3. 动态内存分配函数,位于stdlib.h中 ,标准函数
3. STDLIB.H
float atof(void * string); //将STRING串转换成浮点数值将返回它。
int atoi(void * string); //int
long atol(void * string); //long
char ungetkey(char); //将输入的字符送回缓冲区并将其值返回给调用者,下次使用_getkey时可获得该字符。
6. CTYPE.H 字符函数 检查参数值或参数字符, 不注明表示是返1,否则返0
bit isalnum(char c);//英文字母或数字
bit isalpha(char c);//英文字母
char *strrchr (const char *string,char c);
char *strrpbrk (char *string,char *set);
int strrpos (const char *string,char c);
int strspn(char *string,char *set);
char strncmp(char *string1,char *string2,int len);
char strncpy (char *dest,char *src,int len);
char *strpbrk (char *string,char *set);
int strpos (const char *string,char c);

C51的函数

C51的函数
空操作函数的格式如下: void _nop_ (void) 该函数产生一个汇编指令NOP,执行它没有任何实质性操作,仅仅延时一 个机器周期。 3)位测试函数 位测试函数的格式如下: bit _testbit_ (bit x) 该函数的参数和返回值必须是位变量。该函数产生汇编指令JBC x,即判 断位x的值是0还是1,并将其值通过Cy标志返回。
函数
C51的函数
函数是C51语言的重要组成部分,是从标准C语言中继承 而来的。C51语言不限制程序中的函数个数。任何一个完整的 C51程序都必须有且仅有一个主函数(main函数),主函数是 C51程序的入口,所有的C51程序都是从主函数开始执行的。 为了有利于程序的模块化,促进资源的共享,C51语言允许用 户使用自定义函数。同时,C51提供了大量的功能强大的库函 数。这些库函数都是编译系统自带的已定义好的函数,用户 可以在程序中直接调用,而无须再自定义。合理使用库函数 可以简化程序设计、加快程序执行速度。
被调函数在主调函数中,以程序语句的方式出现。通常只完成一种 操作,不带函数会返回值。 该函数调用非常简单,即在main函数内调用函数func,用于输出一串字 符。 2.函数表达式
调用函数后,取得函数的返回值,用于其他操作。
1.3 C51的库函数
C51可以使用大量标准C语言的库函数,在用预处理器命令#include 包含相应的头文件后,程序员就可以在程序中使用这些函数。
unsigned int _lrol_ (unsigned int val, unsigned char n); /*左移无符号长整型*/
这些函数的第一个参数表示要进行位移的变量,第二个参数表示要移 动的位数。
右移函数与左移函数形式一致,只是函数名不同,它们分别是: unsigned char _cror_ (unsigned char val, unsigned char n);/*

单片机C语言C的常用库函数

单片机C语言C的常用库函数

C51的常用库函数详解C51语言的编译器中包含有丰富的库函数;使用库函数可以大大简化用户程序设计的工作量;提高编程效率..每个库函数都在相应的头文件中给出了函数原型声明;在使用时;必须在源程序的开始处使用预处理命令include将有关的头文件包含进来..C51库函数中类型的选择考虑到了8051单片机的结构特性;用户在自己的应用程序中应尽可能地使用最小的数据类型;以最大限度地发挥8051单片机的性能;同时可减少应用程序的代码长度..下面将C51的库函数分类列出并详细介绍其用法..1字符函数字符函数的原型声明包含在头文件CTYPE.H中..常用的一些字符函数介绍如下..1.1检查英文字母函数检查英文字母函数用于检查形参字符是否为英文字母;其函数原型如下:bitisalphacharc;其中;c为待判断的字符;如果是英文字母则返回1;否则返回0..程序示例如下:1.2检查字母数字函数检查字母数字函数用于检查形参字符是否为英文字母或数字字符;其函数原型如下:bitisalnumcharc;1.3检查控制字符函数检查控制字符函数用于检查形参字符是否为控制字符;其函数原型:bitiscntrlcharc;其中;c为待判断的字符..控制字符其取值范围为0x00~0xlF之间或等于0x7F;如果是;则返回1;否则返回0..1.4十进制数字检查函数十进制数字检查函数用于检查形参字符是否为十进制数字;其函数原型如下:bitisdigitcharc;其中;c为待判断的字符;如果是十进制数字则返回1;否则返回0..1.5可打印字符检查函数可打印字符检查函数用于检查形参字符是否为可打印字符;其函数原型如下:bitisgraphcharc;其中;c为待判断的字符..可打印字符的取值范围为0x21~0x7C;不包含空格;如果是可打印字符则返回1;否则返回0..1.6包含空格的可打印字符检查函数包含空格的可打印字符检查函数用于检查形参字符是否为可打印字符以及空格;其函数原型如下:bitisprintcharc;其中;c为待判断字符..如果是则返回1;否则返回0..该函数与isgraph的区别在于包含了空格符;空格符为0x20..1.7格式字符检查函数格式字符检查函数用于检查形参字符是否为标点、空格或格式字符;其函数原型如下:bitispunctcharc;其中;c为待判断字符;如果是则返回1;否则返回0..1.8小写英文字母检查函数小写英文字母检查函数用于检查形参字符是否为小写英文字母;其函数原型如下:bitislowercharc;其中;c为待判断字符..如果是小写英文字母则返回1;否则返回0..1.9大写英文字母检查函数大写英文字母检查函数用于检查形参字符是否为大写英文字母;其函数原型如下:bitisuppercharc;其中;c为待判断字符..如果是大写英文字母则返回1;否则返回0..1.10控制字符检查函数控制字符检查函数用于检查形参字符是否为控制字符;其函数原型如下:bitisspacecharc;其中;c为待判断字符..如果是控制字符则返回1;否则返回0..控制字符包括:空格、制表符、回车、换行、垂直制表符和送纸;其取值范围为0x09~0x0d;或为0x20..1.11十六进制数字检查函数十六进制数字检查函数用于检查形参字符是否为十六进制数字;其函数原型如下:bitisxdigitcharc;其中;c为待判断字符..如果是16进制数字字符则返回1;否则返回0..1.12十六进制数字转换函数十六进制数字检查函数用于转换形参字符为十六进制数字;其函数原型如下:chartointcharc;其中;c为待转换字符..该函数将形参字符0~9、a~f大小写无关转换为16进制数字..其中;对于字符0~9;返回值为0H~9H;对于ASCII字符a~f大小写无关;返回值为0AH~0FH..1.13大写字符转换函数大写字符转换函数用于将大写字符转换为小写字符;其函数原型如下:chartolowercharc;其中;c为待转换的大写字符..如果字符参数不在A~Z之间;则该函数将不起作用;而直接返回原字符..1.14小写字符转换函数小写字符转换函数用于将小写字符转换为大写字符;其函数原型如下:chartouppercharc;其中;c为待转换的小写字符..如果字符参数不在a~z之间;则该函数将不起作用;而直接返回原字符..1.15ASCII字符转换函数ASCII字符转换函数用于将任何字符型参数缩小到有效的ASCII范围之内;其函数原型如下:chartoasciicharc;其中;c为待转换的字符..该函数执行的操作是将形参数值和0x7f做与运算;从而去掉第7位以上的所有位数..如果形参已是有效的ASCII字符;则不作处理;直接返回原字符..1.16大写字符宏转换函数大写字符宏转换函数用于大写字符转换为小写字符;其函数原型如下:char_tolowercharc;其中;c为待转换的大写字符..这其实是一个由宏定义完成的操作;其功能是将字符参数c与常数0x20逐位进行或运算;从而将大写字符转换为小写字符..1.17小写字符宏转换函数小写字符宏转换函数用于小写字符转换为大写字符;其函数原型如下:char_touppercharc;其中;c为待转换的小写字符..这其实是一个由宏定义完成的操作;其功能是将字符参数c与常数0xdf逐位进行与运算;从而将小写字符转换为大写字符..2字符串函数字符串函数的原型声明包含在头文件STRING.H中..在C51语言中;字符串应包括2个或多个字符;字符串的结尾以空字符来表示..字符串函数通过接受指针串来对字符串进行处理..常用的字符串函数介绍如下..2.1字符查找函数字符查找函数用于在字符串中顺序查找字符;其函数原型如下:voidmemchrvoidsl;charval;intlen;其中;s1为输入字符串;val为待查找的字符;len为查找的长度范围..该函数的功能是在字符串s1中顺序搜索前len个字符以找出字符val;如果找到则返回sl中指向val的指针;如果没有找到则返回NULL..2.2指定长度的字符串比较函数指定长度的字符串比较函数用于按照指定的长度比较两个字符串的大小;其函数原型如下:charmemcmpvoids1;voids2;intlen;其中;s1和s2为输入字符串;len为比较的长度..该函数的功能是逐个比较字符串sl 和s2的前len个字符;如果相等则返回0;如果字符串s1大于s2;则返回一个正数;如果字符串s1小于s2;则返回一个负数..如果两个字符串的长度小于len;该函数仍将一直比较len个字符;这种情况下;有可能结果是错误的..因此应该保证len不能超过最短字符串的长度..2.3字符串复制函数字符串复制函数用于复制指定长度的字符串;其函数原型如下:voidmemcpyvoiddest;voidsrc;intlen;其中;dest为目标字符串;src为源字符串;len为复制的长度..该函数的功能是从src 所指向的字符串中复制len个字符到dest字符串中;其返回值指向dest中的最后一个字符的指针..2.4带终止字符的字符串复制函数带终止字符的字符串复制函数用于复制字符串;如果遇到终止字符则停止复制;其函数原型如下:voidmemccpyvoiddest;voidsrc;charval;intlen;其中;dest为目标字符串;src为源字符串;val为终止字符;len为复制的长度..该函数的功能是复制字符串src中的len个字符到dest中;复制len个字符后则返回NULL..如果遇到字符val则停止复制;此时返回一个指向dest中的下一个元素的指针..2.5字符串移动函数字符串移动函数同样用于复制字符串;其函数原型如下:voidmemmovevoiddest;voidsrc;intlen;其中;dest为目标字符串;src为源字符串;len为复制长度..该函数的功能是从src所指向的字符串中复制len个字符到dest字符串中;其返回值指向dest中的最后一个字符的指针..其功能与memcpy相同;但是复制区间src与dest可以发生交迭..2.6字符串填充函数字符串填充函数用于按规定的字符填充字符串;其函数原型如下:voidmemsetvoids;charval;intlen;其中;s为待填充的字符串;val为填充字符;len为填充的长度..该函数实现的操作是用字符val来填充字符串s;共填充len个单元2.7字符串追加函数字符串追加函数用于复制字符串到另一个字符串的尾部;其函数原型如下:voidstrcatchars1;chars2;其中;s1为目标字符串;s2为待复制的字符串..该函数实现的操作是将字符串s2复制到字符串s1的尾部..其中字符串s1要有足够的大小来保存两个字符串..该函数的返回值指向字符串s1中的第一个字符的指针..2.8指定长度的字符串追加函数指定长度的字符串追加函数用于复制指定长度的字符串到另一个字符串的尾部;其函数原型如下:voidstrncat;chars1;chars2;intn;其中;s1为目标字符串;s2为待复制的字符串;n为复制的长度..该函数实现的操作是从字符串s2中复制n个字符添加到字符串s1的尾部..其中;如果字符串s2的长度比n小;则将全部复制字符串s2包括串结束符..2.9字符串比较函数字符串比较函数用于比较两个字符串的大小;其函数原型如下:charstrcmpchars1;chars2;其中;s1和s2为待比较的字符串..该函数的功能是比较字符串s1和s2;如果两者相等则返回0;如果s1<s2;则返回一个负数;如果s1>s2;则返回一个正数..2.10包含结束符的字符串比较函数包含结束符的字符串比较函数用于比较两个字符串的大小;其函数原型如下:charstrncmpchars1;chars2;intn;其中;s1和s2为待比较的字符串;n为比较的长度..该函数的功能是比较字符串s1和s2的前n个字符;如果两者相等则返回0;如果s1<s2;则返回一个负数;如果s1>s2;则返回一个正数..这里需要和memcmp函数相区别;如果字符串的长度小于n;则strncmp函数比较到字符串结束符后便停止;这和memcmp函数是不一样的..2.11字符串覆盖函数字符串覆盖函数用于将一个字符串覆盖另一个字符串;其函数原型如下:charstrcpychars1;chars2;其中;s1为目标字符串;s2为源字符串..该函数的功能是将字符串s2包括结束符复制到字符串s1中的第1个字符指针处..这里需要注意和strcat函数相区别;strcat函数将字符串s2复制到字符串s1的末尾..2.12指定长度的字符串覆盖函数指定长度的字符串覆盖函数用于将一个指定长度的字符串覆盖另一个字符串;其函数原型如下:charstrncpychars1;chars2;intn;其中;s1为目标字符串;s2为源字符串;n为长度..该函数实现的操作是从字符串s2包括结束符中复制n个字符到字符串s1中的第1个字符指针处..如果字符串s2的长度小于n;则s1串以0补齐到长度n..2.13获取字符串个数函数获取字符串个数函数用于返回字符串中字符总数;其函数原型如下:charstrlenchars1;其中;s1为输入字符串..该函数的功能是获取字符串s1中的字符个数;返回值的大小不包括结尾的字符串结束符..2.14搜索字符串函数搜索字符串函数用于搜索字符串出现的位置;其函数原型如下:charstrstrconstchars1;chars2;其中;s1为目标字符串;s2为搜索的字符串..该函数实现的操作是在字符串s1中搜索第一次出现字符串s2的位置;并返回该处的指针..如果字符串s1中不包括字符串s2;则该函数返回一个空指针..2.15搜索字符函数搜索字符函数用于搜索字符出现的位置;其函数原型如下:charstrchrchars1;charc;其中;s1为目标字符串;c为待搜索的字符..该函数的功能是搜索字符串s1中是否包含字符c;如果包含则返回第一次指向该字符的指针;否则返回NULL..被搜索的字符可以是串结束符;此时返回值是指向串结束符的指针..2.16返回位置值的字符搜索函数返回位置值的字符搜索函数用于搜索并返回字符出现的位置;其函数原型如下:intstrposchars1;charc;其中;s1为目标字符串;c为搜索的字符..该函数的功能是查找并返回字符c在字符串s1中第一次出现的位置值;没有找到该字符则返回-1;s1串首字符的位置值是0..strpos函数的功能与strchr类似;只不过返回值不同..2.17字符包含函数字符包含函数用于检查字符串中是否包含某字符;其函数原型如下:charstrrchrchars1;charc;其中;s1为目标字符串;c为查找的字符..该函数的功能是搜索字符串s1中是否包含字符c;如果包含则返回最后一次指向该字符的指针;否则返回NULL..被搜索的字符可以是串结束符;此时返回值是指向串结束符的指针..2.18返回位置值的字符包含函数返回位置值的字符包含函数同样用于检查字符串中是否包含某字符;其函数原型如下:intstrrposchars1;charc;其中;s1为目标字符串;c为查找的字符..该函数的功能是查找并返回字符c在字符串s1中最后一次出现的位置值;没有找到该字符则返回-1;s1串首字符的位置值是0..strrpos函数的功能与strrchr类似;只不过返回值不同..2.19在指定字符集中查找不包含字符函数在指定字符集中查找不包含字符函数用于查找不包含在指定字符集中的字符;其函数原型如下:intstrspnchars1;charset;其中;s1为目标字符串;set为字符集..该函数的功能是搜索字符串s1中第一个不包含在set串中的字符;返回值是字符串s1中包括在set中的字符的个数..如果s1中所有的字符都包含在set中;则返回s1的长度不包括结束符..如果set是空字符串则返回0..2.20在指定字符集中查找包含字符函数在指定字符集中查找包含字符函数用于查找包含在指定字符集中的字符;其函数原型如下:intstrcspnchars1;charset;其中;s1为目标字符串;set为字符集..该函数的功能是搜索的是第一个包含在set串中字符;返回值是字符串s1中包括在set中的字符的个数..如果s1中所有的字符都包含在set中;则返回s1的长度不包括结束符..如果set是空字符串则返回0..2.21查找第一个包含字符函数查找第一个包含字符函数用于查找第一个包含在指定字符集中的字符;其函数原型如下:charstrpbrkchars1;charset;其中;s1为目标字符串;set为字符集..该函数的功能是搜索字符串s1中第一个包含在set串中的字符;返回值指向搜索到的字符的指针;如果未找到;则返回NULL..2.22查找最后一个包含字符函数查找最后一个包含字符函数用于查找最后一个包含在指定字符集中的字符;其函数原型如下:charstrrpbrkchars1;charset;其中;s1为目标字符串;set为字符集..该函数的功能是搜索字符串s1中最后一个包含在set串中的字符;返回值指向搜索到的字符的指针;如果未找到;则返回NULL..3I/O函数I/O函数主要用于数据的输入输出等操作;C51的I/O库函数的原型声明包含在头文件STDIO.H中..这些I/O函数使用8051单片机的串行接口进行通信;因此;在使用之前需要先进行串口的初始化..例如:SCON=0x50; //串口模式1;允许接收TMOD|=0x20; //初始化T1为定时功能;模式2PCON|=0x80; //设置SMOD=1TL1=0xF4; //波特率4800bit/s;初值TH1=0xF4;IE|=0x90; //中断TR1=1; //启动定时器3.1字符读入函数字符读入函数用于从串口读入一个字符;其函数原型如下:char_getkeyvoid;该函数执行的操作是等待从8051的串口读入一个字符;并返回读入的原字符..程序示例如下:3.2字符读入输出函数字符读入输出函数用于从串口读入一个字符并输出该字符;其函数原型如下:chargetcharvoid;该函数与_getkey函数有细微的不同;其执行的操作是使用_getkey从串口读入的一个字符;然后使用putchar函数将读入的字符输出..3.3字符串读入函数字符串读入函数用于从串口读入一个字符串;其函数原型如下:chargetschars;intn;其中;s保存读入的字符串;n为字符串的长度..该函数执行的操作是使用getchar函数从串口读入一个长度为n的字符串;并存入字符数组s中..如果遇到换行符;则结束字符的输入..输入成功时将返回传入的参数指针;失败时返回空指针NULL..3.4字符回送函数字符回送函数用于将输入的字符回送到输入缓冲区;其函数原型如下:charungetcharcharc;其中;c为输入字符..该函数执行的操作是将输入的字符回送到输入缓冲区;如果函数调用成功则返回char型值c;失败时则返回EOF..3.5字符输出函数字符输出函数用于通过8051串行口输出字符;其函数原型如下:charputcharcharc;其中;c为通过8051串行口输出的字符..3.6格式化输出函数格式化输出函数用于按照一定的格式输出数据或字符串;其函数原型如下:intprintfconstcharfmstr;argument…;该函数的功能是以一定的格式通过8051单片机的串行口输出数值和字符串..其中第一个参数fmstr是格式控制字符串;参数argument可以是字符串指针、字符或数值;该函数的返回值为实际输出的字符个数..3.7格式化内存缓冲区输出函数格式化内存缓冲区输出函数用于按照一定的格式将数据或字符串输出到内存缓冲区中;其函数原型如下:intsprintfchars;constcharfmstr;argument…;该函数执行的操作是通过指针s;将字符串送入内存数据缓冲区;并以ASCII码的形式储存..3.8字符串输出函数字符串输出函数用于将字符串和换行符写入串行口;其函数原型如下:intputsconstchars;其中;s为输出的字符串或换行符..如果执行成功则返回0;错误时返回EOF..程序示例如下:3.9格式化输入函数格式化输入函数用于将字符串和数据按照一定的格式从串口读入;其函数原型如下:intscanfconstcharfmstr;argument…;该函数的功能是在格式字符的控制下从串行口读入数据..其中每个参数都必须是指针..scanf返回值是所发现并转换的输入项数;如遇到错误则返回EOF..该函数的格式控制字符串形式如下;方括号内是可选项..%width{Bhl}type3.10格式化内存缓冲区输入函数格式化内存缓冲区输入函数用于将格式化的字符串和数据送入数据缓冲区;其函数原型如下:intsscanfchars;constcharfmstr;argument…;该函数的功能是将输入的字符串通过指针s指向的数据缓冲区..输入数据根据格式控制字符串fmstr被存放到由argument指定的地址..其它方面;sscanf函数与scanf函数类似..3.11字符串内存输出函数字符串内存输出函数用于将格式化字符串输出到内存数据缓冲区;其函数原型如下:intvprintfconstcharfmstr;charargptr;其中;fmstr为格式化字符串;argptr指向变量表的指针而不是变量表;函数返回值为实际写入到输出字符串中的字符数..其它方面;vprintf函数与printf函数类似..3.12指向缓冲区的输出函数指向缓冲区的输出函数用于将格式化字符串和数字输出到由指针所指向的内存数据缓冲区;其函数原型如下:intvsprintfchars;constcharfmstr;charargptr;该函数执行的操作是将格式化字符串和数字输出到由指针所指向的内存数据缓冲区..其中;该函数接受的是一个指向变量表的指针而不是变量表;其返回值为实际写入到输出字符串中的字符数..其他方面vsprintf函数与sprintf函数类似..4数学函数数学函数主要用于进行数学运算;其原型声明包含在头文件MATH.H中..下面介绍一些常用的数学函数..4.1绝对值函数绝对值函数用于计算并返回输出数据的绝对值..按照其操作数的数据类型的不同;有如下几种形式:intabsintval;charcabscharval;floatfabsfloatval;longlabslongval这些函数分别用于计算整型、字符型、浮点型以及长整型数据的绝对值..4.2指数以及对数函数指数函数用于计算并返回输出数据的指数..对数函数用于计算并返回输出数据的对数..其函数原型示例如下:floatexpfloatx;floatlogfloatx;floatlog10floatx;floatsqrtfloatx;其中exp函数用于计算并返回浮点数x的指数;log函数用于计算并返回浮点数x的自然对数自然对数以e为底;e=2.718282;log10函数用于计算并返回浮点数x的以10为底的对数值;sqrt函数用于计算并返回浮点数x的平方根..4.3三角函数三角函数用于计算数学中三角函数的值..在C51语言中包含如下几种三角函数:floatcosfloatx;floatsinfloatx;floattanfloatx;floatacosfloatx;floatasinfloatx;floatatanfloatx;floatatan2floaty;floatx;floatcoshfloatx;floatsinhfloatx;floattanhfloatx;4.4取整函数取整函数用于取输入数据的整数..在C51语言中;包含两类取整函数;示例如下:floatceilfloatx;floatfloorfloatx;其中ceil函数用于计算并返回一个不小于x的最小正整数作为浮点数;floor函数用于计算并返回一个不大于x的最小正整数作为浮点数..4.5浮点型分离函数浮点型分离函数用于将浮点型数据的整数和小数部分分开;其函数原型如下:floatmodffloatx;floatip;函数modf将浮点数x分成整数和小数两部分;整数部分放入ip;返回值为小数部分..两者都含有与x相同的符号..4.6幂函数幂函数用于进行幂指数运算..其函数原型如下:floatpowfloatx;floaty;该函数用于计算并返回xy的值..如果x不等于0而y=0;则返回1..当x=0且y<=0或x<0且y不是整数时;返回NaN..5标准函数标准函数主要用于完成数据类型转换以及存储器分配等操作..标准函数的原型声明包含在头文件STDLIB.H中..下面介绍常用的一些函数..5.1字符串转换函数字符串转换函数用于将字符串转换成数值类型并输出..根据输出数值类型的不同;可以有如下几种形式:floatatoicharsl;floatatolcharsl;floatatofcharsl;其中;atoi函数用于将字符串sl转换成整型数值并返回该值..输入字符串的格式为:whitespace{+/-}数字..其中;whitespace可由空格、/、制表符组成..这里的数字可以是一个或多个十进制数..5.2带返回指针的字符串转换函带返回指针的字符串转换函数将字符串转换成数值类型并输出;同时返回未转换部分的指针..根据输出数值类型的不同;可以有如下几种形式:floatstrtodconstchars;charptr;longstrtolconstchars;charptr;unsignedcharbase;unsignerlongstrtoulconstchars;charptr;unsignedcharbase;5.3随机函数随机函数用于产生伪随机数..在C51语言中;包含两种随机函数;其函数声明如下:intrand;voidsrandintn;其中;函数rand用于返回一个0到32767之间的伪随机数;而函数srand用来初始化随机数发生器的随机种子..如果不使用srand函数;则对rand函数的相继调用将产生相同的随机序列..5.4数组内存分配函数数组内存分配函数用于为n个元素的数组分配内存空间;其函数原型如下:voidcallocunsighedintn;unsighedintsize;其中n数组元素的个数;size为数组中每个元素的大小..该函数所分配的内存区域用0进行初始化..返回值为已分配的内存单元起始地址;如果不成功则返回0..5.5释放内存函数释放内存函数用于释放前面已分配的内存空间;其函数原型如下:voidfreevoidxdatap;其中;指针p指向待释放的存储区域..p必须是以前用calloc、malloc或realloc函数分配的存储区域;如果p为NULL;则该函数无效..经free函数所被释放的存储区域可以参与以后的分配..5.6初始化内存函数初始化内存函数用于对前面申请的内存进行初始化;其函数原型如下:voidinit_mempoolvoidxdatap;unsighedintsize;其中;指针p表示存储区首地址;size表示存储区大小..该函数可对被函数calloc、malloc、free或realloc管理的存储区域进行初始化..5.7内存分配函数内存分配函数用于在内存中分配指定大小的存储空间;其函数原型如下:voidmallocunsighedintsize;其中;size为分配的空间大小;返回值为指向所分配内存的指针..如果返回NULL;则表示没有足够的内存空间可用..5.8调整内存大小函数调整内存大小函数用于调整先前分配的存储器区域大小;其函数原型如下:voidreallocvoidxdatap;unsighedintsize;其中;参数p表示该存储区域的起始地址;参数size表示新分配的存储区域大小..该函数的返回值为新区域所指向的指针..如果返回NULL;则表示没有足够的内存空间可用..原存储器区域的内容被复制到新存储器区域中;如果新存储器区域较大;多出的区域不作初始化..6内部函数内部函数的原型声明包含在头文件INTRINS.H中..下面介绍常用的一些函数..6.1循环左移函数循环左移函数主要用于将数据按照二进制循环左移n位..按照操作数据类型的不同;其函数原型如下几种形式:unsighedchar _crol_unsighedcharval;unsighedcharn;unsighedint _irol_unsighedintval;unsighedcharn;unsighedlong _lrol_unsighedlongval;unsighedcharn;其中;val为待移位的变量;n为循环移位的次数..函数_crol_、_irol_和_lrol_分别用于字符型、整型和长整形变量的循环左移;其返回值分别为移位后的字符型、整型和长整形..该函数与8051单片机的RLA指令相关..6.2循环右移函数循环右移函数主要用于将数据按照二进制循环右移n位..按照操作数据类型的不同;其函数原型如下几种形式:unsighedchar _cror_unsighedcharval;unsighedcharn;。

C51的常用库函数精品课件

C51的常用库函数精品课件
• char _toupper (char c); • 其中,c为待转换的小写字符。这其实是一个由宏
定义完成的操作,其功能是将字符参数c与常数 0xdf逐位进行与运算,从而将小写字符转换为大 写字符。
第19页,共85页。
12.2 字符串函数
• 字符串函数的原型声明包含在头文件STRING.H中。 在C51语言中,字符串应包括2个或多个字符,字 符串的结尾以空字符来表示。字符串函数通过接 受指针串来对字符串进行处理。常用的字符串函 数介绍如下。
• 十六进制数字检查函数用于转换形参字符为十六 进制数字,其函数原型如下:
• char toint (char c); • 其中,c为待转换字符。该函数将形参字符0~9、
a~f(大小写无关)转换为16进制数字。其中, 对于字符0~9,返回值为0H~9H,对于ASCII字符 a~f(大小写无关),返回值为0AH~0FH。
第28页,共85页。
12.2.9 字符串比较函数
• 字符串比较函数用于比较两个字符串的大小,其 函数原型如下:
• char strcmp(char *s1,char *s2); • 其中,s1和s2为待比较的字符串。该函数的功能
是比较字符串s1和s2,如果两者相等则返回0;如 果s1<s2,则返回一个负数;如果s1>s2,则返回 一个正数。
第21页,共85页。
12.2.2 指定长度的字符串比较函数
• 指定长度的字符串比较函数用于按照指定的长度 比较两个字符串的大小,其函数原型如下:
• char memcmp(void*s1, void*s2,int len); • 其中,s1和s2为输入字符串,len为比较的长度。
该函数的功能是逐个比较字符串sl和s2的前len个 字符,如果相等则返回0,如果字符串s1大于s2, 则返回一个正数,如果字符串s1小于s2,则返回 一个负数。如果两个字符串的长度小于len,该函 数仍将一直比较len个字符,这种情况下,有可能 结果是错误的。因此应该保证len不能超过最短字 符串的长度。

C51库函数

C51库函数

C51库函数C-51软件包的库包含标准的应用程序,每个函数都在相应的头文件(.h)中有原型声明。

如果使用库函数,必须在源程序中用预编译指令定义与该函数相关的头文件(包含了该函数的原型声明)。

例如:#include如果省掉头文件,编译器则期望标准的C参数类型,从而不能保证函数的正确执行。

3.1 CTYPE.H:字符函数在CTYPE.H头文件中包含下列一些库函数:函数名:isalpha原型:extern bit isalpha(char)功能:isalpha检查传入的字符是否在…A‟-…Z‟和…a‟-…z‟之间,如果为真返回值为1,否则为0。

函数名:isalnum原型:extern bit isalnum(char)功能:isalnum检查字符是否位于…A‟-…Z‟,…a‟-…z‟或…0‟-…9‟之间,为真返回值是1,否则为0。

函数名:iscntrl原型:extern bit iscntrl(char)功能:iscntrl检查字符是否位于0x00~0x1F之间或0x7F,为真返回值是1,否则为0。

函数名:isdigit原型:extern bit isdigit(char)功能:isdigit检查字符是否在…0‟-…9‟之间,为真返回值是1,否则为0。

函数名:isgraph原型:extern bit isgraph(char)功能:isgraph检查变量是否为可打印字符,可打印字符的值域为0x21~0x7E。

若为可打印,返回值为1,否则为0。

函数名:isprint原型:extern bit isprint(char)功能:除与isgraph相同外,还接受空格字符(0X20)。

函数名:ispunct原型:extern bit ispunct(char)功能:ispunct检查字符是否位为标点或空格。

如果该字符是个空格或32个标点和格式字符之一(假定使用ASCII字符集中128个标准字符),则返回1,否则返回0。

(完整版)Keilc51常用库函数汇总参考

(完整版)Keilc51常用库函数汇总参考

Keil c51函数参考一、数学函数〈math.h >(1)cabs原型:char cabs(char val);功能:cabs函数取val的绝对值。

参数:一字节数val.返回:cabs返回val的绝对值。

(2)abs原型:Int abs(int val);功能:求绝对值参数:val整型数返回:val的绝对值(3)labs原型:long labs(long val);功能:labs函数确定长整数val的绝对值.返回:val的绝对值。

(4)fabs原型:float fabs(float val);功能:fabs函数确定浮点数val的绝对值.参数:返回:fabs返回val的绝对值。

(5)sqrt原型:float sprt(float x);功能:sqrt函数计算x的平方根。

返回:sqrt函数返回x的正平方根。

(6)exp原型:float exp(float x);功能:exp函数计算自然对数中e的x次幂。

e≈2。

71828182845953581496,是无限循环小数。

返回:e x的值.(7)log原型:float log(float val);功能:log函数计算浮点数val的自然对数。

自然对数基数为e。

返回:val的浮点自然对数。

(8)log10原型:float log10(float val);功能:logl0函数计算浮点数val的常用对数.常用对数为基数10。

返回:val的浮点常用对数。

(9)sin参数:x必须在—65535~65535之间,或产生一个NaN错误。

返回:sin函数返回x的正弦.(10)cos原型:float cos(float x);功能:COS函数计算浮点数X的余弦.参数:X的值必须在-65535~65535之间,或产生一个NaN错误。

返回:COS函数返回X的余弦。

(11)tan原型:float tan(float x);功能:tan函数计算浮点数x的正切值.参数:x必须在—65535~65535之间,或错误值NaN.返回:tan函数返回x的正切。

c51中的intrins.h库函数

c51中的intrins.h库函数
for(c=0;c<30000;c++);/*延时,实践表明当小于值大于等于32768(刚好是unsigned int最大值65535的一半)时 ,此句指令执行时间大于1秒*/ }

程序附加说明:
1.关于自定义下载,略微解释下原理,电脑中STC-ISP软件向单片机发送自定义下载命令后,引起单片机的串口中断 ,并进入中断子程序:判断是否为设定“自定义下载命令”-延时1秒-执行重启命令“ISP_CONTR=0x60;”(即MOV I SP_CONTR(0XE7),0X60),单片机重启并先运行ISP监视程序,电脑STC-ISP软件便把.hex文件数据下到STC单片机中去 。

void main(void) { unsigned int a,c; unsigned char b; TMOD=0x20; TH1=0xf4;//波特率4800 TL1=0XF4; TR1=1; SCON=0XF8; PCON=0X80; EA=1; ES=1; RI=0; b=0xfe; while(1) { P1=b; b=_crol_(b,1);//字符中的位左移1位(伪本征函数)
函数名: _cror_,_iror_,_lror_ 原 型: unsigned char _cror_(unsigned char val,unsigned char n); unsigned int _iror_(unsigned int val,unsigned char n); unsigned int _lror_(unsigned int val,unsigned char n); 功 能:_cror_,_iror_,_lror_以位形式将val 右移n 位,该函数与8051“RRA”指令 相关,上面几个函数不同于参数类型。 例: #include main() { unsigned int y; y=0x0ff00; y=_iror_(y,4); /*y=0x0ff0*/ }
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<absacc.h>”当51单片机通过8255和锁存器74LS273来扩展IO时,经常用到头文件absacc.h。

在程序中,用“#include<absacc.h>”即可使用其中定义的宏来访问绝对地址,包括:CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD例如:rval=CBYTE[0x0002];指向程序存贮器的0002h地址rval=XWORD [0x0002];指向外RAM的0004h地址KEIL 中ABSACC.H 定义如下:#ifndef __ABSACC_H__#define __ABSACC_H__#define CBYTE ((unsigned char volatile code *) 0)#define DBYTE ((unsigned char volatile data *) 0)#define PBYTE ((unsigned char volatile pdata *) 0)#define XBYTE ((unsigned char volatile xdata *) 0)#define CWORD ((unsigned int volatile code *) 0)#define DWORD ((unsigned int volatile data *) 0)#define PWORD ((unsigned int volatile pdata *) 0)#define XWORD ((unsigned int volatile xdata *) 0)#ifdef __CX51__#define FVAR(object, addr) (*((object volatile far *) (addr)))#define FARRAY(object, base) ((object volatile far *) (base))#define FCVAR(object, addr) (*((object const far *) (addr)))#define FCARRAY(object, base) ((object const far *) (base))#else#define FVAR(object, addr) (*((object volatile far *) ((addr)+0x10000L)))#define FCVAR(object, addr) (*((object const far *) ((addr)+0x810000L)))#define FARRAY(object, base) ((object volatile far *) ((base)+0x10000L))#define FCARRAY(object, base) ((object const far *) ((base)+0x810000L))#endif#endif再如:#define COM8255 XBYTE[0X060FF] //后面若出现COM8255,则单片机端口P0和P2联合输出0X060FF绝对物理地址(地址指向82C55指令寄存器)#define PA8255 XBYTE[0X000FF] //后面若出现PA8255,则单片机端口P0和P2联合输出0X000FF绝对物理地址(地址指向82C55的A组端口寄存器)#define PB8255 XBYTE[0X020FF] //后面若出现PB8255,则单片机端口P0和P2联合输出0X020FF绝对物理地址(地址指向82C55的B组端口寄存器)#define PC8255 XBYTE[0X040FF] //后面若出现PC8255,则单片机端口P0和P2联合输出0X040FF绝对物理地址(地址指向82C55的C组端口寄存器)??absacc.h里的宏#define CBYTE ((unsigned char volatile code? *) 0)value = CBYTE[0x002];这句该如何理解?A1:结果是将程序空间(code)地址为0x002单元的内容放到变量value中。

A2:替换一下考虑value = ((unsigned char volatile *) 0)[0x02];替换一下考虑unsigned char volatile *CBYTE = 0;这里CBYTE[0x02] = 1和*(CBYTE+0x02) = 1等价??#define CBYTE ((unsigned char volatile code? *) 0)是把CBYTE是指针,即code地址0在这里,数组和指针是可以互用的。

CBYTE[0x02]也就是*(CBYTE+0x02),都是指的是地址0x02里的内容,并是unsigned char 类型的。

#define CBYTE ((unsigned char volatile code? *) 0)考虑下这个define定义的内容1、把CBYTE定义成一个0(0);2、这个0是个地址(*号);3、这个地址是代码段的地址(code);4、并是unsigned char类型的地址(unsigned char);5、并这个地址的内容是易逝性的(volatile);?本质上是定义了一个地址(CBYTE )。

指针就是地址,地址是内存的序号。

指针通过指向内存的序号访问内存,替换点是都是地址。

内部的括号用来强制类型转换用的,外部的的括号用来防止宏定义展开时错误的用法。

如何理解#define XBYTE ((unsigned char volatile xdata *) 0)??xdata是large存储类型,volatile是通过硬件来改变指针指向的内容。

#define XBYTE ((unsigned char volatile xdata *) 0) 定义 XBYTE 为指向 xdata 地址空间unsigned char 数据类型的指针,指针值为0 这样,可以直接用XBYTE[0xnnnn]或*(XBYTE+0xnnnn)访问外部RAM了。

至于 volatile的作用就是让编译器不至于优化掉它的操作: volatile修饰的变量,对于读操作来说,其值是不可预知的;对于写操作来说,即使是写入两个同样的值,影响也是不一样的。

所以编译器不会对访问该变量的操作优化。

如果不加volatile关键词,有些编译器会将一些它认为无意义的或者无效的操作给优化掉,但实际上这并不是你要的结果。

例如一些特殊的寄存器,一些IO等。

I=0; I=0; //如果I未声明成volatile的,则可能被优化掉 if(I==1) //如果I未声明成volatile的,则可能被优化掉 { } volatile [v?l?tail] adj. 易变的, 反复无常的, 易激动的,(液体或油)易挥发的使用XBYTE时,初始化方法是XBYTE[0xXXXX],这是C51中专有的东西,在C51编程中只要有外部扩展RAM就得这样用。

在51单片机中,RAM空间有内外之分,而内部RAM与外部256字节的RAM同地址,在有扩展外部RAM的系统中,有的会用上外部RAM的前256字节,有的前256字节没有用。

以上的定义就是用上了前256字节,也就是说外部RAM从0地址开始寻址。

//8051 特有的内存型态 code 以 MOVC @A+DPTR 读取的程序内存 data 可以直接存取的内部数据存储器idata 以 Mov @Rn 存取的内部数据存储器 bdata 可以位寻址(Bit Addressable)的内部存储器 xdata 以 MOVX @DPTR 存取的外部数据存储器 pdata 以 MOVX @Rn 存取的外部数据存储器特殊资料型态 bit 一般位(bit)变量 sbit 绝对寻址的位(bit)变量语法:sbit my_flag = location; (location 范围从 0x00 ~ 0x7F)范例:sbit EA = 0xAF; 或是配合 bdata 宣告的位(bit)变量 char bdata my_flags; sbit flag0 = my_flags ^ 0; (注意 sbit 前不可以加 static) sfr 特殊功能缓存器(Special Function Register)语法:sfr my_sfr = location; (location 范围从 0x80 ~ 0xFF)范例:sfr P0 = 0x80; 指定绝对地址的变量在单一模块内可以使用下面的语法宣告[memory_space] type variable_name _at_ location 范例:pdata char my_pdata _at_ 0x80; 如果该变量必须为多个模块所使用(Global Variable)则以抽象指针(Abstract Pointer)的方式在标头档(Header File)定义较为方便。

#define variable_name *((data_type *) location) 范例:#define my_pdata *((char pdata *) 0x80) (注意 char 与 pdata 的顺序) ABSACC.H 提供了下列方便的宏(Macro)定义。

#define CBYTE ((unsigned char volatile code *) 0) #define DBYTE ((unsigned char volatile data *) 0) #define PBYTE ((unsigned char volatile pdata *) 0) #define XBYTE ((unsigned char volatile xdata *) 0) #define CWORD ((unsigned int volatile code *) 0) #define DWORD ((unsigned int volatile data *) 0) #define PWORD ((unsigned int volatile pdata *) 0) #define XWORD ((unsigned int volatile xdata *) 0) 在使用这些时直接在头文件中加#include< absacc.h> 隐藏的初始化程序 80C51 在电源重置后(Power On Reset)所执行的第一个程序模块并不是使用者的主程序 main(),而是一个隐藏在 KEIL-C51 标准链接库中称为 startup.a51 的程序模块。

相关文档
最新文档