写c51单片机的温度传感器的keil代码
时间: 2023-12-01 09:05:41 浏览: 200
以下是基于C51单片机的温度传感器DS18B20的Keil代码:
```c
#include <reg52.h>
#include <stdio.h>
#define DQ P2_0 // 定义DQ引脚为P2.0
typedef unsigned char uchar;
typedef unsigned int uint;
uchar code Table[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; // 用于将16进制数转换为字符
// 延时函数
void delay(uint i)
{
while(i--);
}
// DS18B20初始化函数
uchar Init_DS18B20(void)
{
uchar i;
DQ = 1;
delay(8);
DQ = 0;
delay(80);
DQ = 1;
delay(10);
i = DQ;
delay(10);
return i;
}
// DS18B20写1函数
void Write_DS18B20_1(void)
{
DQ = 0;
delay(5);
DQ = 1;
delay(80);
}
// DS18B20写0函数
void Write_DS18B20_0(void)
{
DQ = 0;
delay(80);
DQ = 1;
delay(5);
}
// DS18B20读函数
uchar Read_DS18B20(void)
{
uchar i, dat = 0;
for(i = 0; i < 8; i++)
{
DQ = 0;
delay(5);
DQ = 1;
delay(5);
dat >>= 1;
if(DQ)
dat |= 0x80;
delay(50);
}
return dat;
}
// 读取DS18B20温度
int Read_DS18B20_Temp(void)
{
uchar tempL, tempH;
int Temp;
Init_DS18B20();
Write_DS18B20_1();
Write_DS18B20_0();
tempL = Read_DS18B20();
tempH = Read_DS18B20();
Temp = tempH;
Temp <<= 8;
Temp |= tempL;
return Temp;
}
// 将16进制数转换为字符
void Hex_To_Char(uchar hex, uchar *c)
{
*c++ = Table[hex >> 4];
*c = Table[hex & 0x0f];
}
// 主函数
void main()
{
uchar temp[5];
int Temp;
while(1)
{
Temp = Read_DS18B20_Temp();
Temp = Temp * 0.625;
Hex_To_Char(Temp >> 8, &temp[0]);
Hex_To_Char(Temp & 0xff, &temp[2]);
temp[4] = 0;
printf("Temperature: %s\n", temp);
delay(1000);
}
}
```
注:该代码需要通过单片机与DS18B20温度传感器进行连接才能正常运行。
阅读全文