|
#include<reg51.h>
#include<absacc.h>
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90} ;
sbit DQ=P3^3 ;
unsigned char tempL=0 ;
unsigned char tempH=0;
unsigned char flag=0;
float temperature;
void delay(unsigned int time)
{
while( time--);
}
void delay1(void)
{
int k;
for(k=0;k<600;k++);
}
void display(int k)
{
P2=0xfe;
P1=tab[k/1000];
delay1();
P2=0xfd;
P1=tab[k%1000/100];
delay1();
P2=0xfb;
P1=tab[k%100/10];
delay1();
P2=0xf7;
P1=tab[k%10];
delay1();
P2=0xff;
}
Init_DS18B20(void)
{
unsigned char x=0;
DQ=1;
delay(8);
DQ=0;
delay(55);
x=DQ;
delay(100);
return x;
}
ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat=0;
unsigned char n;
for(i=8;i>0;i--)
{
DQ=0;
n=2;
while(n--);
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay(4);
}
return(dat);
}
WriteOneChar(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(4);
}
ReadTemperature(void)
{
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0x44);
delay(12500);
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0xbe);
tempL=ReadOneChar();
tempH=ReadOneChar();
temperature=((tempH*256)+tempL)*0.0625;
/*if(tempH&0xfc)
{
flag=1;
temperature=((tempH<<8)|tempL);
temperature=((!temperature)+1);
temperature*=0.0625;
}
else
{
flag=0;
temperature=((tempH<<8)|tempL)*0.0625;
} */
delay(20000);
return(temperature);
}
void main()
{
float i;
while(1)
{
i=ReadTemperature();
display(i);
}
}
电路仿真一直出不来结果,请大家看下程序哪有问题,很急,谢谢了! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|