|
仿真电路图见附件
程序代码如下:
//#include<1820.h>
#include<reg.51>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//bit flag;
//#define wei 0xa0;
//#define duan 0x90;
uchar data disdata[5];
//uint tvalue;
uchar tflag;
sbit DQ=P3^7;
bit f=0;
uchar tempint,temppdp;
uchar TempTab[4];
uchar code discode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF};
void delay()
{
uchar i,j;
for(i=0;i<5;i++)
for(j=0;j<250;j++)
{
_nop_();
_nop_():
}
}
void delay_18B20(uint i)
{
while(i--);
}
void ds1820rst()
{
unsigned char x=0;
DQ=1;
delay_18B20(4);
DQ=0;
delay_18B20(100);
DQ=1;
delay_18B20(40);
}
uchar ds1820rd()
{
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_18B20(10);
}
return(dat);
}
void ds1820wr(uchar wdata)
{
unsigned char i=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=wdata&0x01;
delay_18B20(10);
DQ=1;
wdata>>=1;
}
}
void read_temp()
{
uchar temph,templ,k;
f=0;
ds1820rst();
ds1820wr(0xcc);
ds1820wr(0x44);
ds1820rst();
ds1820wr(0xcc);
ds1820wr(0xbe);
templ=ds1820rd();
temph=ds1820rd();
if((temph&0xf8)!=0x00)
{
f=1;
temph=~temph;
templ=~templ;
k=templ+1;
templ=k;
if(k>255)
{
temph++;
}
}
tempdp=(templ&oxof)*10/16;
templ>>=4;
temph<<=4;
tempint=temph|templ;
}
void distemp()
{
uchar i,j;
if(f==0)
{
TempTab[0]=tempint/100;
TempTab[1]=(tempint/10)%10;
TempTab[2]=tempint%10;
TempTab[3]=tempdp;
}
else
{
TempTab[0]=10;
TempTab[1]=tempint/10;
TempTab[2]=tempint%10;
TempTab[3]=tempdp;
}
for(i=0;i<4;i++)
{
P2=_cror_(0xf7,i);
j=TempTab[i];
if(i==2)
P1=discode[j]&0x7f;
else
P1=discode[j];
delay();
P2=Oxff;
}
}
void main()
{
while(1)
{
_nop_();
_nop_();
read_temp();
_nop_();
_nop_();
distemp();
}
}
|
|