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

📄 18b20.c

📁 超声波程序(接收部分)
💻 C
字号:
#include <reg52.h>
#include <main1.H>

bit flag1 = 0;

unsigned int gettemp1(void);
void delay3(unsigned int i) //(i*5+20)us
{
    while(i--);
     
}

//初始化DS18B20
//让DS18B20一段相对长时间低电平, 然后一段相对非常短时间高电平, 即可启动
void dsInit1()

    //对于11.0592MHz时钟, unsigned int型的i, 作一个i++操作的时间大于为8us
   { ds1=1;
    _nop_();
    ds1 = 0;
    delay3(100); //拉低约800us, 符合协议要求的480us以上
    ds1 = 1;    //产生一个上升沿, 进入等待应答状态
    delay3(6);
	if(ds1 == 0) {flag1=1;}
	else {flag1=0;}
	delay3(20);
	ds1=1;
   }
 

void write1(unsigned char wr)
{unsigned char i;
 for(i=0;i<8;i++)
 {ds1=0;
  _nop_();
  ds1=wr&0x01;
  delay3(5);
  ds1=1;
  wr>>=1;
 }
}


unsigned int readword1 (void)
{ unsigned char i;
  unsigned int u1=0;
 for (i=0; i<16; i++)
 {ds1=0;
  u1>>=1;
  ds1=1;
  if (ds1==1) u1|=0x8000;
  delay3(4);
  }
  return (u1);
 }


unsigned int gettemp1 (void)
{unsigned int tem1;
 dsInit1();
 if(flag1)
 {write1 (0xcc); //skiprom
  write1 (0x44); //tempconvert
  dsInit1();
  write1 (0xcc); //skiprom
  write1 (0xbe); //readtemp
  tem1=readword1();//read
  return tem1;
 }
}



//DS18B20 获取温度
int getTmpValue(int tt)
{
    signed int tmpvalue;
    int value; //存放温度数值
    float t;
    unsigned char low, high;
    tmpvalue=tt;

    low=tmpvalue;
    high=tmpvalue>>8;
     //将高低两个字节合成一个整形变量
    //计算机中对于负数是利用补码来表示的
    //若是负值, 读取出来的数值是用补码表示的, 可直接赋值给int型的value
   
    value = tmpvalue;
    
    //使用DS18B20的默认分辨率12位, 精确度为0.0625度, 即读回数据的最低位代表0.0625度
    t = value * 0.0625;
    //将它放大100倍, 使显示时可显示小数点后两位, 并对小数点后第三进行4舍5入
    //如t=11.0625, 进行计数后, 得到value = 1106, 即11.06 度
    //如t=-11.0625, 进行计数后, 得到value = -1106, 即-11.06 度
    //value = t * 100 + (value > 0 ? 0.5 : -0.5); //大于0加0.5, 小于0减0.5
	//value=abs(value);
	t = t*100;
	if(high>128)
    return (-t);
	else
	return t;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -