用c语言写一个基于51单片机的温度传感器
时间: 2023-06-20 17:04:47 浏览: 272
以下是一个基于51单片机的温度传感器的简单实现代码。这个代码使用了DS18B20数字温度传感器。
```c
#include <reg51.h>
#include <stdio.h>
#define DQ P2_0
unsigned char receive_byte(void);
void send_byte(unsigned char byte);
void delay(unsigned int time);
void init_ds18b20(void);
float read_temperature(void);
void main(void)
{
float temperature;
unsigned char buffer[20];
init_ds18b20();
while (1)
{
temperature = read_temperature();
sprintf(buffer, "Temperature: %.2f C\n", temperature);
printf("%s", buffer);
delay(1000);
}
}
unsigned char receive_byte(void)
{
unsigned char i, byte = 0;
for (i = 0; i < 8; i++)
{
byte >>= 1;
DQ = 0;
delay(1);
DQ = 1;
delay(1);
if (DQ)
{
byte |= 0x80;
}
delay(5);
}
return byte;
}
void send_byte(unsigned char byte)
{
unsigned char i;
for (i = 0; i < 8; i++)
{
DQ = 0;
delay(1);
if (byte & 0x01)
{
DQ = 1;
}
delay(5);
DQ = 1;
byte >>= 1;
}
}
void delay(unsigned int time)
{
unsigned int i, j;
for (i = 0; i < time; i++)
{
for (j = 0; j < 2; j++);
}
}
void init_ds18b20(void)
{
DQ = 1;
delay(1);
DQ = 0;
delay(480);
DQ = 1;
delay(60);
send_byte(0xCC);
send_byte(0x44);
}
float read_temperature(void)
{
unsigned char lsb, msb;
float temperature;
send_byte(0xCC);
send_byte(0xBE);
lsb = receive_byte();
msb = receive_byte();
temperature = ((msb << 8) | lsb) * 0.0625;
return temperature;
}
```
这个代码使用了一个函数 `init_ds18b20` 来初始化 DS18B20 温度传感器,然后使用 `read_temperature` 函数读取温度。这个代码使用了 `P2_0` 引脚来连接 DS18B20 温度传感器。如果你想要连接到其他引脚,请相应地更改代码中的引脚定义。
阅读全文