18b20温度检测及其lcd显示_51单片机DS18B20在LCD1602上显示(无其他效果,给初学者)...
时间: 2024-03-22 08:41:54 浏览: 26
好的,我理解了你的问题。这是一个关于51单片机DS18B20温度检测并在LCD1602上显示的教程,适合初学者。
首先,你需要准备以下材料:
- 51单片机
- DS18B20温度传感器
- LCD1602液晶显示屏
- 杜邦线若干
- 电位器
- 面包板
接下来,按照以下步骤进行操作:
1. 连接硬件
将DS18B20温度传感器的VCC引脚连接到单片机的VCC引脚,GND引脚连接到单片机的GND引脚,DQ引脚连接到单片机的P3.7引脚(也可以选择其他引脚)。
将LCD1602液晶显示屏的VSS、VDD、VO、RS、RW、E引脚分别连接到单片机的GND、VCC、电位器中间引脚、P1.0、P1.1、P1.2引脚。
将LCD1602液晶显示屏的D4~D7引脚分别连接到单片机的P2.4~P2.7引脚。
2. 编写程序
代码如下:
```
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ = P3^7;
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P1^2;
void delay(uint x)
{
while(x--);
}
void write_com(uchar com)
{
RS = 0;
RW = 0;
P2 = com;
EN = 1;
_nop_();
_nop_();
EN = 0;
}
void write_data(uchar dat)
{
RS = 1;
RW = 0;
P2 = dat;
EN = 1;
_nop_();
_nop_();
EN = 0;
}
uchar read_data()
{
uchar dat;
RS = 1;
RW = 1;
EN = 1;
_nop_();
_nop_();
dat = P2;
EN = 0;
return dat;
}
void init()
{
delay(1000);
write_com(0x38);
delay(5);
write_com(0x38);
delay(5);
write_com(0x38);
delay(5);
write_com(0x38);
delay(5);
write_com(0x08);
delay(5);
write_com(0x01);
delay(5);
write_com(0x06);
delay(5);
write_com(0x0c);
delay(5);
}
void main()
{
uchar temp;
uchar shi,ge;
uchar flag;
init();
while(1)
{
write_com(0x80);
write_data('T');
write_data(':');
write_com(0x86);
write_data(' ');
write_com(0x87);
write_data('C');
write_com(0x89);
write_data(' ');
write_com(0x8a);
write_data(' ');
write_com(0xc0);
write_data(' ');
write_data(' ');
write_data(' ');
write_data(' ');
write_data(' ');
write_data(' ');
write_data(' ');
write_data(' ');
write_data(' ');
write_com(0x80+0x40);
write_data(' ');
write_data(' ');
write_data(' ');
write_data(' ');
write_data(' ');
write_data(' ');
write_data(' ');
write_data(' ');
write_data(' ');
write_data(' ');
write_com(0xc0+0x40);
write_data(' ');
write_data(' ');
write_data(' ');
write_data(' ');
write_data(' ');
write_data(' ');
write_data(' ');
write_data(' ');
write_data(' ');
write_data(' ');
write_com(0x8a);
write_data('0');
write_data('0');
write_com(0x8c);
write_data('.');
write_data('0');
write_data('0');
while(!DQ);
delay(5);
write_com(0x80+0x40+0x0f);
write_data('-');
temp = read_data();
if(temp & 0xf0)
{
shi = (temp & 0xf0) >> 4;
write_data(shi+'0');
}
ge = temp & 0x0f;
write_data(ge+'0');
write_data('.');
temp = read_data();
if(temp & 0x80)
{
write_data('5');
}
else
{
write_data('0');
}
delay(1000);
}
}
```
3. 烧录程序
使用Keil C51编译程序并烧录到单片机中。
4. 测试
将硬件连接好,上电后即可看到LCD1602显示屏上显示当前温度。
希望这个教程能够帮助到你,有问题可以随时提出。