标题:
DS18B20温度在LCD1602循环显示是什么原因
[打印本页]
作者:
pandahu
时间:
2019-1-12 21:22
标题:
DS18B20温度在LCD1602循环显示是什么原因
Delay_DS18B20(int num)
{
while(num--) ;
}
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1;
Delay_DS18B20(8);
DQ = 0;
Delay_DS18B20(8);
DQ = 1;
Delay_DS18B20(14);
x = DQ;
Delay_DS18B20(20);
}
unsigned char ReadOneChar(void)
{
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_DS18B20(4);
}
return(dat);
}
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 1;
DQ = dat&0x10;
Delay_DS18B20(5);
DQ = 0;
dat>>=1;
}
}
unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0xBE);
a=ReadOneChar();
b=ReadOneChar();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t= tt*10+0.5;
return(t);
}
void Init1602()
{
uchar i=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(i=0;i<16;i++)
{
write_data(Init1[i]);
}
write_com(0x80+0x40);
for(i=0;i<16;i++)
{
write_data(Init2[i]);
}
}
void Display_1602(uint c,uchar ds,uchar sx,uchar xx)
{
write_com(0x80+3);
write_data('0'+c/100);
write_data('0'+c/10%10);
write_data('.');
write_data('0'+c%10);
write_data(0xdf);
write_com(0x80+13);
write_data('0'+ds/100);
write_data('0'+ds/10%10);
write_data('0'+ds%10);
write_com(0x80+0x40+4);
write_data('0'+sx/10%10);
write_data('0'+sx%10);
write_com(0x80+0x40+13);
write_data('0'+xx/10%10);
write_data('0'+xx%10);
}
void check_wendu(void)
{
c=ReadTemperature()-5;
w=c/10;
if(w<0){w=0;}
if(w>99){w=99;}
}
void main()
{
Init1602();
EA=1;
IT1=1;
EX1=1;
ET1=1;
TMOD=0x01;
TL1=0x3c;
TH1=0xb0;
TH0=0;
TL0=0;
TR0=0;
check_wendu();
delay(1000);
while(1)
{
check_wendu();
Display_1602(c,ds,sx,xx);
}
}
复制代码
截取的部分代码,是不是这部分代码导致的原因
作者:
admin
时间:
2019-1-12 23:21
您这个问题给的信息不全,估计是没人能回答得了的,先转移到冷门区了,自行点击编辑按钮补充一下吧,审核员会帮你重新转到热门问答区的
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1