ds18b20 c51代码
时间: 2023-07-09 13:47:40 浏览: 100
ds.rar_51单片机ds18b20驱动c代码
下面是DS18B20在C51单片机上的代码示例:
```c
#include<reg51.h>
#define DQ P3_4
typedef unsigned char uchar;
typedef unsigned int uint;
uchar code table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
uchar Ds18b20Init()
{
uchar dat;
DQ = 1;
delay(2);
DQ = 0;
delay(80);
DQ = 1;
delay(10);
dat = DQ;
delay(10);
return dat;
}
void Ds18b20WriteByte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
DQ = 0;
_nop_();
DQ = dat&0x01;
delay(5);
DQ = 1;
dat >>= 1;
}
}
uchar Ds18b20ReadByte()
{
uchar i,dat = 0;
for(i=0;i<8;i++)
{
dat >>= 1;
DQ = 0;
_nop_();
DQ = 1;
delay(2);
if(DQ)
dat |= 0x80;
delay(5);
}
return dat;
}
void Ds18b20ChangTemp()
{
Ds18b20Init();
Ds18b20WriteByte(0xcc);
Ds18b20WriteByte(0x44);
}
void Ds18b20ReadTempCom()
{
Ds18b20Init();
Ds18b20WriteByte(0xcc);
Ds18b20WriteByte(0xbe);
}
int Ds18b20ReadTemp()
{
uchar temp1,temp2;
int temp;
Ds18b20ChangTemp();
Ds18b20ReadTempCom();
temp1 = Ds18b20ReadByte();
temp2 = Ds18b20ReadByte();
temp = temp2<<8|temp1;
return temp;
}
void main()
{
uchar i,TempH,TempL;
int Temp;
while(1)
{
Temp = Ds18b20ReadTemp();
TempH = Temp/16;
TempL = Temp%16;
P0 = 0x00;
P2 = 0xfe;
P0 = table[TempH];
delay(100);
P0 = 0x00;
P2 = 0xfd;
P0 = table[TempL];
delay(100);
}
}
```
上面的代码中,我们使用了P3.4引脚来连接DS18B20传感器的数据线。程序中的函数分别用于初始化DS18B20、写入一个字节、读取一个字节、转换温度、读取温度等操作。最后,在主函数中通过循环不断地读取温度值并显示在数码管上。
阅读全文