搜索
bottom↓
回复: 25

我做的DS18B20测温源程序

[复制链接]

出0入0汤圆

发表于 2007-11-13 14:13:43 | 显示全部楼层 |阅读模式
这是我在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);
  }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
头像被屏蔽

出0入0汤圆

发表于 2007-11-13 14:23:47 | 显示全部楼层
使用sprintf编译后很占程序空间?
头像被屏蔽

出0入0汤圆

发表于 2007-11-13 14:26:49 | 显示全部楼层
能不能同时提供电路图?谢谢。先置COOL!

出0入0汤圆

 楼主| 发表于 2007-11-14 21:31:08 | 显示全部楼层
这是我做的第一个真正实用上的程序
谢谢阿莫站长鼓励!

我用的周工的easyarm2200的板子,LPC2210的芯片,ucos系统 使用P0.25作为温度采集管脚, DS18B20和上拉电阻使用同一个+5V电源
LCD同时显示时间 和CPU使用率 , CPU使用率一直在16%以上  还没查出原因 不知道是不是sprintf的问题

电路图如下

出0入0汤圆

 楼主| 发表于 2007-11-14 21:40:38 | 显示全部楼层
另外 我有一些光盘配套资料 比如 easyarm2200的资料和DXP应用实例
不知道如何上传,和大家共享
呵呵

出0入0汤圆

发表于 2009-4-24 16:29:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-4-24 20:51:04 | 显示全部楼层
这电路图简单

莫站居然猜不到??

出0入0汤圆

发表于 2009-4-24 22:13:19 | 显示全部楼层
使用sprintf编译后很占程序空间?

出0入0汤圆

发表于 2009-4-25 10:14:58 | 显示全部楼层
莫哥咋个想法?

出0入0汤圆

发表于 2009-6-20 16:25:18 | 显示全部楼层
我移植后发现不好使。。。?、//

出0入0汤圆

发表于 2009-6-27 22:55:03 | 显示全部楼层
软件延时那么多CPU占用率当然高了,建议你优化一下,能用OSTimeDly的地方就不要用软件延时.


sprintf打浮点数更占资源。

出0入0汤圆

发表于 2009-11-28 10:52:35 | 显示全部楼层
延时不对,程序好像不能用

出0入0汤圆

发表于 2009-12-15 20:32:24 | 显示全部楼层
mark一下,有空我也试试

出0入112汤圆

发表于 2010-3-7 16:14:57 | 显示全部楼层
请问你的测量结果准吗?
我的结果比实际高出约2度,不知为何?

出0入0汤圆

发表于 2010-3-8 10:02:36 | 显示全部楼层
可以在S3C44B0上运行

出0入0汤圆

发表于 2010-11-16 22:10:44 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-19 09:54:35 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-7 13:12:55 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-7 13:41:45 | 显示全部楼层
效率太低了。

出0入112汤圆

发表于 2010-12-12 09:21:27 | 显示全部楼层
回复【楼主位】haunt
-----------------------------------------------------------------------

请问你的测量结果准吗?
我的结果比实际高出约2度,不知为何?

出0入0汤圆

发表于 2010-12-12 10:38:09 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-14 22:48:22 | 显示全部楼层
Mark

出0入0汤圆

发表于 2011-1-19 22:20:16 | 显示全部楼层
mark

出0入0汤圆

发表于 2014-8-16 07:58:15 | 显示全部楼层
谢谢分享!!!!!!!!!!!!!

出0入0汤圆

发表于 2014-8-18 12:13:26 | 显示全部楼层
瞧瞧吧
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 23:48

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表