深圳市华胄科技有限公司 >> MCU专题 >> 单片机编程


Keil C51使用教程---库函数参考(五)



提交者 华胄斑竹  在  2008-5-23 13:52:33 

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


第一节 本征库函数(intrinsic routines)和非本征证库函数

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均为REG51.h其中包括了所有8051的SFR及其位定义,一般系统都必须包括本文件。


2. 绝对地址include文件absacc.h

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


3. 动态内存分配函数,位于stdlib.h中


4. 缓冲区处理函数位于“string.h”中

其中包括拷贝比较移动等函数如:
memccpy memchr memcmp memcpy memmove memset
这样很方便地对缓冲区进行处理。


5. 输入输出流函数,位于“stdio.h”中

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


第三节 Keil C51库函数原型列表


1. CTYPE.H
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. INTRINS.H
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. STDIO.H
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. STDLIB.H
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. STRING.H
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);



单片机教程,五系列(55讲)电子书全集下载

论坛精选:
■ 单片机c语言,10小时学会C 语言 (一)
第一章 C 语言简介与Turbo C 的使用
■ 单片机c语言,10小时学会C 语言 (二)
第二章 C 程序的结构
■ 单片机c语言,10小时学会C 语言 (三)
第三章 常数与变数
■ 单片机c语言,10小时学会C 语言 (四)
第四章 基本输出入函式
■ 单片机c语言,10小时学会C 语言 (五)
第五章 流程图与抉择指令
■ 单片机c语言,10小时学会C 语言 (六)
第六章 循环与自动重复
■ 单片机c语言,10小时学会C 语言 (七)
第七章 数组与指针
■ 单片机c语言,10小时学会C 语言 (八)
第八章 函数与呼叫
■ 单片机c语言,10小时学会C 语言 (九)
第九章 档案存取

1 楼  提交者:Guest 在 2008-5-25 22:41:18
fsdaasfasfasfasfasfasfaf
2 楼  提交者:Guest 在 2008-6-3 17:51:09
sdfsdfsdf
3 楼  提交者:Guest 在 2008-6-5 11:31:25
............. ding
4 楼  提交者:Guest 在 2008-6-5 12:06:29
xcbbvmnvbmbnmnbb,mn,m.
5 楼  提交者:Guest 在 2008-6-6 13:49:53
vb 
6 楼  提交者:Guest 在 2008-6-13 18:35:06
看看
7 楼  提交者:Guest 在 2008-6-15 14:19:46
好东西
8 楼  提交者:lhy118 在 2008-6-16 8:17:57
看看
9 楼  提交者:C06686687089 在 2008-6-20 12:41:14
10 楼  提交者:Guest 在 2008-6-20 17:25:21


支持

11 楼  提交者:阿乐 在 2008-7-1 13:33:02
回贴是一种美德
12 楼  提交者:wgx1976 在 2008-7-1 17:19:55
谢谢
13 楼  提交者:Guest 在 2008-7-3 21:24:36
谢谢!
14 楼  提交者:学步者 在 2008-7-4 9:26:14
很好
15 楼  提交者:飘荡 在 2008-7-9 22:38:22
16 楼  提交者:Guest 在 2008-7-17 12:39:54
你好!!!
17 楼  提交者:Guest 在 2008-7-18 16:38:15
18 楼  提交者:Guest 在 2008-7-18 21:39:56
本少奶奶又回帖啦……
19 楼  提交者:Guest 在 2008-7-19 10:54:29
支持
20 楼  提交者:tian 在 2008-7-19 16:46:04
21 楼  提交者:王生 在 2008-7-20 9:43:07
FDHHH
22 楼  提交者:Guest 在 2008-7-22 11:09:13
23 楼  提交者:Guest 在 2008-7-25 15:25:22
又得回帖,
24 楼  提交者:Guest 在 2008-7-25 15:25:41

。。。。。。。。。
25 楼  提交者:Guest 在 2008-7-25 17:11:35
感谢
26 楼  提交者:Guest 在 2008-7-26 10:38:59
123
27 楼  提交者:ldj0626 在 2008-7-26 14:11:41
28 楼  提交者:Guest 在 2008-7-26 16:08:06
好看啊
29 楼  提交者:Guest 在 2008-7-29 12:12:57
30 楼  提交者:Guest 在 2008-7-29 12:42:14
d
上一篇 下一篇
当前第〖1〗页 共有10页 转到第 1 2 3 4 5 6 7 8 9 10