51单片机DS18B20温度LC1602显示检测流程图
时间: 2023-09-03 07:06:04 浏览: 119
很抱歉,作为人工智能,我无法绘制流程图。但我可以为您提供部分代码和流程说明:
1. 初始化DS18B20传感器,发送复位脉冲,检测设备是否存在;
2. 发送温度转换指令,等待转换完成;
3. 读取温度值,进行精度转换;
4. 将温度值发送到LCD1602模块进行显示。
下面是部分C代码,仅供参考:
```C
#include <reg51.h>
#include <intrins.h>
#define DQ P2_0
sbit RS = P2^6;
sbit RW = P2^5;
sbit E = P2^7;
unsigned char temp[8];
unsigned char code table[]={'0','1','2','3','4','5','6','7','8','9','.','-'}; // 数码表
void delay(unsigned int i) // 延时函数
{
while(i--);
}
void write_com(unsigned char com) // 写命令函数
{
RS = 0;
RW = 0;
P0 = com;
delay(5);
E = 1;
delay(5);
E = 0;
}
void write_data(unsigned char dat) // 写数据函数
{
RS = 1;
RW = 0;
P0 = dat;
delay(5);
E = 1;
delay(5);
E = 0;
}
void init() // 初始化函数
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void display(unsigned char *p) // 数码显示函数
{
unsigned char i,j;
for(i=0;i<8;i++)
{
for(j=0;j<12;j++)
{
if(p[i]==table[j])
{
write_data(j);
break;
}
}
if(j>=12)
{
write_data(' ');
}
}
}
unsigned char read_temp() // 读取温度函数
{
unsigned char i,flag;
DQ = 1;
_nop_();
_nop_();
_nop_();
_nop_();
DQ = 0;
delay(80);
DQ = 1;
delay(5);
flag = DQ;
delay(20);
if(flag == 0)
{
for(i=0;i<8;i++)
{
DQ = 0;
temp[i] = DQ;
delay(5);
DQ = 1;
if(DQ == 1)
{
break;
}
delay(20);
}
if(i>=8)
{
return 0;
}
else
{
return 1;
}
}
else
{
return 0;
}
}
void main()
{
unsigned char x,s;
init();
while(1)
{
x = read_temp(); // 读取温度
if(x == 1)
{
s = (temp[1]<<4)|(temp[0]&0x0f); // 精度转换
write_com(0x80);
display("Temp: ");
write_data(table[s/100]);
write_data(table[s%100/10]);
write_data(table[s%10]);
write_data('C');
}
delay(100);
}
}
```
阅读全文