-
Keil c51
函数参考
一、数学函数
(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
的平方根。
<
/p>
返回:
sqrt
函数返回
x
的正平方根。
(6)exp
原型:
float exp(float
x);
功能:
exp
函数计算自然对数中
e
的
x<
/p>
次幂。
e
≈
2.
753581496
,
是无限循环小数。
返回:
e
x
的值。
(7)log
原型:
float log(float
val);
功能:
log
函数计算浮点数
val
的自然对数。自然对数基数
为
e
。
返回
:
val
的浮点自然对数。
(8)log10
原型:
float log10(float
val);
功能:
logl0
函数计算浮点数
val
的常用对数。常用对数
为基数
10
。
返回:
val
的浮点常用对数。
(9)sin
原型:
float sin(float
x);
功能:
sin
函数计算浮点数
x
的正弦值。
参数:
x
必须在
-
65535
~
65535
之间,或产生一个
NaN
错误。
返回:
sin
函数返回
p>
x
的正弦。
(10)cos
原型:
float cos(float
x);
功能:
COS
函数计算浮点数
X
的余弦。
参数:
X
的值必须在
< br>-
65535
~
65535
p>
之间,或产生一个
NaN
错误。
返回:
COS
函数返回
X
的余弦。
(11)tan
原型:
float tan(float
x);
功能:
tan
函数计算浮点数
x
的正切值。
参数:
x
必须在
-
65535
~
65535
之间,或错误值
NaN
。
返回:
tan
函数返回
x
的正切。
(12)asin
原型:
float asin(float
x);
功能:求反正弦
参数:浮点数
x
,取值必须在
-
1
~
1
之间。
返回:
X
的反正弦,值在
-
π
/2
~π
/2
之间。
(13)acos
原型:
float acos(float
x);
功能:求反余弦
参数:浮点数
x
,取值必须在
-
1
~
1
之间。
返回:
x
的反余弦,值在
0
~π之间。
(14)atan
原型:
float atan(float
x);
功能:求反正切
参数:浮点数
x
,取值必须在
-
1
~
1
之间。
返回:
X
的反正切,值在
-
π
/2
~π
/2
之间。
(15)sinh
原型:
float sinh(float
x);
功能:
sinh
函数计算浮点数
X
的双曲正弦。
参数:
x
必须在
-
65535
~
65535<
/p>
之间,或产生一个
NaN
错误。
返回:
sinh
函数
返回
x
的双曲正弦。
(16)cosh
原型:
float cosh(float
x);
功能:
cosh
函数计算浮点数
X
的双曲余弦。
参数:
返回:
cosh
函数返回
X
的双曲余
弦。
(17)tanh
原型:
float tanh(float
x);
功能:
tanh
函数计算浮点数
x
的双曲正切。
返回:
tanh
函数返回
x
的双曲正切。
(18)atan2
原型:
float atan2(float y,float
x);
功能:计算浮点数
y/x
p>
的反正切。
参数:浮点数
y
,浮点数
x
。
返回:反正切值,值在
-
π~π之间。
x
和
y
< br>的符号确定返回值的象限。
(19)ceil
原型:
float ceil(float
val)
功能:
ceil
函数计算大于或等于
val
的最小整数值(收尾取
整)
。
参数:要化为整数的数。
返回:
p>
ceil
函数返回不小于
val
的最小
float
整数值。
(20)floor
原型:
float floor(float
val);
功能:取整。
返回:
floor
函数返回不大于
val
的最大整数值。
(21)fmod
原型:
float fmod(float x,float
y);
功能:取模。
返回:
x/y
的浮点余数。
(22)modf
原型:
float modf(float
val,float *ip);
功能:
modf
函数把浮点数
val
分成
整数和小数部分。
返回:
modf<
/p>
函数返回带符号小数部分
val
。整数部
分保存在浮点数
ip
中。
(23)pow
原型:
float pow(float x,float
y);
功能:
pow
函数计算
x
的
y
次幂。
返回:
pow
p>
函数返回值
x
y
。
如果
x
≠
0
和
y=O
,
pow
返回值
1
;如果
x=0
和
y
≤
0
< br>,
pow
返回
NaN
。如果
<
br>NaN <
br>二、空操作,左右位移等内嵌代码
x
和
y
不是一个整数,
pow
返回
。
(1)_nop_
原型:
void
_nop_(void);
功能:
_
nop_
插入一个
8051NOP
空操
作指令到程序,用来停顿
1
个
CPU<
/p>
周期。本程序是固
有函数,代码要求内嵌而不是调用。
返回:无。
(2)_testbit_
原型:
bit _testbit_(bit
b);
功能:
_testbit_<
/p>
程序在生成的代码中用
JBC
指令来测试
位
b
,并清零。
参数:
本程序只能用在直接寻址位变量,
对任何类型的表达
式无效。固有函数,代码要求内
嵌,而非调用。
返回:
_testbit_
程序返回值
b
(3)_cror_
原型:
unsigned char
_cror_(unsigned char c, unsigned char
b);
功能:
_cror_
程序字符
c
循环右移
b
位。固有函数,代码要求内嵌,而不是调用。参数:
返回:右移的结果
(4)_iror_
原型:
unsigned int
_iror_(unsigned int i, unsigned char
b);
功能:
_iror_
程序将整数
i
循环右移
b
位。固有函数,代码要求内嵌而不是被调用。
参数:
i
右移的整数,
b<
/p>
右移的次数。
返回:
< br>_iror_
程序返回右移后的值。
(5)_lror_
原型:
unsigned long
_lror_(unsigned long l,unsigned char
b);
功能:
_lror_
程序将长整数
l
循环右移
b
位。固有函数代码,要求内嵌而不是被调用。
参数:
l
要右移的数,
b
要右移的位数。
返回:返回右移后的
值。摘要:
#include
。
(6)_crol_
原型:
unsigned char
_crol_(unsigned char c, unsigned char
b);
功能:
_crol_
程序字符
c
循环左移
b
位。固有函数,代码要求内嵌,而不是调用。
参数:
返回:左移的结果
(7)_irol_
原型:
unsigned int
_irol_(unsigned int i, unsigned char
b);
功能:
_irol_
程序将整数
i
循环左移
b
位。固有函数,代码要求内嵌而不是被调用。
参数:
i
左移的整数,
b<
/p>
左移的次数。
返回:
< br>_irol_
程序返回左移后的值。
(8)_lrol_
原型:
unsigned long
_lrol_(unsigned long l,unsigned char
b);
功能:
_lrol_
程序将长整数
l
循环左移
b
位。固有函数,代码要求内嵌而不是被调用。
参数:
l
要左移的数,
b
要左移的位数。
返回:返回左移后的值。
(9)_chkfloat_
原型:
unsigned char
_chkfloat_(float val);
功能:检查浮点数的状态。
参数:浮点型变量。
返回:
0
,标准浮点数;
1
,
浮点数
0
;
2
,正溢出;
3
,负溢出;
4
,
NaN(
不是一个数
)
错误状
态。
(10)_push_
原型:
void _push_(unsigned char
_sfr);
功能:将特殊功能寄存器
_sfr
压入堆栈。
(11)_pop_
原型:
void _pop_(unsigned char
_sfr);
功能:将堆栈中的数据弹出到特殊功能寄存器<
/p>
_sfr
。
三、字串转数字,随机数,存储池管理
-
返回:
<
br> <
br>ptr 中转换部分的第一个字符。如果 <
br>NULL
(1)atof
原型:
float atof(void
*string);
功能:将浮点数格式的字符串转换为浮点
数。如果
string
的第一个字符不能转换成数字,就
停止处理。
参数:格式为,
[{+|
-
}]
数字
[.
数字
][{e|E}[{+|
-
}]
数字
]
。如,
-
12.345e+67
返回:
atof
函数返回
string
的浮点值。
(2)atoi
原型:
int atoi(void
*string);
功能:
atoi
函数转换
string
为一个整数值。
string
是一个字符序列,可以解释为一个整数。
如果
string
的第一个字符不能转换成数字
,就停止处理。
参数:
atoi
p>
函数要求
string
有这样的格式:
p>
[
空格
][{+|
-
}]
数字,如”
123456
”
。
返回:
atoi
函数返回
string
的整数值。
(3)atol
原型:
long atol(void
*string);
功能:
atol
函数转换
string
为一个长整数值
。
string
是一个字符序列,可以解释为一个长整
数。如果
string
的第一个字符不能转换成
数字,就停止处理。
参数:
atol
函数要求
string
有这样的格式:
[
空格
][{+|
}]
数字,如”
1234567
890
”
。
返回:
atol
函数返回
string
的长整数值。
(4)rand
原型:
int
rand(void);
功能:
ra
nd
函数产生一个
0
~
32767
之间的虚拟随机数。
rand
函数返回一个虚拟随机数。
(5)srand
原型:
void srand(int
seed);
功能:
srand
p>
函数设置
rand
函数所用的虚拟随机数发
生器的起始值
seed
,
随机数发生器
对任
何确定值
seed
产生相同的虚拟
随机数序列。
返回:无。
(6)strtod
原型:
unsigned long
strtod(const char *string, char **ptr);
功能:
strtod
函数将一个浮点数
格式的字符串
string
转换为一个浮点数。字符串开头的空
白
字符被忽略。
参数:
要求
string
有下面的格式:
[{+|
-
}]digits
[.digits][{e|E}[{+|
-
}]digits
]digits
可能是一个或多
个十进制数。
的值设置指针到
string
ptr
是
,没有
值和
ptr
p>
关联。如果不能转换,则
prt
就设为
p>
string
的值,
strtod
返回
0
。
返回:
strtod
函数返回由
< br>string
生成的浮点数。
(7)strtol
原型:
long strtol(const char
*string, char **ptr, unsigned char
base);
功能:
strtol<
/p>
函数将一个数字字串
string
转换为
一个
long
值。
< br>参数:输入
string
是一个字符序列,可以解释为一
个整数。字符串开头的空白字符被忽略,
符号可选。要求
str
ing
有下面的格式:
[whitespace][{+|
p>
-
}]digitsdigits
可能是一
个或多个十进
制数。如果
base
是零
,数值应该有一个十进制常数、八进制常数或十六进制常数的格式。
数值的基数从格式推
出。
如果
base
在
< br>2
~
36
之间,
数值必须是一个字母或数字的非零序列,
表示指定基数的一个整数。字母
a
~
z(
或
A
~
Z)
分别表示值<
/p>
10
~
36
。只
有小于
base
的字母表
示的值是允许
的。如果
base
是
16
,数值可能以
0x
或
0X<
/p>
开头,
0x
或
0
x
被忽略。
prt
的值设
置指针指向
string
中转换部分的第一个字符。
如果
prt
是
NULL
,没有值和
ptr
关联。如果不
能转换,
prt
设置为
string
的值,
strtol
返回
0
。
返回:
strtol
函数返回
string
生成的整数值。如溢出则返回
LONG_MIN
或
p>
LONG_MAX
。
(8)strtoul
原型:
unsigned long
strtoul(const char *string, char **ptr, unsigned
char base);
功能:
st
rtoul
函数转换
string
为一
个
unsigned long
值。
参数:与
strtol
函数类似。
p>
返回:
strtoul
< br>函数返回
string
生成的整数值。如溢出则返回
p>
ULONG_MAX
。
(9)init_mempool
原型:
void
inti_mempool(void xdata *p, unsigned int
size);
功能:
init_mempool
函
数初始化存储管理程序,提供存储池的开始地址和大小。本函数必
须在任何其他的存储管
理函数
(calloc
,
free
p>
,
malloc
,
realloc)
被调用前设置存储池,只在程序
的开头调用一
次。可以修改源程序以适合硬件环境。
参数:
p
参数指向一个
xdata
的
存储区,用
calloc
,
free<
/p>
,
malloc
和
realloc
库函数管理。
size
参数指定存储池所用的字节数。
返回:无。
(10)malloc
原型:
void xdata
*malloc(unsigned int size);
功能:
malloc
函数从存储池分配
size
字节的存储块。
返回:
p>
malloc
返回一个指向所分配的存储块的指针,
如果没有足够的空间,
则返回一个
NULL
指针。
(11)free
原型:
void free(void xdata
*p);
功能:
free
函数返回一个存储块到存储池。
p
参数指向用
p>
calloc
、
malloc
或
realloc
函数分配
的存储块。一旦块返回到存储就可被再分配。如果
p
是一个
p>
NULL
指针,被忽略。本程序的
源代码在
KEILC51LIB
目录中,可以修改源程序,根据硬件来定
制本程序。
参数:
返回:无。
(12)realloc
原型:
void xdata *realloc(void
xdata *p,unsigned int size);
功能:
realloc
函数改变已分配的存储块的大小。本程
序的源代码在目录
KEILC5ILIB
中,可
以根据硬件环境定制本函数。
参数:
P
参数指向己分配块,
size
参数指定新块的大小。原块的内容复制到新块,新块中的
任何其他区,如果是一个更大
的块不初始化。
返回:
reallo
c
返回一个指向新块的指针。如果存储池没有足够的存储区,返回一个
< br>NULL
指
针,存储块不受影响。
(13)calloc
原型:
void xdata
*calloc(unsigned int num,unsigned int
len);
功能:
calloc
p>
函数从一个数组分配
num
个元素的存储区
。每个元素占用
len
字节,并清
0<
/p>
。
字节总数为
num*len
。
在
LIB
目录提供程序
的源代码。
可以修改源程序,
为硬件定制本函数。
参数:
num
为元素数目
,
len
为每个元素的长度。
返回:
calloc
函数返回一个指针,指向
分配的存储区,如果不能分配,则返回一个
NULL
指
针。
四、流输入输出
(1)_getkey
原型:
char
_getkey(void);
功能:
_getkey
函数等待从串口接收字符。
_getkey<
/p>
和
putchar
函数的源代码可以修改
,提供
针对硬件的字符级的
I/O
。<
/p>
返回:接收到的字符
(2)getchar
原型:
char
getchar(void);
功能:
getchar
函数用
_getkey
函数从输入流读一个字符。所读的字符用
putchar
函数
显示。
本函数基于
_getkey
或<
/p>
putchar
函数的操作。这些函数,在标准库中提供,用
p>
8051
的串口读
和写字符。定制函数可以
用别的
I/O
设备。
返回:所读的字符。
(3)ungetchar
原型:
char ungetchar(char
c);
功能:
ungetchar<
/p>
函数把字符
c
放回到输入流。子程序被<
/p>
getchar
和别的返回
c
的流输入函数
调用。
getchar
在调用时只能传递一个字符给
ungetehar
。
参数:
返
回:
如果成功,
ungetchar
函
数返回字符
c
。
如果调用者在读输入流
时调用
ungetchar
多次,
返回
EOF
表示一个错误条件。
(4)putchar
原型:
char putchr(char
c);
功能:
putchar
函数用
8051
的串口输出字符
c
。本程序指定执行,功能可能有变。因提供了
_g
etkey
和
putchar
函数的源
程序,可以根据任何硬件环境修改以提供字符级的
I/O
。
p>
参数:
返回:
putchar
函数返回输出的字符
c
。
(5)printf
原型:
int printf(const char
*fmtstr
[,arguments]
…
);
<
/p>
功能:
printf
函数格式化一系列的
字符串和数值,生成一个字符串用
putchar
写到输出流。
参数:
fmtstr
参数是一个格式化
字符串,可能是字符、转义系列和格式标识符。普通的字符
和转义系列按说明的顺序复制
到流。格式标识符通常以百分号
(%)
开头,要求在函数调用中
包含附加的参数
Arguments
。
格式字符串从左向右读。第一个格式标识符使用
fmtstr
后
的第
一个参数,
用格式标识符转换和输出。
第二个格式标识符访问
fmtstr
后的第二个参数。
p>
如果
参数比格式标识符多,多出的参数被忽略。如果参数不够,结果
是不可预料的。格式标识符
用下面的格式:
%[flags][
width][.precision][{b|B|l|L}]type
格式标识符中
的每个域可以是一个
字符或数字
type
域是一个字符,指定参数是否解释为一个字符、字符串、数字或指针。如
下表所示:<
/p>
可选的字符
b
或
B
和
l
和
L<
/p>
可直接放在类型字符前,
分别指定整数类型
d
、
i
、
u
、
o
、
x
p>
和
X
的
char<
/p>
或
long
版本。
flags
域是单个字符,用来对齐、输出和打印
+/
p>
-
号、空白、
小数点、八进制和十六进制的
前缀。如下表所示:
width
域是一个非负数字,指定显示
的最
小字符数。如果输出值的字符数小于
width
,空白会加到左边或右边
(
当指定了一个标记
p>
)
以
达到最小的宽度。如果
width
用一个’
0
’作前
缀,则填充的是零而不是空白。
width
域不会
截短一个域。
如果输出值的长度超过指定宽度,
则输
出所有的字符。
width
域可能是星号
(*)
,
在这种情况下,参数列表的一个
int
参数提供宽度值。如果参数使用的是
unsigne
d char
,在
星号标识符前指定一个’
b
’
。
precision
域是非负数字,指定显示的字符数、小数位数或有效
位。
precison
域可能使输出值切断或舍入。
pr
ecision
域可能是星号
(*)
,
在这种情况,参数列
表的一个
int
参
数提供宽度值。
如果参数使用的是
unsigned
char
,
在星号标识符前指定一个’