ds18b20温度传感器代码51+lcd1602
时间: 2023-09-28 17:12:34 浏览: 109
以下是基于51单片机和lcd1602显示屏的ds18b20温度传感器代码:
```c
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define DQ P2_0
sbit RS = P1^0; //LCD1602的RS引脚
sbit RW = P1^1; //LCD1602的RW引脚
sbit EN = P1^2; //LCD1602的EN引脚
void Delay5us(void)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void Delay1ms(uint ms)
{
uint i, j;
for (i = ms; i > 0; i--)
{
for (j = 110; j > 0; j--);
}
}
void WriteCom(uchar com)
{
RS = 0;
RW = 0;
P0 = com;
Delay5us();
EN = 1;
Delay5us();
EN = 0;
}
void WriteData(uchar dat)
{
RS = 1;
RW = 0;
P0 = dat;
Delay5us();
EN = 1;
Delay5us();
EN = 0;
}
void InitLCD(void)
{
WriteCom(0x38); //设置16*2显示,5*7点阵,8位数据接口
WriteCom(0x0c); //开显示,无光标,不闪烁
WriteCom(0x06); //文字不动,光标自动+1
WriteCom(0x01); //清屏
}
uchar Init_DS18B20(void)
{
uchar i;
DQ = 1;
Delay5us();
DQ = 0;
Delay5us();
DQ = 1;
Delay5us();
i = DQ;
Delay5us();
return i;
}
void Write_DS18B20(uchar dat)
{
uchar i;
for (i = 0; i < 8; i++)
{
DQ = 0;
Delay5us();
DQ = dat & 0x01;
Delay5us();
DQ = 1;
dat >>= 1;
}
}
uchar Read_DS18B20(void)
{
uchar i, dat = 0;
for (i = 0; i < 8; i++)
{
DQ = 0;
Delay5us();
DQ = 1;
Delay5us();
dat >>= 1;
if (DQ)
dat |= 0x80;
}
return dat;
}
void Convert_DS18B20(void)
{
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0x44);
}
int Read_Temp(void)
{
int temp;
uchar TL, TH;
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe);
TL = Read_DS18B20();
TH = Read_DS18B20();
temp = TH;
temp <<= 8;
temp |= TL;
return temp;
}
void Disp_Temp(int temp)
{
uchar i;
uchar buffer[6] = {0};
WriteCom(0x80); //从第一行第一个字符开始显示
WriteData('T');
WriteData(':');
if (temp < 0)
{
temp = ~temp + 1;
WriteData('-');
}
else
{
WriteData('+');
}
temp *= 0.0625;
buffer[0] = temp / 100 + '0';
buffer[1] = temp % 100 / 10 + '0';
buffer[2] = temp % 10 + '0';
buffer[3] = '.';
buffer[4] = temp % 10 * 10 % 10 + '0';
buffer[5] = 0;
for (i = 0; i < 6; i++)
{
WriteData(buffer[i]);
}
}
void main()
{
int temp;
InitLCD();
while (1)
{
Convert_DS18B20();
Delay1ms(500);
temp = Read_Temp();
Disp_Temp(temp);
Delay1ms(500);
}
}
```
这个代码通过DS18B20温度传感器读取温度值,并将其显示在LCD1602屏幕上。其中,Init_DS18B20()函数用于初始化DS18B20,Write_DS18B20()函数用于向DS18B20写数据,Read_DS18B20()函数用于从DS18B20读取数据,Convert_DS18B20()函数用于启动DS18B20的温度转换功能,Read_Temp()函数用于读取转换后的温度值,Disp_Temp()函数用于将温度值显示在LCD1602屏幕上。
阅读全文