利用数字温度传感器DS18B20与单片机结合来测量温度。利用数字温度传感器DS18B20测量温度信号,计算后在LED数码管上显示相应的温度值。其温度测量范围为-55℃~125℃,精确到0.5℃。数字温度计所测量的温度采用数字显示,控制器使用单片机AT89C51,测温传感器使用DS18B20,用3位共阳极LED数码管以串口传送数据,实现温度显示。 1
时间: 2023-12-31 21:03:52 浏览: 120
基于DS18B20数字温度传感器检测温度
以下是利用数字温度传感器DS18B20与单片机结合实现的数字温度计代码,使用的是AT89C51单片机和DS18B20数字温度传感器:
```c
#include <reg51.h>
#include <stdio.h>
#define DQ P3_4
typedef unsigned char uchar;
typedef unsigned int uint;
sbit RS=P1^0;
sbit RW=P1^1;
sbit E=P1^2;
void delay(uint i) {
uint j;
for (; i > 0; i--) {
for (j = 112; j > 0; j--);
}
}
void init_DS18B20() {
uchar i;
DQ = 1;
delay(1);
DQ = 0;
delay(500);
DQ = 1;
delay(60);
i = DQ;
delay(500);
}
uchar read_DS18B20() {
uchar i, j, k;
uchar temp = 0x00;
for (j = 8; j > 0; j--) {
DQ = 0;
delay(1);
DQ = 1;
delay(1);
k = DQ;
i = DQ;
delay(1);
temp = (temp >> 1) | (k << 7);
}
return temp;
}
void write_DS18B20(uchar dat) {
uchar j, testb;
for (j = 8; j > 0; j--) {
testb = dat & 0x01;
dat = dat >> 1;
if (testb) {
DQ = 0;
delay(1);
DQ = 1;
delay(60);
} else {
DQ = 0;
delay(60);
DQ = 1;
delay(1);
}
}
}
float get_temp() {
uchar temp[2];
float t;
init_DS18B20();
write_DS18B20(0xcc);
write_DS18B20(0x44);
delay(100);
init_DS18B20();
write_DS18B20(0xcc);
write_DS18B20(0xbe);
temp[0] = read_DS18B20();
temp[1] = read_DS18B20();
t = (float)((temp[1] << 8) | temp[0]) / 16.0;
return t;
}
void LCD_Write_Com(uchar com) {
RS = 0;
RW = 0;
P2 = com;
delay(5);
E = 1;
delay(5);
E = 0;
}
void LCD_Write_Data(uchar dat) {
RS = 1;
RW = 0;
P2 = dat;
delay(5);
E = 1;
delay(5);
E = 0;
}
void LCD_Init() {
LCD_Write_Com(0x38);
LCD_Write_Com(0x0c);
LCD_Write_Com(0x06);
LCD_Write_Com(0x01);
}
void main() {
float temp;
uchar temp_int, temp_dec;
LCD_Init();
while (1) {
temp = get_temp();
temp_int = (uchar)temp;
temp_dec = (uchar)((temp - temp_int) * 10);
LCD_Write_Com(0x80);
printf("Temperature:");
LCD_Write_Com(0x8d);
printf("%d.%d", temp_int, temp_dec);
delay(500);
}
}
```
以上代码通过初始化DS18B20数字温度传感器、读取传感器数据、将数据显示在3位共阳极LED数码管上的方式实现了数字温度计的功能。其中,使用了定时器延时函数`delay()`和串口通信函数`printf()`。需要注意的是,需要将DS18B20数字温度传感器连接到AT89C51单片机的P3.4引脚,3位共阳极LED数码管连接到P2口。
阅读全文