⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1820.c

📁 这是我在LPC2210上用DS18B20的测温源程序 一直在测量我家的室外温度 一切正常~
💻 C
字号:
这是我在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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -