69,371
社区成员
发帖
与我相关
我的任务
分享
#include<reg52.h>
sbit DQ = P3^0;
unsigned char code
tab[] = {0xc0,0xf9,0xa4,0xb0,0x92,0x82,0xf8,0x80,0x90};
void delay(int i)
{
while(i--);
}
void tdelay(int useconds)
{
int s;
for(s=0;s<useconds;s++)
;
}
unsigned char ow_reset(void) {
unsigned char presence;
DQ=0;
tdelay(29);
DQ=1;
tdelay(3);
presence = DQ;
tdelay(25);
return(presence);
}
void write_bit(char bitval) {
DQ=0;
if(bitval==1) DQ=1;
tdelay(5);
DQ = 1;
}
void write_byte(char val) {
unsigned char i;
unsigned char temp;
for (i=0;i<8;i++) {
temp=val>>i;
temp&=0x01;
write_bit(temp);
}
tdelay(5);
}
unsigned char read_bit(void){
unsigned char i;
DQ=0;
DQ=1;
for(i=0;i<3;i++);
return(DQ);
}
unsigned char read_byte(void){
unsigned char i;
unsigned char value=0;
for(i=0;i<8;i++){
if(read_bit())value|=0x01<<i;
tdelay(6);
}
return(value);
}
unsigned int read_temperature(void){
unsigned char get[10];
unsigned char temp_lsb,temp_msb;
unsigned int t;
unsigned char k;
ow_reset();
write_byte(0xcc);
write_byte(0x44);
tdelay(5);
ow_reset();
write_byte(0xcc);
write_byte(0xbe);
for(k=1;k<2;k++){get[k]=read_byte();}
temp_msb=get[1];
temp_lsb=get[0];
t=temp_msb*256+temp_lsb;
t=t&0x0ff0;
if(t<0xff&&t>0xf0)
t=(-1)*t;
return t>>4;
}
void main(void)
{unsigned char temp,bw,sw,gw,tempd;
while(1)
{temp=read_temperature();
bw=temp/100;
tempd=temp%10;
if(225>temp>=0)
{
P2=0x01;
P0=tab[bw];
delay(1000);
P2=0x00;
P2=0x02;
P0=tab[sw];
delay(1000);
P2=0x00;
P2=0x04;
P0=tab[sw];
delay(1000);
P2=0x00;
P2=0x08;
P0=0xc6;
delay(1000);
P2=0x00;
}
if(temp>=40)
{
P1=0xff;
}
else
{
P1=0x00;
}} }