使用STC89C51单片机显示温度
时间: 2023-09-18 22:09:16 浏览: 95
好的,我可以帮你解答这个问题。
首先,你需要通过一个温度传感器来获取温度值,例如DS18B20数字温度传感器。
接着,你需要将传感器的数据转换为单片机可以处理的模拟信号,可以使用模数转换器(ADC)来实现。
然后,你需要将温度值显示在LCD显示屏上,可以使用单片机的GPIO口控制LCD的显示。
最后,你需要将程序烧录到单片机上,并将传感器和LCD显示屏连接到单片机上。
这是一个简单的示例代码,你可以参考一下:
```c
#include <reg51.h>
sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_EN=P2^2;
sbit LCD_D4=P2^4;
sbit LCD_D5=P2^5;
sbit LCD_D6=P2^6;
sbit LCD_D7=P2^7;
void LCD_Init();
void LCD_CMD(unsigned char cmd);
void LCD_DATA(unsigned char dat);
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s);
void DelayMs(unsigned int ms);
void Read_Temperature();
unsigned char str_temp[16];
void main()
{
LCD_Init();
while(1)
{
Read_Temperature();
LCD_Write_String(0, 0, "Temperature:");
LCD_Write_String(0, 1, str_temp);
DelayMs(500);
}
}
void LCD_Init()
{
LCD_CMD(0x02); // return home
LCD_CMD(0x28); // 4-bit mode, 2-line, 5x8 font
LCD_CMD(0x0C); // display on, cursor off, blink off
LCD_CMD(0x06); // entry mode
LCD_CMD(0x01); // clear display
}
void LCD_CMD(unsigned char cmd)
{
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
LCD_D4 = cmd >> 4;
LCD_D5 = cmd >> 5;
LCD_D6 = cmd >> 6;
LCD_D7 = cmd >> 7;
DelayMs(1);
LCD_EN = 1;
DelayMs(1);
LCD_EN = 0;
DelayMs(1);
LCD_D4 = cmd & 0x0F;
LCD_D5 = cmd & 0x1F;
LCD_D6 = cmd & 0x3F;
LCD_D7 = cmd & 0x7F;
DelayMs(1);
LCD_EN = 1;
DelayMs(1);
LCD_EN = 0;
DelayMs(1);
}
void LCD_DATA(unsigned char dat)
{
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
LCD_D4 = dat >> 4;
LCD_D5 = dat >> 5;
LCD_D6 = dat >> 6;
LCD_D7 = dat >> 7;
DelayMs(1);
LCD_EN = 1;
DelayMs(1);
LCD_EN = 0;
DelayMs(1);
LCD_D4 = dat & 0x0F;
LCD_D5 = dat & 0x1F;
LCD_D6 = dat & 0x3F;
LCD_D7 = dat & 0x7F;
DelayMs(1);
LCD_EN = 1;
DelayMs(1);
LCD_EN = 0;
DelayMs(1);
}
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
unsigned char i;
if(x<16)
{
if(y) x|=0x40;
x|=0x80;
LCD_CMD(x);
}
i=0;
while(s[i]!='\0')
{
LCD_DATA(s[i]);
i++;
}
}
void DelayMs(unsigned int ms)
{
unsigned int i, j;
for(i=0;i<ms;i++)
for(j=0;j<114;j++);
}
void Read_Temperature()
{
unsigned char temp;
unsigned char a[8];
unsigned char i;
float t;
unsigned char flag;
temp=0;
flag=0;
EA=1;
ES=1;
TR1=1;
while(flag==0);
TR1=0;
for(i=0;i<8;i++)
{
if(a[i]>48 && a[i]<58)
{
temp=temp*16+a[i]-48;
}
else if(a[i]>64 && a[i]<71)
{
temp=temp*16+a[i]-55;
}
}
t=temp/16.0;
sprintf(str_temp, "%.1fC", t);
}
void UART() interrupt 4
{
static unsigned char i;
if(RI==1)
{
a[i]=SBUF;
i++;
RI=0;
}
if(i==8)
{
flag=1;
i=0;
}
}
```
这个代码是使用串口读取DS18B20传感器的温度数据,并将温度值显示在LCD显示屏上。你需要将DS18B20连接到单片机的GPIO口,并将LCD显示屏连接到单片机的另一个GPIO口。
希望这个代码能够帮到你。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)