#include<reg52.h> //52头文件说明
#define uchar unsigned char
#define unit unsigned int
sbit DATA=P1^2; //DS18B20数据口
sbit weixuan=P1^6;
sbit duxuan=P1^5;
sbit zhilen=P1^0;
sbit zhire=P1^1;
sbit SCL=P1^3;
sbit SDA=P1^4;
uchar bai,shi,ge;
uchar code seg7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uchar us)
{
while(us--);
}
void init_ds18b20()
{
uchar init_resu;
DATA=1;
delay(10);
DATA=0;
delay(80);
DATA=1;
delay(20);
init_resu=DATA;
delay(30);
DATA=1;
}
uchar ReadOneChar()
{
uchar i ;
uchar ReadResult;
for(i=8;i>0;i--)
{
ReadResult>>=1;
DATA=1;
delay(1);
DATA=0;
delay(1);
DATA=1;
delay(1);
if(DATA)
ReadResult|=0x80;
else
ReadResult&=0x7f;
delay(8);
}
return ReadResult;
}
WriteOneChar(uchar dat)
{
uchar i;
for(i=8;i>0;i--)
{
DATA=0;
delay(1);
DATA=dat&0x01;
delay(10);
DATA=1;
dat>>=1;
}
delay(8);
}
void display(uchar bai,uchar,shi,uchar ge)
{
weixuan=1;
P0=0xfe;
weixuan=0;
duxuan=1;
P0=seg7[bai];
duxuan=0;
delay(30);
weixuan=1;
P0=0xfd;
weixuan=0;
duxuan=1;
P0=(seg7[shi]|0x80);
duxuan=0;
delay(30);
weixuan=1;
P0=0xfb;
weixuan=0;
duxuan=1;
P0=seg7[ge];
duxuan=0;
delay(30);
}
int ReadTemp()
{
uchar a,b;
int t;
float tt;
init_ds18b20();
WriteOneChar(0xcc);
WriteOneChar(0x44);
init_ds18b20();
WriteOneChar(0xcc);
WriteOneChar(0xbe);
a=ReadOneChar();
b=ReadOneChar();
t=b;
t<<=8;
t|=a;
tt=t*0.0625;
t=tt*10+0.5;
return t;
}
void StarIic()
{
SDA=1;
delay(1);
SCL=1;
delay(1);
SDA=0;
delay(1);
}
void StopIic()
{
SDA=0;
delay(1);
SCL=1;
delay(1);
SDA=0;
delay(1);
}
void ResponsIic()
{
uchar i;
SCL=1;
delay(1);
while((SDA==1)&&(i<200))
i++;
SCL=0;
delay(1);
}
void InitIic()
{
SDA=1;
delay(1);
SCL=1;
delay(1);
}
void Write_byteIic(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
SCL=0;
delay(1);
SDA=CY;
delay(1);
SCL=1;
delay(1);
}
SCL=0;
delay(1);
SDA=1;
delay(1);
}
void WriteAddressDateIic(uchar address ,uchar date)
{
StartIic();
Write_byteIic(0xa0);
ResponsIic();
Write_byteIic(address);
ResponsIic();
Write_byteIic(date);
ResponsIic();
StopIic();
}
void main()
{
int temp;
InitIic();
while(1)
{
display(bai,shi,ge);
temp=ReadTemp();
if(temp>=400)
{
zhilen=0;
zhire=1;
if(temp>=500)
WriteAddressDateIic(2,temp);
}
else if(temp<=150)
zhire=0;
zhilen=1;
}
else
{
zhilen=1;
zhire=1;
}
bai=temp%1000/100;
shi=temp%100/10;
ge=temp%10;
disaplay(bai,shi,ge);
}
你好,报错信息发给我看下
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
都不说什么错