PIC单片机的C语言应用下的函数库.docx
- 文档编号:7004311
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:52
- 大小:31.85KB
PIC单片机的C语言应用下的函数库.docx
《PIC单片机的C语言应用下的函数库.docx》由会员分享,可在线阅读,更多相关《PIC单片机的C语言应用下的函数库.docx(52页珍藏版)》请在冰点文库上搜索。
PIC单片机的C语言应用下的函数库
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,1]区间内的反余弦值*/
void
main(void)
{
floati,a;
for(i=-1.0,i<1.0;i+=0.1){
a=acos(i)*180.0/3.141592;
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.参阅
2
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=-1.0;i<1.0;i+=0.1){
a=asin(i)*180.0/3.141592;
printf("asin(%f)=%fdegrees\n",i,a);
}
}
4.参阅
sin(),cos(),tan(),acos(),atan(),atan2()5.返回值
本函数返回一个用弧度表示的角度值,其区间为[-π/2,π/2]。
如果函数参数的
3
值超出区间[-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(1.5));
}
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.5,1));
}
4.参阅
sin(),cos(),tan(),asin(),acos(),atan()5.返回值
返回y/x的反正切值(用弧度表示),区间为[-π,π]。
如果y和x均为0,将出现定
4
义域错误,并返回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.返回值
本函数返回一个双精度浮点数。
如果字符串中没有发现任何数字,则返回
0.0。
8ATOI函数1.提要
#include
intatoi(constchar*s)2.描述
atoi()函数扫描传递过来的字符串,跳过开头的空格并读取其符号;然后将
一个十进制数的ASCII表达式转换成整数。
3.例程
#include
#include
void
main(void)
{
5
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.描述
6
本函数对函数参数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
defineC3.141592/180.0#
void
main(void)
{
doublei;
for(i=0;i<=180.0;i+=10)
printf("sin(%3.0f)=%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)
7
2.描述
这些函数都是cos(),sin()和tan()的双曲函数。
3.例程
#include
#include
void
main(void)
{
printf("%f\n",cosh(1.5));
printf("%f\n",sinh(1.5));
printf("%f\n",tanh(1.5));
}
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
8
14DI、EI函数
1.提要
#include
voidei(void)
voiddi(void)
2.描述
ei()和di()函数分别实现全局中断使能和中断屏蔽,其定义在pic.h头文件中。
它们将被扩展为一条内嵌的汇编指令,分别对中断使能位进行置位和清零。
以下例程将说明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;
9
x=div(12345,66);
printf("quotient=%d,remainder=%d\n",x.quot,x.rem);
}
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.提要
10
#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]={1.1,3.5,2.7};
x=2.2;
y=eval_poly(x,d,2);
printf("Thepolynomialevaluatedat%fis%f\n",x,y);
}
4.返回值
本函数返回一个双精度数,该数是自变量x对应的多项式值。
18EXP函数1.提要
#include
doubleexp(doublef)
2.描述
fexp()函数返回参数的指数函数值,即e(f为函数参数)。
3.例程
#include
#include
void
main(void)
{
doublef;
for(f=0.0;f<=5;f+=1.0)
printf("eto%1.0f=%f\n",f,exp(f));
}
4.参阅
log(),log10(),pow()
11
19FABS函数1.提要
#include
doublefabs(doublef)
2.描述
本函数返回双精度函数参数的绝对值。
3.例程
#include
#include
void
main(void)
{
printf("%f%f\n",fabs(1.5),fabs(-1.5));
}
4.参阅
abs()
20FLOOR函数1.提要
#include
doublefloor(doublef)
2.描述
本函数对函数参数取整,取整后的返回值不大于函数参数f。
3.例程
#include
#include
void
main(void)
{
printf("%f\n",floor(1.5));
printf("%f\n",floor(-1.5));
}
21FREXP函数1.提要
#include
doublefrexp(doublef,int*p)2.描述
frexp()函数将一个浮点数分解成规格化小数和2的整数次幂两部分,整数
幂部分存于指针p所指的int单元中。
本函数的返回值x或在区间(0.5,1.0)内,
p或为0;而且有f=x×2。
如果f为0,则分解出来的两部分均为0。
12
3.例程
#include
#include
void
main(void)
{
doublef;
inti;
f=frexp(23456.34,&i);
printf("23456.34=%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.描述
13
本函数把指针t所指的时间分解,并且存于结构体中,精确度为秒。
其中,t所
指的时间必须自1970年1月1日0时0分0秒起。
本函数所用的结构体被定义
在time.h文件中,可参照本节“数据类型”部分。
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;
intt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PIC 单片机 语言 应用 函数库