ds18b20温度传感器代码51
时间: 2023-09-12 07:03:12 浏览: 198
51单片机读取DS18B20温度传感器代码
5星 · 资源好评率100%
以下是基于51单片机的DS18B20温度传感器代码:
```c
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ = P3^4; // DS18B20数据线
uchar code table[]={"0123456789"}; // 数码管显示字符
/* DS18B20初始化 */
void Init_DS18B20()
{
uchar i;
DQ = 1;
_nop_();
_nop_();
_nop_();
_nop_();
DQ = 0;
_nop_();
_nop_();
_nop_();
_nop_();
DQ = 1;
_nop_();
_nop_();
i = DQ;
_nop_();
_nop_();
}
/* DS18B20写一个字节 */
void Write_DS18B20(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
DQ = 0;
_nop_();
_nop_();
DQ = dat&0x01;
_nop_();
_nop_();
_nop_();
_nop_();
DQ = 1;
dat = dat>>1;
}
}
/* DS18B20读一个字节 */
uchar Read_DS18B20()
{
uchar i,dat;
for(i=0;i<8;i++)
{
DQ = 0;
_nop_();
_nop_();
_nop_();
_nop_();
DQ = 1;
_nop_();
_nop_();
_nop_();
_nop_();
dat |= DQ<<i;
}
return dat;
}
/* DS18B20开始转换 */
void Start_DS18B20()
{
Init_DS18B20();
Write_DS18B20(0xcc); // 跳过ROM操作
Write_DS18B20(0x44); // 开始温度转换
}
/* DS18B20读温度 */
void Read_Temperature()
{
uchar i;
uint temp;
uchar a,b;
Init_DS18B20();
Write_DS18B20(0xcc); // 跳过ROM操作
Write_DS18B20(0xbe); // 读暂存器
a = Read_DS18B20(); // 读温度低8位
b = Read_DS18B20(); // 读温度高8位
temp = b;
temp <<= 8;
temp |= a;
temp = temp*0.625; // 转换为实际温度值,单位为摄氏度
for(i=0;i<4;i++)
{
P0 = 0xff; // 段选位全高
P2 = 0x7f; // 位选位选择第i+1位
P0 = table[temp%10]; // 个位数码管显示
temp /= 10;
Delay(5);
}
}
/* 延时函数 */
void Delay(uint i)
{
while(i--);
}
/* 主函数 */
void main()
{
while(1)
{
Start_DS18B20();
Delay(100);
Read_Temperature();
}
}
```
上述代码通过51单片机控制DS18B20温度传感器进行温度读取,并通过数码管进行显示。需要注意的是,DS18B20的数据线需要接在51单片机的P3.4口。
阅读全文