你能从18b20读出温度数据,且会控制LCD的话,让温度值在LCD上显示就不会有任何的困难
先将温度值处理成几个字符。然后在LCD相应的位置上显示就可以啦
例如:
将读出的数据经过18b20提供的转换公式表示(如)31.45度你就将温度值31.45度你就用一个字符数组将每一位存起来后调用相应的LCD显示函数显示就可以啦
array[0] = '3';
array[1] = '1';
array[2] = '.';
array[3] = '4';
array[4] = '5';
原理就这样。自己研究研究,
这个里面是用液晶1602显示的,不知道你是要求在什么液晶上显示。这只是里面的两个函数,你是做仿真还是硬件?可以把电路图发给我,我把程序都改好给你。
uchar data disdata[4];
read_temp()/*读取温度值并转换*/
{
uchar a,b;
ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/
ds1820wr(0x44);//*启动温度转换*/
ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/
ds1820wr(0xbe);//*读取温度*/
a=ds1820rd();
b=ds1820rd();
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0x0fff)
tflag=0;
else
{
tvalue=~tvalue+1;
tflag=1;
}
tvalue=tvalue*(0.625)+0.5;//温度值扩大10倍,精确到1位小数
return(tvalue);
}
/******************************************************************
*/
void ds1820disp()//温度值显示
{
uchar flagdat;
disdata[0]=tvalue/1000+0x30;//百位数
disdata[1]=tvalue%1000/100+0x30;//十位数
disdata[2]=tvalue%100/10+0x30;//个位数
disdata[3]=tvalue%10+0x30;//小数位
if(tflag==0)
flagdat=0x20;//正温度不显示符号
else
flagdat=0x2d;//负温度显示负号:-
if(disdata[0]==0x30)
{
disdata[0]=0x20;//如果百位为0,不显示
if(disdata[1]==0x30)
{
disdata[1]=0x20;}//如果百位为0,十位为0也不显示
}
wr_com(0x80);
wr_dat(flagdat);//显示符号位
wr_dat(disdata[0]);//显示百位
wr_dat(disdata[1]);//显示十位
wr_dat(disdata[2]);//显示个位
wr_dat(0x2e);//显示小数点
wr_dat(disdata[3]);//显示小数位
wr_dat(0xdf); //显示°
wr_dat('C');
}