PIC單片機(jī)的C語言應(yīng)用下的函數(shù)庫_第1頁
PIC單片機(jī)的C語言應(yīng)用下的函數(shù)庫_第2頁
PIC單片機(jī)的C語言應(yīng)用下的函數(shù)庫_第3頁
PIC單片機(jī)的C語言應(yīng)用下的函數(shù)庫_第4頁
PIC單片機(jī)的C語言應(yīng)用下的函數(shù)庫_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、PICC 庫函數(shù)然后按照以下幾本章將詳細(xì)列出PICC編譯器的庫函數(shù)。每個(gè)函數(shù)均從函數(shù)名開始,個(gè)標(biāo)題給出詳細(xì)解釋。提要:函數(shù)的C語言定義以及定義函數(shù)的頭文件。描述:對(duì)函數(shù)及其目的進(jìn)行敘述性描述。例程:給出一個(gè)能說明該函數(shù)的應(yīng)用例子。數(shù)據(jù)類型:列出函數(shù)中使用的一些特殊的數(shù)據(jù)類型(如結(jié)構(gòu)體等)的C語言定義。這些數(shù)據(jù)類型的定義包含在提要標(biāo)題下列出的頭文件中。參閱: 給出相關(guān)聯(lián)的函數(shù)。返回值: 如 果函數(shù)有返回值,則在本標(biāo)題下將給出返回值的類型和性質(zhì),同時(shí)還包括錯(cuò)誤返回的信息。1 ABS 函數(shù)1. 提 要#include <>int abs (int j)2. 描 述abs( ) 函數(shù)返回變

2、量j 的絕對(duì)值。3. 例 程#include <>#include <>voidmain (void)int a = -5;printf("The absolute value of %d is %dn", a, abs(a) ;4. 返回值j 的絕對(duì)值。2 ACOS函數(shù)1. 提 要#include <>double acos (double f)2. 描 述acos( ) 函數(shù)是 cos( ) 的反函數(shù)。函數(shù)參數(shù)在-1 , 1 區(qū)間內(nèi),返回值是一個(gè)用弧度表示的角度,而且該返回值的余弦值等于函數(shù)參數(shù)。3. 例 程#include <

3、>#include <>/* 以度為單位,打印 -1 , 1 區(qū)間內(nèi)的反余弦值 */ void main (void) float i , a; for(i =, i <; i += a = acos(i)* ; printf("acos(%f) = %f degreesn" , i , a) ; 4 參 閱sin( ) , cos( ) , tan( ) , asin( ) , atan( ) , atan2( ) 5 返回值返回值是一個(gè)用弧度表示的角度,區(qū)間是 0,兀。如果函數(shù)參數(shù)超出區(qū)間-1 , 1, 則返回值將為 0。3 ASCTIMES 數(shù)

4、1. 提 要#include <>char * asctime (struct tm * t)2. 描 述 asctime( ) 函數(shù)通過指針t 從上 struct tm 結(jié)構(gòu)體中獲得時(shí)間,返回描述當(dāng)前日期和時(shí)間的26個(gè)字符串,其格式如下:Sun Sep 16 01:03:52 1973n0值得注意的是, 在字符串的末尾有換行符。 字符串中的每個(gè)字長(zhǎng)是固定的。 以下例程得到當(dāng)前時(shí)間,通過localtime()函數(shù)將其轉(zhuǎn)換成一個(gè)struct tm 指針,最后轉(zhuǎn)換成 ASCII碼并打印出來。其中, time( ) 函數(shù)需要用戶提供(詳情請(qǐng)參閱 time( ) 函數(shù)) 。 3. 例 程#

5、include <>#include <> void main (void) time_t clock ; struct tm * tp ; time(&clock) ; tp = localtime(&clock) ; printf("%s" , asctime(tp) ; 4. 參 閱ctime( ) , gmtime( ) , localtime( ), time( )5. 返回值指向字符串的指針。注意:由于編譯器不提供 time( ) 例行程序,故在本例程中它需要由用戶提供。詳情請(qǐng)參照 time( )函數(shù)。6. 數(shù)據(jù)類型str

6、uct tm int tm_sec ;int tm_min ;int tm_hour ;int tm_mday ;int tm_mon ;int tm_year ;int tm_wday ;int tm_yday ;int tm_isdst ;4 ASIN 函數(shù)1. 提 要#include <>double asin (double f)2. 描 述asin( ) 函數(shù)是 sin( ) 的反函數(shù)。它的函數(shù)參數(shù)在-1 , 1 區(qū)間內(nèi),返回一個(gè)用弧度表示的角度值,而且這個(gè)返回值的正弦等于函數(shù)參數(shù)。3. 例 程#include <>#include <>voidm

