PIC单片机的C语言应用下的函数库.docx

上传人:b****2 文档编号:12652055 上传时间:2023-04-21 格式:DOCX 页数:64 大小:32.10KB
下载 相关 举报
PIC单片机的C语言应用下的函数库.docx_第1页
第1页 / 共64页
PIC单片机的C语言应用下的函数库.docx_第2页
第2页 / 共64页
PIC单片机的C语言应用下的函数库.docx_第3页
第3页 / 共64页
PIC单片机的C语言应用下的函数库.docx_第4页
第4页 / 共64页
PIC单片机的C语言应用下的函数库.docx_第5页
第5页 / 共64页
点击查看更多>>
下载资源
资源描述

PIC单片机的C语言应用下的函数库.docx

《PIC单片机的C语言应用下的函数库.docx》由会员分享,可在线阅读,更多相关《PIC单片机的C语言应用下的函数库.docx(64页珍藏版)》请在冰豆网上搜索。

PIC单片机的C语言应用下的函数库.docx

PIC单片机的C语言应用下的函数库

PICC库函数

本章将详细列出PICC编译器的库函数。

每个函数均从函数名开始,然后按照以下几个标题给出详细解释。

提要:

函数的C语言定义以及定义函数的头文件。

描述:

对函数及其目的进行叙述性描述。

例程:

给出一个能说明该函数的应用例子。

数据类型:

列出函数中使用的一些特殊的数据类型(如结构体等)的C语言定义。

这些数据类型的定义包含在提要标题下列出的头文件中。

参阅:

给出相关联的函数。

返回值:

如果函数有返回值,则在本标题下将给出返回值的类型和性质,同时还包括错误返回的信息。

1ABS函数

1.提要

#include<>

intabs(intj)

2.描述

abs()函数返回变量j的绝对值。

3.例程

#include<>

#include<>

void

main(void)

{

inta=-5;

printf("Theabsolutevalueof%dis%d\n",a,abs(a));

}

4.返回值

j的绝对值。

2ACOS函数

1.提要

#include<>

doubleacos(doublef)

2.描述

acos()函数是cos()的反函数。

函数参数在[-1,1]区间内,返回值是一个用弧度表示的角度,而且该返回值的余弦值等于函数参数。

3.例程

#include<>

#include<>

/*以度为单位,打印[-1,1]区间内的反余弦值*/

void

main(void)

