51单片机温度显示代码
时间: 2023-06-18 10:05:25 浏览: 113
以下是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引脚。
阅读全文