找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2908|回复: 8
打印 上一主题 下一主题
收起左侧

急!用18B20探究温度变化差值 如果温度相差大于4.5°C单片机报警

[复制链接]
跳转到指定楼层
楼主
ID:124631 发表于 2017-3-22 00:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
10黑币
     最近毕业设计想加入一个功能,想了好久不知道怎么加,请大神指点迷津!
      用51单片机和18b20做一个温度检测然后报警,目前都实现了。想加入一个需求: 温度是不断采集的,使采集的前后2个温度值,如果相差大于4.5°C同样报警。
     如果用数组的话怎么样比较好,但是数据是不断更新的,那么数组中存放数据也要不断更新///

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:149988 发表于 2017-3-22 08:39 | 只看该作者
两次温度采集应该有时间间隔,而且两次温度采集时间应有规律,这样就好办了。利用定时器T0的中断服务程序做第一次温度采集,利用定时器T1的中断服务程序做第二个温度采集,再将两次采集的数据进行比较,相差大于4.5°C进行报警处理。
回复

使用道具 举报

板凳
ID:111634 发表于 2017-3-22 09:26 | 只看该作者
你既然能实现18b20温度检测并报警,却不能实现一个更简单的相差大于4.5°C报警,很奇怪!
回复

使用道具 举报

地板
ID:105425 发表于 2017-3-22 13:16 | 只看该作者
提供一种大致的解决思路:
假设有n次测量,则分解成如下步骤:
步骤1、最初2次测量值(n=1,2, n为测量次数变量),分别赋给变量Data_last, Data_now(记录实测温度值);
步骤2、判断Data_now减Data_last是否大于4.5?
1)若是,发报警,然后继续执行。
2)若否,继续。

步骤3、测量第n次(n>2)
3.1将Data_now覆盖到Data_last;
3.2将当前第n次新测量值赋给Data_now;
3.3计算Data_now减Data_last是否大于4.5?
做判断,即重复步骤2。

如此,从步骤3开始,即形成循环。
以上是便于理解而描述上采用循环变量n来表达。
实际应用,可以改成while(1)死循环,在循环体内设置跳出while循环的判断语句即可,这样使用起来更方便灵活些。
另外注意,若温度实测范围有负数时,需要注意正负数据的相应处理。
回复

使用道具 举报

5#
ID:180385 发表于 2017-3-22 15:59 | 只看该作者
几位楼下的兄台说的都很好啊!是的,现在问题解决了啊
回复

使用道具 举报

6#
ID:124631 发表于 2017-3-24 16:03 | 只看该作者
william_2016 发表于 2017-3-22 13:16
提供一种大致的解决思路:
假设有n次测量,则分解成如下步骤:
步骤1、最初2次测量值(n=1,2, n为测量次 ...

谢谢~我就是采用这样的方法,这样可以方便改采样率
回复

使用道具 举报

7#
ID:124631 发表于 2017-3-24 16:07 | 只看该作者
不倒翁.WZT 发表于 2017-3-22 08:39
两次温度采集应该有时间间隔,而且两次温度采集时间应有规律,这样就好办了。利用定时器T0的中断服务程序做 ...

这个想法是最好的,当时我也是想用中断,但是我中断用的不是很好,能不能写个大概的程序。现在程序中我定时器0用来每间隔1s刷处理刷新一次温度值,然后采用的是2次提取采样值进行对比
回复

使用道具 举报

8#
ID:124631 发表于 2017-3-24 16:09 | 只看该作者
zl2168 发表于 2017-3-22 09:26
你既然能实现18b20温度检测并报警,却不能实现一个更简单的相差大于4.5°C报警,很奇怪!

主要起初我有想过用数组存储一定量的数据,然后比较差值,再返回最高温度值,但后来想到这样做的话数组内的数据也要不断刷新
回复

使用道具 举报

9#
ID:171806 发表于 2017-3-24 16:17 | 只看该作者
都是大神啊来这边学习
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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