7、ain (void)float i , a;for(i =; i <; i += a = asin(i)* ;printf("asin(%f) = %f degreesn", i , a) ;4. 參 閱sin( ) , cos( ) , tan( ) , acos( ) , atan( ) , atan2( )5. 返回值本函數(shù)返回一個(gè)用弧度表示的角度值,其區(qū)間為卜71/2,兀/2。如果函數(shù)參數(shù)的值超出區(qū)間 -1 , 1 ,則函數(shù)返回值將為 0 。5 ATAN函數(shù)1. 提 要#include <>double atan (double x)2. 描 述函

8、數(shù)返回參數(shù)的反正切值。也就是說,本函數(shù)將返回一個(gè)在區(qū)間-兀/2,兀/2的角度e,而且有tan(e)=x (x為函數(shù)參數(shù))。3. 例 程#include <>#include <>voidmain (void)printf("%fn" , atan) ;4. 參 閱sin( ) , cos( ) , tan( ) , asin( ) , acos( ) , atan2( )5. 返回值返回函數(shù)參數(shù)的反正切值。6 ATAN2函數(shù)1. 提 要#include <>double atan2 (double y , double x)2. 描 述本

9、函數(shù)返回 y/x 的反正切值,并由兩個(gè)函數(shù)參數(shù)的符號(hào)來決定返回值的象限。3. 例 程#include <>#include <>voidmain (void)printf("%fn" , atan2 , 1) ;4. 參 閱sin( ) , cos( ) , tan( ) , asin( ) , acos( ) , atan( )5. 返回值返回y/x的反正切值(用弧度表示),區(qū)間為-兀,兀。如果y和x均為0,將出現(xiàn)定 義域錯(cuò)誤,并返回 0 。7 ATOF 函數(shù)1. 提 要#include <>double atof (const cha

10、r * s)2. 描 述atof( ) 函數(shù)將掃描由函數(shù)參數(shù)傳遞過來的字符串,并跳過字符串開頭的空格。然后將一個(gè)數(shù)的 ASCII 表達(dá)式轉(zhuǎn)換成雙精度數(shù)。 這個(gè)數(shù)可以用十進(jìn)制數(shù)、 浮點(diǎn)數(shù)或者科學(xué)記數(shù) 法表示。3. 例 程#include <>#include <>voidmain (void)char buf80;double i ;gets(buf) ;i = atof(buf) ;printf("Read %s: converted to %fn", buf , i) ;4. 參 閱atoi( ), atol( )5. 返回值本函數(shù)返回一個(gè)雙精度浮

11、點(diǎn)數(shù)。如果字符串中沒有發(fā)現(xiàn)任何數(shù)字,則返回。8 ATOI 函數(shù)1. 提 要#include <>int atoi (const char * s)2. 描 述atoi( ) 函數(shù)掃描傳遞過來的字符串,跳過開頭的空格并讀取其符號(hào) ; 然后將一個(gè)十 進(jìn)制數(shù)的 ASCII 表達(dá)式轉(zhuǎn)換成整數(shù)。 3. 例 程#include <>#include <> voidmain (void)char buf80;int i ;gets(buf) ;i = atoi(buf) ;printf("Read %s: converted to %dn", buf

12、, i) ;4. 參 閱xtoi( ), atof( ), atol( )5. 返回值返回一個(gè)有符號(hào)的整數(shù)。如果在字符串中沒有發(fā)現(xiàn)任何數(shù)字,則返回0。9 ATOL函數(shù)1 提 要#include <>long atol (const char * s)2 描 述atol( ) 函數(shù)掃描傳遞過來的字符串,并跳過字符串開頭的空格;然后將十進(jìn)制數(shù)的ASCII表達(dá)式轉(zhuǎn)換成長(zhǎng)整型。3 例 程#include <>#include <>voidmain (void)char buf80;long i ;gets(buf) ;i = atol(buf) ;printf(&q

13、uot;Read %s: converted to %ldn", buf , i) ;4 參 閱atoi( ), atof( )5 返回值返回一個(gè)長(zhǎng)整型數(shù)。如果字符串中沒有發(fā)現(xiàn)任何數(shù)字,返回值為 0。10 CEIL 函數(shù)1. 提 要#include <>double ceil (double f)2. 描 述本函數(shù)對(duì)函數(shù)參數(shù) f 取整,取整后的返回值為大于或等于f 的最小整數(shù)。3. 例程#include <>#include <>voidmain (void)double j ;scanf("%lf" , &j) ;pr

