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

上传人:时间****91 文档编号:203158616 上传时间:2023-04-24 格式:DOC 页数:31 大小:226KB
收藏 版权申诉 举报 下载
单片机C语言(C51)的常用库函数_第1页
第1页 / 共31页
单片机C语言(C51)的常用库函数_第2页
第2页 / 共31页
单片机C语言(C51)的常用库函数_第3页
第3页 / 共31页
资源描述:

《单片机C语言(C51)的常用库函数》由会员分享,可在线阅读,更多相关《单片机C语言(C51)的常用库函数(31页珍藏版)》请在装配图网上搜索。

1、C5的常用库函数详解C1语言的编译器中包具有丰富的库函数,使用库函数可以大大简化顾客程序设计的工作量,提高编程效率。每个库函数都在相应的头文献中给出了函数原型声明,在使用时,必须在源程序的开始处使用预解决命令#inlue将有关的头文献涉及进来。C5库函数中类型的选择考虑到了8051单片机的构造特性,顾客在自己的应用程序中应尽量地使用最小的数据类型,以最大限度地发挥8051单片机的性能,同步可减少应用程序的代码长度。下面将C51的库函数分类列出并具体简介其用法。1 字符函数字符函数的原型声明涉及在头文献CTYE.H中。常用的某些字符函数简介如下。. 检查英文字母函数检查英文字母函数用于检查形参字

2、符与否为英文字母,其函数原型如下:bit ispa(charc);其中,c为待判断的字符,如果是英文字母则返回1,否则返回。程序示例如下:1.2 检查字母数字函数检查字母数字函数用于检查形参字符与否为英文字母或数字字符,其函数原型如下:i isanum(harc);1.3 检查控制字符函数检查控制字符函数用于检查形参字符与否为控制字符,其函数原型:bit iscntrl(cha );其中,c为待判断的字符。控制字符其取值范畴为x0xlF之间或等于07F,如果是,则返回,否则返回0。1. 十进制数字检查函数十进制数字检查函数用于检查形参字符与否为十进制数字,其函数原型如下:t idigt (ch

3、c);其中,c为待判断的字符,如果是十进制数字则返回1,否则返回0。15可打印字符检查函数可打印字符检查函数用于检查形参字符与否为可打印字符,其函数原型如下:it gaph (charc);其中,c为待判断的字符。可打印字符的取值范畴为0x20xC,不涉及空格,如果是可打印字符则返回1,否则返回0。1.6 涉及空格的可打印字符检查函数涉及空格的可打印字符检查函数用于检查形参字符与否为可打印字符以及空格,其函数原型如下:bitisprt (hr c);其中,c为待判断字符。如果是则返回,否则返回0。该函数与gap的区别在于涉及了空格符,空格符为00。1.7 格式字符检查函数格式字符检查函数用于检

4、查形参字符与否为标点、空格或格式字符,其函数原型如下:it ispunc (ch );其中,c为待判断字符,如果是则返回1,否则返回0。1.8 小写英文字母检查函数小写英文字母检查函数用于检查形参字符与否为小写英文字母,其函数原型如下:bit isowe(cha c);其中,c为待判断字符。如果是小写英文字母则返回,否则返回0。1. 大写英文字母检查函数大写英文字母检查函数用于检查形参字符与否为大写英文字母,其函数原型如下:bt isupp(char);其中,c为待判断字符。如果是大写英文字母则返回1,否则返回0。1.10 控制字符检查函数控制字符检查函数用于检查形参字符与否为控制字符,其函数

5、原型如下:bi isspac (cha c);其中,c为待判断字符。如果是控制字符则返回1,否则返回。控制字符涉及:空格、制表符、回车、换行、垂直制表符和送纸,其取值范畴为0x00d,或为0x0。1.11 十六进制数字检查函数十六进制数字检查函数用于检查形参字符与否为十六进制数字,其函数原型如下:i isxdigit (charc);其中,c为待判断字符。如果是6进制数字字符则返回1,否则返回0。1.1 十六进制数字转换函数十六进制数字检查函数用于转换形参字符为十六进制数字,其函数原型如下:hartoint (chr c);其中,c为待转换字符。该函数将形参字符09、af(大小写无关)转换为1

