51单片机DS18B20采集温度并在LCD1602上显示的代码
时间: 2024-05-06 13:14:51 浏览: 94
51单片机+DS18B20+NRF24L01+LCD1602=无线温度传感——C代码
5星 · 资源好评率100%
下面是基于51单片机的DS18B20采集温度并在LCD1602上显示的代码:
```c
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ = P1^0;
sbit RS = P2^6;
sbit RW = P2^5;
sbit EN = P2^7;
void Delay100us() //延时函数
{
uchar i,j;
_nop_();
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
void InitDS18B20() //初始化DS18B20
{
DQ = 1;
Delay100us();
DQ = 0;
Delay100us();
DQ = 1;
Delay100us();
}
uchar ReadByte() //读取一个字节
{
uchar i, dat = 0;
for (i=0; i<8; i++)
{
DQ = 0;
_nop_();
dat >>= 1;
DQ = 1;
_nop_();
if (DQ)
dat |= 0x80;
Delay100us();
}
return dat;
}
void WriteByte(uchar dat) //写入一个字节
{
uchar i;
for (i=0; i<8; i++)
{
DQ = 0;
_nop_();
if (dat & 0x01)
DQ = 1;
dat >>= 1;
Delay100us();
DQ = 1;
}
}
void GetTemp(uchar *temp) //获取温度值
{
uchar h, l;
InitDS18B20();
WriteByte(0xcc);
WriteByte(0x44);
Delay100us();
InitDS18B20();
WriteByte(0xcc);
WriteByte(0xbe);
l = ReadByte();
h = ReadByte();
*temp = (h << 4) | (l >> 4);
}
void WriteCmd(uchar cmd) //写命令
{
RS = 0;
RW = 0;
P0 = cmd;
EN = 1;
Delay100us();
EN = 0;
}
void WriteData(uchar dat) //写数据
{
RS = 1;
RW = 0;
P0 = dat;
EN = 1;
Delay100us();
EN = 0;
}
void InitLCD() //初始化LCD
{
WriteCmd(0x38);
WriteCmd(0x0c);
WriteCmd(0x06);
WriteCmd(0x01);
}
void DisplayTemp(uchar temp) //显示温度
{
uchar a = temp / 10;
uchar b = temp % 10;
WriteCmd(0x80);
WriteData(a + '0');
WriteData(b + '0');
WriteData('C');
}
void main()
{
uchar temp;
InitLCD();
while (1)
{
GetTemp(&temp);
DisplayTemp(temp);
Delay100us();
}
}
```
代码中使用了DS18B20温度传感器来获取温度值,并通过LCD1602显示出来。具体流程如下:
1. 定义DS18B20数据引脚DQ、LCD1602控制引脚RS、RW、EN。
2. 编写延时函数Delay100us()。
3. 编写初始化DS18B20函数InitDS18B20(),初始化DS18B20。
4. 编写读取一个字节函数ReadByte(),用来从DS18B20中读取一个字节。
5. 编写写入一个字节函数WriteByte(),用来向DS18B20中写入一个字节。
6. 编写获取温度值函数GetTemp(),用来获取DS18B20中的温度值。
7. 编写写命令函数WriteCmd(),用来向LCD1602写入命令。
8. 编写写数据函数WriteData(),用来向LCD1602写入数据。
9. 编写初始化LCD函数InitLCD(),用来初始化LCD1602。
10. 编写显示温度函数DisplayTemp(),用来将获取到的温度值显示在LCD1602上。
11. 在主函数main()中,循环执行获取温度值并显示温度的操作。
注意:上述代码中的延时函数Delay100us()需要根据实际情况进行调整,以保证程序正常运行。
阅读全文