日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Keil C51的库函数

發(fā)布時(shí)間:2023/12/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Keil C51的库函数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)自:http://www.dwenzhao.cn/profession/mcu/mcu51clib.html

Keil?C51有豐富的可直接調(diào)用的庫(kù)函數(shù),靈活使用庫(kù)函數(shù)可使程序代碼簡(jiǎn)單、結(jié)構(gòu)清晰,并且易于調(diào)試和維護(hù)。每個(gè)庫(kù)函數(shù)都在相應(yīng)的頭文件中給出了函數(shù)原型聲明,用戶如果需要使用庫(kù)函數(shù),必須在源程序的開始處用預(yù)處理命令“#include”將有關(guān)的頭文件包含進(jìn)來(lái)。

1. 本征庫(kù)函數(shù):

本征庫(kù)函數(shù)是指編譯時(shí)直接將固定的代碼插入到當(dāng)前行,而不是用匯編語(yǔ)言中的“ACALL”和“LCALL”指令來(lái)實(shí)現(xiàn)調(diào)用,從而大大提高了函數(shù)的訪問效率。Keil?C51的本征庫(kù)函數(shù)有9個(gè),數(shù)量少但非常有用。使用本征庫(kù)函數(shù)時(shí),C51源程序中必須包含預(yù)處理命令“#include??<intrins.h>”。

函數(shù)名及定義

功能說(shuō)明

unsigned?char?_crol_(unsigned?char?val,unsigned?char?n)

將字符型數(shù)據(jù)val循環(huán)左移n位,相當(dāng)于RL命令

unsigned?int?_irol_(unsigned?int?val,unsigned?char?n)

將整型數(shù)據(jù)val循環(huán)左移n位,相當(dāng)于RL命令

unsigned?long?_lrol_(unsigned?long?val,unsigned?char?n)

將長(zhǎng)整型數(shù)據(jù)val循環(huán)左移n位,相當(dāng)于RL命令

unsigned?char?_cror_(unsigned?char?val,unsigned?char?n)

將字符型數(shù)據(jù)val循環(huán)右移n位,相當(dāng)于RR命令

unsigned?int?_iror_(unsigned?int?val,unsigned?char?n)

將整型數(shù)據(jù)val循環(huán)右移n位,相當(dāng)于RR命令

unsigned?long?_lror_(unsigned?long?val,unsigned?char?n)

將長(zhǎng)整型數(shù)據(jù)val循環(huán)右移n位,相當(dāng)于RR命令

bit?_testbit_(bit?x)

相當(dāng)于JBC??bit指令

unsigned?char?_chkfloat_(float?ual)

測(cè)試并返回浮點(diǎn)數(shù)狀態(tài)

void?_nop_(void)

產(chǎn)生一個(gè)NOP指令

2. 字符判斷轉(zhuǎn)換庫(kù)函數(shù):

字符判斷轉(zhuǎn)換庫(kù)函數(shù)的原型聲明在頭文件CTYPE.H中定義。

函數(shù)名及定義

功能說(shuō)明

bit?isalpha(char?c)

檢查參數(shù)字符是否為英文字母,是則返回1,否則返回0

bit?isalnum(char?c)

檢查參數(shù)字符是否為英文字母或數(shù)字字符,是則返回1,否則返回0

bit?iscntrl(char?c)

檢查參數(shù)字符是否為控制字符(值在0x00~0x1f之間或等于0x7f)是則返回1,否則返回0

bit?isdigit(char?c)

檢查參數(shù)字符是否為十進(jìn)制數(shù)字0~9,是則返回1,否則返回0

bit?isgraph(char?c)

檢查參數(shù)字符是否為可打印字符(不包括空格),值域0x21~0x7e,是則返回1,否則返回0

bit?isprint(char?c)

檢查參數(shù)字符是否為可打印字符(包括空格),值域0x21~0x7e,是則返回1,否則返回0

bit?ispunct(char?c)

檢查參數(shù)字符是否為標(biāo)點(diǎn)、空格或格式字符,是則返回1,否則返回0

bit?islower(char?c)

檢查參數(shù)字符是否為小寫英文字母,是則返回1,否則返回0

bit?isupper(char?c)

檢查參數(shù)字符是否為大寫英文字母,是則返回1,否則返回0

bit?isspace(char?c)

檢查參數(shù)字符是否為空格、制表符、回車、換行、垂直制表符和送紙(值為0x09~0x0d,或?yàn)?x20),是則返回1,否則返回0

bit?isxdigit(char?c)

