版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
PAGEPAGE20C51的常用庫函數(shù)詳解C51語言的編譯器中包含有豐富的庫函數(shù),使用庫函數(shù)可以大大簡化用戶程序設(shè)計的工作量,提高編程效率。每個庫函數(shù)都在相應(yīng)的頭文件中給出了函數(shù)原型聲明,在使用時,必須在源程序的開始處使用預(yù)處理命令#include將有關(guān)的頭文件包含進(jìn)來。C51庫函數(shù)中類型的選擇考慮到了8051單片機(jī)的結(jié)構(gòu)特性,用戶在自己的應(yīng)用程序中應(yīng)盡可能地使用最小的數(shù)據(jù)類型,以最大限度地發(fā)揮8051單片機(jī)的性能,同時可減少應(yīng)用程序的代碼長度。下面將C51的庫函數(shù)分類列出并詳細(xì)介紹其用法。1字符函數(shù)字符函數(shù)的原型聲明包含在頭文件CTYPE.H中。常用的一些字符函數(shù)介紹如下。1.1檢查英文字母函數(shù)檢查英文字母函數(shù)用于檢查形參字符是否為英文字母,其函數(shù)原型如下:bitisalpha(charc);其中,c為待判斷的字符,如果是英文字母則返回1,否則返回0。程序示例如下:1.2檢查字母數(shù)字函數(shù)檢查字母數(shù)字函數(shù)用于檢查形參字符是否為英文字母或數(shù)字字符,其函數(shù)原型如下:bitisalnum(charc);1.3檢查控制字符函數(shù)檢查控制字符函數(shù)用于檢查形參字符是否為控制字符,其函數(shù)原型:bitiscntrl(charc);其中,c為待判斷的字符??刂谱址淙≈捣秶鸀?x00~0xlF之間或等于0x7F,如果是,則返回1,否則返回0。1.4十進(jìn)制數(shù)字檢查函數(shù)十進(jìn)制數(shù)字檢查函數(shù)用于檢查形參字符是否為十進(jìn)制數(shù)字,其函數(shù)原型如下:bitisdigit(charc);其中,c為待判斷的字符,如果是十進(jìn)制數(shù)字則返回1,否則返回0。1.5可打印字符檢查函數(shù)可打印字符檢查函數(shù)用于檢查形參字符是否為可打印字符,其函數(shù)原型如下:bitisgraph(charc);其中,c為待判斷的字符??纱蛴∽址娜≈捣秶鸀?x21~0x7C,不包含空格,如果是可打印字符則返回1,否則返回0。1.6包含空格的可打印字符檢查函數(shù)包含空格的可打印字符檢查函數(shù)用于檢查形參字符是否為可打印字符以及空格,其函數(shù)原型如下:bitisprint(charc);其中,c為待判斷字符。如果是則返回1,否則返回0。該函數(shù)與isgraph的區(qū)別在于包含了空格符,空格符為0x20。1.7格式字符檢查函數(shù)格式字符檢查函數(shù)用于檢查形參字符是否為標(biāo)點(diǎn)、空格或格式字符,其函數(shù)原型如下:bitispunct(charc);其中,c為待判斷字符,如果是則返回1,否則返回0。1.8小寫英文字母檢查函數(shù)小寫英文字母檢查函數(shù)用于檢查形參字符是否為小寫英文字母,其函數(shù)原型如下:bitislower(charc);其中,c為待判斷字符。如果是小寫英文字母則返回1,否則返回0。1.9大寫英文字母檢查函數(shù)大寫英文字母檢查函數(shù)用于檢查形參字符是否為大寫英文字母,其函數(shù)原型如下:bitisupper(charc);其中,c為待判斷字符。如果是大寫英文字母則返回1,否則返回0。1.10控制字符檢查函數(shù)控制字符檢查函數(shù)用于檢查形參字符是否為控制字符,其函數(shù)原型如下:bitisspace(charc);其中,c為待判斷字符。如果是控制字符則返回1,否則返回0??刂谱址ǎ嚎崭?、制表符、回車、換行、垂直制表符和送紙,其取值范圍為0x09~0x0d,或?yàn)?x20。1.11十六進(jìn)制數(shù)字檢查函數(shù)十六進(jìn)制數(shù)字檢查函數(shù)用于檢查形參字符是否為十六進(jìn)制數(shù)字,其函數(shù)原型如下:bitisxdigit(charc);其中,c為待判斷字符。如果是16進(jìn)制數(shù)字字符則返回1,否則返回0。1.12十六進(jìn)制數(shù)字轉(zhuǎn)換函數(shù)十六進(jìn)制數(shù)字檢查函數(shù)用于轉(zhuǎn)換形參字符為十六進(jìn)制數(shù)字,其函數(shù)原型如下:chartoint(charc);其中,c為待轉(zhuǎn)換字符。該函數(shù)將形參字符0~9、a~f(大小寫無關(guān))轉(zhuǎn)換為16進(jìn)制數(shù)字。其中,對于字符0~9,返回值為0H~9H,對于ASCII字符a~f(大小寫無關(guān)),返回值為0AH~0FH。1.13大寫字符轉(zhuǎn)換函數(shù)大寫字符轉(zhuǎn)換函數(shù)用于將大寫字符轉(zhuǎn)換為小寫字符,其函數(shù)原型如下:chartolower(charc);其中,c為待轉(zhuǎn)換的大寫字符。如果字符參數(shù)不在A~Z之間,則該函數(shù)將不起作用,而直接返回原字符。1.14小寫字符轉(zhuǎn)換函數(shù)小寫字符轉(zhuǎn)換函數(shù)用于將小寫字符轉(zhuǎn)換為大寫字符,其函數(shù)原型如下:chartoupper(charc);其中,c為待轉(zhuǎn)換的小寫字符。如果字符參數(shù)不在a~z之間,則該函數(shù)將不起作用,而直接返回原字符。1.15ASCII字符轉(zhuǎn)換函數(shù)ASCII字符轉(zhuǎn)換函數(shù)用于將任何字符型參數(shù)縮小到有效的ASCII范圍之內(nèi),其函數(shù)原型如下:chartoascii(charc);其中,c為待轉(zhuǎn)換的字符。該函數(shù)執(zhí)行的操作是將形參數(shù)值和0x7f做與運(yùn)算,從而去掉第7位以上的所有位數(shù)。如果形參已是有效的ASCII字符,則不作處理,直接返回原字符。1.16大寫字符宏轉(zhuǎn)換函數(shù)大寫字符宏轉(zhuǎn)換函數(shù)用于大寫字符轉(zhuǎn)換為小寫字符,其函數(shù)原型如下:char_tolower(charc);其中,c為待轉(zhuǎn)換的大寫字符。這其實(shí)是一個由宏定義完成的操作,其功能是將字符參數(shù)c與常數(shù)0x20逐位進(jìn)行或運(yùn)算,從而將大寫字符轉(zhuǎn)換為小寫字符。1.17小寫字符宏轉(zhuǎn)換函數(shù)小寫字符宏轉(zhuǎn)換函數(shù)用于小寫字符轉(zhuǎn)換為大寫字符,其函數(shù)原型如下:char_toupper(charc);其中,c為待轉(zhuǎn)換的小寫字符。這其實(shí)是一個由宏定義完成的操作,其功能是將字符參數(shù)c與常數(shù)0xdf逐位進(jìn)行與運(yùn)算,從而將小寫字符轉(zhuǎn)換為大寫字符。2字符串函數(shù)字符串函數(shù)的原型聲明包含在頭文件STRING.H中。在C51語言中,字符串應(yīng)包括2個或多個字符,字符串的結(jié)尾以空字符來表示。字符串函數(shù)通過接受指針串來對字符串進(jìn)行處理。常用的字符串函數(shù)介紹如下。2.1字符查找函數(shù)字符查找函數(shù)用于在字符串中順序查找字符,其函數(shù)原型如下:void*memchr(void*sl,charval,intlen);其中,s1為輸入字符串,val為待查找的字符,len為查找的長度范圍。該函數(shù)的功能是在字符串s1中順序搜索前l(fā)en個字符以找出字符val,如果找到則返回sl中指向val的指針,如果沒有找到則返回NULL。2.2指定長度的字符串比較函數(shù)指定長度的字符串比較函數(shù)用于按照指定的長度比較兩個字符串的大小,其函數(shù)原型如下:charmemcmp(void*s1,void*s2,intlen);其中,s1和s2為輸入字符串,len為比較的長度。該函數(shù)的功能是逐個比較字符串sl和s2的前l(fā)en個字符,如果相等則返回0,如果字符串s1大于s2,則返回一個正數(shù),如果字符串s1小于s2,則返回一個負(fù)數(shù)。如果兩個字符串的長度小于len,該函數(shù)仍將一直比較len個字符,這種情況下,有可能結(jié)果是錯誤的。因此應(yīng)該保證len不能超過最短字符串的長度。2.3字符串復(fù)制函數(shù)字符串復(fù)制函數(shù)用于復(fù)制指定長度的字符串,其函數(shù)原型如下:void*memcpy(void*dest,void*src,intlen);其中,dest為目標(biāo)字符串,src為源字符串,len為復(fù)制的長度。該函數(shù)的功能是從src所指向的字符串中復(fù)制len個字符到dest字符串中,其返回值指向dest中的最后一個字符的指針。2.4帶終止字符的字符串復(fù)制函數(shù)帶終止字符的字符串復(fù)制函數(shù)用于復(fù)制字符串,如果遇到終止字符則停止復(fù)制,其函數(shù)原型如下:void*memccpy(void*dest,void*src,charval,intlen);其中,dest為目標(biāo)字符串,src為源字符串,val為終止字符,len為復(fù)制的長度。該函數(shù)的功能是復(fù)制字符串src中的len個字符到dest中,復(fù)制len個字符后則返回NULL。如果遇到字符val則停止復(fù)制,此時返回一個指向dest中的下一個元素的指針。2.5字符串移動函數(shù)字符串移動函數(shù)同樣用于復(fù)制字符串,其函數(shù)原型如下:void*memmove(void*dest,void*src,intlen);其中,dest為目標(biāo)字符串,src為源字符串,len為復(fù)制長度。該函數(shù)的功能是從src所指向的字符串中復(fù)制len個字符到dest字符串中,其返回值指向dest中的最后一個字符的指針。其功能與memcpy相同,但是復(fù)制區(qū)間src與dest可以發(fā)生交迭。2.6字符串填充函數(shù)字符串填充函數(shù)用于按規(guī)定的字符填充字符串,其函數(shù)原型如下:void*memset(void*s,charval,intlen);其中,s為待填充的字符串,val為填充字符,len為填充的長度。該函數(shù)實(shí)現(xiàn)的操作是用字符val來填充字符串s,共填充len個單元2.7字符串追加函數(shù)字符串追加函數(shù)用于復(fù)制字符串到另一個字符串的尾部,其函數(shù)原型如下:void*strcat(char*s1,char*s2);其中,s1為目標(biāo)字符串,s2為待復(fù)制的字符串。該函數(shù)實(shí)現(xiàn)的操作是將字符串s2復(fù)制到字符串s1的尾部。其中字符串s1要有足夠的大小來保存兩個字符串。該函數(shù)的返回值指向字符串s1中的第一個字符的指針。2.8指定長度的字符串追加函數(shù)指定長度的字符串追加函數(shù)用于復(fù)制指定長度的字符串到另一個字符串的尾部,其函數(shù)原型如下:void*strncat(,char*s1,char*s2,intn);其中,s1為目標(biāo)字符串,s2為待復(fù)制的字符串,n為復(fù)制的長度。該函數(shù)實(shí)現(xiàn)的操作是從字符串s2中復(fù)制n個字符添加到字符串s1的尾部。其中,如果字符串s2的長度比n小,則將全部復(fù)制字符串s2(包括串結(jié)束符)。2.9字符串比較函數(shù)字符串比較函數(shù)用于比較兩個字符串的大小,其函數(shù)原型如下:charstrcmp(char*s1,char*s2);其中,s1和s2為待比較的字符串。該函數(shù)的功能是比較字符串s1和s2,如果兩者相等則返回0;如果s1<s2,則返回一個負(fù)數(shù);如果s1>s2,則返回一個正數(shù)。2.10包含結(jié)束符的字符串比較函數(shù)包含結(jié)束符的字符串比較函數(shù)用于比較兩個字符串的大小,其函數(shù)原型如下:char*strncmp(char*s1,char*s2,intn);其中,s1和s2為待比較的字符串,n為比較的長度。該函數(shù)的功能是比較字符串s1和s2的前n個字符,如果兩者相等則返回0;如果s1<s2,則返回一個負(fù)數(shù);如果s1>s2,則返回一個正數(shù)。這里需要和memcmp函數(shù)相區(qū)別,如果字符串的長度小于n,則strncmp函數(shù)比較到字符串結(jié)束符后便停止,這和memcmp函數(shù)是不一樣的。2.11字符串覆蓋函數(shù)字符串覆蓋函數(shù)用于將一個字符串覆蓋另一個字符串,其函數(shù)原型如下:char*strcpy(char*s1,char*s2);其中,s1為目標(biāo)字符串,s2為源字符串。該函數(shù)的功能是將字符串s2(包括結(jié)束符)復(fù)制到字符串s1中的第1個字符指針處。這里需要注意和strcat函數(shù)相區(qū)別,strcat函數(shù)將字符串s2復(fù)制到字符串s1的末尾。2.12指定長度的字符串覆蓋函數(shù)指定長度的字符串覆蓋函數(shù)用于將一個指定長度的字符串覆蓋另一個字符串,其函數(shù)原型如下:char*strncpy(char*s1,char*s2,intn);其中,s1為目標(biāo)字符串,s2為源字符串,n為長度。該函數(shù)實(shí)現(xiàn)的操作是從字符串s2(包括結(jié)束符)中復(fù)制n個字符到字符串s1中的第1個字符指針處。如果字符串s2的長度小于n,則s1串以0補(bǔ)齊到長度n。2.13獲取字符串個數(shù)函數(shù)獲取字符串個數(shù)函數(shù)用于返回字符串中字符總數(shù),其函數(shù)原型如下:char*strlen(char*s1);其中,s1為輸入字符串。該函數(shù)的功能是獲取字符串s1中的字符個數(shù),返回值的大小不包括結(jié)尾的字符串結(jié)束符。2.14搜索字符串函數(shù)搜索字符串函數(shù)用于搜索字符串出現(xiàn)的位置,其函數(shù)原型如下:char*strstr(constchar*s1,char*s2);其中,s1為目標(biāo)字符串,s2為搜索的字符串。該函數(shù)實(shí)現(xiàn)的操作是在字符串s1中搜索第一次出現(xiàn)字符串s2的位置,并返回該處的指針。如果字符串s1中不包括字符串s2,則該函數(shù)返回一個空指針。2.15搜索字符函數(shù)搜索字符函數(shù)用于搜索字符出現(xiàn)的位置,其函數(shù)原型如下:char*strchr(char*s1,charc);其中,s1為目標(biāo)字符串,c為待搜索的字符。該函數(shù)的功能是搜索字符串s1中是否包含字符c,如果包含則返回第一次指向該字符的指針,否則返回NULL。被搜索的字符可以是串結(jié)束符,此時返回值是指向串結(jié)束符的指針。2.16返回位置值的字符搜索函數(shù)返回位置值的字符搜索函數(shù)用于搜索并返回字符出現(xiàn)的位置,其函數(shù)原型如下:intstrpos(char*s1,charc);其中,s1為目標(biāo)字符串,c為搜索的字符。該函數(shù)的功能是查找并返回字符c在字符串s1中第一次出現(xiàn)的位置值,沒有找到該字符則返回-1,s1串首字符的位置值是0。strpos函數(shù)的功能與strchr類似,只不過返回值不同。2.17字符包含函數(shù)字符包含函數(shù)用于檢查字符串中是否包含某字符,其函數(shù)原型如下:char*strrchr(char*s1,charc);其中,s1為目標(biāo)字符串,c為查找的字符。該函數(shù)的功能是搜索字符串s1中是否包含字符c,如果包含則返回最后一次指向該字符的指針,否則返回NULL。被搜索的字符可以是串結(jié)束符,此時返回值是指向串結(jié)束符的指針。2.18返回位置值的字符包含函數(shù)返回位置值的字符包含函數(shù)同樣用于檢查字符串中是否包含某字符,其函數(shù)原型如下:intstrrpos(char*s1,charc);其中,s1為目標(biāo)字符串,c為查找的字符。該函數(shù)的功能是查找并返回字符c在字符串s1中最后一次出現(xiàn)的位置值,沒有找到該字符則返回-1,s1串首字符的位置值是0。strrpos函數(shù)的功能與strrchr類似,只不過返回值不同。2.19在指定字符集中查找不包含字符函數(shù)在指定字符集中查找不包含字符函數(shù)用于查找不包含在指定字符集中的字符,其函數(shù)原型如下:intstrspn(char*s1,char*set);其中,s1為目標(biāo)字符串,set為字符集。該函數(shù)的功能是搜索字符串s1中第一個不包含在set串中的字符,返回值是字符串s1中包括在set中的字符的個數(shù)。如果s1中所有的字符都包含在set中,則返回s1的長度(不包括結(jié)束符)。如果set是空字符串則返回0。2.20在指定字符集中查找包含字符函數(shù)在指定字符集中查找包含字符函數(shù)用于查找包含在指定字符集中的字符,其函數(shù)原型如下:intstrcspn(char*s1,char*set);其中,s1為目標(biāo)字符串,set為字符集。該函數(shù)的功能是搜索的是第一個包含在set串中字符,返回值是字符串s1中包括在set中的字符的個數(shù)。如果s1中所有的字符都包含在set中,則返回s1的長度(不包括結(jié)束符)。如果set是空字符串則返回0。2.21查找第一個包含字符函數(shù)查找第一個包含字符函數(shù)用于查找第一個包含在指定字符集中的字符,其函數(shù)原型如下:char*strpbrk(char*s1,char*set);其中,s1為目標(biāo)字符串,set為字符集。該函數(shù)的功能是搜索字符串s1中第一個包含在set串中的字符,返回值指向搜索到的字符的指針,如果未找到,則返回NULL。2.22查找最后一個包含字符函數(shù)查找最后一個包含字符函數(shù)用于查找最后一個包含在指定字符集中的字符,其函數(shù)原型如下:char*strrpbrk(char*s1,char*set);其中,s1為目標(biāo)字符串,set為字符集。該函數(shù)的功能是搜索字符串s1中最后一個包含在set串中的字符,返回值指向搜索到的字符的指針,如果未找到,則返回NULL。3I/O函數(shù)I/O函數(shù)主要用于數(shù)據(jù)的輸入輸出等操作,C51的I/O庫函數(shù)的原型聲明包含在頭文件STDIO.H中。這些I/O函數(shù)使用8051單片機(jī)的串行接口進(jìn)行通信,因此,在使用之前需要先進(jìn)行串口的初始化。例如:SCON=0x50; //串口模式1,允許接收TMOD|=0x20; //初始化T1為定時功能,模式2PCON|=0x80; //設(shè)置SMOD=1TL1=0xF4; //波特率4800bit/s,初值TH1=0xF4;IE|=0x90; //中斷TR1=1; //啟動定時器3.1字符讀入函數(shù)字符讀入函數(shù)用于從串口讀入一個字符,其函數(shù)原型如下:char_getkey(void);該函數(shù)執(zhí)行的操作是等待從8051的串口讀入一個字符,并返回讀入的原字符。程序示例如下:3.2字符讀入輸出函數(shù)字符讀入輸出函數(shù)用于從串口讀入一個字符并輸出該字符,其函數(shù)原型如下:chargetchar(void);該函數(shù)與_getkey函數(shù)有細(xì)微的不同,其執(zhí)行的操作是使用_getkey從串口讀入的一個字符,然后使用putchar函數(shù)將讀入的字符輸出。3.3字符串讀入函數(shù)字符串讀入函數(shù)用于從串口讀入一個字符串,其函數(shù)原型如下:char*gets(char*s,intn);其中,s保存讀入的字符串,n為字符串的長度。該函數(shù)執(zhí)行的操作是使用getchar函數(shù)從串口讀入一個長度為n的字符串,并存入字符數(shù)組s中。如果遇到換行符,則結(jié)束字符的輸入。輸入成功時將返回傳入的參數(shù)指針,失敗時返回空指針NULL。3.4字符回送函數(shù)字符回送函數(shù)用于將輸入的字符回送到輸入緩沖區(qū),其函數(shù)原型如下:charungetchar(charc);其中,c為輸入字符。該函數(shù)執(zhí)行的操作是將輸入的字符回送到輸入緩沖區(qū),如果函數(shù)調(diào)用成功則返回char型值c,失敗時則返回EOF。3.5字符輸出函數(shù)字符輸出函數(shù)用于通過8051串行口輸出字符,其函數(shù)原型如下:charputchar(charc);其中,c為通過8051串行口輸出的字符。3.6格式化輸出函數(shù)格式化輸出函數(shù)用于按照一定的格式輸出數(shù)據(jù)或字符串,其函數(shù)原型如下:intprintf(constchar*fmstr[,argument]…);該函數(shù)的功能是以一定的格式通過8051單片機(jī)的串行口輸出數(shù)值和字符串。其中第一個參數(shù)fmstr是格式控制字符串,參數(shù)argument可以是字符串指針、字符或數(shù)值,該函數(shù)的返回值為實(shí)際輸出的字符個數(shù)。3.7格式化內(nèi)存緩沖區(qū)輸出函數(shù)格式化內(nèi)存緩沖區(qū)輸出函數(shù)用于按照一定的格式將數(shù)據(jù)或字符串輸出到內(nèi)存緩沖區(qū)中,其函數(shù)原型如下:intsprintf(char*s,constchar*fmstr[,argument]…);該函數(shù)執(zhí)行的操作是通過指針s,將字符串送入內(nèi)存數(shù)據(jù)緩沖區(qū),并以ASCII碼的形式儲存。3.8字符串輸出函數(shù)字符串輸出函數(shù)用于將字符串和換行符寫入串行口,其函數(shù)原型如下:intputs(constchar*s);其中,s為輸出的字符串或換行符。如果執(zhí)行成功則返回0,錯誤時返回EOF。程序示例如下:3.9格式化輸入函數(shù)格式化輸入函數(shù)用于將字符串和數(shù)據(jù)按照一定的格式從串口讀入,其函數(shù)原型如下:intscanf(constchar*fmstr[,argument]…);該函數(shù)的功能是在格式字符的控制下從串行口讀入數(shù)據(jù)。其中每個參數(shù)都必須是指針。scanf返回值是所發(fā)現(xiàn)并轉(zhuǎn)換的輸入項(xiàng)數(shù),如遇到錯誤則返回EOF。該函數(shù)的格式控制字符串形式如下,方括號內(nèi)是可選項(xiàng)。%[*][width][{B[h][l]}]type3.10格式化內(nèi)存緩沖區(qū)輸入函數(shù)格式化內(nèi)存緩沖區(qū)輸入函數(shù)用于將格式化的字符串和數(shù)據(jù)送入數(shù)據(jù)緩沖區(qū),其函數(shù)原型如下:intsscanf(char*s,constchar*fmstr[,argument]…);該函數(shù)的功能是將輸入的字符串通過指針s指向的數(shù)據(jù)緩沖區(qū)。輸入數(shù)據(jù)根據(jù)格式控制字符串fmstr被存放到由argument指定的地址。其它方面,sscanf函數(shù)與scanf函數(shù)類似。3.11字符串內(nèi)存輸出函數(shù)字符串內(nèi)存輸出函數(shù)用于將格式化字符串輸出到內(nèi)存數(shù)據(jù)緩沖區(qū),其函數(shù)原型如下:intvprintf(constchar*fmstr,char*argptr);其中,fmstr為格式化字符串,argptr指向變量表的指針而不是變量表,函數(shù)返回值為實(shí)際寫入到輸出字符串中的字符數(shù)。其它方面,vprintf函數(shù)與printf函數(shù)類似。3.12指向緩沖區(qū)的輸出函數(shù)指向緩沖區(qū)的輸出函數(shù)用于將格式化字符串和數(shù)字輸出到由指針?biāo)赶虻膬?nèi)存數(shù)據(jù)緩沖區(qū),其函數(shù)原型如下:intvsprintf(char*s,constchar*fmstr,char*argptr);該函數(shù)執(zhí)行的操作是將格式化字符串和數(shù)字輸出到由指針?biāo)赶虻膬?nèi)存數(shù)據(jù)緩沖區(qū)。其中,該函數(shù)接受的是一個指向變量表的指針而不是變量表,其返回值為實(shí)際寫入到輸出字符串中的字符數(shù)。其他方面vsprintf函數(shù)與sprintf函數(shù)類似。4數(shù)學(xué)函數(shù)數(shù)學(xué)函數(shù)主要用于進(jìn)行數(shù)學(xué)運(yùn)算,其原型聲明包含在頭文件MATH.H中。下面介紹一些常用的數(shù)學(xué)函數(shù)。4.1絕對值函數(shù)絕對值函數(shù)用于計算并返回輸出數(shù)據(jù)的絕對值。按照其操作數(shù)的數(shù)據(jù)類型的不同,有如下幾種形式:intabs(intval);charcabs(charval);floatfabs(floatval);longlabs(longval)這些函數(shù)分別用于計算整型、字符型、浮點(diǎn)型以及長整型數(shù)據(jù)的絕對值。4.2指數(shù)以及對數(shù)函數(shù)指數(shù)函數(shù)用于計算并返回輸出數(shù)據(jù)的指數(shù)。對數(shù)函數(shù)用于計算并返回輸出數(shù)據(jù)的對數(shù)。其函數(shù)原型示例如下:floatexp(floatx);floatlog(floatx);floatlog10(floatx);floatsqrt(floatx);其中exp函數(shù)用于計算并返回浮點(diǎn)數(shù)x的指數(shù),log函數(shù)用于計算并返回浮點(diǎn)數(shù)x的自然對數(shù)(自然對數(shù)以e為底,e=2.718282),log10函數(shù)用于計算并返回浮點(diǎn)數(shù)x的以10為底的對數(shù)值,sqrt函數(shù)用于計算并返回浮點(diǎn)數(shù)x的平方根。4.3三角函數(shù)三角函數(shù)用于計算數(shù)學(xué)中三角函數(shù)的值。在C51語言中包含如下幾種三角函數(shù):floatcos(floatx);floatsin(floatx);floattan(floatx);floatacos(floatx);floatasin(floatx);floatatan(floatx);floatatan2(floaty,floatx);floatcosh(floatx);floatsinh(floatx);floattanh(floatx);4.4取整函數(shù)取整函數(shù)用于取輸入數(shù)據(jù)的整數(shù)。在C51語言中,包含兩類取整函數(shù),示例如下:floatceil(floatx);floatfloor(floatx);其中ceil函數(shù)用于計算并返回一個不小于x的最小正整數(shù)(作為浮點(diǎn)數(shù)),floor函數(shù)用于計算并返回一個不大于x的最小正整數(shù)(作為浮點(diǎn)數(shù))。4.5浮點(diǎn)型分離函數(shù)浮點(diǎn)型分離函數(shù)用于將浮點(diǎn)型數(shù)據(jù)的整數(shù)和小數(shù)部分分開,其函數(shù)原型如下:floatmodf(floatx,float*ip);函數(shù)modf將浮點(diǎn)數(shù)x分成整數(shù)和小數(shù)兩部分,整數(shù)部分放入*ip,返回值為小數(shù)部分。兩者都含有與x相同的符號。4.6冪函數(shù)冪函數(shù)用于進(jìn)行冪指數(shù)運(yùn)算。其函數(shù)原型如下:floatpow(floatx,floaty);該函數(shù)用于計算并返回xy的值。如果x不等于0而y=0,則返回1。當(dāng)x=0且y<=0或x<0且y不是整數(shù)時,返回NaN。5標(biāo)準(zhǔn)函數(shù)標(biāo)準(zhǔn)函數(shù)主要用于完成數(shù)據(jù)類型轉(zhuǎn)換以及存儲器分配等操作。標(biāo)準(zhǔn)函數(shù)的原型聲明包含在頭文件STDLIB.H中。下面介紹常用的一些函數(shù)。5.1字符串轉(zhuǎn)換函數(shù)字符串轉(zhuǎn)換函數(shù)用于將字符串轉(zhuǎn)換成數(shù)值類型并輸出。根據(jù)輸出數(shù)值類型的不同,可以有如下幾種形式:floatatoi(char*sl);floatatol(char*sl);floatatof(char*sl);其中,atoi函數(shù)用于將字符串sl轉(zhuǎn)換成整型數(shù)值并返回該值。輸入字符串的格式為:[whitespace][{+/-}]數(shù)字。其中,whitespace可由空格、/、制表符組成。這里的數(shù)字可以是一個或多個十進(jìn)制數(shù)。5.2帶返回指針的字符串轉(zhuǎn)換函帶返回指針的字符串轉(zhuǎn)換函數(shù)將字符串轉(zhuǎn)換成數(shù)值類型并輸出,同時返回未轉(zhuǎn)換部分的指針。根據(jù)輸出數(shù)值類型的不同,可以有如下幾種形式:floatstrtod(constchar*s,char**ptr);longstrtol(constchar*s,char**ptr,unsignedcharbase);unsignerlongstrtoul(constchar*s,char**ptr,unsignedcharbase);5.3隨機(jī)函數(shù)隨機(jī)函數(shù)用于產(chǎn)生偽隨機(jī)數(shù)。在C51語言中,包含兩種隨機(jī)函數(shù),其函數(shù)聲明如下:intrand();voidsrand(intn);其中,函數(shù)rand用于返回一個0到32767之間的偽隨機(jī)數(shù),而函數(shù)srand用來初始化隨機(jī)數(shù)發(fā)生器的隨機(jī)種子。如果不使用srand函數(shù),則對rand函數(shù)的相繼調(diào)用將產(chǎn)生相同的隨機(jī)序列。5.4數(shù)組內(nèi)存分配函數(shù)數(shù)組內(nèi)存分配函數(shù)用于為n個元素的數(shù)組分配內(nèi)存空間,其函數(shù)原型如下:void*calloc(unsighedintn,unsighedintsize);其中n數(shù)組元素的個數(shù),size為數(shù)組中每個元素的大小。該函數(shù)所分配的內(nèi)存區(qū)域用0進(jìn)行初始化。返回值為已分配的內(nèi)存單元起始地址,如果不成功則返回0。5.5釋放內(nèi)存函數(shù)釋放內(nèi)存函數(shù)用于釋放前面已分配的內(nèi)存空間,其函數(shù)原型如下:voidfree(voidxdata*p);其中,指針p指向待釋放的存儲區(qū)域。p必須是以前用calloc、malloc或realloc函數(shù)分配的存儲區(qū)域,如果p為NULL,則該函數(shù)無效。經(jīng)free函數(shù)所被釋放的存儲區(qū)域可以參與以后的分配。5.6初始化內(nèi)存函數(shù)初始化內(nèi)存函數(shù)用于對前面申請的內(nèi)存進(jìn)行初始化,其函數(shù)原型如下:voidinit_mempool(voidxdata*p,unsighedintsize);其中,指針p表示存儲區(qū)首地址,size表示存儲區(qū)大小。該函數(shù)可對被函數(shù)calloc、malloc、free或realloc管理的存儲區(qū)域進(jìn)行初始化。5.7內(nèi)存分配函數(shù)內(nèi)存分配函數(shù)用于在內(nèi)存中分配指定大小的存儲空間,其函數(shù)原型如下:void*malloc(unsighedintsize);其中,size為分配的空間大小,返回值為指向所分配內(nèi)存的指針。如果返回NULL,則表示沒有足夠的內(nèi)存空間可用。5.8調(diào)整內(nèi)存大小函數(shù)調(diào)整內(nèi)存大小函數(shù)用于調(diào)整先前分配的存儲器區(qū)域大小,其函數(shù)原型如下:void*realloc(voidxdata*p,unsighedintsize);其中,參數(shù)p表示該存儲區(qū)域的起始地址,參數(shù)size表示新分配的存儲區(qū)域大小。該函數(shù)的返回值為新區(qū)域所指向的指針。如果返回NULL,則表示沒有足夠的內(nèi)存空間可用。原存儲器區(qū)域的內(nèi)容被復(fù)制到新存儲器區(qū)域中,如果新存儲器區(qū)域較大,多出的區(qū)域不作初始化。6內(nèi)部函數(shù)內(nèi)部函數(shù)的原型聲明包含在頭文件INTRINS.H中。下面介紹常用的一些函數(shù)。6.1循環(huán)左移函數(shù)循環(huán)左移函數(shù)主要用于將數(shù)據(jù)按照二進(jìn)制循環(huán)左移n位。按照操作數(shù)據(jù)類型的不同,其函數(shù)原型如下幾種形式:unsighedchar _crol_(unsighedcharval,unsighedcharn);unsighedint _irol_(unsighedintval,unsighedcharn);unsighedlong _lrol_(unsighedlongval,unsighedcharn);其中,val為待移位的變量,n為循環(huán)移位的次數(shù)。函數(shù)_crol_、_irol_和_lrol_分別用于字符型、整型和長整形變量的循環(huán)左移,其返回值分別為移位后的字符型、整型和長整形。該函數(shù)與8051單片機(jī)的RLA指令相關(guān)。6.2循環(huán)右移函數(shù)循環(huán)右移函數(shù)主要用于將數(shù)據(jù)按照二進(jìn)制循環(huán)右移n位。按照操作數(shù)據(jù)類型的不同,其函數(shù)原型如下幾種形式:unsighedchar _cror_(unsighedcharval,unsighedcharn);unsighedint _iror_(unsighedintval,unsighedcharn);unsighedlong _lror_(unsighedlongval,unsighedcharn);其中,val為待移位的變量,n為循環(huán)移位的次數(shù)。函數(shù)_cror_、_iror_和_lror_分別用于字符型、整型和長整形變量的循環(huán)右移,其返回值分別為移位后的字符型、整型和長整形。該函數(shù)與8051單片機(jī)的RRA指令相關(guān)。6.3延時函數(shù)延時函數(shù)用于使單片機(jī)程序產(chǎn)生延時,其函數(shù)原型如下:void_nop_(void);該函數(shù)類似于8051單片機(jī)的NOP指令。程序示例如下:#include<intrins.h> //頭文件#include<reg51.h>void main(void) //主函數(shù){P1=0xFF; //P1端口輸出0xFF_nop_(); //延時_nop_();P1=0x00; //P1端口輸出0x006.4位測試函數(shù)位測試函數(shù)用于對字節(jié)中的一位進(jìn)行測試,其函數(shù)原型如下:void_testbit_(bitx);其中,x為待測位變量。如果該位變量置位則函數(shù)返回1,同時將該位復(fù)位為0,否則返回0。該函數(shù)產(chǎn)生一個8051單片機(jī)的JBC指令,其只能用于可直接尋址的位,不允許在表達(dá)式中使用。7絕對地址訪問函數(shù)絕對地址訪問的函數(shù)包含在頭文件ABSACC.H中,是一些宏定義的函數(shù)。下面分別介紹常用的一些函數(shù)。7.1BYTE型存儲空間訪問函數(shù)BYTE型存儲空間訪問函數(shù)用于對8051單片機(jī)的存儲空間進(jìn)行絕對地址訪問,可以做字節(jié)尋址。其宏定義原型如下:#defineCBYTE((unsighedcharvolatilecode*)0)#defineDBYTE((unsighedcharvolatileidata*)0)#definePBYTE((unsighedcharvolatilepdata*)0)#defineXBYTE((unsighedcharvolatilexdata*)0)7.2WORD型存儲空間訪問WORD型存儲空間訪問函數(shù)可以訪問8051的所有存儲器空間。其宏定義原型如下:#defineCWORD((unsighedintvolatilecode*)0)#defineDWORD((unsighedintvolatileidata*)0)#definePWORD((unsighedintvolatilepdata*)0)#defineXWORD((unsighedintvolatilexdata*)0)7.3far存儲區(qū)訪問函數(shù)far存儲區(qū)訪問函數(shù)用于訪問far存儲器區(qū)域。其宏定義原型如下:#defineFVAR(object,addr)(*((objectvolatilefar*)((addr)+0x10000L)))#defineFCVAR(object,addr)(*((objectconstfar*)((addr)+0x810000L)))其中,F(xiàn)VAR用于訪問far空間(存儲類為HDATA),F(xiàn)CVAR用于訪問constfar空間(存儲類為HCONST)。7.4
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版城市照明電氣設(shè)備采購及運(yùn)維合同
- 二零二五年度米面糧油倉儲物流服務(wù)采購合同2篇
- 2025年度水泥產(chǎn)品銷售渠道建設(shè)承包合同3篇
- 2025殘疾人冰雪項(xiàng)目財務(wù)管理與審計合同3篇
- 2025年度木門銷售合同書標(biāo)準(zhǔn)版4篇
- 二零二五版牛只運(yùn)輸途中疫病防控與應(yīng)急處理合同4篇
- 2025年度美容美發(fā)行業(yè)技師技能認(rèn)證合同3篇
- 2025年度二零二五年度民辦學(xué)校教師心理健康輔導(dǎo)合同4篇
- 承包宅基地合同(2篇)
- 2025年度農(nóng)產(chǎn)品電商平臺傭金結(jié)算合同4篇
- 【京東倉庫出庫作業(yè)優(yōu)化設(shè)計13000字(論文)】
- 保安春節(jié)安全生產(chǎn)培訓(xùn)
- 初一語文上冊基礎(chǔ)知識訓(xùn)練及答案(5篇)
- 初中班級成績分析課件
- 勞務(wù)合同樣本下載
- 血液透析水處理系統(tǒng)演示
- GB/T 27030-2006合格評定第三方符合性標(biāo)志的通用要求
- GB/T 13663.2-2018給水用聚乙烯(PE)管道系統(tǒng)第2部分:管材
- 同角三角函數(shù)的基本關(guān)系式同步練習(xí)
- 固定污染源自動監(jiān)控監(jiān)測系統(tǒng)現(xiàn)場端建設(shè)技術(shù)規(guī)范
- 教科版六年級科學(xué)下冊第一單元《小小工程師》背背默默知識點(diǎn)
評論
0/150
提交評論