[求助] 12864上显示18B20的温度。为什么显示的温度只有一度左右的变化~下面是我的程序!

vilove2007   2012-2-10 22:56 楼主
12864上显示18B20的温度。要精度到小数点后两位,刚开始显示两点几度加温后,为什么显示的温度只有一度左右的变化~下面是我的程序!请各位大侠帮解一下~我郁闷好久了!
#include"18b20.h"
#include"reg52.h"
#include"delay.h"
#include"12864.h"
#include

sbit DQ=P0^2; //18b20数据口  
         
uchar bb; //存放温度数值

void init_ds18b20(void)//初始化
{
   uchar mm;
   DQ=1;
   delayus(10);
   DQ=0;
   delayus(100);
   DQ=1;//释放总线
   delayus(10);
   mm=DQ;
   delayus(5);

}

void write_byte(uchar dat)//向ds18b20写一个字节
{
        uchar i;
        for(i=0;i<8;i++)
        {
           DQ=0;
           DQ=dat&0x01;//送数据从低位送起
           delayus(5);
           DQ=1;
           dat>>=1;
        }
        delayus(5);
}

uchar read_byte(void)//读取18b20一个字节
{
   uchar i,value;
   for(i=0;i<8;i++)
   {
      DQ=0;
          value>>=1;
          DQ=1;
          if(DQ)
          value|=0x80;
          delayus(5);
   }
   return value;
}

void  zhongread()//读取温度值
{
       
        float t;
        uchar value,temp1,temp2,temp;
        init_ds18b20();
   write_byte(0xcc);//跳过ROM
   write_byte(0x44);//启动温度测量
   delayus(300);

   init_ds18b20();
   write_byte(0xcc);//跳过ROM
   write_byte(0xbe);
   temp1=read_byte();//读是低位 ,小数部分
   temp2=read_byte();//读是高位
   temp=temp2;
   temp2<<=8;
   temp= temp|temp1;
   value=temp;
   t=value*0.0625;
   //t=value*0.0625;
   //将它放大100倍, 使显示时可显示小数点后两位, 并对小数点后第三进行4舍5入
   //如t=11.0625, 进行计数后, 得到value = 1106, 即11.06 度
   //如t=-11.0625, 进行计数后, 得到value = -1106, 即-11.06 度
   bb=t*100+(value>0?0.5:-0.5); //大于0加0.5, 小于0减0.5
   
}

void lcdsd18b20() //数据处理并在12864上显示
{
    uchar tmp=bb,t1,t2,t3,t4,t5;
    t1=tmp/10000;
    t2=tmp%10000/1000;
    t3=tmp%1000/100;
    t4=tmp%100/10;
    t5=tmp%10;

        write_com(0X8b);
        delayus(10);
        write_dat(t1+0x30);delay(2);
        write_dat(t2+0x30);delay(2);
        write_dat(t3+0x30);delay(2);
        write_dat(0x2e);
        write_dat(t4+0x30);delay(2);
        write_dat(t5+0x30);delay(2);
}
     
void xianshi()//在12864上显示温度值
{
  zhongread();
  lcdsd18b20();
}

回复评论 (2)

uchar tmp=bb,t1,t2,t3,t4,t5;
t1=tmp/10000;
数据类型不对,tmp=0~255
点赞  2012-2-12 00:23
bb=t*100+(value>0?0.5:-0.5); //大于0加0.5, 小于0减0.5
bb超255了
点赞  2012-2-14 15:53
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复