基于51单片机DS18B20温度传感器的C语言程序和电路

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于51单片机DS18B20温度传感器的C语言程序和电路

DS18B20在外形上和三极管很像,有三只脚。电压范围为3.0 V至5.5 V 无需备用电源测量温度位温度转换为12位数字格式最大值为750毫秒用户可定义的非易失性温度报警设置应用范围包敏感系统。

下面是DS18B20的子程序,本人用过完全可行的:

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit DQ=P2^0;

void reset(); //DS18B20 void write_byte(uchar val); //DS18B20写命令函数

uchar read_byte(void); //DS18B20读1字节函数

void read_temp(); //温度读取函数

void work_temp(); //温度数据处理函数

uchar data temp_data[2]={0x00,0x00};

uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //对于温度显示值值

uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x0数部分查表

main()

{

while(1)

{

自己添加;

}

}

void delay1(uint t)

{

for(;t>0;t--);

}

///////温度控制子函数

void reset()

{

uchar presence=1;

while(presence)

{

while(presence)

{

DQ=1;_nop_();_nop_();

DQ=0;

delay1(50);

DQ=1;

delay1(6);

presence=DQ;

}

delay1(45);

presence=~DQ;

}

DQ=1;

}

void write_byte(uchar val)

{

uchar i;

for(i=8;i>0;i--)

{

DQ=1;_nop_();_nop_();

DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();

DQ=val&0x01;

delay1(6);

val=val/2;

}

DQ=1;

_nop_();

}

uchar read_byte(void)

{

uchar i;

uchar value=0;

for(i=8;i>0;i--)

{

DQ=1;_nop_();_nop_();

value>>=1;

DQ=0;

_nop_();_nop_();_nop_();_nop_();

DQ=1;_nop_();_nop_();_nop_();_nop_();

if(DQ)value|=0x80;

delay1(6);

}

DQ=1;

return(value);

}

void read_temp()

{

reset();

write_byte(0xcc);

write_byte(0xbe);

temp_data[0]=read_byte();

temp_data[1]=read_byte();

reset();

write_byte(0xcc);

write_byte(0x44);

}

void work_temp()

{

if(temp_data[1]>127)

{

temp_data[1]=(256-temp_data[1]);

temp_data[0]=(256-temp_data[0]);

n=1; //需要前面宏定义

}

display[4]=temp_data[0]&0x0f; //低位的低4位

display[0]=ditab[display[4]]; //小数点后的数值

display[4]=((temp_data[0]&0xf0) >> 4)|((temp_data[1]&0x0f)<<4); //小数display[3]=display[4] / 100;

display[1]=display[4] % 100;

display[2]=display[1] / 10;

display[1]=display[1] % 10;

}

电路:

相关文档
最新文档