#include "reg51.h"
#include "intrins.h"
/*********************¶¨Òå¶Ë¿Ú***********************/
sbit DQ=P1^3;//ds18b20 ¶Ë¿Ú
//sfr dataled=0x80;
/*************************È«¾Ö±äÁ¿******************/
unsigned int temp;
unsigned char flag_get,count,num;
unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //7¶Î¹²Ñô
unsigned char str[6];
/**********************º¯ÊýÉùÃ÷*********************/
unsigned int read_temp();
void Init_DS18B20();
unsigned char read();
void write();
/***********************Ö÷º¯Êý**********************/
void main()
{
unsigned char TempH=0,TempL=0;
EA=1;
ET0=1;
TMOD=0x01;//¶¨Ê±Æ÷ÉèÖÃ
TH0=0xf0;
TL0=0x60;
TR0=1;
P2=0x00;
count=0;
while(1)
{
str[5]=0x39; //ÏÔʾC·ûºÅ
str[1]=tab[TempH/100]; //ʮλζÈ
str[2]=tab[(TempH%100)/10]; //ʮλζÈ
str[3]=tab[(TempH%100)%10]|0x80; //¸öλζÈ,´øÐ¡Êýµã
str[4]=tab[TempL];
if(flag_get==1) //¶¨Ê±¶ÁÈ¡µ±Ç°Î¶È
{
temp=read_temp();
if(temp&0x8000)
{
str[0]=0x40;//¸ººÅ±êÖ¾
temp=~temp; // È¡·´¼Ó1
temp +=1;
}
else
str[0]=0;
TempH=temp>>4;
TempL=temp&0x0F;
TempL=TempL*6/10;//СÊý½üËÆ´¦Àí
flag_get=0;
}
}
}
/************************¶¨Ê±Æ÷ÖжÏ*****************/
void shaomiao() interrupt 1
{
TH0=0xf0;//¶¨Ê±Æ÷֨װֵ
TL0=0x60;
num++;
if(num==20)
{num=0;
flag_get=1;//±ê־λÓÐЧ}
}
count++;
if(count==1)
{
P2=0x00;
P0=str[0];//ÊýÂë¹ÜɨÃè
}
if(count==2)
{
P2=0x01;
P0=str[1];
}
if(count==3)
{
P2=0x02;
P0=str[2];
}
if(count==4)
{
P2=0x03;
P0=str[3];
}
if(count==5)
{
P2=0x04;
P0=str[4];
}
if(count==6)
{
P2=0x05;
P0=str[5];
count=0;
}
}
/************************ÑÓʱº¯Êý******************/
void delay(unsigned int i)//ÑÓʱº¯Êý
{
while(i--);
}
/************************³õʼ»¯********************/
void Init_DS18B20()
{
unsigned char x=0;
DQ = 1; //DQ¸´Î»
delay(8); //ÉÔ×öÑÓʱ
DQ = 0; //µ¥Æ¬»ú½«DQÀµÍ
delay(80); //¾«È·ÑÓʱ ´óÓÚ 480us
DQ = 1; //À¸ß×ÜÏß
delay(10);
x=DQ; //ÉÔ×öÑÓʱºó Èç¹ûx=0Ôò³õʼ»¯³É¹¦ x=1Ôò³õʼ»¯Ê§°Ü
delay(5);
}
/*************************¶ÁÒ»¸ö×Ö½Ú*********************/
unsigned char read()
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // ¸øÂö³åÐźÅ
dat>>=1;
DQ = 1; // ¸øÂö³åÐźÅ
if(DQ)
dat|=0x80;
delay(5);
}
return(dat);
}
/*********************дһ¸ö×Ö½Ú****************************/
void write(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay(5);
DQ = 1;
dat>>=1;
}
delay(5);
}
/***********************¶ÁȡζÈ*****************************/
unsigned int read_temp()
{
unsigned char a=0;
unsigned int b=0;
unsigned int t=0;
Init_DS18B20();
write(0xCC); // Ìø¹ý¶ÁÐòºÅÁкŵIJÙ×÷
write(0x44); // Æô¶¯Î¶Èת»»
delay(200);
Init_DS18B20();
write(0xCC); //Ìø¹ý¶ÁÐòºÅÁкŵIJÙ×÷
write(0xBE); //¶ÁȡζȼĴæÆ÷µÈ£¨¹²¿É¶Á9¸ö¼Ä´æÆ÷£© ǰÁ½¸ö¾ÍÊÇζÈ
a=read(); //µÍλ
b=read(); //¸ßλ
b<<=8;
t=a+b;
return(t);
}
#include "intrins.h"
/*********************¶¨Òå¶Ë¿Ú***********************/
sbit DQ=P1^3;//ds18b20 ¶Ë¿Ú
//sfr dataled=0x80;
/*************************È«¾Ö±äÁ¿******************/
unsigned int temp;
unsigned char flag_get,count,num;
unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //7¶Î¹²Ñô
unsigned char str[6];
/**********************º¯ÊýÉùÃ÷*********************/
unsigned int read_temp();
void Init_DS18B20();
unsigned char read();
void write();
/***********************Ö÷º¯Êý**********************/
void main()
{
unsigned char TempH=0,TempL=0;
EA=1;
ET0=1;
TMOD=0x01;//¶¨Ê±Æ÷ÉèÖÃ
TH0=0xf0;
TL0=0x60;
TR0=1;
P2=0x00;
count=0;
while(1)
{
str[5]=0x39; //ÏÔʾC·ûºÅ
str[1]=tab[TempH/100]; //ʮλζÈ
str[2]=tab[(TempH%100)/10]; //ʮλζÈ
str[3]=tab[(TempH%100)%10]|0x80; //¸öλζÈ,´øÐ¡Êýµã
str[4]=tab[TempL];
if(flag_get==1) //¶¨Ê±¶ÁÈ¡µ±Ç°Î¶È
{
temp=read_temp();
if(temp&0x8000)
{
str[0]=0x40;//¸ººÅ±êÖ¾
temp=~temp; // È¡·´¼Ó1
temp +=1;
}
else
str[0]=0;
TempH=temp>>4;
TempL=temp&0x0F;
TempL=TempL*6/10;//СÊý½üËÆ´¦Àí
flag_get=0;
}
}
}
/************************¶¨Ê±Æ÷ÖжÏ*****************/
void shaomiao() interrupt 1
{
TH0=0xf0;//¶¨Ê±Æ÷֨װֵ
TL0=0x60;
num++;
if(num==20)
{num=0;
flag_get=1;//±ê־λÓÐЧ}
}
count++;
if(count==1)
{
P2=0x00;
P0=str[0];//ÊýÂë¹ÜɨÃè
}
if(count==2)
{
P2=0x01;
P0=str[1];
}
if(count==3)
{
P2=0x02;
P0=str[2];
}
if(count==4)
{
P2=0x03;
P0=str[3];
}
if(count==5)
{
P2=0x04;
P0=str[4];
}
if(count==6)
{
P2=0x05;
P0=str[5];
count=0;
}
}
/************************ÑÓʱº¯Êý******************/
void delay(unsigned int i)//ÑÓʱº¯Êý
{
while(i--);
}
/************************³õʼ»¯********************/
void Init_DS18B20()
{
unsigned char x=0;
DQ = 1; //DQ¸´Î»
delay(8); //ÉÔ×öÑÓʱ
DQ = 0; //µ¥Æ¬»ú½«DQÀµÍ
delay(80); //¾«È·ÑÓʱ ´óÓÚ 480us
DQ = 1; //À¸ß×ÜÏß
delay(10);
x=DQ; //ÉÔ×öÑÓʱºó Èç¹ûx=0Ôò³õʼ»¯³É¹¦ x=1Ôò³õʼ»¯Ê§°Ü
delay(5);
}
/*************************¶ÁÒ»¸ö×Ö½Ú*********************/
unsigned char read()
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // ¸øÂö³åÐźÅ
dat>>=1;
DQ = 1; // ¸øÂö³åÐźÅ
if(DQ)
dat|=0x80;
delay(5);
}
return(dat);
}
/*********************дһ¸ö×Ö½Ú****************************/
void write(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay(5);
DQ = 1;
dat>>=1;
}
delay(5);
}
/***********************¶ÁȡζÈ*****************************/
unsigned int read_temp()
{
unsigned char a=0;
unsigned int b=0;
unsigned int t=0;
Init_DS18B20();
write(0xCC); // Ìø¹ý¶ÁÐòºÅÁкŵIJÙ×÷
write(0x44); // Æô¶¯Î¶Èת»»
delay(200);
Init_DS18B20();
write(0xCC); //Ìø¹ý¶ÁÐòºÅÁкŵIJÙ×÷
write(0xBE); //¶ÁȡζȼĴæÆ÷µÈ£¨¹²¿É¶Á9¸ö¼Ä´æÆ÷£© ǰÁ½¸ö¾ÍÊÇζÈ
a=read(); //µÍλ
b=read(); //¸ßλ
b<<=8;
t=a+b;
return(t);
}