专栏中心

EEPW首页 > 专栏 > 【转】LPC2210上用DS18B20的测温源程序

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

发布人:gsfei2009 时间:2009-05-30 来源:工程师 发布文章
       

这是我在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);
  }
}

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

2003年全国大学生电子设计竞赛一等奖——液体点滴速度监控装置

NCL30000单段式功率因数校正LED驱动器原理及TRIAC调光LED驱动器设计方案(上)

视频 2010-06-12

1N系列稳压二极管参数

瑞萨电子推出用于AI数据中心、工业及电源系统的全新GaN FET

基于SMD封装的高压CoolMOS

视频 2010-06-12

用带平均电流限幅功能的半桥式电路拓朴结构提高砖电源模块的功率密度(下)

视频 2010-06-12

采用ADP1043A的数字电源设计实例

视频 2010-06-12

1-wire单总线的基本原理

SBC-2410X中文开发手册

AI利好之外 东南亚着眼于全球芯片竞赛的领导地位

据报道,Meta招募了苹果的 AI 模型负责人

智能计算 2025-07-08

与中国不可分割的联系:为什么战略脱离不是一种选择

国际视野 2025-07-08

基于onsemi NCP51752隔离式SiC MOSFET闸极驱动器评估板

基于STEVAL-ROBKIT1的机器人应用方案

基于STM32N6和VD66GY的机器视觉方案

2.4GHz无线收发芯片nRF24E1的原理及应用

用带平均电流限幅功能的半桥式电路拓朴结构提高砖电源模块的功率密度(上)

视频 2010-06-12

中国先进制造业的并购热潮受到技术趋势的推动

据报道,华为 Mate 80 将搭载麒麟 9030 芯片,性能提升 20%,传闻将延续 7nm 工艺

三星第二季度利润据报道降至六年来最低;下半年复苏面临关税挑战

EDA/PCB 2025-07-08
更多 培训课堂
更多 焦点
更多 视频

技术专区