#include <reg52.h>
#include <intrins.h>
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P1^2;
sbit DQ=P1^4;
sbit led1=P0^0;
sbit led2=P0^1;
sbit led3=P0^2;
sbit led4=P0^3;
sbit led5=P0^4;
sbit led6=P0^5;
sbit led7=P0^6;
sbit led8=P0^7;
sbit buzz=P0^6;
unsigned char a,b,c,d,e,f,g,h;
static int readtemp=0;
unsigned char s[]={"Temp:"};
unsigned char str[]={"0123456789"};
//************************************************************************
void delay(unsigned int n)//Ñó3ùoˉêy
{
unsigned i=0,j=0;
for(i=0;i<n;i++)
{
for(j=0;j<120;j++);
}
}
//*************************ds18b20****************************************
void Write_DS18B20(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ = 0;
DQ = dat&0x01;
delay(5);
DQ = 1;
dat >>= 1;
}
delay(5);
}
unsigned char Read_DS18B20(void)
{
unsigned char i;
unsigned char dat;
for(i=0;i<8;i++)
{
DQ = 0;
dat >>= 1;
DQ = 1;
if(DQ)
{
dat |= 0x80;
}
delay(5);
}
return dat;
}
bit init_ds18b20(void)
{
bit initflag = 0;
DQ = 1;
delay(12);
DQ = 0;
delay(80);
DQ = 1;
delay(10);
initflag = DQ;
delay(5);
return initflag;
}
unsigned char Readtemp(void)
{
char temp;
init_ds18b20();
Write_DS18B20(0xCC);
Write_DS18B20(0x44);
delay(100);
init_ds18b20();
Write_DS18B20(0xCC);
Write_DS18B20(0xBE);
delay(100);
a = Read_DS18B20();
b = Read_DS18B20();
temp = ((b*256+a)>>4);
return temp;
}
//*********************1602************************************
void writedat(unsigned char dat)
{
RS=1;
RW=0;
E=0;
P0=dat;
delay(5);
E=1;
E=0;
}
void writecom(unsigned char com)
{
RS=0;
RW=0;
E=0;
P0=com;
delay(5);
E=1;
E=0;
}
void initlcd()
{
writecom(0x38);
writecom(0x0c);
writecom(0x06);
writecom(0x01);
}
//*************oˉêy********************************************
void display()//ÏÔê¾oˉêy
{
unsigned int temp0=0,temp1=0,temp2=0,i=0;
temp0=readtemp/100+'0';
temp1=(readtemp%100)/10+'0';
temp2=readtemp%10+'0';
writecom(0x80);
delay(5);
while(s[i]!='\0')
{
writedat(s[i]);
delay(5);
i++;
}
writecom(0x80+6);
delay(5);
writedat(' ');
delay(5);
writedat(str[temp0]);
delay(5);
writedat(str[temp1]);
delay(5);
writedat(str[temp2]);
delay(5);
writedat('.');
delay(5);
writedat('0');
delay(5);
writedat(0xDF);
delay(5);
writedat('C');
delay(5);
}
void displayfu()
{
unsigned int temp0=0,temp1=0,temp2=0,i=0;
temp0=~readtemp/100+'0';
temp1=(~readtemp%100)/10+'0';
temp2=~readtemp%10+'0';
writecom(0x80);
delay(5);
while(s[i]!='\0')
{
writedat(s[i]);
delay(5);
i++;
}
writecom(0x80+6);
delay(5);
writedat('-');
delay(5);
writedat(str[temp0]);
delay(5);
writedat(str[temp1]);
delay(5);
writedat(str[temp2]);
delay(5);
writedat('.');
delay(5);
writedat('0');
delay(5);
writedat(0xDF);
delay(5);
writedat('C');
delay(5);
}
//************************Ö÷oˉêy******************************
void main()
{
int i;
initlcd();/*
void disply18b20Rom(char Rom);
Write_DS18B20(0x33);
delay(1);
a =Read_DS18B20();
b =Read_DS18B20();
c=Read_DS18B20();
d =Read_DS18B20();
e=Read_DS18B20();
f=Read_DS18B20();
g =Read_DS18B20();
h = Read_DS18B20();
writecom(0x80+0x40);
display18b20Rom(h);
display18b20Rom(g);
display18b20Rom(f);
display18b20Rom(e);
display18b20Rom(d);
display18b20Rom(c);
display18b20Rom(b);
display18b20Rom(a);*/
while(1)
{
if(Readtemp()==0)
{
writecom(0x01);
readtemp=0;
display();
}
else if(Readtemp()<150)
{
readtemp=Readtemp();
display();
}
else
{
int a=0;
a=Readtemp();
readtemp=a-257;
displayfu();
}
if((readtemp>=20)||(readtemp<=10))
{
for(i=0;1>0;i++)
{
led1=1;led2=1;led3=1;led4=1;led5=1;led6=1;led7=1;led8=1;
buzz=1;
delay(500);
led1=0;led2=0;led3=0;led4=0;led5=0;led6=0;led7=0;led8=0;
buzz=0;
delay(500);
}
}
}
}
|