标题: 为什么我用18B20都温度有的时候数字会少256 [打印本页]

作者: 瀚海一滴    时间: 2016-7-8 14:06
标题: 为什么我用18B20都温度有的时候数字会少256
读取温度的程序读的温度值不是很稳定,
是不是读取过程中被中断打断就会读取错误啊,经常会出现数字少256的情况(温度值*10以后)搞的我不知道怎么办了
温度读取的时间好长,LED数码管来不及刷新了,有什么办法既让18B20有时间转换,还能做到LED数码管 不那么明显的闪烁
求大神啊

作者: 腾飞的龙    时间: 2016-7-8 16:06
程序里的显示函数延时小点试试。
作者: zl2168    时间: 2016-7-8 20:12
读温度值一般是0.5秒~1秒读一次,在间隔时间内显示,读温度值与显示互不干扰。
作者: ahshmj    时间: 2016-7-8 20:20
帖子内容看不懂。
作者: zl2168    时间: 2016-7-8 22:05
本帖最后由 zl2168 于 2016-7-8 22:06 编辑

DS18B20 测温


Proteus仿真一下,确认有效。
实例97 DS18B20测温.rar (51.78 KB, 下载次数: 3)



以上摘自张志良编著《单片机实验实训100例》 ISBN 978-7-5124-1603-1,北航社出版


书中电路和程序设计有详细说明,程序语句条条有注解。



作者: cyy998    时间: 2016-7-8 23:28
本帖最后由 cyy998 于 2016-7-8 23:30 编辑

我这几天刚好也碰到这个问题,搞了好几天总算搞明白了,读取18B20温度值的时候会闪是因为时序没分配好,我们一般都会在数码管扫描函数中的每个位选后面加一小段延时,原因就在这,当程序执行完扫描最后一位时也后会延时一会,之后再读取温度,再扫描显示,因为读取温度需要的时间是ms级的,所以就会影响到显示。
这几天我试了很多方法,最后发现把显示函数的开始位加一个小延时,把最后一位后面的延时去掉,再用一个for循环套起来,这样就解决问题了,同时还发现,扫描程序用for循环加查表或位移,效果都要好很多。
下面几张图是我这几天自己写的一个test程序和实物,段选和位选用的都是for循环加查表的方法,实测一点都不闪,希望对你有所帮助。







作者: 爱国    时间: 2016-7-9 10:55
256是最大值,少于它很正常




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