#include <aT89X52.H rel='nofollow' onclick='return false;'>
#define DQ P3_0
unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
unsigned char fuhao;
void delay1(int d1,int d2)
{
int i,j;
for(i=0;i<d1;i++)
{ ;
for(j=0;j<d2;j++)
;
}
}
void xianshi(unsigned int t)//显示数据(共阳)
{unsigned char g,s;
//w=p;
//temp=t/2;
s=t/10;
g=t%10;
{
P3_3=0;//4
P3_4=0;//4
P3_5=0;//3
P3_6=0;//1
P3_7=0;//2
}
P2=dispcode[g];
P2_7=0;
P3_5=1;//1;
delay1(4,60);
{
P3_3=0;//4
P3_4=0;//4
P3_5=0;//3
P3_6=0;//1
P3_7=0;//2
}
P2_7=1;
P2=dispcode[s];
P3_4=1;//1;
delay1(4,60);
if(fuhao==1)
{{
P3_3=0;//4
P3_4=0;//4
P3_5=0;//3
P3_6=0;//1
P3_7=0;//2
}
P2_7=1;
P2=0xbf;
P3_3=1;//1;
delay1(4,60);}
}
void show_poit(unsigned int t)//显示数据(共阳)
{unsigned char g;
//w=p;
//temp=t/2;
g=t;
{
P3_3=0;//4
P3_4=0;//4
P3_5=0;//3
P3_6=0;//1
P3_7=0;//2
}
P2=dispcode[g];
P3_6=1;//1;
delay1(4,50);
{
P3_3=0;//4
P3_4=0;//4
P3_5=0;//3
P3_6=0;//1
P3_7=0;//2
}
P2=0xC6;
P3_7=1;//1;
delay1(4,50);
}
void delay(unsigned char time)
{
//unsigned char s;
//for(s=0;s<time;s++);
while(--time);
}
unsigned char ow_reset(void)
{
unsigned char presence;
DQ=0;
delay(250);//保持DQ低480US
DQ=1;
delay(10);
presence=DQ;
delay(211);
return(presence);
}
void write_bit(char bitval)
{
DQ=0;
if(bitval==1)
DQ=1;
delay(29);
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);
}
}
unsigned char read_bit(void)
{
//unsigned char i;
DQ=0;
delay(1);
DQ=1;
delay(5);
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;
delay(29);
}
return(value);
}
void main(void)
{
unsigned int temp,temp1;
unsigned char lt,ht;
while(1)
{
for(;;)
{
if(ow_reset())
break;
}
write_byte(0xcc);
write_byte(0x44);
for(;;)
{
if(DQ==1)
break;
}
for(;;)
{
if(ow_reset())
break;
}
write_byte(0xcc);
write_byte(0xbe);
lt=read_byte();
ht=read_byte();
for(;;)
{
if(ow_reset())
break;
}
temp=(unsigned int)lt;
temp1=(unsigned int)ht;
temp1=temp1<<8;
temp=temp1+temp;
if(temp>=0x1000)
{
temp=~temp+1;
fuhao=1;
}
else fuhao=0;
temp1=temp;
temp=temp/16;
temp1=temp1%16;
temp1=temp1*625;
temp1=temp1/1000;
xianshi(temp);
show_poit(temp1);
}
}