DS18B20的DQ引脚是说一接上,供电,DQ引脚就会输出温度信号吗?
1个回答
展开全部
DS18B20是通过程序驱动的,简单点说,就是单片机与传感器通讯,然后读出温度数据,我这里
有STC89C52单片机的驱动程序
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P3^7; //io口定义
uchar temp;
void delay2(uint z)//延时函数
{
uint i,j;
for(i=z;i>0;i--)
for(j=51;j>0;j--);
}
void init() //18B20初始化
{
uchar n;
DQ=1;
delay2(1);
DQ=0;
delay2(1);
DQ=1;
delay2(1);
n=DQ;
delay2(1);
}
void write_byte(uchar dat) //写一个字节
{
uchar i;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
delay2(1);
DQ=1;
dat=dat>>1;
}
delay2(1);
}
uchar read_byte(void) //读一个字节
{
uchar i,dat;
for(i=0;i<8;i++)
{
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay2(1);
}
return dat;
}
uchar readtemperature(void) //读取温度数据,如果实时温度为23°C,则此函数返回值为23
{
uchar a,b;
init();
write_byte(0xcc); //跳过ROM
write_byte(0x44); //启动温度测量
delay1(1);
init();
write_byte(0xcc);
write_byte(0xbe);
a=read_byte();
b=read_byte();
b<<=4;
b+=(a&0xf0)>>4;
return b;
}
void main()
{
while(1)
{
temp=readtemperature();
//display();//与温度检测无关的程序我都删掉了,由于显示器件不同,所以,显示函数你自己写吧
}
}
如有不懂,请追问
望采纳,谢谢!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询