写一段51单片机热敏电阻测温设计的C语言代码
时间: 2023-11-29 19:28:56 浏览: 115
c编写的基于51单片机的温度测量设计
4星 · 用户满意度95%
以下是基于51单片机的热敏电阻测温设计的C语言代码示例:
```c
#include <reg51.h>
sbit DQ = P2^0; // 定义数据线
unsigned char temp; // 声明温度变量
void delay(unsigned int i) // 延时函数
{
while(i--);
}
void init_ds18b20() // DS18B20初始化函数
{
unsigned char flag = 0;
DQ = 1; // 数据线拉高
delay(10);
DQ = 0; // 发送复位脉冲
delay(500);
DQ = 1;
delay(10);
flag = DQ; // 等待DS18B20响应
delay(50);
}
void write_byte(unsigned char dat) // 写字节函数
{
unsigned char i;
for(i = 0; i < 8; i++)
{
DQ = 0; // 发送时间槽开始
DQ = dat & 0x01; // 发送数据位
delay(5);
DQ = 1; // 时间槽结束
dat >>= 1; // 准备发送下一位
}
delay(50);
}
unsigned char read_byte() // 读字节函数
{
unsigned char i, dat = 0;
for(i = 0; i < 8; i++)
{
DQ = 0; // 发送时间槽开始
dat >>= 1; // 接收数据位
if(DQ) dat |= 0x80;
delay(5);
DQ = 1; // 时间槽结束
}
delay(50);
return dat;
}
void get_temp() // 获取温度函数
{
unsigned char TL, TH;
init_ds18b20(); // 初始化DS18B20
write_byte(0xcc); // 跳过ROM操作
write_byte(0x44); // 启动温度转换
delay(500);
init_ds18b20(); // 初始化DS18B20
write_byte(0xcc); // 跳过ROM操作
write_byte(0xbe); // 读取温度
TL = read_byte(); // 读取温度低字节
TH = read_byte(); // 读取温度高字节
temp = (TH << 4) | (TL >> 4); // 计算温度值
}
void main()
{
while(1)
{
get_temp(); // 获取温度值
// 将温度值显示到LCD等设备上
}
}
```
以上代码实现了DS18B20热敏电阻温度传感器的初始化、温度转换和读取等操作,并将获取到的温度值存储在temp变量中,用户可以将其显示到LCD等设备上。请注意,以上代码仅供参考,具体实现应根据具体需求进行调整。
阅读全文