4283|2

7

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

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

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();
}
此帖出自51单片机论坛

最新回复

bb=t*100+(value>0?0.5:-0.5); //大于0加0.5, 小于0减0.5 bb超255了  详情 回复 发表于 2012-2-14 15:53
点赞 关注
 

回复
举报

4008

帖子

0

TA的资源

版主

沙发
 
uchar tmp=bb,t1,t2,t3,t4,t5;
t1=tmp/10000;
数据类型不对,tmp=0~255
此帖出自51单片机论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
bb=t*100+(value>0?0.5:-0.5); //大于0加0.5, 小于0减0.5
bb超255了
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表