51单片机DS18B20温度显示LCD1602

实现功能:
​ 通过温度传感器,实时在LCD1602上显示。温度高于30度亮绿灯,温度低于25度亮红灯,在25度到30度之间,两灯都不亮。

仿真图:
在这里插入图片描述

代码过多,只显示主函数的代码
请关注微信公众号“伊斯电子编程”获取全套代码

 void main()
 {
   
 uchar i;
 	init();
 write_com(0x80+0x02
要实现atc89c51单片机ds18b20温度传感器LCD1602显示温度,你需要进行如下步骤: 1. 确保你有一个atc89c51单片机ds18b20温度传感器以及LCD1602液晶显示屏。 2. 连接ds18b20温度传感器到atc89c51单片机,你需要将ds18b20的VCC引脚连接到atc89c51单片机的5V电源引脚,GND引脚连接到atc89c51单片机的GND引脚,DQ引脚连接到atc89c51单片机的任意一个IO引脚。 3. 编写atc89c51单片机的程序,读取ds18b20温度传感器的数据并将其显示LCD1602液晶屏幕上。以下是一个简单的示例程序: ```c #include <reg52.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define uchar unsigned char #define uint unsigned int #define DS18B20_IO P3_7 uchar TH, TL; // 温度存储变量 // DS18B20相关函数 uchar Init_DS18B20(void); void Write_DS18B20(uchar dat); uchar Read_DS18B20(void); void Read_Temperature(void); // LCD1602液晶显示屏相关函数 void delay(uchar ms); void LCD_Write_Cmd(uchar cmd); void LCD_Write_Data(uchar dat); void LCD_Init(void); void LCD_Show_String(uchar x, uchar y, uchar *str); void LCD_Show_Temperature(uchar x, uchar y); void main() { // 初始化ds18b20温度传感器 Init_DS18B20(); // 初始化LCD1602液晶显示屏 LCD_Init(); while (1) { // 读取温度数据 Read_Temperature(); // 显示温度数据到LCD1602液晶显示屏 LCD_Show_Temperature(0, 0); } } // 初始化DS18B20 uchar Init_DS18B20(void) { uchar flag; // 复位DS18B20 DS18B20_IO = 0; delay(500); DS18B20_IO = 1; delay(60); // 判断DS18B20是否存在 flag = DS18B20_IO; delay(500); // 返回DS18B20存在标志 return flag; } // 向DS18B20写入一个字节的数据 void Write_DS18B20(uchar dat) { uchar i; for (i = 0; i < 8; i++) { DS18B20_IO = 0; DS18B20_IO = dat & 0x01; delay(5); DS18B20_IO = 1; dat >>= 1; } } // 从DS18B20读取一个字节的数据 uchar Read_DS18B20(void) { uchar i, dat = 0; for (i = 0; i < 8; i++) { DS18B20_IO = 0; dat >>= 1; DS18B20_IO = 1; if (DS18B20_IO) { dat |= 0x80; } delay(5); } return dat; } // 读取温度数据 void Read_Temperature(void) { uchar TL, TH; // 初始化DS18B20 Init_DS18B20(); // 发送跳过ROM指令 Write_DS18B20(0xCC); // 发送温度转换指令 Write_DS18B20(0x44); // 等待转换完成 while (!Read_DS18B20()); // 初始化DS18B20 Init_DS18B20(); // 发送跳过ROM指令 Write_DS18B20(0xCC); // 发送读取温度指令 Write_DS18B20(0xBE); // 读取温度值 TL = Read_DS18B20(); TH = Read_DS18B20(); // 计算温度值 TL >>= 4; TH >>= 4; TH <<= 4; TH |= TL & 0x0F; TH <<= 1; // 存储温度值 TL = Read_DS18B20(); TH |= Read_DS18B20() << 8; // 存储温度值到全局变量中 TL >>= 4; TH |= TL << 8; TH >>= 1; } // 延时函数,延时ms毫秒 void delay(uchar ms) { uint i, j; for (i = 0; i < ms; i++) { for (j = 0; j < 110; j++); } } // 向LCD1602写入命令 void LCD_Write_Cmd(uchar cmd) { P2 &= 0x0F; P2 |= cmd & 0xF0; P2 &= 0xFC; P2 |= 0x01; delay(1); P2 &= 0xFE; delay(5); } // 向LCD1602写入数据 void LCD_Write_Data(uchar dat) { P2 &= 0x0F; P2 |= dat & 0xF0; P2 |= 0x04; P2 &= 0xFD; P2 |= 0x01; delay(1); P2 &= 0xFE; delay(5); } // 初始化LCD1602液晶显示屏 void LCD_Init(void) { LCD_Write_Cmd(0x38); LCD_Write_Cmd(0x0C); LCD_Write_Cmd(0x06); LCD_Write_Cmd(0x01); } // 在LCD1602液晶显示屏上显示字符串 void LCD_Show_String(uchar x, uchar y, uchar *str) { uchar i; if (y == 0) { LCD_Write_Cmd(0x80 + x); } else { LCD_Write_Cmd(0xC0 + x); } for (i = 0; str[i] != '\0'; i++) { LCD_Write_Data(str[i]); } } // 在LCD1602液晶显示屏上显示温度值 void LCD_Show_Temperature(uchar x, uchar y) { uchar buf[16]; sprintf(buf, "Temperature: %d.%dC", TH >> 4, TH & 0x0F); LCD_Show_String(x, y, buf); } ``` 4. 上传程序到atc89c51单片机,并将ds18b20温度传感器和LCD1602液晶屏幕连接到atc89c51单片机。 5. 启动atc89c51单片机,你应该能够看到LCD1602液晶屏幕上显示温度值。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值