11.05926MHz的51单片机,连接DS18B20和LCD1602以及三个按键,一个键控制显示温度设定报警值调节再按一下完成温度报警值设定,一个键调节温度报警值值加,一个键调节调节温度报警值减,显示内容为WD:采集的温度保留后两位小数并带有℃单位
时间: 2023-10-10 09:10:12 浏览: 46
这是一个涉及到51单片机、DS18B20、LCD1602和按键的温度监测系统。下面是一些可能的实现步骤:
1. 首先需要连接硬件,将DS18B20和LCD1602以及按键与51单片机连接起来。具体的连接方式可以参考相关的资料或者手册。
2. 通过DS18B20读取温度数据。DS18B20是一种数字温度传感器,通过单总线接口与单片机通信。具体的数据读取方式可以参考DS18B20的手册或者相关的资料。
3. 将温度数据显示在LCD1602上。LCD1602是一种16x2字符型液晶显示器,可以通过4位并行接口与单片机通信。具体的显示方式可以参考LCD1602的手册或者相关的资料。
4. 实现按键的功能。根据题目描述,有三个按键,分别是设定键、加键和减键。设定键用于控制显示温度设定报警值调节,加键和减键用于调节温度报警值。具体的按键实现方式可以参考相关的资料或者手册。
5. 实现温度报警功能。根据题目描述,当温度超过设定的报警值时,需要进行提示。具体的实现方式可以利用51单片机的中断功能或者定时器来实现。
6. 显示温度数据。根据题目描述,需要将采集的温度保留后两位小数并带有℃单位。具体的显示方式可以参考相关的资料或者手册。
综上所述,这是一个比较复杂的系统,需要涉及到多个模块和技术。如果你对其中的某些部分不熟悉,建议先学习相关的基础知识。
相关问题
11.05926MHz的51单片机和DS18B20和LCD1602和三个按键,实现功能为显示采集的温度,显示温度格式为WD:采集的温度保留小数点后两位并带有摄氏度单位,一个按键设置报警温度值的设定,在按一下完成设置,一个按键对报警温度值设定加调整,一个按键对设定报警温度值减调整
以下是基于51单片机的代码实现,需要注意的是,由于不知道具体硬件连接,代码中的引脚定义需要根据实际情况进行修改。
```c
#include <reg51.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ = P1^0;
sbit RS = P2^0;
sbit RW = P2^1;
sbit EN = P2^2;
sbit KEY1 = P3^0;
sbit KEY2 = P3^1;
sbit KEY3 = P3^2;
void Init_DS18B20();
uchar Read_DS18B20();
void Write_DS18B20(uchar dat);
void Display_Temperature(float t);
void Display_Alarm_Temperature(float t);
uchar Get_Key();
void Delay(uint t);
void main()
{
float temperature = 0.0;
float alarm_temperature = 25.0;
uchar key = 0;
uchar display_alarm_temperature_flag = 0;
Init_DS18B20();
while (1)
{
temperature = Read_DS18B20();
Display_Temperature(temperature);
key = Get_Key();
if (key == 1)
{
display_alarm_temperature_flag = 1;
while (Get_Key() == 1);
while (display_alarm_temperature_flag)
{
Display_Alarm_Temperature(alarm_temperature);
key = Get_Key();
if (key == 1)
{
display_alarm_temperature_flag = 0;
while (Get_Key() == 1);
}
else if (key == 2)
{
alarm_temperature += 0.1;
while (Get_Key() == 2);
}
else if (key == 3)
{
alarm_temperature -= 0.1;
while (Get_Key() == 3);
}
}
}
if (temperature > alarm_temperature)
{
// 报警处理
}
Delay(1000);
}
}
void Init_DS18B20()
{
uchar i;
DQ = 1;
Delay(5);
DQ = 0;
Delay(500);
DQ = 1;
Delay(70);
Write_DS18B20(0xCC); // 跳过ROM指令
Write_DS18B20(0x44); // 温度转换指令
}
uchar Read_DS18B20()
{
uchar i, j;
uchar ds18b20_data[9];
float temperature;
uchar negative_flag = 0;
Write_DS18B20(0xCC); // 跳过ROM指令
Write_DS18B20(0xBE); // 读取指令
for (i = 0; i < 9; i++)
{
ds18b20_data[i] = Read_DS18B20();
}
temperature = ds18b20_data[1] << 8 | ds18b20_data[0];
if (temperature & 0x8000) // 判断温度是否为负
{
temperature = ~temperature + 1;
negative_flag = 1;
}
temperature = temperature * 0.0625;
if (negative_flag)
{
temperature = -temperature;
}
return temperature;
}
void Write_DS18B20(uchar dat)
{
uchar i;
for (i = 0; i < 8; i++)
{
DQ = 0;
DQ = dat & 0x01;
Delay(5);
DQ = 1;
dat >>= 1;
}
}
uchar Read_DS18B20()
{
uchar i;
uchar dat = 0;
for (i = 0; i < 8; i++)
{
DQ = 0;
DQ = 1;
Delay(2);
dat |= DQ << i;
Delay(5);
}
return dat;
}
void Display_Temperature(float t)
{
uchar temperature_string[16];
sprintf(temperature_string, "WD:%.2fC", t);
// 在LCD1602上显示温度
}
void Display_Alarm_Temperature(float t)
{
uchar temperature_string[16];
sprintf(temperature_string, "ALARM:%.2fC", t);
// 在LCD1602上显示报警温度
}
uchar Get_Key()
{
if (KEY1 == 0)
{
return 1;
}
else if (KEY2 == 0)
{
return 2;
}
else if (KEY3 == 0)
{
return 3;
}
else
{
return 0;
}
}
void Delay(uint t)
{
uint i, j;
for (i = 0; i < t; i++)
{
for (j = 0; j < 120; j++);
}
}
```
需要注意的是,代码中的温度转换及计算部分是根据DS18B20的数据手册进行编写,可能需要根据具体型号进行修改。同时,LCD1602的显示部分需要根据具体连接方式进行修改。
11.0592MHz的51单片机和DS18B20和ADC1602,实现温度采集显示,显示格式为WD:温度值带摄氏度单位
首先,需要将DS18B20连接到51单片机,并且连接好ADC1602液晶显示屏。然后,需要编写相应的程序,实现温度采集和显示功能。
以下是大致的步骤:
1. 初始化DS18B20和ADC1602。
2. 通过DS18B20获取温度值,并将其转换为摄氏度单位。
3. 将温度值存储到变量中。
4. 将温度值转换为字符串格式,并将其与“WD:”字符串连接起来。
5. 在液晶显示屏上显示温度值。
以下是一个简单的示例代码:
```c
#include <reg52.h>
#include <stdio.h>
#include <string.h>
#include "lcd1602.h"
#include "ds18b20.h"
sbit DQ=P3^7; //DS18B20连接到P3.7
void main()
{
unsigned char temp_str[16];
float temp;
Lcd_Init(); //初始化液晶显示屏
DS18B20_Init(DQ); //初始化DS18B20
while(1)
{
temp = DS18B20_GetTemp(DQ); //获取温度值
sprintf(temp_str, "WD:%.2fC", temp); //将温度值转换为字符串格式,并添加单位
Lcd_Show_String(0, 0, temp_str); //在液晶显示屏上显示温度值
}
}
```
注意,以上代码只是一个简单的示例,实际应用中需要根据具体情况做出相应的修改。