檢查參數(shù)字符是否為十六進(jìn)制數(shù)字字符,是則返回1,否則返回0

char?toint(char?c)

將ASCII字符的0~9、a~f(大小寫無(wú)關(guān))轉(zhuǎn)換為十六進(jìn)制數(shù)字

char?tolower(char?c)

將大寫字符轉(zhuǎn)換成小寫形式,如果字符參數(shù)不在A~Z之間,則該函數(shù)不起作用

char?_tolower(char?c)

將字符參數(shù)c與常數(shù)0x20逐位相或,從而將大寫字符轉(zhuǎn)換成小寫字符

char?toupper(char?c)

將小寫字符轉(zhuǎn)換成大寫形式,如果字符參數(shù)不在a~z之間,則該函數(shù)不起作用

char?_toupper(char?c)

將字符參數(shù)c與常數(shù)0xdf逐位相與,從而將小寫字符轉(zhuǎn)換成大寫字符

char?toascii(char?c)

將任何字符參數(shù)值縮小到有效的ASCII范圍內(nèi),即將c與0x7f相與,去掉第7位以上的位

3. 輸入輸出庫(kù)函數(shù):

輸入輸出庫(kù)函數(shù)的原型聲明在頭文件STDIO.H中定義,通過8051的串行口工作。如果希望支持其他I/O接口,只需要改動(dòng)_getkey()和putchar()函數(shù)。庫(kù)中所有其他的I/O支持函數(shù)都依賴于這兩個(gè)函數(shù)模塊。在使用8051系列單片機(jī)的串行口之前,應(yīng)先對(duì)其進(jìn)行初始化。例如,以2400波特率(12MHz時(shí)鐘頻率)初始化串行口的語(yǔ)句如下:

????????SCON=0x52;????????//SCON置初值

????????TMOD=0x20;????????//TMOD置初值

????????TH1=0xF3;??????????//T1置初值

????????TR1=1;?????????????//啟動(dòng)T1

函數(shù)名及定義

功能說(shuō)明

char?_getkey(void)

等待從8051串口讀入一個(gè)字符并返回讀入的字符,這個(gè)函數(shù)是改變整個(gè)輸入端口機(jī)制時(shí)應(yīng)做修改的唯一一個(gè)函數(shù)

char?getchar(void)

使用_getkey從串口讀入字符,并將讀入的字符馬上傳給putchar函數(shù)輸出,其他與_getkey函數(shù)相同

char?*gets(char?*s,int?n)

該函數(shù)通過getchar從串口讀入一個(gè)長(zhǎng)度為n的字符串并存入由s指向的數(shù)組。輸入時(shí)一旦檢測(cè)到換行符就結(jié)束字符輸入。輸入成功時(shí)返回傳入的參數(shù)指針,失敗時(shí)返回NULL

char?ungetchar(char?c)

將輸入字符回送到輸入緩沖區(qū),因此下次gets或getchar可用該字符。成功時(shí)返回char型值,失敗時(shí)返回EOF,不能處理多個(gè)字符

char?putchar(char?c)

通過8051串行口輸出字符,與函數(shù)_getkey一樣,這是改變整個(gè)輸出機(jī)制所需要修改的唯一一個(gè)函數(shù)

int?printf(const?char?*fmstr[,argument]...)

以第一個(gè)參數(shù)指向字符串制定的格式通過8051串行口輸出數(shù)值和字符串,返回值為實(shí)際輸出的字符數(shù)

int?sprintf(char?*s,const?char?*fmstr[,argument]...)

與printf功能相似,但數(shù)據(jù)是通過一個(gè)指針s送入內(nèi)存緩沖區(qū),并以ASCII碼的形式存儲(chǔ)

int?puts(const?char?*s)

利用putchar函數(shù)將字符串和換行符寫入串行口,錯(cuò)誤時(shí)返回EOF,否則返回0

int?scanf(const?char?*fmstr[,argument]...)

在格式控制串的控制下,利用getchar函數(shù)從串行口讀入數(shù)據(jù),每遇到一個(gè)符合格式控制串fmstr規(guī)定的值,就將它按順序存入由參數(shù)指針argument指向的存儲(chǔ)單元。其中每個(gè)參數(shù)都是指針,函數(shù)返回所發(fā)現(xiàn)并轉(zhuǎn)換的輸入項(xiàng)數(shù),錯(cuò)誤則返回EOF

int?sscanf(char?*s,const?char?*fmstr[,argument]...)