14、intf("The ceiling of %lf is %lfn", j , ceil(j) ;11 COS函數(shù)1. 提 要#include <>double cos (double f)2. 描 述本函數(shù)將計(jì)算函數(shù)參數(shù)的余弦值。其中,函數(shù)參數(shù)用弧度表示。余弦值通過多項(xiàng)式級(jí)數(shù)近似值展開式算得。3. 例 程#include <>#include <>#define Cvoidmain (void)double i ;for(i = 0; i <= ; i += 10)printf("sin(% = %f , cos = %f

15、n" , i , sin(i*C) , cos(i*C) ; 4. 參 閱sin( ) , tan( ) , asin( ) , acos( ) , atan( ) , atan2( )5. 返回值返回一個(gè)雙精度數(shù),區(qū)間為 -1 , 1 。12 COSH SINH TAN函數(shù)1. 提 要#include <>double cosh (double f)double sinh (double f)double tanh (double f)2. 描 述這些函數(shù)都是cos( ) , sin()和tan()的雙曲函數(shù)。3. 例 程#include <>#includ

16、e <>voidmain (void)printf("%fn",cosh);printf("%fn",sinh);printf("%fn",tanh);4. 返回值cosh( )函數(shù)返回雙曲余弦值, sinh( ) 函數(shù)返回雙曲正弦值, tanh( ) 函數(shù)返回雙曲 正切值。13 CTIME 函數(shù)1. 提 要#include <>char * ctime (time_t * t)2. 描 述ctime( ) 函數(shù)將函數(shù)參數(shù)所指的時(shí)間轉(zhuǎn)換成字符串,其結(jié)構(gòu)與asctime( ) 函數(shù)所描述的相同,并且精確到秒。以下

17、例程將打印出當(dāng)前的時(shí)間和日期。3. 例 程#include <>#include <>voidmain (void)time_t clock ;time(&clock) ;printf("%s" , ctime(&clock) ;4. 參 閱gmtime( ) , localtime( ), asctime( ), time( )5. 返回值本函數(shù)返回一個(gè)指向該字符串的指針。注意:由于編譯器不會(huì)提供 time( ) 程序,故它需要由用戶給定。詳情請(qǐng)參閱 time( ) 函數(shù)。6. 數(shù)據(jù)類型typedef long time_t14 D

18、I 、 EI 函數(shù)1. 提 要#include <>void ei(void)void di(void)2. 描 述ei()和di()函數(shù)分別實(shí)現(xiàn)全局中斷使能和中斷屏蔽,其定義在頭文件中。它們將 被擴(kuò)展為一條內(nèi)嵌的匯編指令,分別對(duì)中斷使能位進(jìn)行置位和清零。以下例程將說明 ei( ) 函數(shù)和 di( ) 函數(shù)在訪問一個(gè)長(zhǎng)整型變量時(shí)的應(yīng)用。由于中斷服務(wù)程序?qū)⑿薷脑撟兞?,所以如果訪問該變量不按照本例程的結(jié)構(gòu)編程,一旦在訪問變量值的連續(xù)字期間出現(xiàn)中斷,則函數(shù)getticks( ) 將返回錯(cuò)誤的值。3. 例 程#include <>long count ;void interru

19、pt tick(void)count+ ;long getticks(void)long val ; /* 在訪問 count 變量前禁止中斷,保證訪問的連續(xù)性*/di( ) ;val = count ;ei( ) ;return val ;15 DIV 函數(shù)1. 提 要#include <>div_t div (int numer , int demon)2. 描 述div( ) 函數(shù)實(shí)現(xiàn)分子除以分母,得到商和余數(shù)。3. 例 程#include <>#include <>voidmain (void)div_t x ;x = div(12345, 66)

20、;printf("quotient = %d , remainder = %dn", , ;4. 返回值返回一個(gè)包括商和余數(shù)的結(jié)構(gòu)體 div_t 。 .5. 數(shù)據(jù)類型 t ypedef struct int quot ; int rem ; div_t ;16 EEPROM_REA DEEPROM_WRITE1. 提 要#include <>unsigned char eeprom_read (unsigned char addr) ;void eeprom_write (unsigned char addr , unsigned char value) ;2.

21、 描 述這些函數(shù)允許訪問片內(nèi) EEPROM口果片內(nèi)有 EEPROM EEPROM是可直接尋址的寄存器空間,當(dāng)需要訪問 EEPROM,就需要將一些特定的字節(jié)序列加載到EEPROM制寄存器中。寫EEPROM一個(gè)緩慢的過程。故eeprom_write()函數(shù)在寫入下一個(gè)數(shù)據(jù)前,會(huì)通過 查詢恰當(dāng)?shù)募拇嫫鱽泶_保前一個(gè)數(shù)據(jù)已經(jīng)寫入完畢。另外,讀EEPROM以在一個(gè)指令周期內(nèi)完成,所以沒有必要查詢讀操作是否完成。3. 例 程#include <> void main (void) unsigned char data ; unsigned char address ; address = 0x1

22、0 ; data = eeprom_read(address) ; 注意:如果調(diào)用eeprom_write()函數(shù)后需即刻調(diào)用eeprom_read()函數(shù),則必須查詢EEPROM存 器以確保寫入完畢。全局中斷使能位( GIE)在eeprom_write()程序中重新恢復(fù)(寫 EEPROM需要關(guān) 閉總中斷)。而且,本函數(shù)不會(huì)清 EEIF標(biāo)志位。17 EVAL_POLS 數(shù)1. 提 要#include <>double eval_poly (double x , const double * d , int n)2. 描 述eval_poly() 函數(shù)將求解一個(gè)多項(xiàng)式的值。這個(gè)多項(xiàng)式

23、的系數(shù)分別包含在x和數(shù)組d中,例如:y = x*x*d2 + x*d1 + d0該多項(xiàng)式的階數(shù)由參數(shù)M 專遞過來。3. 例 程#include <>#include <>voidmain (void)double x , y ;double d3 = , , ;x = ;y = eval_poly(x , d, 2) ;printf("The polynomial evaluated at %f is %fn", x , y) ;4. 返回值本函數(shù)返回一個(gè)雙精度數(shù),該數(shù)是自變量x對(duì)應(yīng)的多項(xiàng)式值。18 EXP 函數(shù)1. 提 要#include <

24、>double exp (double f)2. 描 述exp( ) 函數(shù)返回參數(shù)的指數(shù)函數(shù)值,即ef ( f 為函數(shù)參數(shù)) 。3. 例 程#include <>#include <>voidmain (void)double f ;for(f =; f <= 5 ; f +=printf("e to % = %fn", f , exp(f) ;4. 參 閱log( ) , log10( ) , pow( )19 FABS函數(shù)1. 提 要#include <>double fabs (double f)2. 描 述本函數(shù)返回雙

25、精度函數(shù)參數(shù)的絕對(duì)值。3. 例 程#include <>#include <> void main (void) printf("%f %fn", fabs , fabs) ;4. 參 閱 abs( )20 FLOOR0 數(shù)1. 提 要#include <>double floor (double f)2. 描 述本函數(shù)對(duì)函數(shù)參數(shù)取整,取整后的返回值不大于函數(shù)參數(shù) f 。3. 例 程#include <>#include <>voidmain (void) printf("%fn", floor

26、( );printf("%fn", floor( );21 FREXP函數(shù)1. 提 要#include <>double frexp (double f , int * p)2. 描 述frexp( ) 函數(shù)將一個(gè)浮點(diǎn)數(shù)分解成規(guī)格化小數(shù)和 2 的整數(shù)次冪兩部分, 整數(shù)冪部分存于指針p所指的int單元中。本函數(shù)的返回值x或在區(qū)間(,)內(nèi),或?yàn)? ;而且有f=xX2p。如果f為0,則分解出來的兩部分均為0。3. 例 程#include <>#include <>voidmain (void) double f ;int i ;f = frex

27、p , &i) ;printf("二 f * 2A%dn", f, i);4. 參 閱ldexp( )22 GET_CAL_DAT函數(shù)1. 提 要#include <>double get_cal_data (const unsigned char * code_ptr)2. 描 述本函數(shù)從 PIC 14000標(biāo)定空間返回一個(gè)32位的浮點(diǎn)標(biāo)定數(shù)據(jù)。只有利用這個(gè)函數(shù)才能訪問KREF KBG BHTHERMKTO元(32位浮點(diǎn)參數(shù))。由于FOS®口 TWDT是一個(gè)字節(jié)長(zhǎng) 度,故可以直接訪問它們。3. 例 程#include <>void

28、main (void)double x ;unsigned char y ;x = get_cal_data(KREF) ; /* 獲得參考斜率( slope reference ratio ) */y =TWDT; /*獲彳導(dǎo)WDT出時(shí)間*/4. 返回值返回定標(biāo)參數(shù)值。注意:本函數(shù)僅用于PIC 1400023 GMTIME8 數(shù)1. 提 要#include <>struct tm * gmtime (time_t * t)2. 描 述本函數(shù)把指針 t 所指的時(shí)間分解, 并且存于結(jié)構(gòu)體中,精確度為秒。其中, t 所指的時(shí)間必須自 1970年 1月 1日 0時(shí)0分0秒起。本函數(shù)所用的

29、結(jié)構(gòu)體被定義在文件中, 可參照本節(jié)“數(shù)據(jù)類型”部分。3. 例 程#include <>#include <>voidmain (void)time_t clock ;struct tm * tp ;time(&clock) ;tp = gmtime(&clock) ;printf("It s %d in London n" , tp->tm_year+1900) ; 4. 參 閱ctime( ) , asctime( ) , time( ) , localtime( )5. 返回值返回tm類型的結(jié)構(gòu)體。注意:由于編譯器不會(huì)提供

30、time( ) 程序,故它需要由用戶給定。詳情請(qǐng)參閱 time( ) 函數(shù)。6. 數(shù)據(jù)類型t ypedef long time_t ;struct tm int tm_sec ;int tm_min ;int tm_hour ;int tm_mday ;int tm_mon ;int tm_year ;int tm_wday ;int tm_yday ;int tm_isdst ;24 ISALNUM, ISALPHA ISDIGIT, ISLOWE曲函數(shù)1. 提 要#include <>int isalnum (char c)int isalpha (char c)int isa

31、scii (char c)int iscntrl (char c)int isdigit (char c)int islower (char c)int isprint (char c)int isgraph (char c)int ispunct (char c)int isspace (char c)int isupper (char c)int isxdigit(char c)2. 描 述以上函數(shù)都被定義在文件中。它們將測(cè)試給定的字符,看該字符是否為已知的幾組字符中的成員。isalnum (c)c在09、az或者AZ范圍內(nèi);isalpha (c)c在 AZ或az范圍內(nèi);isascii (

32、c)c 為 7 位 ASCII 字符;iscntrl (c)c為控制字符;isdigit (c)c為十進(jìn)制阿拉伯?dāng)?shù)字;islower (c)c在az范圍內(nèi);isprint (c)c為打印字符;isgraph (c)c為非空格可打印字符;ispunct (c)c不是字母數(shù)字混合的;isspace (c)c是空格鍵、TA腌或換行符;isupper (c)c在 AZ范圍內(nèi);isxdigit (c)c在09、af或AF范圍內(nèi)。3例 程#include <>#include <> voidmain (void)char buf80;int i ;gets(buf) ;i = 0