6、进制数字。其中,对于字符9,返回值为H9H,对于SCII字符a(大小写无关),返回值为0AH0FH。1.13 大写字符转换函数大写字符转换函数用于将大写字符转换为小写字符,其函数原型如下:charolwr (cr );其中,c为待转换的大写字符。如果字符参数不在AZ之间,则该函数将不起作用,而直接返回原字符。1.14 小写字符转换函数小写字符转换函数用于将小写字符转换为大写字符,其函数原型如下:chr toupper (c c);其中,为待转换的小写字符。如果字符参数不在az之间,则该函数将不起作用,而直接返回原字符。1. ASCI字符转换函数ACII字符转换函数用于将任何字符型参数缩小到有效

7、的SCII范畴之内,其函数原型如下:aroasii(harc);其中,c为待转换的字符。该函数执行的操作是将形参数值和x7f做与运算,从而去掉第7位以上的所有位数。如果形参已是有效的SCII字符,则不作解决,直接返回原字符。1.16 大写字符宏转换函数大写字符宏转换函数用于大写字符转换为小写字符,其函数原型如下:chr tooer(char );其中,为待转换的大写字符。这其实是一种由宏定义完毕的操作,其功能是将字符参数与常数0x20逐位进行或运算,从而将大写字符转换为小写字符。17 小写字符宏转换函数小写字符宏转换函数用于小写字符转换为大写字符,其函数原型如下:ch tuppr (har )

8、;其中,c为待转换的小写字符。这其实是一种由宏定义完毕的操作,其功能是将字符参数c与常数0xf逐位进行与运算,从而将小写字符转换为大写字符。2 字符串函数字符串函数的原型声明涉及在头文献STRING.H中。在C51语言中,字符串应涉及个或多种字符,字符串的结尾以空字符来表达。字符串函数通过接受指针串来对字符串进行解决。常用的字符串函数简介如下。2. 字符查找函数字符查找函数用于在字符串中顺序查找字符,其函数原型如下:oid mer(vd,char val,int len);其中,1为输入字符串,vl为待查找的字符,len为查找的长度范畴。该函数的功能是在字符串s1中顺序搜索前ln个字符以找出字

9、符l,如果找到则返回l中指向va的指针,如果没有找到则返回NUL。2.2 指定长度的字符串比较函数指定长度的字符串比较函数用于按照指定的长度比较两个字符串的大小,其函数原型如下:ha mecmp(vois1,void*2,intl);其中,1和s为输入字符串,len为比较的长度。该函数的功能是逐个比较字符串l和s的前e个字符,如果相等则返回0,如果字符串不小于s,则返回一种正数,如果字符串s1不不小于s2,则返回一种负数。如果两个字符串的长度不不小于len,该函数仍将始终比较le个字符,这种状况下,有也许成果是错误的。因此应当保证le不能超过最短字符串的长度。.字符串复制函数字符串复制函数用于

10、复制指定长度的字符串,其函数原型如下:void*memc(vid*s,voisrc,it le);其中,dest为目的字符串,rc为源字符串,e为复制的长度。该函数的功能是从所指向的字符串中复制le个字符到des字符串中,其返回值指向est中的最后一种字符的指针。.4 带终结字符的字符串复制函数带终结字符的字符串复制函数用于复制字符串,如果遇到终结字符则停止复制,其函数原型如下:vodmemccpy(voddet, vodsrc,cha al,it len);其中,dest为目的字符串,rc为源字符串,l为终结字符,en为复制的长度。该函数的功能是复制字符串rc中的en个字符到es中,复制le

