标题: 急!用18B20探究温度变化差值 如果温度相差大于4.5°C单片机报警 [打印本页]

作者: eee123    时间: 2017-3-22 00:12
标题: 急!用18B20探究温度变化差值 如果温度相差大于4.5°C单片机报警
     最近毕业设计想加入一个功能,想了好久不知道怎么加,请大神指点迷津!
      用51单片机和18b20做一个温度检测然后报警,目前都实现了。想加入一个需求: 温度是不断采集的,使采集的前后2个温度值,如果相差大于4.5°C同样报警。
     如果用数组的话怎么样比较好,但是数据是不断更新的,那么数组中存放数据也要不断更新///

作者: 不倒翁.WZT    时间: 2017-3-22 08:39
两次温度采集应该有时间间隔,而且两次温度采集时间应有规律,这样就好办了。利用定时器T0的中断服务程序做第一次温度采集,利用定时器T1的中断服务程序做第二个温度采集,再将两次采集的数据进行比较,相差大于4.5°C进行报警处理。
作者: zl2168    时间: 2017-3-22 09:26
你既然能实现18b20温度检测并报警,却不能实现一个更简单的相差大于4.5°C报警,很奇怪!
作者: william_2016    时间: 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循环的判断语句即可,这样使用起来更方便灵活些。
另外注意,若温度实测范围有负数时,需要注意正负数据的相应处理。
作者: 54wangyulong    时间: 2017-3-22 15:59
几位楼下的兄台说的都很好啊!是的,现在问题解决了啊
作者: eee123    时间: 2017-3-24 16:03
william_2016 发表于 2017-3-22 13:16
提供一种大致的解决思路:
假设有n次测量,则分解成如下步骤:
步骤1、最初2次测量值(n=1,2, n为测量次 ...

谢谢~我就是采用这样的方法,这样可以方便改采样率
作者: eee123    时间: 2017-3-24 16:07
不倒翁.WZT 发表于 2017-3-22 08:39
两次温度采集应该有时间间隔,而且两次温度采集时间应有规律,这样就好办了。利用定时器T0的中断服务程序做 ...

这个想法是最好的,当时我也是想用中断,但是我中断用的不是很好,能不能写个大概的程序。现在程序中我定时器0用来每间隔1s刷处理刷新一次温度值,然后采用的是2次提取采样值进行对比
作者: eee123    时间: 2017-3-24 16:09
zl2168 发表于 2017-3-22 09:26
你既然能实现18b20温度检测并报警,却不能实现一个更简单的相差大于4.5°C报警,很奇怪!

主要起初我有想过用数组存储一定量的数据,然后比较差值,再返回最高温度值,但后来想到这样做的话数组内的数据也要不断刷新
作者: 吕家阳    时间: 2017-3-24 16:17
都是大神啊来这边学习




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1