33、;while(isalnum(bufi)i+ ;bufi = 0;printf(" %s is the word n" , buf) ;4參 閱toupper( ), tolower( ), toascii( )25 KBHIT 函數(shù)1. 提 要#include <>bit kbhit (void)2. 描 述如果鍵盤上的字符被按下,函數(shù)返回 1;否則返回0 。通常,該字符可通過getch( ) 函數(shù)讀取。3. 例 程#include <>voidmain (void)int i ;while(!kbhit() cputs("I m wai

34、ting.");for(i = 0; i != 1000; i+)continue ;4. 參 閱getch( ) , getche( )5. 返回值如果有鍵被按下,函數(shù)將返回 1 ;否則返回0。此外,返回值為1 位。注意:程序的主體需由用戶實(shí)現(xiàn),其主要框架可以從 sources 目錄下直接獲得。26 LDEXP 函數(shù)1. 提 要#include <>double ldexp (double f , int i)2. 描 述f 的指數(shù)部分與整數(shù) i 的求ldexp( ) 函數(shù)是 frexp( ) 的反函數(shù)。它先進(jìn)行浮點(diǎn)數(shù)和運(yùn)算,然后返回合成結(jié)果。3. 例 程#includ

35、e <>#include <>voidmain (void)double f ;f = ldexp , 10) ;printf(" * 2A10 = %fn", f);4. 參 閱frexp( )5. 返回值本函數(shù)返回浮點(diǎn)數(shù) f 指數(shù)部分加上整數(shù)i 后得到的新浮點(diǎn)數(shù)。27 LDIV 函數(shù)1 . 提 要#include <>ldiv_t ldiv (long number , long denom)2 . 描 述ldiv( ) 函數(shù)實(shí)現(xiàn)分子除以分母,得到商和余數(shù)。商的符號(hào)與精確商的符號(hào)一致,絕對(duì)值是一個(gè)小于精確商絕對(duì)值的最大整數(shù)。Ldiv(

36、 ) 函數(shù)與 div( ) 函數(shù)類似;不同點(diǎn)在于,前者的函數(shù)參數(shù)和返回值(結(jié)構(gòu)體ldiv_t )的成員都是長(zhǎng)整型數(shù)據(jù)。3 例 程#include <>#include <>voidmain (void)ldiv_t lt ;lt = ldiv(1234567, 12345) ;printf("Quotient = %ld , remainder = %ldn" , , ;4 參閱div( )5 返回值返回值是結(jié)構(gòu)體 ldiv_t 。6 數(shù)據(jù)結(jié)構(gòu)typedef struct long quot ; /* 商 */long rem ; /* 余數(shù) */