11、n个字符后则返回NLL。如果遇到字符vl则停止复制,此时返回一种指向det中的下一种元素的指针。. 字符串移动函数字符串移动函数同样用于复制字符串,其函数原型如下:void *memmov(void*est,vid*sc,it ln);其中,dest为目的字符串,r为源字符串,ln为复制长度。该函数的功能是从sr所指向的字符串中复制le个字符到dst字符串中,其返回值指向des中的最后一种字符的指针。其功能与memcpy相似,但是复制区间src与est可以发生交迭。2.6 字符串填充函数字符串填充函数用于按规定的字符填充字符串,其函数原型如下:vo*memset(voi*s,cr val,in

12、ten);其中,s为待填充的字符串,vl为填充字符,le为填充的长度。该函数实现的操作是用字符va来填充字符串s,共填充le个单元2.7字符串追加函数字符串追加函数用于复制字符串到另一种字符串的尾部,其函数原型如下:vid *trca(char*1,cha s);其中,为目的字符串,s2为待复制的字符串。该函数实现的操作是将字符串2复制到字符串s1的尾部。其中字符串要有足够的大小来保存两个字符串。该函数的返回值指向字符串s1中的第一种字符的指针。2.8 指定长度的字符串追加函数指定长度的字符串追加函数用于复制指定长度的字符串到另一种字符串的尾部,其函数原型如下:vid*stn(,ch s1,c

13、har*s2,in n);其中,s1为目的字符串,2为待复制的字符串,n为复制的长度。该函数实现的操作是从字符串s2中复制n个字符添加到字符串s1的尾部。其中,如果字符串s2的长度比n小,则将所有复制字符串s(涉及串结束符)。29 字符串比较函数字符串比较函数用于比较两个字符串的大小,其函数原型如下:car srmp(car s1,char *s);其中,和s2为待比较的字符串。该函数的功能是比较字符串s和s,如果两者相等则返回0;如果s1,则返回一种负数;如果ss2,则返回一种正数。210 涉及结束符的字符串比较函数涉及结束符的字符串比较函数用于比较两个字符串的大小,其函数原型如下:char

14、*rncm(char1,ch *s2,int n);其中,s1和s为待比较的字符串,n为比较的长度。该函数的功能是比较字符串s1和2的前n个字符,如果两者相等则返回0;如果s1s2,则返回一种正数。这里需要和ecp函数相区别,如果字符串的长度不不小于n,则srcmp函数比较到字符串结束符后便停止,这和emcmp函数是不同样的。2. 字符串覆盖函数字符串覆盖函数用于将一种字符串覆盖另一种字符串,其函数原型如下:ca* rc(char *s1,chr *2);其中,s为目的字符串,为源字符串。该函数的功能是将字符串s2(涉及结束符)复制到字符串s中的第1个字符指针处。这里需要注意和strca函数相

15、区别,tr函数将字符串2复制到字符串s的末尾。2.1 指定长度的字符串覆盖函数指定长度的字符串覆盖函数用于将一种指定长度的字符串覆盖另一种字符串,其函数原型如下:chatrnpy(char*,car *s2,in n);其中,s1为目的字符串,为源字符串,n为长度。该函数实现的操作是从字符串2(涉及结束符)中复制n个字符到字符串1中的第1个字符指针处。如果字符串2的长度不不小于n,则s1串以0补齐到长度n。.13 获取字符串个数函数获取字符串个数函数用于返回字符串中字符总数,其函数原型如下:chr*sten(char s1);其中,s1为输入字符串。该函数的功能是获取字符串s1中的字符个数,返

