?? 18b20.c
字號:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code segdata[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
uchar code segbit[]={0x10,0x20,0x40,0x80};
uchar disbuf[4];
bit flag;
sbit DQ=P3^0;
float temperature;
void delay(uint z)
{
while(z--);
}
void display(uint z)
{
uchar a;
disbuf[1]=z/100%10;
disbuf[2]=z/10%10;
disbuf[3]=z%10;
for(a=0;a<4;a++)
{
if(a==2)
P1=segdata[disbuf[a]]&0x7f;
else
P1=segdata[disbuf[a]];
P2=segbit[a];
delay(50);
P1=0xff;
}
P1=0xff;
}
Init_DS18B20()
{
uchar x;
DQ=1;
delay(8);
DQ=0;
delay(80);
DQ=1;
delay(14);
x=DQ;
delay(20);
}
ReadOneChar(void)
{
uchar i;
uchar dat;
for(i=8;i>0;i--)
{
DQ=1;
delay(1);
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay(4);
}
return(dat);
}
void WriteOneChar(uchar dat)
{
uchar i;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay(5);
DQ=1;
dat>>=1;
}
delay(4);
}
ReadTemperature(void)
{
uchar tempL,tempH;
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0x44);
delay(100);
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0xbe);
tempL=ReadOneChar();
tempH=ReadOneChar();
if((tempH&0xf0))
{
tempH=~tempH;
tempL=~tempL;
temperature=(((tempH&0x0f)*256)+tempL+1)*0.625;
disbuf[0]=10;
}
else
{
temperature=(((tempH&0x0f)*256)+tempL)*0.625;
disbuf[0]=temperature/1000;
}
// delay(50);
return(temperature);
}
void main()
{
float i;
while(1)
{
i=ReadTemperature();
display(i);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -