在60us内将“0”写入DS18B20中,持续时间至少1us,写“1”操作是只需将写入的“0”改为“1”即可;DS18B20读操作也分为读“0”和读“1”操作,读“0”操作时,总线需要15us被拉低,再拉高45us,然后再15us内将数据读走,读“1”操作同读“0”操作。程序流程图如图4-4:
图4-4 DS18B20读取温度的流程图
4.2 DS18b20的温度数据处理
读出温度数据后,LOW的低四位为温度的小数部分,可以精确到0.0625℃,LOW的高四位和HIGH的低四位为温度的整数部分,HIGH的高四位全部为1表示负数,全为0表示正数。所以先将数据提取出来,分为三个部分:小数部分、整数部分和符号部分。小数部分进行四舍五入处理:大于0.5℃的话,向个位进1;小于0.5℃的时候,舍去不要。当数据是个负数的时候,显示之前要进行数据转换,将其整数部分取反加一。还因为DS18B20最低温度只能为-55℃,所以可以将整数部分的最高位换成一个“-”,表示为负数。图4-2为温度数据处理程序的流程图。
图4-5 温度数据处理流程图
4.3 1602显示部分
1602的读写时序图如下:
图4-6 1602液晶的读时序图
图4-7 1602的写时序图
根据以上时序图可以得出读写程序流程图如下:
5 数据测试
用手触屏温度传感器,可以发现温度大概显示为32度左右。将温度传感器与塑料袋装的冰水混合物接触,观察液晶显示的温度是否为零度。
6 结语
本文重点介绍了单片机和数字传感器DS18B20的原理和功能,并用DS18B20与STC89C52单片机、LCD1602组成数字温度计,有超温报警功能。
在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但
这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,举个例子,以前写的那几次,数据加减时,我用的都是BCD码,这一次,我全部用的都是16进制的数直接加减,显示处理时在用除法去删分,感觉效果比较好,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。
参考文献
【1】作著:姜涛
【2】书名:基于单片机的数字式温度计设计 【3】出版社:西北电力学校 【4】出版年月:2012.3.19 【5】页码:27页