37、ldiv_t ;28 LOCALTIMEH 數(shù)1. 提 要#include <>struct tm * localtime (time_t * t)2. 描 述本函數(shù)把指針 t 所指的時(shí)間分解并且存于結(jié)構(gòu)體中,精確度為秒。其中, t 所指的時(shí)間必須自1970年1月 1 日0時(shí)0分0秒起,所用的結(jié)構(gòu)體被定義在文件中。localtime( ) 函數(shù)需要考慮全局整型變量time_zone 中的內(nèi)容, 因?yàn)樗斜镜貢r(shí)區(qū)位于格林威治以西的時(shí)區(qū)數(shù)值。由于在MS-DO新境下無法預(yù)先確定這個(gè)值,所以,在缺省的條件下,localtime( ) 函數(shù)的返回值將與gmtime( ) 的相同。3. 例

38、 程#include <>#include <>char * wday = "Sunday" , "Monday" , "Thursday" , "Friday" ; voidmain (void)time_t clock ;struct tm * tp ;time(&clock) ; tp = localtime(&clock) printf("Today is %sn" 4. 參 閱ctime( ) , asctime( )"Tuesday&

39、quot; , "Wednesday" , , "Saturday";, wdaytp->tm_wday) ;time( )5. 返回值本函數(shù)返回tm結(jié)構(gòu)體型數(shù)據(jù)。注意:由于編譯器不會(huì)提供 time( ) 程序,故它需要由用戶給定。詳情請(qǐng)參閱 time( )6. 數(shù)據(jù)結(jié)構(gòu)t ypedef long time_t ;struct tm int tm_sec ;int tm_min ;int tm_hour ;int tm_mday ;函數(shù)。int tm_mon ;int tm_year ; int tm_wday ; int tm_yday ; in