16、回值的大小不涉及结尾的字符串结束符。.14 搜索字符串函数搜索字符串函数用于搜索字符串浮现的位置,其函数原型如下:chrtstr(const ch*s1,cars2);其中,s1为目的字符串,2为搜索的字符串。该函数实现的操作是在字符串1中搜索第一次浮现字符串s的位置,并返回该处的指针。如果字符串中不涉及字符串s2,则该函数返回一种空指针。215 搜索字符函数搜索字符函数用于搜索字符浮现的位置,其函数原型如下:cha*stcr(char*s1,car );其中,s1为目的字符串,为待搜索的字符。该函数的功能是搜索字符串s1中与否涉及字符,如果涉及则返回第一次指向该字符的指针,否则返回NULL。

17、被搜索的字符可以是串结束符,此时返回值是指向串结束符的指针。2.16 返回位置值的字符搜索函数返回位置值的字符搜索函数用于搜索并返回字符浮现的位置,其函数原型如下:int spos(cars1,car c);其中,s1为目的字符串,c为搜索的字符。该函数的功能是查找并返回字符c在字符串s1中第一次浮现的位置值,没有找到该字符则返回1,s1串首字符的位置值是0。stros函数的功能与srh类似,只但是返回值不同。2.17 字符涉及函数字符涉及函数用于检查字符串中与否涉及某字符,其函数原型如下:carsrcr(hr *s1,harc);其中,s为目的字符串,c为查找的字符。该函数的功能是搜索字符串

18、s1中与否涉及字符c,如果涉及则返回最后一次指向该字符的指针,否则返回L。被搜索的字符可以是串结束符,此时返回值是指向串结束符的指针。2.18 返回位置值的字符涉及函数返回位置值的字符涉及函数同样用于检查字符串中与否涉及某字符,其函数原型如下:instrrpos(has1,har );其中,s1为目的字符串,c为查找的字符。该函数的功能是查找并返回字符c在字符串s1中最后一次浮现的位置值,没有找到该字符则返回-,1串首字符的位置值是0。sps函数的功能与srrcr类似,只但是返回值不同。. 在指定字符集中查找不涉及字符函数在指定字符集中查找不涉及字符函数用于查找不涉及在指定字符集中的字符,其函

19、数原型如下:int stsn(chr*s1,char*st);其中,s为目的字符串,set为字符集。该函数的功能是搜索字符串中第一种不涉及在set串中的字符,返回值是字符串1中涉及在set中的字符的个数。如果s中所有的字符都涉及在set中,则返回s1的长度(不涉及结束符)。如果set是空字符串则返回0。.0 在指定字符集中查找涉及字符函数在指定字符集中查找涉及字符函数用于查找涉及在指定字符集中的字符,其函数原型如下:nt strcn(chr*1,har*set);其中,1为目的字符串,st为字符集。该函数的功能是搜索的是第一种涉及在set串中字符,返回值是字符串s中涉及在set中的字符的个数。

20、如果s1中所有的字符都涉及在et中,则返回s1的长度(不涉及结束符)。如果set是空字符串则返回。2.21 查找第一种涉及字符函数查找第一种涉及字符函数用于查找第一种涉及在指定字符集中的字符,其函数原型如下:char*trbrk(har *,har*set);其中,1为目的字符串,se为字符集。该函数的功能是搜索字符串s1中第一种涉及在se串中的字符,返回值指向搜索到的字符的指针,如果未找到,则返回NULL。2.22 查找最后一种涉及字符函数查找最后一种涉及字符函数用于查找最后一种涉及在指定字符集中的字符,其函数原型如下:char*strrpbrk(ar*s,charet);其中,s1为目的字

21、符串,set为字符集。该函数的功能是搜索字符串s1中最后一种涉及在set串中的字符,返回值指向搜索到的字符的指针,如果未找到,则返回NULL。3 IO函数I/O函数重要用于数据的输入输出等操作,C51的IO库函数的原型声明涉及在头文献SDIO.H中。这些/O函数使用851单片机的串行接口进行通信,因此,在使用之前需要先进行串口的初始化。例如:SCON=x50;/串口模式,容许接受TMD|=x20;/初始化T1为定期功能,模式2PCO|=0x0;/设立SMOD1TL10xF4;/波特率400bit/,初值TH1=0xF;E|0x90;/中断TR1=1;/启动定期器.1 字符读入函数字符读入函数用

