DS18B20的DQ引脚是说一接上,供电,DQ引脚就会输出温度信号吗?

 我来答
太阳_羊
2015-05-19 · TA获得超过201个赞
知道小有建树答主
回答量:203
采纳率:0%
帮助的人:68.9万
展开全部

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();//与温度检测无关的程序我都删掉了,由于显示器件不同,所以,显示函数你自己写吧
}
}




如有不懂,请追问

望采纳,谢谢!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式