40、t tm_isdst;29 LOG、LOG1函數(shù)1. 提 要#include <>double log (double f)double log10 (double f)2. 描 述log( ) 函數(shù)返回 f 的自然對(duì)數(shù)值。 log10( ) 函數(shù)返回 f 以10為底的對(duì)數(shù)值。3. 例 程#include <>#include <>voidmain (void)double f ;for(f =; f <= ; f +=printf("log(% = %fn", f , log(f) ;4. 參 閱exp( ) , pow( )5.

41、 返回值如果函數(shù)參數(shù)為負(fù),返回值為 0 。30 MEMCHR 數(shù)1. 提 要#include <>/* 初級(jí)和中級(jí)系列單片機(jī)*/const void * memchr (const void * block, int val , size_t length)/* 高級(jí)系列單片機(jī)*/void * memchr (const void * block , int val , size_t length)2. 描 述memchr( )函數(shù)與 strchr( ) 函數(shù)在功能上類似; 但前者沒有在字符串中尋找null (空)中止字符的功能。 memchr( ) 函數(shù)實(shí)現(xiàn)在一段規(guī)定了長(zhǎng)度的內(nèi)存

42、區(qū)域中尋找特定的字節(jié)。它的函數(shù)參數(shù)包括指向被尋內(nèi)存區(qū)域的指針、被尋字節(jié)的值和被尋內(nèi)存區(qū)域的長(zhǎng)度。函數(shù)將返回一個(gè)指針,該指針指向被尋內(nèi)存區(qū)域中被尋字節(jié)首次出現(xiàn)的單元。3. 例 程#include <>#include <>unsigned int ary = 1, 5 , 0x6789 , 0x23 ;voidmain (void)char * cp ;cp = memchr(ary , 0x89 , sizeof ary) ;if(!cp)printf("not foundn") ;elseprintf("Found at offset %

43、un", cp - (char *)ary) ;4. 參 閱strchr( )5. 返回值函數(shù)返回指針。該指針指向被尋內(nèi)存區(qū)域中被尋字節(jié)首次出現(xiàn)的單元;否則返回 NULL。31 MEMCM P 數(shù)1. 提 要#include <>int memcmp (const void * s1, const void * s2, size_t n)2. 描 述memcmp()i數(shù)的功能是比較兩塊長(zhǎng)度為n的內(nèi)存中變量的大小,類似 strncmp()函數(shù)返回一個(gè)有符號(hào)數(shù)。與strncmp()函數(shù)不同的是,memcmp()E數(shù)沒有空格結(jié)束符。ASCII 碼字符順序被用來比較; 但如果內(nèi)存

44、塊中包含非ASCII 碼字符, 則返回值不確定。 測(cè)試是否相等總是可靠的。3. 例 程#include <>#include <> void main (void) int buf10, cow10, i;buf0 = 1;buf2 = 4;cow0 = 1;cow2 = 5;buf1 = 3;cow1 = 3;i = memcmp(buf, cow, 3*sizeof(int);if(i < 0)printf("less thann");else if(i > 0)printf("Greater thann");el

