ds1820.c

来自「这是我在LPC2210上用DS18B20的测温源程序 一直在测量我家的室外温」· C语言 代码 · 共 127 行

C
127
字号
这是我在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); 
  } 
} 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?