为什么我做的DS18B20数码管显示的温度不准确?
发布网友
发布时间:2022-07-24 13:17
我来回答
共1个回答
热心网友
时间:2023-10-09 07:59
/*ds18b20温度传感器
p3.4作为数据传输口
p1.0~3控制显示led的位选
共阳极
经过pnp后
低电平有效
p0口是led的字形码
晶振:11.0592m
设计者:陈仲库
设计日期:2006年3月29日
*/
#include
//#include
//#include
//#include
sbit
dq=
p3^4;
sbit
p13=
p1^3;
sbit
p12=
p1^2;
sbit
p11=
p1^1;
sbit
p10=
p1^0;
int
flag;
unsigned
char
disp1,
disp2,disp3,disp0;
unsigned
char
code
ch[]={0xc0,0xf9,
0xa4,
0xb0,
0x99,
0x92,
0x82,0xf8,0x80,0x90};
/*0~9*/
void
delay(int
us)
{
int
s;
for
(
s=0;
s
>=1;
dq=1;
if(dq)
u|=0x8000;
delay(4);
}
return
(u);
}
void
write(unsigned
char
ku)
{
int
i=0;
for
(i=0;i<8;i++)
{
dq=0;
dq
=ku&0x01;
delay(3);
dq=1;
ku>>=1;
}
}
void
read0(void)
{
int
t1,t2,
t0;
unsigned
int
tp;
unsigned
int
lsb;
rst();
write(0xcc);
write(0x44);
rst();
write(0xcc);
write(0xbe);
tp=read();
lsb=(unsigned
int)(tp*6.25);
//
t0=lsb/1000;
disp0
=
ch[t0];
//第1位,最高位p1.2
if(!t0)
disp0
=
0xff;
t2=
lsb%1000;
t1=t2/100;
disp1=
ch[t1]&0x7f;
t1=t2%100;
t2=t1/10;
disp2=ch[t2];
//第3位,最低位p1.2
disp3=ch[t1%10];//第4位,最低位p1.3
}
void
main(void)
{
while(1)
{
read0();
disp();
}
}