18b20温度检测及其lcd显示_51单片机DS18B20在LCD1602上显示(无其他效果,给初学者)...
时间: 2024-03-22 10:42:39 浏览: 59
好的,我能理解您的问题。那么,您需要关于18b20温度检测和LCD显示的代码吗?如果是的话,下面是一个简单的示例代码,可以帮助您入门:
```
#include <reg52.h>
#include <intrins.h>
sbit DQ = P2^1; //18b20温度传感器数据线连接的单片机IO口
void DelayUs2x(unsigned char t)//延时函数
{
while(--t);
}
void DelayMs(unsigned int t) //延时函数
{
while(t--)
{
DelayUs2x(245);
DelayUs2x(245);
}
}
bit Init_DS18B20(void) //18b20初始化函数
{
bit initflag = 0;
DQ = 1;
DelayUs2x(4);
DQ = 0;
DelayMs(20);
DQ = 1;
DelayUs2x(30);
initflag = DQ;
DelayUs2x(4);
return initflag;
}
void Write_DS18B20(unsigned char dat) //向18b20写入数据
{
unsigned char i;
for(i = 0; i < 8; i++)
{
DQ = 0;
_nop_();
_nop_();
DQ = dat & 0x01;
_nop_();
_nop_();
DQ = 1;
dat >>= 1;
}
}
unsigned char Read_DS18B20(void) //从18b20读取数据
{
unsigned char i, dat = 0;
for(i = 0; i < 8; i++)
{
dat >>= 1;
DQ = 0;
_nop_();
_nop_();
DQ = 1;
_nop_();
_nop_();
if(DQ)
{
dat |= 0x80;
}
}
return dat;
}
void Convert_DS18B20(void) //18b20转换函数
{
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0x44);
}
int Read_Temperature(void) //读取温度数据函数
{
int temperature = 0;
unsigned char temp_LSB, temp_MSB;
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe);
temp_LSB = Read_DS18B20();
temp_MSB = Read_DS18B20();
temperature = temp_MSB;
temperature <<= 8;
temperature |= temp_LSB;
return temperature;
}
void Display_Temperature(int temperature) //在LCD上显示温度函数
{
unsigned char display[6];
unsigned char i;
display[0] = (temperature / 100) + 0x30;
display[1] = ((temperature / 10) % 10) + 0x30;
display[2] = '.';
display[3] = (temperature % 10) + 0x30;
display[4] = 'C';
display[5] = '\0';
for(i = 0; i < 6; i++)
{
P0 = display[i];
P2 = 0x06;
DelayMs(5);
P2 = 0x04;
DelayMs(5);
}
}
void main(void) //主函数
{
int temperature = 0;
while(1)
{
Convert_DS18B20();
DelayMs(500);
temperature = Read_Temperature();
Display_Temperature(temperature);
DelayMs(1000);
}
}
```
这是一个简单的代码,实现了18b20温度检测和LCD显示。在这个代码中,我们使用了51单片机和LCD1602来实现温度检测和显示。对于初学者来说,这个代码可以帮助您更好地理解18b20温度检测和LCD显示的原理和基本操作。如果您有任何问题,请随时问我。
阅读全文