|
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit DQ=P3^7;
sbit DIAN = P1^7;
sbit C1 = P2^0;
sbit C2 = P2^1;
sbit C3 = P2^2;
sbit C4 = P2^3;
uchar x=0;
signed char m;
uchar n;
uint z;
uint c;
uchar num[4]={0};
uchar code LEDData[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void display(unsigned char k);
void delay( int o)
{
while(o--);
}
void init_DS18b20 (void)
{
unsigned char x=0;
DQ = 1;
delay(8);
DQ = 0;
delay(100);
DQ = 1;
delay(20);
x = DQ;
delay(20);
}
uchar Read_One_Byte(void)
{
uchar i=0;
uchar dat=0;
for(i=8;i>0;i--)
{
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay(4);
}
return(dat);
}
void Write_One_Byte(uchar dat)
{
uchar i=0;
for(i=8;i>>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay(5);
DQ=1;
dat>>=1;
}
}
unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
init_DS18B20();
Write_One_Byte(0xCC);
Write_One_Byte(0x44);
init_DS18B20();
Write_One_Byte(0xCC);
Write_One_Byte(0xBE);
a=Read_One_Byte();
b=Read_One_Byte();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t=tt*10+0.5;
return(t);
}
void check_wendu(void)
{
uint a,b;
c=ReadTemperature();
a=c/100;
b=c/10-a*10;
m=c/10;
if(m<=0)
{
m=0;
}
n=c-a*100-b*10;
}
void Disp_init(void)
{
P1 =0x7f;
P2 = 0xf8;
delay(200);
P2 = 0xf4;
delay(200);
P2 = 0xf2;
delay(200);
P2 = 0xf1;
delay(200);
P2 = 0xFF;
}
void Disp_Temperature(void)
{
int i=0;
for(i=0;i<4;i++)
{
display(i);//0,1
delay(1000);
P1 = 0XFF; }
}
void display(unsigned char k)
{//s=0 dat=1
//unsigned char n = 0x01;
switch(k)
{
case 0:
C1=1;C2=0;C3=0;C4=0;
P1 =LEDData[m/10];//P1=Seg[h/10];
break;
case 1:
C1=0;C2=1;C3=0;C4=0;
P1 =LEDData[m%10];
//P1=Seg[h%10];
break;
case 2:
C1=0;C2=0;C3=1;C4=0;
P1 =0x9c;//P1=0xbf;
break;
case 3:
C1=0;C2=0;C3=0;C4=1;
P1 =0xc6;//P1=Seg[m/10] ;
break;
}}
void main(void)
{
while(1)
{
unsigned int ReadTemperature();
check_wendu();
Disp_init();
display();
Disp_Temperature();
}
}
|
|