與scanf的輸入方式相似,但字符串的輸入不是通過串行口,而是通過指針s指向的數(shù)據(jù)緩沖區(qū)

void?vprintf(const?char?*s,char?*fmstr,char?*argptr)

將格式化字符串和數(shù)據(jù)值輸出到由指針s指向的內(nèi)存緩沖區(qū)內(nèi)。類似于sprintf,但接受一個(gè)指向變量表的指針,而不是變量表。返回值為實(shí)際寫入到輸出字符串中的字符數(shù)

4. 字符串處理庫(kù)函數(shù):

字符串處理庫(kù)函數(shù)的原型聲明包含在頭文件STRING.H中,字符串函數(shù)通常接收指針串作為輸入值。一個(gè)字符串包括兩個(gè)或多個(gè)字符,字符串的結(jié)尾以空字符表示。在函數(shù)memcmp、memcpy、memchr、memccpy、memset和memmove中,字符串的長(zhǎng)度由調(diào)用者明確規(guī)定,這些函數(shù)可工作在任何模式。

函數(shù)名及定義

功能說(shuō)明

void?*memchr(void?*s1,?char?val,?int?len)

順序搜索字符串s1的前l(fā)en個(gè)字符,以找出字符val,成功時(shí)返回s1中指向val的指針,失敗時(shí)返回NULL

char?memcmp(void?*s1,?void?*s2,?int?len)

逐個(gè)字符比較串s1和s2的前l(fā)en個(gè)字符,成功時(shí)返回0,如果串s1大于或小于s2,則相應(yīng)地返回一個(gè)正數(shù)或一個(gè)負(fù)數(shù)

void?*memcpy(void?*dest,?void?*src?,?int?len)

從src所指向的內(nèi)存中復(fù)制len個(gè)字符到dest中,返回指向dest中最后一個(gè)字符的指針。如果src與dest發(fā)生交迭,則結(jié)果是不可測(cè)的

void?*memccpy(void?*dest,?void?*src,?char?val,?int?len)

復(fù)制src中l(wèi)en個(gè)元素到dest中。如果實(shí)際復(fù)制了len個(gè)字符則返回NULL。復(fù)制過程在復(fù)制完字符val后停止,此時(shí)返回指向dest中下一個(gè)元素的指針

void?*memmove(void?*dest,?void?*src,?int?len)

它的工作方式于memcpy相同,但復(fù)制的區(qū)域可以交迭

void?memset(void?*s,?char?val,?int?len)

用val來(lái)填充指針s中的len個(gè)單元

void?*strcat(char?*s1,?char?*s2)

將串s2復(fù)制到s1的尾部。strcat假定s1所定義的地址區(qū)域足以接受兩個(gè)串。返回指向s1中的第一個(gè)字符的指針

char?*strncat(?char?*s1,?char?*s2,?int?n)

復(fù)制串s2中n個(gè)字符到s1的尾部,如果s2比n短,則只復(fù)制s2(包括串結(jié)束符)

char?strcmp(char?*s1,?char?*s2)

比較串s1和s2,如果相等則返回0;如果s1<s2,則返回一個(gè)負(fù)數(shù);如果s1>s2,則返回一個(gè)正數(shù)

char?strncmp(char?*s1,?char?*s2,?int?n)

比較串s1和s2中的前n個(gè)字符。返回值同上

char?*strcpy(char?*s1,?char?*s2)

將串s2(包括結(jié)束符)復(fù)制到s1中,返回指向s1中第一個(gè)字符的指針

char?*strncpy(char?*s1,?char?*s2,?int?n)

與strcpy相似,但它只復(fù)制n個(gè)字符。如果s2的長(zhǎng)度小于n,則s1串以0補(bǔ)齊到長(zhǎng)度n

int?strlen(char?*s1)

返回串s1中的字符個(gè)數(shù),不包括結(jié)尾的空字符

char?*strstr(const?char?*s1,?char?*s2)

搜索字符串s2中第一次出現(xiàn)在s1中的位置,并返回一個(gè)指向第一次出現(xiàn)位置開始處的指針。如果字符串s1中不包括字符串s2,則返回一個(gè)空指針

char?*strchr(char?*s1,?char?c)

搜索s1串中第一個(gè)出現(xiàn)的字符c,如果成功則返回指向該字符的指針,否則返回NULL。被搜索的字符可以是串結(jié)束符,此時(shí)返回值是指向串結(jié)束符的指針

int?strpos(char?*s1,?char?c)

