




已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C51的常用庫(kù)函數(shù)詳解C51語(yǔ)言的編譯器中包含有豐富的庫(kù)函數(shù),使用庫(kù)函數(shù)可以大大簡(jiǎn)化用戶程序設(shè)計(jì)的工作量,提高編程效率。每個(gè)庫(kù)函數(shù)都在相應(yīng)的頭文件中給出了函數(shù)原型聲明,在使用時(shí),必須在源程序的開(kāi)始處使用預(yù)處理命令#include將有關(guān)的頭文件包含進(jìn)來(lái)。C51庫(kù)函數(shù)中類型的選擇考慮到了8051單片機(jī)的結(jié)構(gòu)特性,用戶在自己的應(yīng)用程序中應(yīng)盡可能地使用最小的數(shù)據(jù)類型,以最大限度地發(fā)揮8051單片機(jī)的性能,同時(shí)可減少應(yīng)用程序的代碼長(zhǎng)度。下面將C51的庫(kù)函數(shù)分類列出并詳細(xì)介紹其用法。1 字符函數(shù)字符函數(shù)的原型聲明包含在頭文件CTYPE.H中。常用的一些字符函數(shù)介紹如下。1.1 檢查英文字母函數(shù)檢查英文字母函數(shù)用于檢查形參字符是否為英文字母,其函數(shù)原型如下:bit isalpha(char c);其中,c為待判斷的字符,如果是英文字母則返回1,否則返回0。程序示例如下:1.2 檢查字母數(shù)字函數(shù)檢查字母數(shù)字函數(shù)用于檢查形參字符是否為英文字母或數(shù)字字符,其函數(shù)原型如下:bit isalnum(char c);1.3 檢查控制字符函數(shù)檢查控制字符函數(shù)用于檢查形參字符是否為控制字符,其函數(shù)原型:bit iscntrl (char c);其中,c為待判斷的字符??刂谱址淙≈捣秶鸀?x000xlF之間或等于0x7F,如果是,則返回1,否則返回0。1.4 十進(jìn)制數(shù)字檢查函數(shù)十進(jìn)制數(shù)字檢查函數(shù)用于檢查形參字符是否為十進(jìn)制數(shù)字,其函數(shù)原型如下:bit isdigit (char c);其中,c為待判斷的字符,如果是十進(jìn)制數(shù)字則返回1,否則返回0。1.5 可打印字符檢查函數(shù)可打印字符檢查函數(shù)用于檢查形參字符是否為可打印字符,其函數(shù)原型如下:bit isgraph (char c);其中,c為待判斷的字符。可打印字符的取值范圍為0x210x7C,不包含空格,如果是可打印字符則返回1,否則返回0。1.6 包含空格的可打印字符檢查函數(shù)包含空格的可打印字符檢查函數(shù)用于檢查形參字符是否為可打印字符以及空格,其函數(shù)原型如下:bit isprint (char c);其中,c為待判斷字符。如果是則返回1,否則返回0。該函數(shù)與isgraph的區(qū)別在于包含了空格符,空格符為0x20。1.7 格式字符檢查函數(shù)格式字符檢查函數(shù)用于檢查形參字符是否為標(biāo)點(diǎn)、空格或格式字符,其函數(shù)原型如下:bit ispunct (char c);其中,c為待判斷字符,如果是則返回1,否則返回0。1.8 小寫英文字母檢查函數(shù)小寫英文字母檢查函數(shù)用于檢查形參字符是否為小寫英文字母,其函數(shù)原型如下:bit islower(char c);其中,c為待判斷字符。如果是小寫英文字母則返回1,否則返回0。1.9 大寫英文字母檢查函數(shù)大寫英文字母檢查函數(shù)用于檢查形參字符是否為大寫英文字母,其函數(shù)原型如下:bit isupper(char c);其中,c為待判斷字符。如果是大寫英文字母則返回1,否則返回0。1.10 控制字符檢查函數(shù)控制字符檢查函數(shù)用于檢查形參字符是否為控制字符,其函數(shù)原型如下:bit isspace (char c);其中,c為待判斷字符。如果是控制字符則返回1,否則返回0??刂谱址ǎ嚎崭瘛⒅票矸?、回車、換行、垂直制表符和送紙,其取值范圍為0x090x0d,或?yàn)?x20。1.11 十六進(jìn)制數(shù)字檢查函數(shù)十六進(jìn)制數(shù)字檢查函數(shù)用于檢查形參字符是否為十六進(jìn)制數(shù)字,其函數(shù)原型如下:bit isxdigit (char c);其中,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ù)原型如下:char toint (char c);其中,c為待轉(zhuǎn)換字符。該函數(shù)將形參字符09、af(大小寫無(wú)關(guān))轉(zhuǎn)換為16進(jìn)制數(shù)字。其中,對(duì)于字符09,返回值為0H9H,對(duì)于ASCII字符af(大小寫無(wú)關(guān)),返回值為0AH0FH。1.13 大寫字符轉(zhuǎn)換函數(shù)大寫字符轉(zhuǎn)換函數(shù)用于將大寫字符轉(zhuǎn)換為小寫字符,其函數(shù)原型如下:char tolower (char c);其中,c為待轉(zhuǎn)換的大寫字符。如果字符參數(shù)不在AZ之間,則該函數(shù)將不起作用,而直接返回原字符。1.14 小寫字符轉(zhuǎn)換函數(shù)小寫字符轉(zhuǎn)換函數(shù)用于將小寫字符轉(zhuǎn)換為大寫字符,其函數(shù)原型如下:char toupper (char c);其中,c為待轉(zhuǎn)換的小寫字符。如果字符參數(shù)不在az之間,則該函數(shù)將不起作用,而直接返回原字符。1.15 ASCII字符轉(zhuǎn)換函數(shù)ASCII字符轉(zhuǎn)換函數(shù)用于將任何字符型參數(shù)縮小到有效的ASCII范圍之內(nèi),其函數(shù)原型如下:char toascii (char c);其中,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(char c);其中,c為待轉(zhuǎn)換的大寫字符。這其實(shí)是一個(gè)由宏定義完成的操作,其功能是將字符參數(shù)c與常數(shù)0x20逐位進(jìn)行或運(yùn)算,從而將大寫字符轉(zhuǎn)換為小寫字符。1.17 小寫字符宏轉(zhuǎn)換函數(shù)小寫字符宏轉(zhuǎn)換函數(shù)用于小寫字符轉(zhuǎn)換為大寫字符,其函數(shù)原型如下:char _toupper (char c);其中,c為待轉(zhuǎn)換的小寫字符。這其實(shí)是一個(gè)由宏定義完成的操作,其功能是將字符參數(shù)c與常數(shù)0xdf逐位進(jìn)行與運(yùn)算,從而將小寫字符轉(zhuǎn)換為大寫字符。2 字符串函數(shù)字符串函數(shù)的原型聲明包含在頭文件STRING.H中。在C51語(yǔ)言中,字符串應(yīng)包括2個(gè)或多個(gè)字符,字符串的結(jié)尾以空字符來(lái)表示。字符串函數(shù)通過(guò)接受指針串來(lái)對(duì)字符串進(jìn)行處理。常用的字符串函數(shù)介紹如下。2.1 字符查找函數(shù)字符查找函數(shù)用于在字符串中順序查找字符,其函數(shù)原型如下:void *memchr(void*sl,char val,int len);其中,s1為輸入字符串,val為待查找的字符,len為查找的長(zhǎng)度范圍。該函數(shù)的功能是在字符串s1中順序搜索前l(fā)en個(gè)字符以找出字符val,如果找到則返回sl中指向val的指針,如果沒(méi)有找到則返回NULL。2.2 指定長(zhǎng)度的字符串比較函數(shù)指定長(zhǎng)度的字符串比較函數(shù)用于按照指定的長(zhǎng)度比較兩個(gè)字符串的大小,其函數(shù)原型如下:char memcmp(void*s1, void*s2,int len);其中,s1和s2為輸入字符串,len為比較的長(zhǎng)度。該函數(shù)的功能是逐個(gè)比較字符串sl和s2的前l(fā)en個(gè)字符,如果相等則返回0,如果字符串s1大于s2,則返回一個(gè)正數(shù),如果字符串s1小于s2,則返回一個(gè)負(fù)數(shù)。如果兩個(gè)字符串的長(zhǎng)度小于len,該函數(shù)仍將一直比較len個(gè)字符,這種情況下,有可能結(jié)果是錯(cuò)誤的。因此應(yīng)該保證len不能超過(guò)最短字符串的長(zhǎng)度。2.3 字符串復(fù)制函數(shù)字符串復(fù)制函數(shù)用于復(fù)制指定長(zhǎng)度的字符串,其函數(shù)原型如下:void*memcpy(void*dest,void*src,int len);其中,dest為目標(biāo)字符串,src為源字符串,len為復(fù)制的長(zhǎng)度。該函數(shù)的功能是從src所指向的字符串中復(fù)制len個(gè)字符到dest字符串中,其返回值指向dest中的最后一個(gè)字符的指針。2.4 帶終止字符的字符串復(fù)制函數(shù)帶終止字符的字符串復(fù)制函數(shù)用于復(fù)制字符串,如果遇到終止字符則停止復(fù)制,其函數(shù)原型如下:void*memccpy(void*dest, void*src,char val,int len);其中,dest為目標(biāo)字符串,src為源字符串,val為終止字符,len為復(fù)制的長(zhǎng)度。該函數(shù)的功能是復(fù)制字符串src中的len個(gè)字符到dest中,復(fù)制len個(gè)字符后則返回NULL。如果遇到字符val則停止復(fù)制,此時(shí)返回一個(gè)指向dest中的下一個(gè)元素的指針。2.5 字符串移動(dòng)函數(shù)字符串移動(dòng)函數(shù)同樣用于復(fù)制字符串,其函數(shù)原型如下:void *memmove(void*dest,void*src,int len);其中,dest為目標(biāo)字符串,src為源字符串,len為復(fù)制長(zhǎng)度。該函數(shù)的功能是從src所指向的字符串中復(fù)制len個(gè)字符到dest字符串中,其返回值指向dest中的最后一個(gè)字符的指針。其功能與memcpy相同,但是復(fù)制區(qū)間src與dest可以發(fā)生交迭。2.6 字符串填充函數(shù)字符串填充函數(shù)用于按規(guī)定的字符填充字符串,其函數(shù)原型如下:void*memset(void*s,char val,int len);其中,s為待填充的字符串,val為填充字符,len為填充的長(zhǎng)度。該函數(shù)實(shí)現(xiàn)的操作是用字符val來(lái)填充字符串s,共填充len個(gè)單元2.7 字符串追加函數(shù)字符串追加函數(shù)用于復(fù)制字符串到另一個(gè)字符串的尾部,其函數(shù)原型如下:void *strcat(char *s1,char *s2);其中,s1為目標(biāo)字符串,s2為待復(fù)制的字符串。該函數(shù)實(shí)現(xiàn)的操作是將字符串s2復(fù)制到字符串s1的尾部。其中字符串s1要有足夠的大小來(lái)保存兩個(gè)字符串。該函數(shù)的返回值指向字符串s1中的第一個(gè)字符的指針。2.8 指定長(zhǎng)度的字符串追加函數(shù)指定長(zhǎng)度的字符串追加函數(shù)用于復(fù)制指定長(zhǎng)度的字符串到另一個(gè)字符串的尾部,其函數(shù)原型如下:void*strncat(,char *s1,char *s2,int n);其中,s1為目標(biāo)字符串,s2為待復(fù)制的字符串,n為復(fù)制的長(zhǎng)度。該函數(shù)實(shí)現(xiàn)的操作是從字符串s2中復(fù)制n個(gè)字符添加到字符串s1的尾部。其中,如果字符串s2的長(zhǎng)度比n小,則將全部復(fù)制字符串s2(包括串結(jié)束符)。2.9 字符串比較函數(shù)字符串比較函數(shù)用于比較兩個(gè)字符串的大小,其函數(shù)原型如下:char strcmp(char *s1,char *s2);其中,s1和s2為待比較的字符串。該函數(shù)的功能是比較字符串s1和s2,如果兩者相等則返回0;如果s1s2,則返回一個(gè)正數(shù)。2.10 包含結(jié)束符的字符串比較函數(shù)包含結(jié)束符的字符串比較函數(shù)用于比較兩個(gè)字符串的大小,其函數(shù)原型如下:char*strncmp(char *s1,char *s2,int n);其中,s1和s2為待比較的字符串,n為比較的長(zhǎng)度。該函數(shù)的功能是比較字符串s1和s2的前n個(gè)字符,如果兩者相等則返回0;如果s1s2,則返回一個(gè)正數(shù)。這里需要和memcmp函數(shù)相區(qū)別,如果字符串的長(zhǎng)度小于n,則strncmp函數(shù)比較到字符串結(jié)束符后便停止,這和memcmp函數(shù)是不一樣的。2.11 字符串覆蓋函數(shù)字符串覆蓋函數(shù)用于將一個(gè)字符串覆蓋另一個(gè)字符串,其函數(shù)原型如下:char* strcpy(char *s1,char *s2);其中,s1為目標(biāo)字符串,s2為源字符串。該函數(shù)的功能是將字符串s2(包括結(jié)束符)復(fù)制到字符串s1中的第1個(gè)字符指針處。這里需要注意和strcat函數(shù)相區(qū)別,strcat函數(shù)將字符串s2復(fù)制到字符串s1的末尾。2.12 指定長(zhǎng)度的字符串覆蓋函數(shù)指定長(zhǎng)度的字符串覆蓋函數(shù)用于將一個(gè)指定長(zhǎng)度的字符串覆蓋另一個(gè)字符串,其函數(shù)原型如下:char*strncpy(char *s1,char *s2,int n);其中,s1為目標(biāo)字符串,s2為源字符串,n為長(zhǎng)度。該函數(shù)實(shí)現(xiàn)的操作是從字符串s2(包括結(jié)束符)中復(fù)制n個(gè)字符到字符串s1中的第1個(gè)字符指針處。如果字符串s2的長(zhǎng)度小于n,則s1串以0補(bǔ)齊到長(zhǎng)度n。2.13 獲取字符串個(gè)數(shù)函數(shù)獲取字符串個(gè)數(shù)函數(shù)用于返回字符串中字符總數(shù),其函數(shù)原型如下:char*strlen(char *s1);其中,s1為輸入字符串。該函數(shù)的功能是獲取字符串s1中的字符個(gè)數(shù),返回值的大小不包括結(jié)尾的字符串結(jié)束符。2.14 搜索字符串函數(shù)搜索字符串函數(shù)用于搜索字符串出現(xiàn)的位置,其函數(shù)原型如下:char*strstr(const char *s1,char*s2);其中,s1為目標(biāo)字符串,s2為搜索的字符串。該函數(shù)實(shí)現(xiàn)的操作是在字符串s1中搜索第一次出現(xiàn)字符串s2的位置,并返回該處的指針。如果字符串s1中不包括字符串s2,則該函數(shù)返回一個(gè)空指針。2.15 搜索字符函數(shù)搜索字符函數(shù)用于搜索字符出現(xiàn)的位置,其函數(shù)原型如下:char*strchr(char *s1,char c);其中,s1為目標(biāo)字符串,c為待搜索的字符。該函數(shù)的功能是搜索字符串s1中是否包含字符c,如果包含則返回第一次指向該字符的指針,否則返回NULL。被搜索的字符可以是串結(jié)束符,此時(shí)返回值是指向串結(jié)束符的指針。2.16 返回位置值的字符搜索函數(shù)返回位置值的字符搜索函數(shù)用于搜索并返回字符出現(xiàn)的位置,其函數(shù)原型如下:int strpos(char*s1,char c);其中,s1為目標(biāo)字符串,c為搜索的字符。該函數(shù)的功能是查找并返回字符c在字符串s1中第一次出現(xiàn)的位置值,沒(méi)有找到該字符則返回-1,s1串首字符的位置值是0。strpos函數(shù)的功能與strchr類似,只不過(guò)返回值不同。2.17 字符包含函數(shù)字符包含函數(shù)用于檢查字符串中是否包含某字符,其函數(shù)原型如下:char*strrchr(char *s1,char c);其中,s1為目標(biāo)字符串,c為查找的字符。該函數(shù)的功能是搜索字符串s1中是否包含字符c,如果包含則返回最后一次指向該字符的指針,否則返回NULL。被搜索的字符可以是串結(jié)束符,此時(shí)返回值是指向串結(jié)束符的指針。2.18 返回位置值的字符包含函數(shù)返回位置值的字符包含函數(shù)同樣用于檢查字符串中是否包含某字符,其函數(shù)原型如下:int strrpos(char*s1,char c);其中,s1為目標(biāo)字符串,c為查找的字符。該函數(shù)的功能是查找并返回字符c在字符串s1中最后一次出現(xiàn)的位置值,沒(méi)有找到該字符則返回-1,s1串首字符的位置值是0。strrpos函數(shù)的功能與strrchr類似,只不過(guò)返回值不同。2.19 在指定字符集中查找不包含字符函數(shù)在指定字符集中查找不包含字符函數(shù)用于查找不包含在指定字符集中的字符,其函數(shù)原型如下:int strspn(char*s1,char*set);其中,s1為目標(biāo)字符串,set為字符集。該函數(shù)的功能是搜索字符串s1中第一個(gè)不包含在set串中的字符,返回值是字符串s1中包括在set中的字符的個(gè)數(shù)。如果s1中所有的字符都包含在set中,則返回s1的長(zhǎng)度(不包括結(jié)束符)。如果set是空字符串則返回0。2.20 在指定字符集中查找包含字符函數(shù)在指定字符集中查找包含字符函數(shù)用于查找包含在指定字符集中的字符,其函數(shù)原型如下:int strcspn(char*s1,char*set);其中,s1為目標(biāo)字符串,set為字符集。該函數(shù)的功能是搜索的是第一個(gè)包含在set串中字符,返回值是字符串s1中包括在set中的字符的個(gè)數(shù)。如果s1中所有的字符都包含在set中,則返回s1的長(zhǎng)度(不包括結(jié)束符)。如果set是空字符串則返回0。2.21 查找第一個(gè)包含字符函數(shù)查找第一個(gè)包含字符函數(shù)用于查找第一個(gè)包含在指定字符集中的字符,其函數(shù)原型如下:char*strpbrk(char *s1,char*set);其中,s1為目標(biāo)字符串,set為字符集。該函數(shù)的功能是搜索字符串s1中第一個(gè)包含在set串中的字符,返回值指向搜索到的字符的指針,如果未找到,則返回NULL。2.22 查找最后一個(gè)包含字符函數(shù)查找最后一個(gè)包含字符函數(shù)用于查找最后一個(gè)包含在指定字符集中的字符,其函數(shù)原型如下:char*strrpbrk(char *s1,char*set);其中,s1為目標(biāo)字符串,set為字符集。該函數(shù)的功能是搜索字符串s1中最后一個(gè)包含在set串中的字符,返回值指向搜索到的字符的指針,如果未找到,則返回NULL。3 I/O函數(shù)I/O函數(shù)主要用于數(shù)據(jù)的輸入輸出等操作,C51的I/O庫(kù)函數(shù)的原型聲明包含在頭文件STDIO.H中。這些I/O函數(shù)使用8051單片機(jī)的串行接口進(jìn)行通信,因此,在使用之前需要先進(jìn)行串口的初始化。例如:SCON=0x50;/串口模式1,允許接收TMOD|=0x20;/初始化T1為定時(shí)功能,模式2PCON|=0x80;/設(shè)置SMOD=1TL1=0xF4;/波特率4800bit/s,初值TH1=0xF4;IE|=0x90;/中斷TR1=1;/啟動(dòng)定時(shí)器3.1 字符讀入函數(shù)字符讀入函數(shù)用于從串口讀入一個(gè)字符,其函數(shù)原型如下:char _getkey(void);該函數(shù)執(zhí)行的操作是等待從8051的串口讀入一個(gè)字符,并返回讀入的原字符。程序示例如下:3.2 字符讀入輸出函數(shù)字符讀入輸出函數(shù)用于從串口讀入一個(gè)字符并輸出該字符,其函數(shù)原型如下:char getchar (void);該函數(shù)與_getkey函數(shù)有細(xì)微的不同,其執(zhí)行的操作是使用_getkey從串口讀入的一個(gè)字符,然后使用putchar函數(shù)將讀入的字符輸出。3.3 字符串讀入函數(shù)字符串讀入函數(shù)用于從串口讀入一個(gè)字符串,其函數(shù)原型如下:char *gets (char*s, int n);其中,s保存讀入的字符串,n為字符串的長(zhǎng)度。該函數(shù)執(zhí)行的操作是使用getchar函數(shù)從串口讀入一個(gè)長(zhǎng)度為n的字符串,并存入字符數(shù)組s中。如果遇到換行符,則結(jié)束字符的輸入。輸入成功時(shí)將返回傳入的參數(shù)指針,失敗時(shí)返回空指針NULL。3.4 字符回送函數(shù)字符回送函數(shù)用于將輸入的字符回送到輸入緩沖區(qū),其函數(shù)原型如下:char ungetchar (char c);其中,c為輸入字符。該函數(shù)執(zhí)行的操作是將輸入的字符回送到輸入緩沖區(qū),如果函數(shù)調(diào)用成功則返回char型值c,失敗時(shí)則返回EOF。3.5 字符輸出函數(shù)字符輸出函數(shù)用于通過(guò)8051串行口輸出字符,其函數(shù)原型如下:char putchar (char c);其中,c為通過(guò)8051串行口輸出的字符。3.6 格式化輸出函數(shù)格式化輸出函數(shù)用于按照一定的格式輸出數(shù)據(jù)或字符串,其函數(shù)原型如下:int printf (const char *fmstr,argument);該函數(shù)的功能是以一定的格式通過(guò)8051單片機(jī)的串行口輸出數(shù)值和字符串。其中第一個(gè)參數(shù)fmstr是格式控制字符串,參數(shù)argument可以是字符串指針、字符或數(shù)值,該函數(shù)的返回值為實(shí)際輸出的字符個(gè)數(shù)。3.7 格式化內(nèi)存緩沖區(qū)輸出函數(shù)格式化內(nèi)存緩沖區(qū)輸出函數(shù)用于按照一定的格式將數(shù)據(jù)或字符串輸出到內(nèi)存緩沖區(qū)中,其函數(shù)原型如下:int sprintf (char*s,const char *fmstr,argument);該函數(shù)執(zhí)行的操作是通過(guò)指針s,將字符串送入內(nèi)存數(shù)據(jù)緩沖區(qū),并以ASCII碼的形式儲(chǔ)存。3.8 字符串輸出函數(shù)字符串輸出函數(shù)用于將字符串和換行符寫入串行口,其函數(shù)原型如下:int puts (const char*s);其中,s為輸出的字符串或換行符。如果執(zhí)行成功則返回0,錯(cuò)誤時(shí)返回EOF。程序示例如下:3.9 格式化輸入函數(shù)格式化輸入函數(shù)用于將字符串和數(shù)據(jù)按照一定的格式從串口讀入,其函數(shù)原型如下:int scanf (const char *fmstr,argument);該函數(shù)的功能是在格式字符的控制下從串行口讀入數(shù)據(jù)。其中每個(gè)參數(shù)都必須是指針。scanf返回值是所發(fā)現(xiàn)并轉(zhuǎn)換的輸入項(xiàng)數(shù),如遇到錯(cuò)誤則返回EOF。該函數(shù)的格式控制字符串形式如下,方括號(hào)內(nèi)是可選項(xiàng)。%*width Bhltype3.10 格式化內(nèi)存緩沖區(qū)輸入函數(shù)格式化內(nèi)存緩沖區(qū)輸入函數(shù)用于將格式化的字符串和數(shù)據(jù)送入數(shù)據(jù)緩沖區(qū),其函數(shù)原型如下:int sscanf (char*s,const char *fmstr,argument);該函數(shù)的功能是將輸入的字符串通過(guò)指針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ù)原型如下:int vprintf (const char *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ù)原型如下:int vsprintf (char*s,const char *fmstr,char *argptr);該函數(shù)執(zhí)行的操作是將格式化字符串和數(shù)字輸出到由指針?biāo)赶虻膬?nèi)存數(shù)據(jù)緩沖區(qū)。其中,該函數(shù)接受的是一個(gè)指向變量表的指針而不是變量表,其返回值為實(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 絕對(duì)值函數(shù)絕對(duì)值函數(shù)用于計(jì)算并返回輸出數(shù)據(jù)的絕對(duì)值。按照其操作數(shù)的數(shù)據(jù)類型的不同,有如下幾種形式:int abs(int val);char cabs(char val);float fabs(float val);long labs(long val)這些函數(shù)分別用于計(jì)算整型、字符型、浮點(diǎn)型以及長(zhǎng)整型數(shù)據(jù)的絕對(duì)值。4.2 指數(shù)以及對(duì)數(shù)函數(shù)指數(shù)函數(shù)用于計(jì)算并返回輸出數(shù)據(jù)的指數(shù)。對(duì)數(shù)函數(shù)用于計(jì)算并返回輸出數(shù)據(jù)的對(duì)數(shù)。其函數(shù)原型示例如下:float exp(float x);float log(float x);float log10(float x);float sqrt(float x);其中exp函數(shù)用于計(jì)算并返回浮點(diǎn)數(shù)x的指數(shù),log函數(shù)用于計(jì)算并返回浮點(diǎn)數(shù)x的自然對(duì)數(shù)(自然對(duì)數(shù)以e為底,e=2.718282),log10函數(shù)用于計(jì)算并返回浮點(diǎn)數(shù)x的以10為底的對(duì)數(shù)值,sqrt函數(shù)用于計(jì)算并返回浮點(diǎn)數(shù)x的平方根。4.3 三角函數(shù)三角函數(shù)用于計(jì)算數(shù)學(xué)中三角函數(shù)的值。在C51語(yǔ)言中包含如下幾種三角函數(shù):float cos(float x);float sin(float x);float tan(float x);float acos(float x);float asin(float x);float atan(float x);float atan2(float y,float x);float cosh(float x);float sinh(float x);float tanh(float x);4.4 取整函數(shù)取整函數(shù)用于取輸入數(shù)據(jù)的整數(shù)。在C51語(yǔ)言中,包含兩類取整函數(shù),示例如下:float ceil(float x);float floor(float x);其中ceil函數(shù)用于計(jì)算并返回一個(gè)不小于x的最小正整數(shù)(作為浮點(diǎn)數(shù)),floor函數(shù)用于計(jì)算并返回一個(gè)不大于x的最小正整數(shù)(作為浮點(diǎn)數(shù))。4.5 浮點(diǎn)型分離函數(shù)浮點(diǎn)型分離函數(shù)用于將浮點(diǎn)型數(shù)據(jù)的整數(shù)和小數(shù)部分分開(kāi),其函數(shù)原型如下:float modf(float x,float*ip);函數(shù)modf將浮點(diǎn)數(shù)x分成整數(shù)和小數(shù)兩部分,整數(shù)部分放入*ip,返回值為小數(shù)部分。兩者都含有與x相同的符號(hào)。4.6 冪函數(shù)冪函數(shù)用于進(jìn)行冪指數(shù)運(yùn)算。其函數(shù)原型如下:float pow(float x,floaty);該函數(shù)用于計(jì)算并返回xy的值。如果x不等于0而y=0,則返回1。當(dāng)x=0且y=0或x0且y不是整數(shù)時(shí),返回NaN。5 標(biāo)準(zhǔn)函數(shù)標(biāo)準(zhǔn)函數(shù)主要用于完成數(shù)據(jù)類型轉(zhuǎn)換以及存儲(chǔ)器分配等操作。標(biāo)準(zhǔn)函數(shù)的原型聲明包含在頭文件STDLIB.H中。下面介紹常用的一些函數(shù)。5.1 字符串轉(zhuǎn)換函數(shù)字符串轉(zhuǎn)換函數(shù)用于將字符串轉(zhuǎn)換成數(shù)值類型并輸出。根據(jù)輸出數(shù)值類型的不同,可以有如下幾種形式:float atoi(char*sl);float atol(char*sl);float atof(char*sl);其中,atoi函數(shù)用于將字符串sl轉(zhuǎn)換成整型數(shù)值并返回該值。輸入字符串的格式為:whitespace+/-數(shù)字。其中,whitespace可由空格、/、制表符組成。這里的數(shù)字可以是一個(gè)或多個(gè)十進(jìn)制數(shù)。5.2 帶返回指針的字符串轉(zhuǎn)換函帶返回指針的字符串轉(zhuǎn)換函數(shù)將字符串轉(zhuǎn)換成數(shù)值類型并輸出,同時(shí)返回未轉(zhuǎn)換部分的指針。根據(jù)輸出數(shù)值類型的不同,可以有如下幾種形式:float strtod(const char*s,char*ptr);long strtol (const char*s,char*ptr,unsigned char base);unsigner long strtoul (const char*s,char*ptr,unsigned char base);5.3 隨機(jī)函數(shù)隨機(jī)函數(shù)用于產(chǎn)生偽隨機(jī)數(shù)。在C51語(yǔ)言中,包含兩種隨機(jī)函數(shù),其函數(shù)聲明如下:int rand();void srand(int n);其中,函數(shù)rand用于返回一個(gè)0到32767之間的偽隨機(jī)數(shù),而函數(shù)srand用來(lái)初始化隨機(jī)數(shù)發(fā)生器的隨機(jī)種子。如果不使用srand函數(shù),則對(duì)rand函數(shù)的相繼調(diào)用將產(chǎn)生相同的隨機(jī)序列。5.4 數(shù)組內(nèi)存分配函數(shù)數(shù)組內(nèi)存分配函數(shù)用于為n個(gè)元素的數(shù)組分配內(nèi)存空間,其函數(shù)原型如下:void*calloc (unsighed int n,unsighed int size);其中n數(shù)組元素的個(gè)數(shù),size為數(shù)組中每個(gè)元素的大小。該函數(shù)所分配的內(nèi)存區(qū)域用0進(jìn)行初始化。返回值為已分配的內(nèi)存單元起始地址,如果不成功則返回0。5.5 釋放內(nèi)存函數(shù)釋放內(nèi)存函數(shù)用于釋放前面已分配的內(nèi)存空間,其函數(shù)原型如下:void free (void xdata *p);其中,指針p指向待釋放的存儲(chǔ)區(qū)域。p必須是以前用calloc、malloc或realloc函數(shù)分配的存儲(chǔ)區(qū)域,如果p為NULL,則該函數(shù)無(wú)效。經(jīng)free函數(shù)所被釋放的存儲(chǔ)區(qū)域可以參與以后的分配。5.6 初始化內(nèi)存函數(shù)初始化內(nèi)存函數(shù)用于對(duì)前面申請(qǐng)的內(nèi)存進(jìn)行初始化,其函數(shù)原型如下:void init_mempool (void xdata *p,unsighed int size);其中,指針p表示存儲(chǔ)區(qū)首地址,size表示存儲(chǔ)區(qū)大小。該函數(shù)可對(duì)被函數(shù)calloc、malloc、free或realloc管理的存儲(chǔ)區(qū)域進(jìn)行初始化。5.7 內(nèi)存分配函數(shù)內(nèi)存分配函數(shù)用于在內(nèi)存中分配指定大小的存儲(chǔ)空間,其函數(shù)原型如下:void*malloc (unsighed int size);其中,size為分配的空間大小,返回值為指向所分配內(nèi)存的指針。如果返回NULL,則表示沒(méi)有足夠的內(nèi)存空間可用。5.8 調(diào)整內(nèi)存大小函數(shù)調(diào)整內(nèi)存大小函數(shù)用于調(diào)整先前分配的存儲(chǔ)器區(qū)域大小,其函數(shù)原型如下:void*realloc (void xdata *p,unsighed int size);其中,參數(shù)p表示該存儲(chǔ)區(qū)域的起始地址,參數(shù)size表示新分配的存儲(chǔ)區(qū)域大小。該函數(shù)的返回值為新區(qū)域所指向的指針。如果返回NULL,則表示沒(méi)有足夠的內(nèi)存空間可用。原存儲(chǔ)器區(qū)域的內(nèi)容被復(fù)制到新存儲(chǔ)器區(qū)域中,如果新存儲(chǔ)器區(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ù)原型如下幾種形式:unsighed char _crol_(unsighed char val,unsighed char n);unsighed int _irol_(unsighed int val,unsighed char n);unsighed long _lrol_(unsighed long val,unsighed char n);其中,val為待移位的變量,n為循環(huán)移位的次數(shù)。函數(shù)_crol_、_irol_和_lrol_分別用于字符型、整型和長(zhǎng)整形變量的循環(huán)左移,其返回值分別為移位后的字符型、整型和長(zhǎng)整形。該函數(shù)與8051單片機(jī)的RLA指令相關(guān)。6.2 循環(huán)右移函數(shù)循環(huán)右移函數(shù)主要用于將數(shù)據(jù)按照二進(jìn)制循環(huán)右移n位。按照操作數(shù)據(jù)類型的不同,其函數(shù)原型如下幾種形式:unsighed char_cror_(unsighed char val,unsighed char n);unsighed int_iror_(unsighed int val,unsighed char n);unsighed long_lror_(unsighed long val,unsighed char n);其中,val為待移位的變量,n為循環(huán)移位的次數(shù)。函數(shù)_cror_、_iror_和_lror_分別用于字符型、整型和長(zhǎng)整形變量的循環(huán)右移,其返回值分別為移位后的字符型、整型和長(zhǎng)整形。該函數(shù)與8051單片機(jī)的RRA指令相關(guān)。6.3 延時(shí)函數(shù)延時(shí)函數(shù)用于使單片機(jī)程序產(chǎn)生延時(shí),其函數(shù)原型如下:void_nop_(void);該函數(shù)類似于 8051單片機(jī)的NOP指令。程序示例如下:#include /頭文件#include voidmain(void) /主函數(shù)P1=0xFF;/P1端口輸出0xFF_nop_();/延時(shí)_nop_();P1=0x00;/P1端口輸出0x006.4 位測(cè)試函數(shù)位測(cè)試函數(shù)用于對(duì)字節(jié)中的一位進(jìn)行測(cè)試,其函數(shù)原型如下:void_testbit_(bit x);其中,x為待測(cè)位變量。如果該位變量置位則函數(shù)返回1,同時(shí)將該位復(fù)位為0,否則返回0。該函數(shù)產(chǎn)生一個(gè) 8051單片機(jī)的JBC指令,其只能用于可直接尋址的位,不允許在表達(dá)式中使用。7 絕對(duì)地址訪問(wèn)函數(shù)絕對(duì)地址訪問(wèn)的函數(shù)包含在頭文件ABSACC.H中,是一些宏定義的函數(shù)。下面分別介紹常用的一些函數(shù)。7.1 BYTE型存儲(chǔ)空間訪問(wèn)函數(shù)BYTE型存儲(chǔ)空間訪問(wèn)函數(shù)用于對(duì)8051單片機(jī)的存儲(chǔ)空間進(jìn)行絕對(duì)地址訪問(wèn),可以做字節(jié)尋址。其宏定義原型如下:#define CBYTE(unsighed char volatile code*)0)#define DBYTE(unsighed char volatile idata*)0)#define PBYTE(unsighed char volatile pdata*)0)#define XBYTE(unsighed char volatile xdata*)0)7.2 WORD型存儲(chǔ)空間訪問(wèn)WORD型存儲(chǔ)空間訪問(wèn)函數(shù)可以訪問(wèn)8051的所有存儲(chǔ)器空間。其宏定義原型如下:#define CWORD(unsighed int volatile code*)0)#define DWORD (unsighed int volatile idata*)0)#define PWORD (unsighed int volatile pdata*)0)#define XWORD (unsighed int volatile xdata*)0)7.3 far存儲(chǔ)區(qū)訪問(wèn)函數(shù)far存儲(chǔ)區(qū)訪問(wèn)函數(shù)用于訪問(wèn)far存儲(chǔ)器區(qū)域。其宏定義原型如下:#define FVAR(object,addr)(*(object volatile far*)(addr)+0x10000L)#define FCVAR(object,addr)(*(object const far*)(addr)+0x810000L)其中,F(xiàn)VAR用于訪問(wèn)far空間(存儲(chǔ)類為HDATA),F(xiàn)CVAR用于訪問(wèn)const far 空間(存儲(chǔ)類為HCONST)。7.4 far存儲(chǔ)區(qū)數(shù)組訪問(wèn)函數(shù)far存儲(chǔ)區(qū)數(shù)組訪問(wèn)函數(shù)用于
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 車位合同和認(rèn)購(gòu)協(xié)議
- 轉(zhuǎn)讓房屋貸款合同協(xié)議
- 追回欠款協(xié)議書(shū)范本
- 水電開(kāi)孔協(xié)議書(shū)
- 車輛免責(zé)協(xié)議書(shū)范本
- 送菜防疫協(xié)議書(shū)模板
- 車安全合同協(xié)議
- 車輛買賣中介合同協(xié)議
- 跟物業(yè)合作合同協(xié)議
- 郵政快遞外包合同協(xié)議
- 六年級(jí)語(yǔ)文畢業(yè)總復(fù)習(xí)
- YY/T 1778.1-2021醫(yī)療應(yīng)用中呼吸氣體通路生物相容性評(píng)價(jià)第1部分:風(fēng)險(xiǎn)管理過(guò)程中的評(píng)價(jià)與試驗(yàn)
- GB/T 4955-2005金屬覆蓋層覆蓋層厚度測(cè)量陽(yáng)極溶解庫(kù)侖法
- GB/T 37078-2018出入口控制系統(tǒng)技術(shù)要求
- GB/T 20041.21-2008電纜管理用導(dǎo)管系統(tǒng)第21部分:剛性導(dǎo)管系統(tǒng)的特殊要求
- 高速鐵路關(guān)鍵技術(shù)匯總
- 辦公室5S管理標(biāo)準(zhǔn)(圖片版)課件
- 《中醫(yī)學(xué)》消渴-課件
- 認(rèn)識(shí)自我 悅納自我 課件- 高中生心理健康主題班會(huì)
- 科技成果-秸稈清潔制漿及其廢液肥料資源化利用技術(shù)
- 煙花爆竹事故應(yīng)急處置
評(píng)論
0/150
提交評(píng)論