ds18b20温度报警C语言程序,对ds18b20温度控制C语言程序.doc

#include

#include

typedef unsigned char uchar;

typedef unsigned int uint;

uchar wbuf[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};

uchar tplsb,tpmsb;//温度低位,高位

uint temp=0;//实际温度

uint temp1=30;//报警温度

uint temp2=27;//报警温度

//sbit led=P2^1; //示警发光二极管信号引脚

sbit motor=P1^7; //电机信号输出引脚

sbit reduce=P2^1; //报警温度下减键

sbit plus=P2^0; //报警温度上加键

//bit flag1=0;

//bit flag2=0;

sbit A=P2^6;//数码管位选

sbit C=P2^7;//数码管位选

sbit DQ=P1^0;//DS18B20控制线

void delay1(uint j )

{ int i,k;

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

for(k=0;k

;

}

void delay(uint t) //延时t毫秒

{

uint i;

while(t--);

{

for(i=0;i<250;++i);//延时约1us

{}

}

}

/*产生复位脉冲初始化DS18B20*/

void Init()

{

uint i=100;

DQ=0;

while(i>0)i--;//拉低约900us

DQ=1;//拉高电平,产生上升沿

i=4;

while(i>0)i--;

}

/*等待应答脉冲*/

void Wait()

{

uint i;

while(DQ);

while(~DQ);//检测到应答脉冲

i=4;

while(i>0)i--;

}

/*读数据一位*/

bit Rebit()

{

uint i;

bit b;

DQ=0;

i++;//保持低电平至少1us

DQ=1;

i++;i++;//延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效

b=DQ;

i=9;

while(i>0)i--;//读时隙不低于60us

return(b);

}

/*读一个字节数据*/

uchar Rebyte()

{

uchar i,j=0,k=0;

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

{

k=Rebit();

j=(k<<7)|(j>>1);

}

return(j);

}

/*写一个字节数据*/

void Wrbyte(uchar b)

{

uint i,j;

bit temp;

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

{

temp=b&0x01;

b>>=1;

if(temp)

{

/*写1*/

DQ=0;

i++;i++;//延时15us

DQ=1;

i=8;

while(i>0)i--;//整个写1时隙不低于60us

}

else

{

/*写0*/

DQ=0;

i=8;

while(i>0)i--;

DQ=1;

i++;i++;

}

}

}

/*启动温度转化*/

void Convert()

{

Init();//初始化DS18B20

Wait();//等待应答

delay(1);//延时

Wrbyte(0xcc);//skip rom命令

Wrbyte(0x44);//convert T命令

}

/*读取温度值*/

void Retemp()

{

Init();//初始化DS18B20

Wait();//等待应答

delay(1);//延时

Wrbyte(0xcc);//skip rom命令

Wrbyte(0xbe);//read scratchpad(读暂存器)命令

tplsb=Rebyte();//温度低位字节(其中第四位为小数部分)

tpmsb=Rebyte();//温度高位字节(其中高五位为符号位)

temp=(tpmsb*256+tplsb)*0.0625;//转换

}

/*LED显示*/

void Display()

{

uint j=0,k=0,n;

for(n=0;n<3;n++)

{ j=temp/10;//取温度十位

k=temp%10;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值