基于51单片机的温度读取代码
时间: 2023-08-24 08:05:02 浏览: 83
以下是基于51单片机的温度读取代码:
```c
#include <reg52.h> // 引入51单片机头文件
#define DQ P3_7 // 定义DS18B20数据线引脚
unsigned char TempH, TempL; // 存储温度高8位和低8位
void Delay1ms(unsigned int i); // 延时函数声明
void Init_DS18B20(); // 初始化DS18B20函数声明
void Write_DS18B20(unsigned char dat); // 向DS18B20写入一个字节函数声明
unsigned char Read_DS18B20(); // 从DS18B20读取一个字节函数声明
void Read_Temp(); // 读取温度函数声明
void main()
{
while(1)
{
Init_DS18B20(); // 初始化DS18B20
Write_DS18B20(0xcc); // 跳过ROM操作
Write_DS18B20(0x44); // 启动温度转换
Delay1ms(100); // 等待转换完成
Init_DS18B20(); // 初始化DS18B20
Write_DS18B20(0xcc); // 跳过ROM操作
Write_DS18B20(0xbe); // 发送读取温度命令
TempL = Read_DS18B20(); // 读取温度低8位
TempH = Read_DS18B20(); // 读取温度高8位
Read_Temp(); // 显示温度
}
}
void Init_DS18B20()
{
DQ = 1; // 拉高数据线
Delay1ms(1); // 延时1ms
DQ = 0; // 拉低数据线
Delay1ms(20); // 延时20ms
DQ = 1; // 释放数据线
Delay1ms(1); // 延时1ms
}
void Write_DS18B20(unsigned char dat)
{
unsigned char i;
for(i=0; i<8; i++)
{
DQ = 0; // 拉低数据线
DQ = dat & 0x01; // 写入数据位
Delay1ms(2); // 延时2ms
DQ = 1; // 释放数据线
dat >>= 1; // 右移一位
}
}
unsigned char Read_DS18B20()
{
unsigned char i, dat = 0;
for(i=0; i<8; i++)
{
DQ = 0; // 拉低数据线
dat >>= 1; // 右移一位
if(DQ) dat |= 0x80; // 如果数据线为高,则将最高位写为1
Delay1ms(2); // 延时2ms
DQ = 1; // 释放数据线
}
return dat;
}
void Read_Temp()
{
unsigned int temp;
temp = TempH;
temp <<= 8;
temp |= TempL;
temp *= 0.0625;
printf("Temperature: %d.%dC\n", temp/10, temp%10);
}
void Delay1ms(unsigned int i)
{
unsigned int j;
while(i--)
{
for(j=0; j<120; j++);
}
}
```
以上代码是通过DS18B20数字温度传感器读取温度,主要分为初始化DS18B20、向DS18B20写入一个字节、从DS18B20读取一个字节、读取温度等函数。函数中使用了延时函数Delay1ms()和printf()函数,需要在程序中实现。
阅读全文