一、原理
外部有三个引脚,分别接电源,地和IO端。
内部有ROM和寄存器。
其中主要用到对1就是其中的温度传感器
为01两个字节,占据16位
我们只需要根据主芯片发送脉冲,它会返回脉冲,准备就绪,再调用里面温度传感器的数据就可以实现温度计。
二、编程
void Delay_OneWire(unsigned int t)
{
unsigned char i;
while(t--)
{
for(i=0;i<12;i++);
}
}
void Write_DS18B20(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ = 0;
DQ = dat&0x01;
Delay_OneWire(5);
DQ = 1;
dat >>= 1;
}
Delay_OneWire(5);
}
unsigned char Read_DS18B20(void)
{
unsigned char i;
unsigned char dat;
for(i=0;i<8;i++)
{
DQ = 0;
dat >>= 1;
DQ = 1;
if(DQ)
{
dat |= 0x80;
}
Delay_OneWire(5);
}
return dat;
}
bit init_ds18b20(void)
{
bit initflag = 0;
DQ = 1;
Delay_OneWire(12);
DQ = 0;
Delay_OneWire(80);
DQ = 1;
Delay_OneWire(10);
initflag = DQ;
Delay_OneWire(5);
return initflag;
}
里面所需要用到的是特殊的延时函数
需要对应延时来进行读取温度数据
以上函数都会给
我们所需要的是对数据进行转换后读取
unsigned int rd_temperature(void)
{
unsigned char low,high;//·µ»ØÊý¾ÝµÄ¸ßµÍ¸÷8λ
init_ds18b20(); //³õʼ»¯DS18B20
Write_DS18B20(0xCC);//Ìø¹ýROM
Write_DS18B20(0x44);//ζÈת»»
init_ds18b20();
Write_DS18B20(0xCC);
Write_DS18B20(0xBE);//¶ÁȡζÈ
low = Read_DS18B20();//¶ÁÈ¡µÍλ
high = Read_DS18B20();//¶ÁÈ¡¸ßλ
return (high<<8)|low;//·µ»Ø16룬¸ßλ×óÒÆ8룬ÐγÉζÈÊý¾Ý
}
先进行初始化,再跳过ROM转换温度,然后再读取数据,将高低8位各赋值给中间变量,再返回16位,高位左移8位,形成温度16位数据。
主函数中变化不大
主要是将得到的数据转换成浮点型,再打印到数码管上。