51单片机DS18B20温度读取代码
时间: 2023-10-11 15:13:07 浏览: 103
以下是51单片机通过单总线读取DS18B20温度传感器的代码:
```
#include <reg51.h>
sbit DQ = P2^0; // 定义DS18B20数据线接口
// DS18B20初始化函数
void Init_DS18B20()
{
DQ = 1;
Delay_us(2);
DQ = 0;
Delay_us(480);
DQ = 1;
Delay_us(60);
}
// DS18B20发送一个字节函数
void Write_DS18B20(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ = 0;
Delay_us(2);
DQ = dat & 0x01;
Delay_us(60);
DQ = 1;
dat >>= 1;
}
}
// DS18B20读取一个字节函数
unsigned char Read_DS18B20(void)
{
unsigned char i, dat=0;
for(i=0;i<8;i++)
{
DQ = 0;
Delay_us(2);
DQ = 1;
Delay_us(2);
dat >>= 1;
if(DQ) dat |= 0x80;
Delay_us(60);
}
return dat;
}
// DS18B20读取温度函数
int Read_Temperature()
{
unsigned char temp1, temp2;
Init_DS18B20();
Write_DS18B20(0xCC);
Write_DS18B20(0x44);
Delay_ms(750);
Init_DS18B20();
Write_DS18B20(0xCC);
Write_DS18B20(0xBE);
temp1 = Read_DS18B20();
temp2 = Read_DS18B20();
return ((temp2<<8) | temp1) * 0.0625;
}
int main()
{
int temperature;
while(1)
{
temperature = Read_Temperature();
// 处理温度数据
}
return 0;
}
```
需要注意的是,上述代码中的延时函数需要根据实际情况进行调整,以保证DS18B20能够正常工作。另外,由于DS18B20采用单总线通信,因此在程序中需要使用GPIO端口来模拟单总线通信。
阅读全文