51单片机ds18b20代码
时间: 2023-11-11 11:06:32 浏览: 113
DS18B20代码51单片机代码
5星 · 资源好评率100%
DS18B20是一种数字温度传感器,可以通过单总线接口与51单片机进行通信。以下是51单片机DS18B20的代码示例:
```
#include <reg52.h>
#include <intrins.h>
#define DQ P2_0
typedef unsigned char uchar;
typedef unsigned int uint;
uchar code table[] = "0123456789";
void delay(uint i)
{
while(i--);
}
void write_byte(uchar dat)
{
uchar i;
for(i=0; i<8; i++)
{
DQ = 0;
_nop_();
_nop_();
DQ = dat & 0x01;
dat >>= 1;
delay(6);
DQ = 1;
}
}
uchar read_byte()
{
uchar i, dat = 0;
for(i=0; i<8; i++)
{
DQ = 0;
_nop_();
_nop_();
dat >>= 1;
if(DQ) dat |= 0x80;
delay(6);
DQ = 1;
}
return dat;
}
void init_ds18b20()
{
DQ = 1;
delay(6);
DQ = 0;
delay(60);
DQ = 1;
delay(6);
}
void start_ds18b20()
{
init_ds18b20();
write_byte(0xcc);
write_byte(0x44);
}
uchar read_ds18b20()
{
uchar temp, TL, TH;
start_ds18b20();
init_ds18b20();
write_byte(0xcc);
write_byte(0xbe);
TL = read_byte();
TH = read_byte();
temp = TH;
temp <<= 8;
temp |= TL;
return temp;
}
void main()
{
uchar i, j, temp;
uint t;
while(1)
{
temp = read_ds18b20();
t = temp * 0.625;
for(i=0; i<4; i++)
{
j = t % 10;
t /= 10;
P0 = table[j];
delay(1000);
P0 = 0x00;
delay(1000);
}
}
}
```
这段代码实现了读取DS18B20传感器的温度值,并将其显示在数码管上。其中,`write_byte()`函数用于向DS18B20写入数据,`read_byte()`函数用于从DS18B20读取数据,`init_ds18b20()`函数用于初始化DS18B20,`start_ds18b20()`函数用于启动DS18B20的温度转换,`read_ds18b20()`函数用于读取DS18B20的温度值。
阅读全文