與strchr類似,但返回的是字符c在串s1中第一次出現(xiàn)的位置值,沒有找到則返回-1。s1串首字符的位置是0

char?*strrchr(char?*s1,?char?c)

搜索s1串中最后一個(gè)出現(xiàn)的字符c,如果成功則返回指向該字符的指針,否則返回NULL。被搜索的字符可以是串結(jié)束符

int?strrpos(char?*s1,?char?c)

與strrchr相似,但返回值是字符c在s1串中最后一次出現(xiàn)的位置值,沒有找到則返回-1

int?strspn(char?*s1,?char?*set)

搜索s1串中第一個(gè)不包括在set串中的字符,返回值是s1中包括在set里的字符個(gè)數(shù)。如果s1中的所有字符都包括在set里面,則返回s1的長(zhǎng)度(不包括結(jié)束符)。如果set是空串,則返回0

int?strcspn(char?*s1,?char?*set)

與strspn相似,但它搜索的是s1串中的第一個(gè)包含在set里的字符。

char?*strpbrk(char?*s1,?char?*set)

與strspn相似,但返回指向搜索到的字符的指針,而不是個(gè)數(shù);如果未找到,則返回NULL

char?*strrpbrk(char?*s1,?char?*set)

與strpbrk相似,但它返回s1中指向找到的set字符集中最后一個(gè)字符的指針

5. 類型轉(zhuǎn)換及內(nèi)存分配庫(kù)函數(shù):

類型轉(zhuǎn)換及內(nèi)存分配庫(kù)函數(shù)的原型聲明包含在頭文件STDLIB.H中,利用該庫(kù)函數(shù)可以完成數(shù)據(jù)類型轉(zhuǎn)換以及存儲(chǔ)器分配操作。

函數(shù)名及定義

功能說(shuō)明

float?atof(char?*s1)

將字符串s1轉(zhuǎn)換成浮點(diǎn)數(shù)值并返回,輸入串中必須包含與浮點(diǎn)值規(guī)定相符的數(shù)。該函數(shù)在遇到第一個(gè)不能構(gòu)成數(shù)字的字符時(shí),停止對(duì)輸入字符串的讀操作

long?atoll(char?*s1)

將字符串s1轉(zhuǎn)換成一個(gè)長(zhǎng)整型數(shù)值并返回,輸入串中必須包含與長(zhǎng)整型數(shù)格式相符的字符串。該函數(shù)在遇到第一個(gè)不能構(gòu)成數(shù)字的字符時(shí),停止對(duì)輸入字符串的讀操作

int?atoi(char?*s1)

將字符串s1轉(zhuǎn)換成整型數(shù)并返回,輸入串中必須包含與整型數(shù)格式相符的字符串。該函數(shù)在遇到第一個(gè)不能構(gòu)成數(shù)字的字符時(shí),停止對(duì)輸入字符串讀操作

void?*calloc(unsigned?int?n,?unsigned?int?size)

為n個(gè)元素的數(shù)組分配內(nèi)存空間,數(shù)組中每個(gè)元素的大小為size,所分配的內(nèi)存區(qū)域用0初始化。返回值為已分配的內(nèi)存單元起始地址,如不成功則返回0

void?free(void?xdata?*p)

釋放指針p所指向的存儲(chǔ)器區(qū)域。如果p為NULL,則該函數(shù)無(wú)效,p必須是以前用calloc、malloc或realloc函數(shù)分配的存儲(chǔ)器區(qū)域。調(diào)用free函數(shù)后,被釋放的存儲(chǔ)器區(qū)域就可以參加以后的分配了

void?init_mempool(void?xdata?*p,?unsigned?int?size)

對(duì)可被函數(shù)calloc、free、malloc或realloc管理的存儲(chǔ)器區(qū)域進(jìn)行初始化,指針p表示存儲(chǔ)區(qū)的首地址,size表示存儲(chǔ)區(qū)的大小

void?*malloc(unsigned?int?size)

在內(nèi)存中分配一個(gè)size字節(jié)大小的存儲(chǔ)器空間,返回值為一個(gè)size大小對(duì)象所分配的內(nèi)存指針。如果返回NULL,則無(wú)足夠的內(nèi)存空間可用

void?*realloc(void?xdata?*p,?unsigned?int?size)

