新闻中心

EEPW首页>嵌入式系统>设计应用> DS18B20延时函数版

DS18B20延时函数版

作者: 时间:2016-11-30 来源:网络 收藏

//---------读1字节函数------------
uchar readbyte()
{
uchar i,byte=0;
for(i=0;i<8;i++)
{
Dq=0;
byte>>=1;
Dq=1;
if(Dq)
{
byte=byte|0x80;
}
delay34us();
}
return byte;
}

//-----------写1字节函数--------
void writebyte(uchar byt)
{
uchar i;
for(i=0;i<8;i++)
{
Dq=0;
Dq=byt&0x01;
delay34us();
Dq=1;
byt>>=1;
}
}

//---------温度读取函数--------
uint readtemp()
{
uint temp=0;
uchar TH,TL;
if(init18b20()!=3)return 1;//启动失败返回值1
writebyte(0xcc);
writebyte(0x44);
;;
if(init18b20()!=3)return 1; //启动失败返回值1
writebyte(0xcc);
writebyte(0xbe);
TL=readbyte();
TH=readbyte();
temp=TH;
temp<<=8;
temp=temp+TL;
temp=temp*0.0625*10; //乘以10取出小数部分
return temp;
}


//------------主函数----------

void main()
{
uint num=0;
TMOD=0x50;
TH1=0xff;
TL1=0x60;
EA=1;
ET1=1;
TR1=1;
rst(); //看门狗
while(1)
{
start:num=readtemp();
if(num==1) //启动失败数码管最高位设置为1
{
warning=1; //启动失败报警变量设置为 1
P0=seg7[1];
P2=0xfe;
delay(40);
goto start; //启动失败重新启动判断,直到成功才显示温度数值,然后启动判断失败1消失。
}
rst();//看门狗
warning=num;
P0=seg7[num/100];
P2=0xdf;
delay(10);
P0=seg7[num%100/10];
dec=0;
P2=0xbf;
delay(10);
P0=seg7[num%100%10];
dec=1;
P2=0x7f;
delay(10);
}
}


上一页 1 2 下一页

关键词:DS18B20延时函

评论


技术专区

关闭