数码管显示DS18B20温度
下面是我写的程序,请高人帮忙指点一下,有什么建议都可以说出来,谢谢。
因为程序过长,不能全部写上来,所以把主要部分写出来。
void main()
{
float tt;
long a;
uint temp;
while(1)
{
Reset();
write_byte(jump_ROM);
write_byte(start);
Reset();
write_byte(jump_ROM);
write_byte(read_EEROM);
TMPL = read_byte();
TMPH = read_byte();
temp = TMPH;
temp <<= 8;
temp = temp | TMPL;
tt = temp * 0.0625;
a=(tt*10000);
//温度百位
P2=0;
P0=table1[a/1000000+10];
delayms(5); //延时5ms
//温度十位
P2=1;
P0=table[a%1000000/100000];
delayms(5);
//温度个位,此位带小数点
P2=3;
P0=table2[a%1000000/10000%10];
delayms(5);
//温度十分位
P2=3;
P0=table1[a%1000000/1000%10];
delayms(5);
//温度百分位
P2=4;
P0=table1[a%1000000/100%10];
delayms(5);
//温度千分位
P2=5;
P0=table1[a%1000000/10%10];
delayms(5);
//温度万分位
P2=6;
P0=table1[a%1000000%10];
delayms(5);
}
}
uchar code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; //数码管段选,无小数点
uchar code table2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //数码管段选,有小数点
问题1:ds18b20函数部分在1602液晶上已通过,这里应该不用改吧?
问题2:外界温度改变,数码管有反应,但是显示不正确,
问题3:温度个位部分本来想要有小数点,可是在十位部分也带小数点,怎么回事?(其它位没有)
问题挺多的,总之想请高手们帮忙改改程序,使之能正确显示。
图片显示的是数码管的电路图。
因为不能在这里贴出全部程序,有兴趣的请在我的空间里看程序的完整版。
http://hi.baidu.com/lzf_12266/blog/item/a74c84df6fe7e1accc11660d.html 展开
没有你的硬件,用PROTEUS仿真了一个显示电路,见插图。
稍稍改了一下程序,显示效果不错,数值随着温度调整,可以发生变化。
……
temp = TMPH;
temp <<= 8;
temp = temp | TMPL;
tt = temp * 0.0625;
a = tt * 10000;
a = a + 1235; //加上了四位小数
//温度百位
P2 = 255; //先消隐
P0 = table1[a / 1000000];
P2 = 255 - 0x80; delayms(5); //延时5ms
//温度十位
P2 = 255; P0 = table1[a % 1000000 / 100000];
P2 = 255 - 0x40; delayms(5);
//温度个位,此位带小数点
P2 = 255; P0 = table2[a % 1000000 / 10000 % 10];
P2 = 255 - 0x20; delayms(5);
//温度十分位
P2 = 255; P0 = table1[a % 1000000 / 1000 % 10];
P2 = 255 - 0x10; delayms(5);
//温度百分位
P2 = 255; P0 = table1[ a % 1000000 / 100 % 10];
P2 = 255 - 8; delayms(5);
//温度千分位
P2 = 255; P0 = table1[a % 1000000 / 10 % 10];
P2 = 255 - 4; delayms(5);
//温度万分位
P2 = 255; P0 = table1[a % 1000000 % 10];
P2 = 255 - 2; delayms(5);
}
}