"); //-->
这是我在LPC2210上用DS18B20的测温源程序
一直在测量我家的室外温度 一切正常~
#include "config.h"
uint8 count;
fp32 tmax,tmin;
/************延时程序****************/
void DelayuS(uint32 dly) //延时约9uS
{
uint32 i;
for(;dly>0;dly--)
i++;// for(i=0;i<1;i++);
}
/*********DS1820初始化****************/
int Init_DS1820(void)
{
uint8 i;
IO0DIR=IO0DIR|0x02000000; //设置P0.25为输出
IO0CLR=1<<25; //P0.25清零
DelayuS(60); //延时480~960uS
IO0DIR=IO0DIR&0xFDFFFFFF; //设置P0.25为输入
DelayuS(2); //延时16uS
i=(IO0PIN&0x02000000)>>25;
DelayuS(15); //延时60~240uS
return(i);
}
/********向DS1820写数据************/
void Wr_DS1820(uint8 dat)
{
uint8 i;
for(i=8;i>0;i--)
{
IO0DIR=IO0DIR|0x02000000; //设置P0.25为输出
IO0CLR=1<<25; //P0.25清零
IO0PIN=((dat&0x01)<<25)|0xFDFFFFFF; //向P0.25写入位数据
DelayuS(2); // 延时15~60uS
IO0SET=1<<25; //P0.25置位
dat>>=1;
}
}
/********从DS1820中读取数据***************/
int Rd_DS1820(void)
{
uint8 i;
uint8 dat;
for(i=8;i>0;i--)
{
IO0DIR=IO0DIR|0x02000000; //设置P0.25为输出
IO0CLR=1<<25; //P0.25清零
dat=dat>>1;
IO0DIR=IO0DIR&0xFDFFFFFF; //设置P0.25为输入
if(1==(IO0PIN>>25)&0x00000001)
dat|=0x80;
i=i; //延时
}
return(dat);
}
/************温度测量任务*****************/
void TmptMeas(void *pdata)
{
INT8U dat1,dat2;
INT16S t;
FP32 temp;
char str[8];
pdata=pdata;
tmax=12;
tmin=12;
for(;;)
{
if((Init_DS1820())==0)
{
Wr_DS1820(0xCC);
Wr_DS1820(0x44);
OSTimeDlyHMSM(0,0,1,0);
Init_DS1820();
Wr_DS1820(0xCC);
Wr_DS1820(0xBE);
dat1=Rd_DS1820();
dat2=Rd_DS1820();
t=dat2;
t<<=8;
t=t|dat1;
temp=t*0.0625; //计算温度 并显示
sprintf(str,"%f",temp);
LCD_WS(2,12,(INT8U*)str);
if((temp>-40)&&(temp<120))
{
if(temp>tmax) //记录最高温度
tmax=temp;
if(temp<tmin) //记录最低温度
tmin=temp;
sprintf(str,"%f",tmax);
LCD_WS(0,13,(INT8U*)str);
sprintf(str,"%f",tmin);
LCD_WS(15,13,(INT8U*)str);
}
else
{
count++;
sprintf(str,"%d",count);
LCD_WS(20,12,(INT8U*)str);
}
}
OSTimeDlyHMSM(0,0,1,0);
}
}
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。