利用at89c51和18B20温度传感器实现对环境温度的测量,并实时显示温度值。要求: a.利用DS18B20进行温度检测; b.能利用数码管正确显示温度信息,显示位数3位; c.环境温度变化时,温度显示跟着变化; 能利用键盘预置温度报警范围,并在超出温度范围后报警。
时间: 2024-03-31 20:33:18 浏览: 13
这是一个具体的嵌入式系统项目,需要一定的硬件和软件开发能力。以下是一些大致的思路和步骤:
1. 硬件设计:通过at89c51单片机与18B20温度传感器进行连接,并连接数码管和键盘。
2. 软件设计:编写单片机的程序,利用18B20温度传感器进行温度检测,并将温度值转化为数码管可以显示的格式。同时,通过读取键盘输入,可以预置温度报警范围,并在超出范围后进行报警。
3. 具体实现步骤如下:
- 连接硬件:将18B20温度传感器接到at89c51单片机的引脚上,数码管和键盘也需要连接到单片机引脚上。
- 编写程序:程序需要实现以下功能:
a. 初始化:包括对18B20传感器和数码管的初始化。
b. 温度检测:通过18B20传感器获取当前温度值。
c. 数码管显示:将温度值转化为数码管可以显示的格式,并进行显示。
d. 报警检测:读取键盘输入,预置温度报警范围,并在超出范围后进行报警。
- 调试:在程序编写完成后,需要进行调试,确保程序能够正常运行,并能够正确显示温度信息和进行报警。调试时可以利用仿真器进行单步调试,或者通过串口输出进行调试。
4. 最终实现:将程序烧录到单片机中,并将硬件连接好,即可实现对环境温度的测量和实时显示,以及温度报警功能。
相关问题
atc89c51单片机ds18b20温度传感器LCD1602显示温度
要实现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液晶屏幕上显示温度值。
在89c52通过lcd1602显示DS18b20温度传感器模拟温度值
好的,首先需要连接好DS18B20温度传感器和LCD1602液晶屏。然后需要使用89C52单片机读取DS18B20温度传感器的模拟温度值,并将其显示在LCD1602液晶屏上。
以下是一个基本的程序框架:
```c
#include <reg52.h>
#include <lcd.h>
#include <ds18b20.h>
void main()
{
float temp;
char str[16];
lcd_init(); // 初始化LCD1602
ds18b20_init(); // 初始化DS18B20
while (1)
{
temp = ds18b20_get_temp(); // 读取DS18B20温度传感器的温度值
sprintf(str, "Temp: %.2f C", temp); // 将温度值转化为字符串
lcd_puts(str); // 在LCD1602上显示温度值
delay_ms(500); // 延时一段时间后再继续循环
lcd_clear(); // 清空LCD1602上的显示内容
}
}
```
需要注意的是,本程序中使用了ds18b20.h和lcd.h两个头文件,这两个头文件需要自行编写或从互联网上下载。
另外,需要连接DS18B20温度传感器的数据线到89C52单片机的P1口第0位上,连接LCD1602液晶屏的数据线到89C52单片机的P2口上。
希望这个程序框架能够对你有所帮助!