18b20驱动51程序
时间: 2023-07-28 07:07:03 浏览: 30
18b20是一款数字温度传感器,可以通过单总线协议和单片机进行通信。以下是一个基本的18b20驱动51单片机的程序,可以实现读取传感器的温度值:
```c
#include <reg52.h>
#define DQ P2_0
void delay(unsigned int i)
{
while(i--);
}
void init_18b20()
{
unsigned char flag;
EA = 0;
DQ = 1;
delay(8);
DQ = 0;
delay(80);
DQ = 1;
delay(10);
flag = DQ;
delay(10);
EA = 1;
}
unsigned char read_18b20()
{
unsigned char i, dat;
EA = 0;
DQ = 1;
delay(2);
DQ = 0;
delay(5);
DQ = 1;
delay(3);
i = DQ;
delay(5);
dat = 0;
for(i=0; i<8; i++) {
DQ = 0;
delay(3);
DQ = 1;
delay(5);
dat >>= 1;
if(DQ) dat |= 0x80;
delay(4);
}
EA = 1;
return dat;
}
void main()
{
unsigned char temp_l, temp_h;
unsigned int temp;
init_18b20();
while(1) {
read_18b20();
temp_l = read_18b20();
temp_h = read_18b20();
temp = temp_h;
temp <<= 8;
temp |= temp_l;
temp = (temp*0.625)*10; // 转换为摄氏度
// 处理温度值
}
}
```
这个程序中,`init_18b20()` 函数用于初始化18b20传感器,`read_18b20()` 函数用于读取传感器的温度值,`main()` 函数中则是循环读取温度值并处理。具体的传感器通信协议可以参考18b20的数据手册。