{

floati,a;

for(i=,i<;i+={

a=acos(i)*;

printf("acos(%f)=%fdegrees\n",i,a);

}

}

4.参阅

sin(),cos(),tan(),asin(),atan(),atan2()

5.返回值

返回值是一个用弧度表示的角度,区间是[0,π]。

如果函数参数超出区间[-1,1],则返回值将为0。

3ASCTIME函数

1.提要

#include<>

char*asctime(structtm*t)

2.描述

asctime()函数通过指针t从上structtm结构体中获得时间,返回描述当前日期和时间的26个字符串,其格式如下:

SunSep1601:

03:

521973\n\0

值得注意的是,在字符串的末尾有换行符。

字符串中的每个字长是固定的。

以下例程得到当前时间,通过localtime()函数将其转换成一个structtm指针,最后转换成ASCII码并打印出来。

其中,time()函数需要用户提供(详情请参阅time()函数)。

3.例程

#include<>

#include<>

void

main(void)

{

time_tclock;

structtm*tp;

time(&clock);

tp=localtime(&clock);

printf("%s",asctime(tp));

}

4.参阅

ctime(),gmtime(),localtime(),time()

5.返回值

指向字符串的指针。

注意:

由于编译器不提供time()例行程序,故在本例程中它需要由用户提供。

详情请参照time()函数。

6.数据类型

structtm{

inttm_sec;

inttm_min;

inttm_hour;

inttm_mday;

inttm_mon;

inttm_year;

inttm_wday;

inttm_yday;

inttm_isdst;

};

4ASIN函数

1.提要

#include<>

doubleasin(doublef)

2.描述

asin()函数是sin()的反函数。

它的函数参数在[-1,1]区间内,返回一个用弧度表示的角度值,而且这个返回值的正弦等于函数参数。

3.例程

#include<>

#include<>

void

main(void)

{

floati,a;

for(i=;i<;i+={

a=asin(i)*;

printf("asin(%f)=%fdegrees\n",i,a);

}

}

4.参阅

sin(),cos(),tan(),acos(),atan(),atan2()

5.返回值

本函数返回一个用弧度表示的角度值,其区间为[-π/2,π/2]。

如果函数参数的值超出区间[-1,1],则函数返回值将为0。

5ATAN函数

1.提要

#include<>

doubleatan(doublex)

2.描述

函数返回参数的反正切值。

也就是说,本函数将返回一个在区间[-π/2,π/2]的角度e,而且有tan(e)=x(x为函数参数)。

3.例程

#include<>

#include<>

void

main(void)

{

printf("%f\n",atan);

}

4.参阅

sin(),cos(),tan(),asin(),acos(),atan2()

5.返回值

返回函数参数的反正切值。

6ATAN2函数

1.提要

#include<>

doubleatan2(doubley,doublex)

2.描述

本函数返回y/x的反正切值,并由两个函数参数的符号来决定返回值的象限。

3.例程

#include<>

#include<>

void

main(void)

{

printf("%f\n",atan2,1));

}

4.参阅

sin(),cos(),tan(),asin(),acos(),atan()

5.返回值

返回y/x的反正切值(用弧度表示),区间为[-π,π]。

如果y和x均为0,将出现定义域错误,并返回0。

7ATOF函数

1.提要

#include<>

doubleatof(constchar*s)

2.描述

atof()函数将扫描由函数参数传递过来的字符串,并跳过字符串开头的空格。

然后将一个数的ASCII表达式转换成双精度数。

这个数可以用十进制数、浮点数或者科学记数法表示。

3.例程

#include<>

#include<>

void

main(void)

{

charbuf[80];

doublei;

gets(buf);

i=atof(buf);

printf("Read%s:

convertedto%f\n",buf,i);

}

4.参阅

atoi(),atol()

5.返回值

本函数返回一个双精度浮点数。

如果字符串中没有发现任何数字,则返回。

8ATOI函数

1.提要

#include<>

intatoi(constchar*s)

2.描述

atoi()函数扫描传递过来的字符串,跳过开头的空格并读取其符号;然后将一个十进制数的ASCII表达式转换成整数。

3.例程

#include<>

#include<>

void

main(void)

{

charbuf[80];

inti;

gets(buf);

i=atoi(buf);

printf("Read%s:

convertedto%d\n",buf,i);

}

4.参阅

xtoi(),atof(),atol()

5.返回值

返回一个有符号的整数。

如果在字符串中没有发现任何数字,则返回0。

9ATOL函数

1.提要

#include<>

longatol(constchar*s)

2.描述

atol()函数扫描传递过来的字符串,并跳过字符串开头的空格;然后将十进制数的ASCII

表达式转换成长整型。

3.例程

#include<>

#include<>

void

main(void)

{

charbuf[80];

longi;

gets(buf);

i=atol(buf);

printf("Read%s:

convertedto%ld\n",buf,i);

}

4.参阅

atoi(),atof()

5.返回值

返回一个长整型数。

如果字符串中没有发现任何数字,返回值为0。

10CEIL函数

1.提要

#include<>

doubleceil(doublef)

2.描述

本函数对函数参数f取整,取整后的返回值为大于或等于f的最小整数。

3.例程

#include<>

#include<>

void

main(void)

{

doublej;

scanf("%lf",&j);

printf("Theceilingof%lfis%lf\n",j,ceil(j));

}

11COS函数

1.提要

#include<>

doublecos(doublef)

2.描述

本函数将计算函数参数的余弦值。

其中,函数参数用弧度表示。

余弦值通过多项式级数近似值展开式算得。

3.例程

#include<>

#include<>

#defineC

void

main(void)

{

doublei;

for(i=0;i<=;i+=10)

printf("sin(%=%f,cos=%f\n",i,sin(i*C),cos(i*C));

}

4.参阅

sin(),tan(),asin(),acos(),atan(),atan2()

5.返回值

返回一个双精度数,区间为[-1,1]。

12COSH、SINH、TANH函数

1.提要

#include<>

doublecosh(doublef)

doublesinh(doublef)

doubletanh(doublef)

2.描述

这些函数都是cos(),sin()和tan()的双曲函数。

3.例程

#include<>

#include<>

void

main(void)

{

printf("%f\n",cosh);

printf("%f\n",sinh);

printf("%f\n",tanh);

}

4.返回值

cosh()函数返回双曲余弦值,sinh()函数返回双曲正弦值,tanh()函数返回双曲正切值。

13CTIME函数

1.提要

#include<>

char*ctime(time_t*t)

2.描述

ctime()函数将函数参数所指的时间转换成字符串,其结构与asctime()函数所描述的相同,并且精确到秒。

以下例程将打印出当前的时间和日期。

3.例程

#include<>

#include<>

void

main(void)

{

time_tclock;

time(&clock);

printf("%s",ctime(&clock));

}

4.参阅

gmtime(),localtime(),asctime(),time()

5.返回值

本函数返回一个指向该字符串的指针。

注意:

由于编译器不会提供time()程序,故它需要由用户给定。

详情请参阅time()函数。

6.数据类型

typedeflongtime_t

14DI、EI函数

1.提要

#include<>

voidei(void)

voiddi(void)

2.描述

ei()和di()函数分别实现全局中断使能和中断屏蔽,其定义在头文件中。

它们将被扩展为一条内嵌的汇编指令,分别对中断使能位进行置位和清零。

以下例程将说明ei()函数和di()函数在访问一个长整型变量时的应用。

由于中断服务程序将修改该变量,所以如果访问该变量不按照本例程的结构编程,一旦在访问变量值的连续字期间出现中断,则函数getticks()将返回错误的值。

3.例程

#include<>

longcount;

voidinterrupttick(void)

{

count++;

}

longgetticks(void)

{

longval;/*在访问count变量前禁止中断,保证访问的连续性*/

di();

val=count;

ei();

returnval;

}

15DIV函数

1.提要

#include<>

div_tdiv(intnumer,intdemon)

2.描述

div()函数实现分子除以分母,得到商和余数。

3.例程

#include<>

#include<>

void

main(void)

{

div_tx;

x=div(12345,66);

printf("quotient=%d,remainder=%d\n",,;

}

4.返回值

返回一个包括商和余数的结构体div_t。

.

5.数据类型

typedefstruct

{

intquot;

intrem;

}div_t;

16EEPROM_READ、EEPROM_WRITE函数

1.提要

#include<>

unsignedchareeprom_read(unsignedcharaddr);

voideeprom_write(unsignedcharaddr,unsignedcharvalue);

2.描述

这些函数允许访问片内EEPROM(如果片内有EEPROM)。

EEPROM不是可直接寻址的寄存器空间,当需要访问EEPROM时,就需要将一些特定的字节序列加载到EEPROM控制寄存器中。

写EEPROM是一个缓慢的过程。

故eeprom_write()函数在写入下一个数据前,会通过查询恰当的寄存器来确保前一个数据已经写入完毕。

另外,读EEPROM可以在一个指令周期内完成,所以没有必要查询读操作是否完成。

3.例程

#include<>

void

main(void)

{

unsignedchardata;

unsignedcharaddress;

address=0x10;

data=eeprom_read(address);

}

注意:

如果调用eeprom_write()函数后需即刻调用eeprom_read()函数,则必须查询EEPROM寄存器以确保写入完毕。

全局中断使能位(GIE)在eeprom_write()程序中重新恢复(写EEPROM时需要关闭总中断)。

而且,本函数不会清EEIF标志位。

17EVAL_POLY函数

1.提要

#include<>

doubleeval_poly(doublex,constdouble*d,intn)

2.描述

eval_poly()函数将求解一个多项式的值。

这个多项式的系数分别包含在x和数组d中,例如:

y=x*x*d2+x*d1+d0

该多项式的阶数由参数n传递过来。

3.例程

#include<>

#include<>

void

main(void)

{

doublex,y;

doubled[3]={,,};

x=;

y=eval_poly(x,d,2);

printf("Thepolynomialevaluatedat%fis%f\n",x,y);

}

4.返回值

本函数返回一个双精度数,该数是自变量x对应的多项式值。

18EXP函数

1.提要

#include<>

doubleexp(doublef)

2.描述

exp()函数返回参数的指数函数值,即ef(f为函数参数)。

3.例程

#include<>

#include<>

void

main(void)

{

doublef;

for(f=;f<=5;f+=

printf("eto%=%f\n",f,exp(f));

}

4.参阅

log(),log10(),pow()

19FABS函数

1.提要

#include<>

doublefabs(doublef)

2.描述

本函数返回双精度函数参数的绝对值。

3.例程

#include<>

#include<>

void

main(void)

{

printf("%f%f\n",fabs,fabs);

}

4.参阅

abs()

20FLOOR函数

1.提要

#include<>

doublefloor(doublef)

2.描述

本函数对函数参数取整,取整后的返回值不大于函数参数f。

3.例程

#include<>

#include<>

void

main(void)

{

printf("%f\n",floor());

printf("%f\n",floor();

}

21FREXP函数

1.提要

#include<>

doublefrexp(doublef,int*p)

2.描述

frexp()函数将一个浮点数分解成规格化小数和2的整数次幂两部分,整数幂部分存于指针p所指的int单元中。

本函数的返回值x或在区间(,)内,或为0;而且有f=x×2p。

如果f为0,则分解出来的两部分均为0。

3.例程

#include<>

#include<>

void

main(void)

{

doublef;

inti;

f=frexp,&i);

printf("=%f*2^%d\n",f,i);

}

4.参阅

ldexp()

22GET_CAL_DATA函数

1.提要

#include<>

doubleget_cal_data(constunsignedchar*code_ptr)

2.描述

本函数从PIC14000标定空间返回一个32位的浮点标定数据。

只有利用这个函数才能访问KREF、KBG、BHTHERM和KTC单元(32位浮点参数)。

由于FOSC和TWDT均是一个字节长度,故可以直接访问它们。

3.例程

#include<>

void

main(void)

{

doublex;

unsignedchary;

x=get_cal_data(KREF);/*获得参考斜率(slopereferenceratio)*/

y=TWDT;/*获得WDT溢出时间*/

}

4.返回值

返回定标参数值。

注意:

本函数仅用于PIC14000

23GMTIME函数

1.提要

#include<>

structtm*gmtime(time_t*t)

2.描述

本函数把指针t所指的时间分解,并且存于结构体中,精确度为秒。

其中,t所指的时间必须自1970年1月1日0时0分0秒起。

本函数所用的结构体被定义在文件中,可参照本节“数据类型”部分。

3.例程

#include<>

#include<>

void

main(void)

{

time_tclock;

structtm*tp;

time(&clock);

tp=gmtime(&clock);

printf("It’s%dinLondon\n",tp->tm_year+1900);

}

4.参阅

ctime(),asctime(),time(),localtime()

5.返回值

返回tm类型的结构体。

注意:

由于编译器不会提供time()程序,故它需要由用户给定。

详情请参阅time()函数。

6.数据类型

typedeflongtime_t;

structtm{

inttm_sec;

inttm_min;

inttm_hour;

inttm_mday;

inttm_mon;

inttm_year;

inttm_wday;

inttm_yday;

inttm_isdst;

};

24ISALNUM,ISALPHA,ISDIGIT,ISLOWER等函数

1.提要

#include<>

intisalnum(charc)

intisalpha(charc)

intisascii(charc)

intiscntrl(charc)

intisdigit(charc)

intislower(charc)

intisprint(charc)

intisgraph(charc)

intispunct(charc)

intisspace(charc)

intisupper(charc)

intisxdigit(charc)

2.描述

以上函数都被定义在文件中。

它们将测试给定的字符,看该字符是否为已知的几组字符中的成员。

isalnum(c)c在0~9、a~z或者A~Z范围内;

isalpha(c)c在A~Z或a~z范围内;

isascii(c)c为7位ASCII字符;

iscntrl(c)c为控制字符;

isdigit(c)c为十进制阿拉伯数字;

islower(c)c在a~z范围内;

isprint(c)c为打印字符;

isgraph(c)c为非空格可打印字符;

ispunct(c)c不是字母数字混合的;

isspace(c)c是空格键、TAB键或换行符;

isupper(c)c在A~Z范围内;

isxdigit(c)c在0~9、a~f或A~F范围内。

3.例程

#include<>

#include<>

void

main(void)

{

charbuf[80];

inti;

gets(buf);

i=0;

while(isalnum(buf[i]))

i++;

buf[i]=0;

printf("’%s’istheword\n",buf);

}

4.参阅

toupper(),tolower(),toascii()

25KBHIT函数

1.提要

#incl

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 书信模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1