广告

原创 【转】LPC2210上用DS18B20的测温源程序

2009-5-29 21:47 1590 1 1 分类: MCU/ 嵌入式
这是我在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);
  }
}
广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
winddy_zeng_498304501 2009-08-24 23:14
松鼠会:无线供电能够实现吗?
松鼠会:无线供电能够实现吗?人类追逐自由的本能,在现实面前屡屡受挫。自从广泛使用电能以来,许多人都为了那些电器拖着的长长电线而绞尽脑汁,但无线供电却一直只能作为一个在前方远远招手的梦想。现在,我们也许...
winddy_zeng_498304501 2009-06-22 18:20
电抗器的控制种类
...
winddy_zeng_498304501 2009-06-07 12:13
交流蜂鸣器音乐播放设计
1. 蜂鸣器简介    蜂鸣器是一种一体化结构的电子讯响器,采用直流或者交流供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中的发声器件。蜂鸣器在电路中...
winddy_zeng_498304501 2009-06-02 22:24
用单片机驱动蜂鸣器唱歌
蜂鸣器是一种一体化结构的电子讯响器,主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型,他广泛应用于计算机、打印机、复印机、报警器、电话机等电子产品中作发声器件。单片机上面使用的蜂鸣器一般都是无源电磁式的蜂鸣...
winddy_zeng_498304501 2009-05-30 22:19
FIASH ROM RAM的详细说明
由于ROM不易更改的特性让更新资料变得相当麻烦,因此就有了Flash Memory的发展 ,Flash Memory具有ROM不需电力维持资料的好处,又可以在需要的时候任意更改资料 ,不过单价也比普通...
我要评论
0
1
广告