找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1657|回复: 0
打印 上一主题 下一主题
收起左侧

DS18B20读写程序

[复制链接]
跳转到指定楼层
楼主
ID:305967 发表于 2018-4-11 16:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//----------------------------------------------------------
  // 模块名称:DS18B20.h
  // 模块功能:DS18B20 读写操作
  //----------------------------------------------------------
  sbit DS = P1^0;
  //----------------------------------------------------------
  // 函数名称:void DelayTmp(unsigned int count)
  // 函数功能:延时
  //----------------------------------------------------------
  void DelayTmp(unsigned int count)
  {
  unsigned int i;
  while(count)
  {
  i=200;while(i》0)i--;
  count--;
  }
  }
  //----------------------------------------------------------
  // 函数名称:void DsReset(void)
  // 函数功能:复位
  //----------------------------------------------------------
  void DsReset(void)
  {
  unsigned int i;
  DS=0;
  i=103; while(i》0)i--;
  DS=1;
  i=4;while(i》0)i--;
  }
  //----------------------------------------------------------
  // 函数名称:bit TmpReadBit(void)
  // 函数功能:读取一位
  //----------------------------------------------------------
  bit TmpReadBit(void)
  {
  unsigned int i;
  bit dat;
  DS=0;i++;
  DS=1;i++;i++;
  dat=DS;
  i=8;while(i》0)i--;
  return (dat);
  }
  //----------------------------------------------------------
  // 函数名称:unsigned char TmpRead(void)
  // 函数功能:读取一字
  //----------------------------------------------------------
  unsigned char TmpRead(void)
  {
  unsigned char i,j,dat;
  dat=0;
  for(i=1;i《=8;i++)
  {j=TmpReadBit();
  dat=(j《《7)|(dat》》1); }
  return(dat);
  }
  //----------------------------------------------------------
  // 函数名称:void TmpWriteByte(unsigned char dat)
  // 函数功能:写入一字节
  //----------------------------------------------------------
  void TmpWriteByte(unsigned char dat)
  {
  unsigned int i;
  unsigned char j;
  bit testb;
  for(j=1;j《=8;j++)
  {
  testb=dat&0x01
  dat=dat》》1;
  if(testb) //write 1
  {
  DS=0;
  i++;i++;
  DS=1;
  i=8;while(i》0)i--;
  }
  else
  {
  DS=0; //write 0
  i=8;while(i》0)i--;
  DS=1;
  i++;i++;
  }
  }
  }
  //----------------------------------------------------------
  // 函数名称:void TmpChange(void)
  // 函数功能:温度转换
  //----------------------------------------------------------
  void TmpChange(void)
  {
  DsReset();
  DelayTmp(1);
  TmpWriteByte(0xcc);
  TmpWriteByte(0x44);
  }
  //----------------------------------------------------------
  // 函数名称:unsigned int Tmp()
  // 函数功能:获取温度
  //----------------------------------------------------------
  unsigned int Tmp()
  {
  float tt;
  unsigned char a,b;
  unsigned int temp;
  DsReset();
  DelayTmp(1);
  TmpWriteByte(0xcc);
  TmpWriteByte(0xbe);
  a=TmpRead();
  b=TmpRead();
  temp=b;
  temp《《=8;
  temp=temp|a;
  tt=temp*0.0625;
  temp=tt*10+0.5;
  return temp;
  }
  //----------------------------------------------------------
  // 函数名称:void RefreshTmp()
  // 函数功能:刷新温度
  //----------------------------------------------------------
  void RefreshTmp()
  {
  TmpChange();
  DisplayTmp(Tmp());
  }

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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