22、于从串口读入一种字符,其函数原型如下:cha _tey(vo);该函数执行的操作是等待从8051的串口读入一种字符,并返回读入的原字符。程序示例如下:3. 字符读入输出函数字符读入输出函数用于从串口读入一种字符并输出该字符,其函数原型如下:chr gtch(voi);该函数与_getky函数有细微的不同,其执行的操作是使用_tkey从串口读入的一种字符,然后使用putchar函数将读入的字符输出。3.3 字符串读入函数字符串读入函数用于从串口读入一种字符串,其函数原型如下:ch*gts (chrs, int n);其中,s保存读入的字符串,n为字符串的长度。该函数执行的操作是使用etchar函

23、数从串口读入一种长度为的字符串,并存入字符数组中。如果遇到换行符,则结束字符的输入。输入成功时将返回传入的参数指针,失败时返回空指针NUL。3. 字符回送函数字符回送函数用于将输入的字符回送到输入缓冲区,其函数原型如下:char uetchr(char c);其中,为输入字符。该函数执行的操作是将输入的字符回送到输入缓冲区,如果函数调用成功则返回har型值c,失败时则返回EOF。35 字符输出函数字符输出函数用于通过05串行口输出字符,其函数原型如下:char putchar(char);其中,为通过8051串行口输出的字符。3.6 格式化输出函数格式化输出函数用于按照一定的格式输出数据或字符

24、串,其函数原型如下:int itf (onst char*fmst,rgument);该函数的功能是以一定的格式通过8051单片机的串行口输出数值和字符串。其中第一种参数fstr是格式控制字符串,参数arguent可以是字符串指针、字符或数值,该函数的返回值为实际输出的字符个数。3.7 格式化内存缓冲区输出函数格式化内存缓冲区输出函数用于按照一定的格式将数据或字符串输出到内存缓冲区中,其函数原型如下:int sprintf (char*s,const chrst,argmen);该函数执行的操作是通过指针,将字符串送入内存数据缓冲区,并以ASCI码的形式储存。3.8 字符串输出函数字符串输出函

25、数用于将字符串和换行符写入串行口,其函数原型如下:it put (coschar);其中,s为输出的字符串或换行符。如果执行成功则返回0,错误时返回EF。程序示例如下:9 格式化输入函数格式化输入函数用于将字符串和数据按照一定的格式从串口读入,其函数原型如下:in scaf (cost chr *fmstr,argment);该函数的功能是在格式字符的控制下从串行口读入数据。其中每个参数都必须是指针。scanf返回值是所发现并转换的输入项数,如遇到错误则返回EF。该函数的格式控制字符串形式如下,方括号内是可选项。%*wdth Bhype3.10 格式化内存缓冲区输入函数格式化内存缓冲区输入函数

26、用于将格式化的字符串和数据送入数据缓冲区,其函数原型如下:int scanf (ars,onst c mstr,aguet);该函数的功能是将输入的字符串通过指针s指向的数据缓冲区。输入数据根据格式控制字符串str被寄存到由argument指定的地址。其他方面,sca函数与scanf函数类似。311 字符串内存输出函数字符串内存输出函数用于将格式化字符串输出到内存数据缓冲区,其函数原型如下:invprif(cont hr mtr,r *rptr);其中,sr为格式化字符串,arptr指向变量表的指针而不是变量表,函数返回值为实际写入到输出字符串中的字符数。其他方面,vprtf函数与prit函数

