PIC单片机的C语言应用下的函数库.docx
- 文档编号:12652055
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:64
- 大小:32.10KB
PIC单片机的C语言应用下的函数库.docx
《PIC单片机的C语言应用下的函数库.docx》由会员分享,可在线阅读,更多相关《PIC单片机的C语言应用下的函数库.docx(64页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PIC 单片机 语言 应用 函数库