单片机c51,温度传感器ds18b20,lcd1602显示温度
时间: 2023-12-13 11:06:15 浏览: 161
这里是一个简单的单片机C51程序,使用DS18B20温度传感器和LCD1602显示温度。
首先,需要连接DS18B20传感器和LCD1602显示屏到单片机上。连接方式可以参考相关资料。
接着,编写程序如下:
#include<reg52.h>
#include<intrins.h>
#define DQ P2_0
#define LCD P0
typedef unsigned char uchar;
typedef unsigned int uint;
uchar code table[]="Temperature:"; //显示字符串
void delay(uint i) //延时函数
{
while(i--);
}
uchar ds18b20_init() //DS18B20初始化函数
{
uchar i;
DQ = 1;
delay(2);
DQ = 0;
delay(80);
DQ = 1;
delay(10);
i = DQ;
delay(80);
return i;
}
void write_ds18b20(uchar dat) //向DS18B20写入数据
{
uchar i;
for(i=0;i<8;i++)
{
DQ = 0;
_nop_();
DQ = dat&0x01;
dat >>= 1;
delay(6);
DQ = 1;
_nop_();
}
}
uchar read_ds18b20() //从DS18B20读取数据
{
uchar i,dat=0;
for(i=0;i<8;i++)
{
DQ = 0;
_nop_();
DQ = 1;
_nop_();
dat >>= 1;
if(DQ) dat |= 0x80;
delay(6);
DQ = 1;
_nop_();
}
return dat;
}
void lcd_init() //LCD1602初始化函数
{
LCD = 0x38;
delay(5);
LCD = 0x38;
delay(5);
LCD = 0x38;
delay(5);
LCD = 0x0c;
delay(5);
LCD = 0x06;
delay(5);
LCD = 0x01;
delay(5);
}
void lcd_display(uchar dat) //LCD1602显示数据
{
LCD = dat;
delay(5);
}
void lcd_string(uchar *s) //LCD1602显示字符串
{
while(*s)
{
lcd_display(*s++);
}
}
void main()
{
uchar temp[2]; //存储温度的数组
uchar temp_h,temp_l; //温度的高位和低位
float temperature; //温度变量
ds18b20_init(); //DS18B20初始化
lcd_init(); //LCD1602初始化
lcd_string(table); //显示"Temperature:"
while(1)
{
ds18b20_init(); //DS18B20初始化
write_ds18b20(0xcc); //跳过ROM操作
write_ds18b20(0x44); //启动温度转换
delay(1000); //等待转换完成
ds18b20_init(); //DS18B20初始化
write_ds18b20(0xcc); //跳过ROM操作
write_ds18b20(0xbe); //读取温度值
temp_l = read_ds18b20(); //读取温度低位
temp_h = read_ds18b20(); //读取温度高位
temperature = (temp_h<<8)|temp_l; //计算温度
temperature /= 16; //除以16得到实际温度值
temp[0] = (uchar)temperature; //转换成字符
temp[1] = (uchar)((temperature-temp[0])*10);
lcd_display(0xc4); //从第4个字符开始显示温度
lcd_display(temp[0]/10+'0'); //显示十位
lcd_display(temp[0]%10+'0'); //显示个位
lcd_display('.'); //显示小数点
lcd_display(temp[1]+'0'); //显示小数
delay(1000); //延时1s
lcd_display(0x01); //清屏
lcd_string(table); //重新显示"Temperature:"
}
}
程序的主要思路是先进行DS18B20温度传感器的初始化,然后启动温度转换,读取温度值并计算实际温度,最后将温度值以字符串形式显示在LCD1602上。程序中使用了延时函数来控制DS18B20的时序,需要根据实际硬件情况调整延时时间。
注意:此程序仅供参考,具体实现可能需要根据实际情况进行调整。
阅读全文