27、类似。3.1 指向缓冲区的输出函数指向缓冲区的输出函数用于将格式化字符串和数字输出到由指针所指向的内存数据缓冲区,其函数原型如下:in vprinf (ca*s,cnst car *fmsr,har *argtr);该函数执行的操作是将格式化字符串和数字输出到由指针所指向的内存数据缓冲区。其中,该函数接受的是一种指向变量表的指针而不是变量表,其返回值为实际写入到输出字符串中的字符数。其她方面vsprnf函数与sprntf函数类似。 数学函数数学函数重要用于进行数学运算,其原型声明涉及在头文献MATH.H中。下面简介某些常用的数学函数。41 绝对值函数绝对值函数用于计算并返回输出数据的绝对值。按

28、照其操作数的数据类型的不同,有如下几种形式:intab(in val);ar as(char al);loat f(flat v);lon ls(ong vl)这些函数分别用于计算整型、字符型、浮点型以及长整型数据的绝对值。.2 指数以及对数函数指数函数用于计算并返回输出数据的指数。对数函数用于计算并返回输出数据的对数。其函数原型示例如下:foat exp(flo x);latlog(floa );floalg10(lox);at sr(float x);其中exp函数用于计算并返回浮点数x的指数,log函数用于计算并返回浮点数x的自然对数(自然对数以为底,=.7188),lg10函数用于计算

29、并返回浮点数x的以10为底的对数值,t函数用于计算并返回浮点数x的平方根。4.3三角函数三角函数用于计算数学中三角函数的值。在C51语言中涉及如下几种三角函数:fot cos(fla x);foat sin(float);lt ta(floa x);loa os(fot x);float a(loat x);flatatan(foat);floa aan(loa y,fot );flat os(float );fl inh(fa x);floattan(float x);. 取整函数取整函数用于取输入数据的整数。在C51语言中,涉及两类取整函数,示例如下:fla eil(fl x);float

30、 fr(oa x);其中cei函数用于计算并返回一种不不不小于x的最小正整数(作为浮点数),flor函数用于计算并返回一种不不小于x的最小正整数(作为浮点数)。4.5 浮点型分离函数浮点型分离函数用于将浮点型数据的整数和小数部分分开,其函数原型如下:float modf(foat x,flat*ip);函数mo将浮点数x提成整数和小数两部分,整数部分放入i,返回值为小数部分。两者都具有与x相似的符号。4.6 幂函数幂函数用于进行幂指数运算。其函数原型如下:floa w(lt ,floaty);该函数用于计算并返回xy的值。如果x不等于0而=0,则返回1。当=0且=0或x且不是整数时,返回NN。

31、 原则函数原则函数重要用于完毕数据类型转换以及存储器分派等操作。原则函数的原型声明涉及在头文献TDLIB.H中。下面简介常用的某些函数。5. 字符串转换函数字符串转换函数用于将字符串转换成数值类型并输出。根据输出数值类型的不同,可以有如下几种形式:floati(cha*sl);flot aol(char*sl);laaof(cha*s);其中,toi函数用于将字符串sl转换成整型数值并返回该值。输入字符串的格式为:htespce+数字。其中,whitespe可由空格、/、制表符构成。这里的数字可以是一种或多种十进制数。5 带返回指针的字符串转换函带返回指针的字符串转换函数将字符串转换成数值类型

32、并输出,同步返回未转换部分的指针。根据输出数值类型的不同,可以有如下几种形式:float strtod(constchr*,ha*ptr);onsttol (consth*s,char*ptr,nsigned chr bse);unsigne lostrtoul (onst char*s,cha*ptr,unsgnd char ba);53 随机函数随机函数用于产生伪随机数。在C1语言中,涉及两种随机函数,其函数声明如下:int ran();void srn(ntn);其中,函数rand用于返回一种0到32之间的伪随机数,而函数ran用来初始化随机数发生器的随机种子。如果不使用rand函数,则

