ds18b20温度传感器C51代码
时间: 2023-12-11 18:03:42 浏览: 104
以下是基于51单片机DS18B20温度传感器设计的温控系统的C语言源代码,其中包含了DS18B20温度传感器的读取和温度计算的代码:
```c
#include <reg52.h>
#include <intrins.h>
#define DQ P2_0
typedef unsigned char uchar;
typedef unsigned int uint;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71
};
void delay(uint x)
{
while(x--);
}
void ds_init()
{
uchar i;
DQ=1;
_nop_();
_nop_();
_nop_();
DQ=0;
delay(100);
DQ=1;
delay(10);
i=DQ;
delay(100);
}
void ds_write_byte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
DQ=0;
_nop_();
_nop_();
DQ=dat&0x01;
_nop_();
_nop_();
DQ=1;
dat>>=1;
}
}
uchar ds_read_byte()
{
uchar i,dat;
for(i=0;i<8;i++)
{
DQ=0;
_nop_();
_nop_();
dat>>=1;
if(DQ) dat|=0x80;
_nop_();
_nop_();
DQ=1;
}
return dat;
}
void display(uchar dat)
{
LSA=1;
LSB=1;
LSC=1;
P0=table[dat];
delay(1000);
}
void main()
{
uchar a,b,c,d,e,f;
uint temp;
ds_init();
ds_write_byte(0xcc);
ds_write_byte(0x44);
ds_init();
ds_write_byte(0xcc);
ds_write_byte(0xbe);
a=ds_read_byte();
b=ds_read_byte();
temp=b;
temp<<=8;
temp|=a;
if(temp&0x8000)
{
temp=~temp+1;
f=1;
}
else f=0;
c=temp&0xff;
d=temp>>8;
e=d*10/16;
d=d*10%16;
display(e);
display(d);
display(0x0c);
display(c);
if(f==1) display(0x0a);
else display(0x09);
while(1);
}
```
阅读全文