c51单片机温度传感器检测显示代码
时间: 2024-01-16 08:02:25 浏览: 32
以下是使用C51单片机进行温度传感器检测并显示温度的代码:
```c
#include <reg52.h>
sbit DQ = P3^7; // 温度传感器引脚
void delay_us(unsigned int us) // 微秒级延时函数
{
while (us--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void delay_ms(unsigned int ms) // 毫秒级延时函数
{
while (ms--)
{
delay_us(1000);
}
}
unsigned char ds18b20_init() // 初始化温度传感器
{
unsigned char flag = 0;
DQ = 1;
delay_us(10);
DQ = 0;
delay_us(500);
DQ = 1;
delay_us(10);
flag = DQ;
delay_us(500);
return flag;
}
void ds18b20_write_byte(unsigned char dat) // 写入一个字节
{
unsigned char i;
for (i = 0; i < 8; i++)
{
DQ = 0;
_nop_();
_nop_();
DQ = dat & 0x01;
delay_us(5);
DQ = 1;
dat >>= 1;
}
}
unsigned char ds18b20_read_byte() // 读取一个字节
{
unsigned char i, dat = 0;
for (i = 0; i < 8; i++)
{
DQ = 0;
_nop_();
_nop_();
DQ = 1;
_nop_();
_nop_();
dat |= DQ << i;
delay_us(5);
}
return dat;
}
void ds18b20_start() // 启动温度转换
{
ds18b20_init();
ds18b20_write_byte(0xcc);
ds18b20_write_byte(0x44);
}
unsigned int ds18b20_read_temp() // 读取温度值
{
unsigned char tl, th;
unsigned int temp;
ds18b20_init();
ds18b20_write_byte(0xcc);
ds18b20_write_byte(0xbe);
tl = ds18b20_read_byte();
th = ds18b20_read_byte();
temp = tl | (th << 8);
return temp;
}
void main()
{
unsigned int temp;
unsigned char temp_str[5];
while (1)
{
ds18b20_start(); // 启动温度转换
delay_ms(500); // 等待转换完成
temp = ds18b20_read_temp(); // 读取温度值
temp = temp * 0.0625; // 转换成实际温度值
temp_str[0] = temp / 100 + '0'; // 获取百位数字
temp_str[1] = temp / 10 % 10 + '0'; // 获取十位数字
temp_str[2] = '.'; // 小数点
temp_str[3] = temp % 10 + '0'; // 获取个位数字
temp_str[4] = '\0'; // 字符串结束符
// 显示温度值
// 例如使用数码管或LCD显示温度值
// 这里只是简单地通过串口发送温度值
SBUF = temp_str[0];
while (!TI);
TI = 0;
SBUF = temp_str[1];
while (!TI);
TI = 0;
SBUF = temp_str[2];
while (!TI);
TI = 0;
SBUF = temp_str[3];
while (!TI);
TI = 0;
SBUF = 'C';
while (!TI);
TI = 0;
}
}
```
该代码使用了C51单片机和DS18B20温度传感器,通过串口输出温度值。可以根据实际需求进行修改。