您的位置 首页 电子

温度传感器18B20程序事例

该程序为通过18B20,测量温度,并将温度的整数值在两个数码管中显示出来。该程序只适用于系统只有一个18B20,没有检测多个18B20的功能。另

该程序为经过18B20,丈量温度,并将温度的整数值在两个数码管中显现出来。

该程序只适用于体系只需一个18B20,没有检测多个18B20的功用。

别的,该程序未进行温度的正式判别,默许环境温度高于0度。

#include

#include

#define uint unsigned int

#define uchar unsigned char

sbit DQ=P3^3; // 18B20的数据位

uint code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

uint time=0;

//沿时1ms的函数

void Delay1ms()

{

uint i,j;

for(i=0;j<4;i++)

{

for(j=0;j<33;j++)

{

}

}

}

//沿时nms的函数

void Delaynms(uint x)

{

uint i;

for(i=0;i

{

Delay1ms();

}

}

//18B20初始化函数

bit Init_18B20()

{

bit flag;

DQ=1;

for(time=0;time<2;time++)

{

}

DQ=0;

for(time=0;time<200;time++)

{

}

DQ=1;

for(time=0;time<15;time++)

{

}

flag=DQ;

for(time=0;time<200;time++)

{

}

return flag;

}

//从18B20里读出一个字节的函数

uchar Read_18B20()

{

uchar i,result;

for(i=0;i<8;i++)

{

DQ=1;

_nop_();

DQ=0;

_nop_();

DQ=1;

for(time=0;time<2;time++)

{

}

result>>=1;;

if(DQ==1)

{

result|=0x80;

}

for(time=0;time<20;time++)

{

}

}

return result;

}

//往18B20里写一个字节的函数

void Write_18B20(uint cmd)

{

uint i;

for(i=0;i<8;i++)

{

DQ=1;

_nop_();

DQ=0;

_nop_();

DQ=(cmd&0x01);

for(time=0;time<15;time++)

{

}

DQ=1;

_nop_();

_nop_();

_nop_();

_nop_();

cmd>>=1;

for(time=0;time<10;time++)

{

}

}

}

//18B20芯片进行温度转化的函数

void Temp_Tran()

{

Init_18B20();

Write_18B20(0xcc);//越过读序列号的操作

Write_18B20(0X44); //发动温度转化

Delaynms(250);

}

//从18B20里读出温度值预备

void TempGet_Ready()

{

Init_18B20();

Write_18B20(0XCC); //越过读序列号的操作

for(time=0;time<20;time++)

{

}

Write_18B20(0XBE); //读取温度寄存器,前两个分别为温度的低位与高位

for(time=0;time<20;time++)

{

}

}

//数码管显现函数

void Dispaly(num1,num2)

{

P0=table[num2]; //P0为数码管的段挑选

P2=0xfe; //P2为数码管的位挑选

Delaynms(30);

P0=table[num1];

P2=0XFD;

Delaynms(5);

}

//主函数

void main()

{

uint temp_tl;

uint temp_th;

uint th;

//uint tl;

uint gewei;

uint shiwei;

if(Init_18B20()==0)

{

P1=0X00;

}

while(1)

{

Temp_Tran();//调用温度转化函数

_nop_();

TempGet_Ready();//为读取温度值做预备

temp_tl=Read_18B20(); // 温度值的低字节读取

temp_th=Read_18B20(); // 温度值的高字节读取

th=16*temp_th+temp_tl/16; //将温度值转化为十进制的值

gewei=th%10; // 十进制温度值的个位

shiwei=th/10; // 十进制温度值的十位

Dispaly(gewei,shiwei); //数码管显现温度值

}

}

将以上程序烧写入单片机中,数码管即可正常显现丈量到的温度。

上面程序主要是阐明18B20芯片的初始化,读取一个字节,写一个字节的进程。只需把握了,其他的功用就很简单完成。

如体系有多个18B20,只需添加检测其序号号即可。

如设定18B20的温度报警值。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/260153.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部