简单的单片机温度传感器代码
时间: 2023-07-09 12:03:28 浏览: 60
以下是一个简单的单片机温度传感器代码,使用的传感器是DS18B20数字温度传感器。这里以AT89S52单片机为例,其他单片机的代码可以根据具体情况进行调整。
```c
#include <reg52.h>
#include <intrins.h>
#define DQ P1_7 //定义数据线
typedef unsigned char uchar;
typedef unsigned int uint;
//延时函数
void Delay1ms(uint i)
{
uchar j;
while(i--)
{
for(j=0; j<110; j++);
}
}
//初始化DS18B20
uchar Init_DS18B20()
{
uchar result;
DQ = 1;
_nop_();
_nop_();
_nop_();
DQ = 0;
Delay1ms(20);
DQ = 1;
Delay1ms(20);
result = DQ;
Delay1ms(20);
return result;
}
//写1个字节数据到DS18B20
void Write_DS18B20(uchar dat)
{
uchar j;
for(j=0; j<8; j++)
{
DQ = 0;
_nop_();
_nop_();
DQ = dat & 0x01;
_nop_();
_nop_();
DQ = 1;
dat >>= 1;
}
}
//读1个字节数据从DS18B20
uchar Read_DS18B20()
{
uchar i, j, dat = 0;
for(i=0; i<8; i++)
{
DQ = 0;
_nop_();
_nop_();
DQ = 1;
_nop_();
_nop_();
j = DQ;
dat = (j << 7) | (dat >> 1);
}
return dat;
}
//读取温度值
int Read_Temperature()
{
uchar TL, TH;
int temp;
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0x44);
Delay1ms(50);
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe);
TL = Read_DS18B20();
TH = Read_DS18B20();
temp = TH;
temp <<= 8;
temp |= TL;
return temp;
}
//主函数
void main()
{
int temp;
while(1)
{
temp = Read_Temperature();
//将温度值转换为实际温度
temp = temp * 0.0625;
//将温度值显示在数码管上或者通过串口发送出去
//...
Delay1ms(1000);
}
}
```
上述代码中,需要注意的是DS18B20传感器的初始化过程,以及读取温度值时需要写入指令和等待一定时间。另外,温度值读取到后需要通过一定的计算转换为实际温度值。