基于51单片机的数字温度传感器的数字温度计
时间: 2023-07-01 17:15:30 浏览: 54
以下是基于51单片机的数字温度传感器的数字温度计代码,使用的是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;
sbit DQ=P3^4;
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);
}
}
}
uchar get_temp() {
uchar a, b;
init_DS18B20();
write_DS18B20(0xcc);
write_DS18B20(0x44);
delay(100);
init_DS18B20();
write_DS18B20(0xcc);
write_DS18B20(0xbe);
a = read_DS18B20();
b = read_DS18B20();
return a;
}
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() {
uchar temp;
LCD_Init();
while (1) {
temp = get_temp();
LCD_Write_Com(0x80);
printf("Temperature:");
LCD_Write_Com(0x8d);
printf("%d", temp);
delay(500);
}
}
```
以上代码通过初始化DS18B20数字温度传感器、读取传感器数据、将数据显示在LCD1602液晶显示屏上的方式实现了数字温度计的功能。其中,使用了定时器延时函数`delay()`和串口通信函数`printf()`。需要注意的是,需要将DS18B20数字温度传感器连接到51单片机的P3.4引脚,LCD1602液晶显示屏连接到P2口。