45、seprintf("Equaln");4. 參 閱strncpy() , strncmp() , strchr() , memset() , memchr()5. 返回值當(dāng)內(nèi)存塊變量s1 分別小于、等于或大于內(nèi)存塊 s2 變量時(shí) , 函數(shù)返回值分別為 -1 , 0或 1。32 MEMCPY 數(shù)1. 提 要#include <>/* 低級(jí)或中級(jí)系列單片機(jī)*/void * memcpy (void * d, const void * s, size_t n)/* 高級(jí)系列單片機(jī)*/far void * memcpy (far void * d, const void

46、 * s, size_t n)2. 描 述memcpy()函數(shù)的功能是,將指針s指向的、內(nèi)存開始的n個(gè)字節(jié)復(fù)制到指針d指向的、 內(nèi)存開始的單元。復(fù)制重疊區(qū)的結(jié)果不確定。與 strcpy()函數(shù)不同的是,memcpy()復(fù)制 的是一定數(shù)量的字節(jié),而不是復(fù)制所有結(jié)束符前的數(shù)據(jù)。3. 例 程#include <>#include <>voidmain (void)char buf80;memset(buf, 0, sizeof buf);memcpy(buf, "a partial string", 10);printf("buf = %sn&q

47、uot;, buf);4. 參 閱strncpy() , strncmp() , strchr() , memset()5. 返回值memcpy()函數(shù)返回值為函數(shù)的第一個(gè)參數(shù)。33 MEMMON®數(shù)1. 提 要#include <>/* 低級(jí)或中級(jí)系列單片機(jī)*/void * memmove (void * s1, const void * s2, size_t n)/* 高級(jí)系列單片機(jī)*/far void * memmove (far void * s1, const void * s2, size_t n)2. 描 述memmove()l數(shù)與memcpy()函數(shù)相似,

48、但memmove()l數(shù)能對(duì)重疊區(qū)進(jìn)行準(zhǔn)確的復(fù)制。也就是說,它可以適當(dāng)向前或向后,正確地從一個(gè)塊復(fù)制到另一個(gè)塊,并將它覆蓋。3. 參 閱strncpy(), strncmp(), strchr(), memcpy()4. 返回值memmove()l數(shù)同樣返回它的第一個(gè)參數(shù)。34 MEMSE函數(shù)1. 提 要#include <>/* 低級(jí)和中級(jí)系列的單片機(jī)*/void * memset (void * s, int c, size_t n)/* 高級(jí)系列單片機(jī)*/far void * memset (far void * s, int c, size_t n)2. 描 述memset

49、()函數(shù)將字節(jié)c存儲(chǔ)到指針s指向的,內(nèi)存開始的n個(gè)內(nèi)存字節(jié)。3. 例 程#include <>#include <>voidmain (void)char abuf20;strcpy(abuf, "This is a string");memset(abuf, x , 5);printf("buf = %s n", abuf);4. 參 閱strncpy(), strncmp(), strchr(), memcpy(), memchr()35 MODF® 數(shù)1. 提 要#include <>double mo

50、df (double value, double * iptr)2. 描 述modf() 函數(shù)將參數(shù)value 分為整數(shù)和小數(shù)2部分,每部分都和value 的符號(hào)相同。 例如,將被分為整數(shù)部分( -3 ) 和小數(shù)部分 () 。 其中整數(shù)部分以雙精度數(shù)據(jù)類型存儲(chǔ)在指針 iptr指向的單元中。3. 例 程#include <>#include <>voidmain (void)double i_val, f_val;f_val = modf( , &i_val);4. 返回值函數(shù)返回值為value 的帶符號(hào)小數(shù)部分。36 PERSIST_CHECK, PERSIST

51、_VALIDATB:1. 提 要#include <>int persist_check (int flag)void persist_validate (void)2. 描 述persist_check()函數(shù)要用到非可變(non-volatile )的RAM!量,這些變量在定義時(shí) 被 加 上 限 定 詞 persistent 。 在 測(cè) 試NVRAM( 非 可 變 RAM) 區(qū) 域 時(shí) , 先 調(diào) 用persist_validate() 函 數(shù) , 并 用 到 一 個(gè) 存 儲(chǔ) 在 隱 藏 變 量 中 的 虛 擬 數(shù) 據(jù) , 且 由 persist_validate() 函數(shù)計(jì)算