33、对ran函数的相继调用将产生相似的随机序列。4 数组内存分派函数数组内存分派函数用于为n个元素的数组分派内存空间,其函数原型如下:voi*caloc (usighe n,nsied it sz);其中n数组元素的个数,size为数组中每个元素的大小。该函数所分派的内存区域用0进行初始化。返回值为已分派的内存单元起始地址,如果不成功则返回。5. 释放内存函数释放内存函数用于释放前面已分派的内存空间,其函数原型如下:void ree (void xat *);其中,指针p指向待释放的存储区域。p必须是此前用cl、mc或reao函数分派的存储区域,如果为NUL,则该函数无效。经fr函数所被释放的存储

34、区域可以参与后来的分派。56 初始化内存函数初始化内存函数用于对前面申请的内存进行初始化,其函数原型如下:id ini_mool(vxdatap,unighed int size);其中,指针p表达存储区首地址,si表达存储区大小。该函数可对被函数alo、mallo、free或relo管理的存储区域进行初始化。5.7 内存分派函数内存分派函数用于在内存中分派指定大小的存储空间,其函数原型如下:void*maloc (unsghed int sze);其中,ie为分派的空间大小,返回值为指向所分派内存的指针。如果返回NUL,则表达没有足够的内存空间可用。5.8 调节内存大小函数调节内存大小函数用

35、于调节先前分派的存储器区域大小,其函数原型如下:vod*reallo (void xda *,unsighd int s);其中,参数p表达该存储区域的起始地址,参数size表达新分派的存储区域大小。该函数的返回值为新区域所指向的指针。如果返回LL,则表达没有足够的内存空间可用。原存储器区域的内容被复制到新存储器区域中,如果新存储器区域较大,多余的区域不作初始化。 内部函数内部函数的原型声明涉及在头文献NRINS.中。下面简介常用的某些函数。6.1 循环左移函数循环左移函数重要用于将数据按照二进制循环左移位。按照操作数据类型的不同,其函数原型如下几种形式:usigdcha co_(unsigh

36、ed char al,unsigh charn);usighed i _iro_(unsighed int val,ughed char n);unsghd lon _lro_(nsihelong l,unsig car n);其中,al为待移位的变量,为循环移位的次数。函数_crol、_irol和_lol分别用于字符型、整型和长整形变量的循环左移,其返回值分别为移位后的字符型、整型和长整形。该函数与801单片机的LA指令有关。6. 循环右移函数循环右移函数重要用于将数据按照二进制循环右移n位。按照操作数据类型的不同,其函数原型如下几种形式:usighe acror_(unsigd cr va

37、,unsghed chr n);usighed intiror(unsighed intval,uighed hrn);usighedglrr(usghelng va,shed cr n);其中,va为待移位的变量,n为循环移位的次数。函数_cor_、ror_和_lr_分别用于字符型、整型和长整形变量的循环右移,其返回值分别为移位后的字符型、整型和长整形。该函数与81单片机的RR指令有关。6. 延时函数延时函数用于使单片机程序产生延时,其函数原型如下:voidnop_(void);该函数类似于805单片机的O指令。程序示例如下:#include /头文献#ncludedmain(vd) /主函

38、数P=0xFF;/P1端口输出0xFFnop();/延时_nop_();P=000;/P端口输出0x006.4 位测试函数位测试函数用于对字节中的一位进行测试,其函数原型如下:void_testbit_(b );其中,x为待测位变量。如果该位变量置位则函数返回1,同步将该位复位为,否则返回0。该函数产生一种 85单片机的C指令,其只能用于可直接寻址的位,不容许在体现式中使用。 绝对地址访问函数绝对地址访问的函数涉及在头文献ASCC.H中,是某些宏定义的函数。下面分别简介常用的某些函数。7.1 BE型存储空间访问函数BT型存储空间访问函数用于对0单片机的存储空间进行绝对地址访问,可以做字节寻址。

