基于51单片机的数字温度传感器的数字温度计代码
时间: 2024-02-19 17:57:52 浏览: 51
下面是基于51单片机的数字温度传感器的数字温度计代码,主要包括初始化DS18B20传感器、读取温度值等功能。
```c
#include <reg51.h>
#include <stdio.h>
#define DQ P3_4 //定义DQ引脚
sbit LED = P1^0; //定义LED引脚
//延时函数
void Delay1us()
{
unsigned char i;
for(i=0;i<12;i++);
}
//DS18B20初始化函数
void Init_DS18B20()
{
DQ = 1; //DQ引脚输出1
Delay1us();
DQ = 0; //DQ引脚输出0
Delay1us();
DQ = 1; //DQ引脚输出1
Delay1us();
}
//DS18B20发送一个字节函数
void WriteByte_DS18B20(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ = 0; //DQ引脚输出0
Delay1us();
DQ = dat&0x01; //将dat的最低位发送出去
Delay1us();
DQ = 1; //DQ引脚输出1
Delay1us();
dat >>= 1; //dat右移一位
}
}
//DS18B20读取一个字节函数
unsigned char ReadByte_DS18B20()
{
unsigned char dat = 0;
unsigned char i;
for(i=0;i<8;i++)
{
DQ = 0; //DQ引脚输出0
Delay1us();
DQ = 1; //DQ引脚输出1
Delay1us();
dat >>= 1; //dat右移一位
if(DQ) dat |= 0x80; //如果DQ引脚为1,则dat最高位为1
Delay1us();
}
return dat;
}
//DS18B20温度转换函数
void Convert_DS18B20()
{
Init_DS18B20(); //初始化DS18B20传感器
WriteByte_DS18B20(0xCC); //跳过ROM操作
WriteByte_DS18B20(0x44); //启动温度转换
}
//DS18B20读取温度函数
float ReadTemp_DS18B20()
{
unsigned char TH, TL;
int temp;
float temp_value;
Init_DS18B20(); //初始化DS18B20传感器
WriteByte_DS18B20(0xCC); //跳过ROM操作
WriteByte_DS18B20(0xBE); //读取温度寄存器
TL = ReadByte_DS18B20(); //读取温度低8位
TH = ReadByte_DS18B20(); //读取温度高8位
temp = TH;
temp <<= 8;
temp |= TL; //将温度高8位和低8位组合成16位温度值
temp_value = temp*0.0625; //转换为浮点数
return temp_value;
}
void main()
{
float temp;
while(1)
{
Convert_DS18B20(); //启动温度转换
Delay1us();
temp = ReadTemp_DS18B20(); //读取温度值
printf("Temperature is: %.1f\n", temp); //通过串口输出温度值
if(temp > 25) //如果温度大于25度,LED闪烁
{
LED = 1;
Delay1us();
LED = 0;
Delay1us();
}
else
{
LED = 0;
}
Delay1us(500000);
}
}
```
注意:该代码中使用了串口输出函数printf(),需要另外添加串口初始化函数,并连接好51单片机的串口引脚。同时,需要根据实际情况修改LED引脚的定义。
阅读全文