52、得到一個(gè)測(cè)試結(jié)果。如果虛擬數(shù)據(jù)和測(cè)試結(jié)果都正確,則 返回值為真(非零) 。如果都不正確,則返回零。在這種情況下,函數(shù)返回零并且重新檢測(cè)NVRAM域(通過調(diào)用persist_validate() 函數(shù))。函數(shù)被執(zhí)行的條件是標(biāo)志變量變量不為 0。 persist_validate() 函數(shù)應(yīng)在每次轉(zhuǎn)換為永久變量之后調(diào)用。 它將重新建立虛擬 數(shù)據(jù)和計(jì)算測(cè)試結(jié)果。 3. 例 程#include <>#include <>persistent long reset_count;voidmain (void) if(!persist_check(1)printf("Res

53、et count invalid - zeroedn");elseprintf("Reset number %ldn", reset_count);reset_count+; /* update count */persist_validate(); /* and checksum */ for(;)continue; /* sleep until next reset */ 4. 返回值如果NVRA鼠域無效,則返回值為假(零);如果NVRAM域有效,則返回值為真(非 零) 。37 POW0 數(shù)1. 提 要#include <>double pow (

54、double f, double p)2. 描 述pow()函數(shù)表示第一個(gè)參數(shù)f的p次哥。3. 例 程#include <>#include <> void main (void) double f;for(f = ; f <= ; f +=printf("pow(2, % = %fn", f, pow(2, f); 4. 參 閱log(), log10(), exp()5. 返回值返回值為 f 的 p 次冪。38 PRINTF 函數(shù)1. 提 要#include <>unsigned char printf (const char

55、* fmt, .)2. 描 述printf() 函數(shù)是一個(gè)格式輸出子程序, 其運(yùn)行的基礎(chǔ)是標(biāo)準(zhǔn)輸出 ( staout ) 。 它有對(duì)應(yīng)的程序形成字符緩沖區(qū)( sprintf() 函數(shù)) 。 printf() 函數(shù)以格式字符串、 一系列0及其它作為參數(shù)。格式字符串都轉(zhuǎn)換為一定的格式,每一規(guī)格化都用來輸出變量表。轉(zhuǎn)換格式的形式為 其中%表示格式,ml示選擇的字符寬度,n表示選擇的精度,c 為一個(gè)字母表示規(guī)格類型。字符寬度和精度只適于中級(jí)和高級(jí)系列單片機(jī), 并且精度只對(duì)格式 s有效。如果指針變量為十進(jìn)制常數(shù),例如格式為%*d時(shí),則一個(gè)整型數(shù)將從表中被取出,提供給指針變量。對(duì)低級(jí)系列單片機(jī)而言,有下列

56、轉(zhuǎn)換格式:o x X u d 即分別為整型格式八進(jìn)制、十六進(jìn)制、十六進(jìn)制、十進(jìn)制和十進(jìn)制。其中d為有符號(hào)十進(jìn)制數(shù),其它為無符號(hào)。其精度值為被輸出數(shù)的總的位數(shù),也可以 強(qiáng)制在前面加0。例如各產(chǎn)生一 8位十六進(jìn)制數(shù),其中前 4位為0,后為十六進(jìn)制數(shù)。X輸 出的十六進(jìn)制數(shù)中,字母為 AF, x輸出的十六進(jìn)制中字母為af。當(dāng)格式發(fā)生變化時(shí),八進(jìn)制格式前要加0,十六進(jìn)制格式的前面要加0x或0X。S 打印一個(gè)字符串函數(shù)參數(shù)值被認(rèn)為是字符型指針。最多從字符串中取 n 個(gè)字符打印,字符寬度為m。C 函數(shù)參數(shù)被認(rèn)為一個(gè)單字節(jié)字符并可自由打印。任何其它有格式規(guī)定的字符將被輸出。那么將產(chǎn)生一個(gè)百分號(hào)。對(duì)中級(jí)和高級(jí)系列單片機(jī)而言,轉(zhuǎn)換格式在低級(jí)系列單片機(jī)的基礎(chǔ)上再加上:l 長(zhǎng)整型格式在整型格式前加上關(guān)鍵字母 l 即表示長(zhǎng)整型變量。f浮點(diǎn)格式一一總的寬度為m小數(shù)點(diǎn)后的位數(shù)為no如果n沒有寫出,則默認(rèn)為6。如果精度為0 ,則小數(shù)點(diǎn)被省略,除非精度已預(yù)先定義。3. 例 程printf("Total = %4d%", 23)輸出為 Total = 23% printf("Size is %lx" , size)這里size為長(zhǎng)整型十六進(jìn)制變量。注意當(dāng)使用助,精度只對(duì)中級(jí)和高級(jí)系列單片機(jī)有效。printf("Name = %.8s&qu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論