39、其宏定义原型如下:defie CYTE(usigh char volie co*)0)defn DBYE(unsged ar vlatiledata*)0)dfine PBYT((unsihed char voati pdaa*))#efine XT(unighed crvolaile xata*)0)7.2 WORD型存储空间访问ORD型存储空间访问函数可以访问80的所有存储器空间。其宏定义原型如下:ne CWRD((nsige int voatiecde)0)#definDWOR (unsighed it vatila*)#define WRD((uiged nt volatile pda

40、ta*)0)deine WORD(nshed int vlatie data*)0)7.3 far存储区访问函数a存储区访问函数用于访问fa存储器区域。其宏定义原型如下:#define FVA(ject,addr)(*(objct volatiefa)(ddr)+0x10000L)dein CA(object,addr)(*(bjct cns far)((add)+x10000L)其中,VR用于访问fr空间(存储类为A),FR用于访问cont far 空间(存储类为HCONS)。.4 far存储区数组访问函数far存储区数组访问函数用于访问ar存储器区域的数组类型目的。其宏定义原型如下:#de

41、fne ARY(object,bae)(*(objec volatlf*)(base)+0x100L))deine CARRAY(bec,base)(*(ojct constfar)(bse)+0x8100)其中,FARAY用于访问fa空间(存储类为HDATA),FRA用于访问const fa空间(存储类为HCOS)。 变量参数表函数变量参数表函数用于函数参数的个数和类型可变的场合。C51编译器容许函数的参数个数和类型是可变的,可使用简略形式(记号为“.”),这时参数表的长度和参数的数据类型在定义时是未知的。51的变量参数表函数涉及在头文献STDAG.中,重要涉及如下几种。 函数原型typde

42、f hr*v_st:其功能为将valist定义成指向参数表的指针。函数原型oi a_sar (a,)。其功能为初始化a参数,其一般在一种可变长度参数表的函数中使用。在使用宏va arg进行存取前,必须调用函数来初始化可变参数表。函数原型tpede _rg(ap,tye):其功能为从ap指向的可变长度参数表中检索type类型的值。对 ar的第一次调用将返回在v_st宏中指定的v参数后的第一种参数。继续调用v_ arg将返回剩余的后续参数。对于每一种参数可以只调用一次,并且必须按照参数表中的参数的顺序进行。函数原型voda_en (p)。其功能为终结在va_start宏中已被初始化的可变长度参数表

43、的指针p,并且关闭参数表,结束对可变参数表的访问。 9 全程跳转函数全程跳转函数用于正常系列函数的调用和函数结束,还容许从深层函数调用中直接返回。其原型声明涉及在头文献TJMPH中。这里简介某些常用的全程跳转函数。函数原型tpeef ha jpbuf_ben:其功能为定义用于保存和恢复程序环境的缓冲区,供setjm和ongjm所使用,其必须定义为全局变量。函数原型it setjp(jmbuf env):其功能为将程序执行的目前环境状态信息存入变量ev中。当直接调用stjm时,返回值为0,当从ongjmp调用时,返回值为非。函数原型vod longjmp(jmp_buf env, in reta

44、l):其功能为恢复先前调用setjmp时存在e中的环境状态信息,并从emp语句的下一条语句执行。参数val为调用stjmp的返回值。10 计算构造体成员的偏移量函数计算构造体成员的偏移量函数涉及在头文献STDEF.中。其函数声明如下:itoffsetof (srctre,mmber);其中,stuctue为构造体,emer为构造体成员。该函数计算mmber从开始位置的偏移量,并返回字节形式的偏移量值。1 小结本章具体解说了1语言中常用的库函数,重要涉及字符函数、字符串函数、I/O函数、数学函数、原则函数、内部函数、绝对地址访问函数、变量参数表函数、全程跳转函数以及偏移量函数。这些库函数涵盖了常用的字符、字符串、数学计算、I/O控制等功能,读者在进行程序设计时可以直接调用使用。因此,纯熟掌握和运用本章内容,可以大大减轻程序设计的承当,以便单片机的程序设计。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!