OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8170|回复: 7

ds18b20温度转换问题

[复制链接]

83

主题

349

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2012-8-10
在线时间
13 小时
发表于 2012-8-21 09:11:50 | 显示全部楼层 |阅读模式
 
tl=read_ds18b20();
 th=read_ds18b20();
 value=th;
 value=value<<8;
 value=value|tl;
 value=value*(0.0625*10);
 return value;
我想做一个报警系统,设定一个温度最大值与返回值(value)对比,实际温度(value)超过最大值,
蜂鸣器响,但是程序老是没超过最值就报警,到底怎么回事,而且当我最值设置900以上才不会报警,
求大侠解惑[/mw_shl_code]
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-8-21 09:28:33 | 显示全部楼层
回复【楼主位】电子狼:
---------------------------------
不报警的时候,你的读数范围是多少?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

138

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
金钱
227
注册时间
2012-8-10
在线时间
2 小时
发表于 2012-8-21 10:41:54 | 显示全部楼层
来点程序。。
学海无涯,回头是岸
回复 支持 反对

使用道具 举报

83

主题

349

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2012-8-10
在线时间
13 小时
 楼主| 发表于 2012-8-21 11:41:32 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,你是说显示的读数吗,目前显示的是28.0度(value其实是280,我是把小数点插入的),我设定的警戒值是300
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-8-21 11:43:19 | 显示全部楼层
300那不会错啊,你是不是数据类型搞错了?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

83

主题

349

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2012-8-10
在线时间
13 小时
 楼主| 发表于 2012-8-21 11:45:44 | 显示全部楼层
回复【3楼】徐家二少:
------------------------------回复【3楼】徐家二少:
---------------------------------
uchar change_ds18b20(uchar z)
{
uchar tl,th;

init_ds18b20();       //初始化
write_ds18b20(0xcc);  //跳过
init_ds18b20();   
if(z==1)
{
check_rom(1);    //  匹配rom1
}
if(z==2)
{
check_rom(2);    //   匹配rom2
}
if(z==3)
{
check_rom(3);    //   匹配rom3
}

write_ds18b20(0x44);
init_ds18b20();
write_ds18b20(0xcc);
init_ds18b20();
if(z==1)
{
check_rom(1);    //
}
if(z==2)
{
check_rom(2);    //
}
if(z==3)
{
check_rom(3);    //
}

write_ds18b20(0xbe);  //启动读暂存器。读内部ram中9字节温度数据
tl=read_ds18b20();
th=read_ds18b20();
value=th;
value=value<<8;
value=value|tl;
value=value*(0.0625*10);
return value;
}

上面只ds18b20的一部分,下面是main函数

#include"ds18b20.h"
#include"lcd12864.h"
#include"beep.h"
#include"delay.h"
#include"keyscan.h"



void main()
{
uint  warn=300;
init_lcd();
while(1)
{
keyscan();
display();

change_ds18b20(1);
display_lcd12864(1); 

change_ds18b20(2);   
display_lcd12864(2);

change_ds18b20(3);
display_lcd12864(3);

if(value>=warn)
{
   beepwarn();
}
}
}
回复 支持 反对

使用道具 举报

83

主题

349

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2012-8-10
在线时间
13 小时
 楼主| 发表于 2012-8-21 11:48:12 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
uint value;
uint  warn=300;
我是这么定义的,应该不会错吧
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-8-21 12:02:25 | 显示全部楼层
嗯,没错.
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 17:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表