用于調(diào)整先前分配的存儲(chǔ)器區(qū)域大小。參數(shù)p指示該存儲(chǔ)區(qū)域的起始地址,參數(shù)size表示新分配存儲(chǔ)器區(qū)域的大小。原存儲(chǔ)器區(qū)域的內(nèi)容被復(fù)制到新存儲(chǔ)器區(qū)域中。如果新區(qū)域較大,多出的區(qū)域?qū)⒉蛔鞒跏蓟ealloc返回指向新存儲(chǔ)區(qū)的指針,如果返回NULL,則無(wú)足夠大的內(nèi)存可用,這時(shí)將保持原存儲(chǔ)區(qū)不變。

int?rand()

返回一個(gè)0~32767之間的偽隨機(jī)數(shù),對(duì)rand的相繼調(diào)用將產(chǎn)生相同序列的隨機(jī)數(shù)

void?srand(int?n)

用來(lái)將隨機(jī)數(shù)發(fā)生器初始化成一個(gè)已知(或期望)值

unsigned?long?strtod?(const?char?*s,?char?**ptr)

將字符串s轉(zhuǎn)換為一個(gè)浮點(diǎn)型數(shù)據(jù)并返回,字符串前面的空格、/、tab符被忽略

long?strtol?(const?char?*s,?char?**ptr,?unsigned?char?base)

將字符串s轉(zhuǎn)換為一個(gè)long型數(shù)據(jù)并返回,字符串前面的空格、/、tab符被忽略

long?strtoul?(const?char?*s,?char?**ptr,?unsigned?char?base)

將字符串s轉(zhuǎn)換為一個(gè)unsigned?long型數(shù)據(jù)并返回,溢出時(shí)則返回ULONG_MAX。字符串前面的空格、/、tab符被忽略

6. 數(shù)學(xué)計(jì)算庫(kù)函數(shù):

數(shù)學(xué)計(jì)算庫(kù)函數(shù)的原型聲明包含在頭文件MATH.H中。

函數(shù)名及定義

功能說(shuō)明

int?abs(int?val)

char?cabs(char?val)

float?fabs(float?val)

long?labs(long?val)

abs計(jì)算并返回val的絕對(duì)值。如果val為正,則不做改變就返回;如果val為負(fù),則返回相反數(shù)。其余3個(gè)函數(shù)除了變量和返回值類型不同之外,其他功能完全相同

?

float?exp(float?x)

float?log(float?x)

float?log10(float?x)

exp計(jì)算并返回浮點(diǎn)數(shù)x的指數(shù)函數(shù)

log計(jì)算并返回浮點(diǎn)數(shù)x的自然對(duì)數(shù)(以e為底,e=2.718282)

log10計(jì)算并返回浮點(diǎn)數(shù)x以10為底的對(duì)數(shù)

float?sqrt(float?x)

計(jì)算并返回x的正平方根

float?cos(float?x)

float?sin(float?x)

float?tan(float?x)

cos計(jì)算并返回x的余弦值

sin計(jì)算并返回x的正弦值

tan計(jì)算并返回x的正切值

變量范圍-π/2~+π/2

值在-65535~+65535之間

否則產(chǎn)生NaN錯(cuò)誤

float?acos(float?x)

float?asin(float?x)

float?atan(float?x)

float?atan2(float?y,?float?x)

acos計(jì)算并返回x的反余弦值

asin計(jì)算并返回x的反正弦值

atan計(jì)算并返回x的反正切值,值域?yàn)?π/2~+π/2

atan2計(jì)算并返回y/x的反正切值,值域?yàn)?π~+π

float?cosh(float?x)

float?sinh(float?x)

float?tanh(float?x)

cosh計(jì)算并返回x的雙曲余弦值

sinh計(jì)算并返回x的雙曲正弦值

tanh計(jì)算并返回x的雙曲正切值

float?ceil(float?x)

計(jì)算并返回一個(gè)不小于x的最小整數(shù)(作為浮點(diǎn)數(shù))

float?floor(float?x)

計(jì)算并返回一個(gè)不大于x的最小整數(shù)(作為浮點(diǎn)數(shù))

float?modf(float?x,?float?*ip)

將浮點(diǎn)數(shù)x分成整數(shù)和小數(shù)部分,兩者都含有與x相同的符號(hào),整數(shù)部分放入*ip,小數(shù)部分作為返回值

float?pow(float?x,?float?y)

計(jì)算并返回xy值,如果x不等于0而y=0,則返回1.當(dāng)x=0且y<=0或當(dāng)x<0且y不是整數(shù)時(shí),則返回NaN

轉(zhuǎn)載于:https://www.cnblogs.com/jasonleeee/p/6932819.html

總結(jié)

以上是生活随笔為你收集整理的Keil C51的库函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。