小弟 学习18b20 不会读数

2020-02-04 09:10发布

小弟 想用12864显示18b20温度  可是对 18b20读数不了解  在网上找的程序 没有解释 看不太懂  求 哪位前辈  传个以前做过的程序  或指点一下思路   小弟 万分感谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
17条回答
唯诚hhw2
2020-02-04 12:33
void ds_init()
{
  uchar x=0;
   ds=1;
   _nop_();_nop_();
   ds=0;
   tempdelay(85);
   ds=1;
   tempdelay(16);
  
  
}

void tempwrite(uchar dat)
{
   uchar i;
   for(i=0;i<8;i++)
     {
            ds=0;
                _nop_();
                ds=dat&0x01;
                tempdelay(5);
                _nop_();
            _nop_();
                ds=1;
                dat=dat>>1;
         }
         delayms(3);
}
uchar tempread()
{
    uchar i,dat;
        for(i=0;i<8;i++)
        {
          ds=0;
          _nop_();
          _nop_();
          dat=dat>>1;
          ds=1;
          _nop_();
          _nop_();
          if(ds==1)
          dat=dat|0x80;
          tempdelay(5);
        }
        return(dat);
}


uint get_temp()
{
  uchar a,b;
  ds_init();
  tempwrite(0xcc);     //写跳过读rom指令
  tempwrite(0x44);     //写温度转换指令
  tempdelay(10);
  ds_init();
  tempwrite(0xcc);
  tempwrite(0xbe);

  a=tempread();
  b=tempread();
  temp=(b<<4)|(a>>4);
  if(temp>128)
  {temp=~temp+1;}
   return temp;
}

一周热门 更多>