51单片机温度显示且显示历史温度
时间: 2023-10-29 20:34:27 浏览: 22
好的,这是一个关于51单片机的问题,您想了解如何通过51单片机实现温度显示和历史温度显示功能吗?
首先,您需要使用温度传感器来获取当前温度值,然后将其转换为数字信号并通过51单片机进行处理。您可以选择一些常用的温度传感器,例如DS18B20或LM35。
对于温度显示,您可以使用LCD显示屏来实现。通过51单片机的GPIO口将温度值转换成可显示的字符,再通过LCD显示出来。而历史温度显示,您可以使用存储芯片来存储温度数据,例如EEPROM或FLASH。每次获取到温度值后,将其存储到存储芯片中,然后通过LCD显示出来。
当然,在实现这个功能的过程中,您还需要考虑一些细节问题,例如采集温度的时间间隔、存储芯片的容量等等。希望对您有所帮助。
相关问题
51单片机温度显示代码
以下是51单片机温度显示的代码,使用的是LM35温度传感器:
```
#include <reg52.h> //头文件
#define uchar unsigned char
#define uint unsigned int
sbit DQ = P1^4; //定义DS18B20的数据引脚
uchar code table[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; //数码管显示0~9的编码
void delay(uint z) //延时函数
{
uint x, y;
for(x = z; x > 0; x--)
for(y = 110; y > 0; y--);
}
uchar Init_DS18B20() //DS18B20初始化函数
{
uchar i;
DQ = 1;
delay(2);
DQ = 0;
delay(80);
DQ = 1;
delay(10);
i = DQ;
delay(10);
return i;
}
void Write_DS18B20(uchar dat) //写一个字节
{
uchar j;
for(j = 0; j < 8; j++)
{
DQ = 0;
DQ = dat & 0x01;
delay(5);
DQ = 1;
dat >>= 1;
}
}
uchar Read_DS18B20() //读一个字节
{
uchar i, j, dat = 0;
for(j = 8; j > 0; j--)
{
DQ = 0;
DQ = 1;
i = DQ;
delay(5);
dat <<= 1;
if(i == 1) dat |= 0x01;
delay(10);
}
return dat;
}
void Convert_DS18B20() //温度转换函数
{
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0x44);
}
int Read_Temperature() //读取温度
{
uchar temp_low, temp_high;
int temperature;
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe);
temp_low = Read_DS18B20();
temp_high = Read_DS18B20();
temperature = temp_high;
temperature <<= 8;
temperature |= temp_low;
temperature = temperature * 0.625;
return temperature;
}
void Display_Temperature(int temperature) //数码管显示函数
{
uchar shiwei, gewei, temp;
temp = temperature / 10;
shiwei = temp % 10;
gewei = temperature % 10;
P0 = 0x7f;
P2 = 0xfe;
P0 = table[shiwei];
delay(1000);
P0 = 0x7f;
P2 = 0xfd;
P0 = table[gewei];
delay(1000);
}
void main()
{
int temperature;
while(1)
{
Convert_DS18B20();
delay(200);
temperature = Read_Temperature();
Display_Temperature(temperature);
}
}
```
该代码需要使用LM35温度传感器,并且连接方式如下:
- LM35的VCC引脚连接到单片机的5V电源引脚。
- LM35的GND引脚连接到单片机的GND引脚。
- LM35的OUT引脚连接到单片机的P2.0引脚。
51单片机温度显示到液晶屏
要将51单片机的温度显示到液晶屏上,需要进行以下步骤:
1. 首先,需要使用温度传感器来检测当前的温度值。可以使用LM35温度传感器,它可以将温度值转换为电压信号输出。
2. 将温度传感器的输出连接到51单片机的模拟输入引脚上,使用ADC(模拟数字转换器)将模拟信号转换为数字信号。
3. 将转换后的数字信号进行处理,计算出当前的温度值。
4. 将计算出的温度值显示到液晶屏上。液晶屏可以使用常见的16x2字符型液晶屏,通过51单片机的GPIO口来控制显示。
下面是一个简单的程序示例,可以将LM35温度传感器检测到的温度值显示到液晶屏上:
```
#include <reg51.h>
#define LCD_DATA P2
sbit RS = P1^0;
sbit EN = P1^1;
void delay_ms(unsigned int ms)
{
unsigned int i, j;
for(i = 0; i < ms; i++)
for(j = 0; j < 120; j++);
}
unsigned int get_adc_value()
{
ADC_CONTR = 0x90;
delay_ms(1);
return ADC_RES;
}
void lcd_init()
{
delay_ms(20);
lcd_cmd(0x38);
delay_ms(5);
lcd_cmd(0x38);
delay_ms(5);
lcd_cmd(0x38);
delay_ms(5);
lcd_cmd(0x0C);
delay_ms(5);
lcd_cmd(0x01);
delay_ms(5);
lcd_cmd(0x06);
delay_ms(5);
}
void lcd_cmd(unsigned char cmd)
{
RS = 0;
LCD_DATA = cmd;
EN = 1;
delay_ms(1);
EN = 0;
}
void lcd_data(unsigned char dat)
{
RS = 1;
LCD_DATA = dat;
EN = 1;
delay_ms(1);
EN = 0;
}
void lcd_display(unsigned char *str)
{
while(*str)
{
lcd_data(*str++);
}
}
void main()
{
unsigned int adc_value;
float temp;
unsigned char str[16];
lcd_init();
while(1)
{
adc_value = get_adc_value();
temp = adc_value * 0.00488; // 将ADC值转换为电压值
temp = temp * 100; // 将电压值转换为温度值
sprintf(str, "Temp: %.1f C", temp); // 将温度值格式化为字符串
lcd_cmd(0x80); // 将光标移到第一行第一列
lcd_display(str); // 在液晶屏上显示温度值
delay_ms(500);
}
}
```
在程序中,使用了get_adc_value()函数来获取模拟信号的值,并使用sprintf()函数将温度值格式化为字符串,最后通过lcd_display()函数在液晶屏上显示温度值。需要注意的是,LM35的输出电压值是10mV/℃,所以需要将读取到的ADC值进行换算,最终得到温度值。