全数字温湿度仪的设计与实现
的状态,如果没有收到DS18B20返回的存在脉冲,蜂鸣器报警且液晶有相关信息提示。软件流程如图2所示。

根据官方数据手册,相关温度操作包括启动温度转换(Conver T),跳过ROM(SkipRom),写暂存器(Write Scratchpad),设置高低温报警寄存器TH和TL,拷贝暂存器(Copy Scratchpad),Recall E2和读暂存器(Read Scratchpad)等。接下来进行按键判断,本仪表共有3个输入按键,按键1是功能切换键,每当按下一次则软件状态计数器加1,进入相应测试界面,且在温度测量、湿度测量及其他几个功能间循环。键2分长按和短按,在温度模式下有摄氏/华氏温度切换、最大值保持、关闭报警等功能。键3有切换液晶屏手动/自动背光,关闭报警等功能。如果所有按键都没有被按下,则先判断当前状态,然后判断是否存在相应传感器,如果有只更新当前温度或湿度值,或进入其他功能。最后返回,整个是一个大循环结构。另外,此处仅是软件流程图示意图,提供设计思路,某些具体实现可能会根据实际情况放到中断里处理,更为方便。
3.2 温度传感器典型程序段
D S 1 8 B 2 0对时序要求非常严格,编程时应确保延时程序要符合datasheet中的要求,这里首先编制了一个较精确的10us延时,之后的程序中多次调用。另外,摄氏、华氏温度的转换,以及低于0摄氏度时,需要显示的负号等情况都可在液晶显示温度的程序段中考虑。典型程序如下:


3.3 湿度传感器典型程序段
相比同样是单总线设计的DS18B20,国产DHT11在编程思路上有一定相似性,但时序、移位等操作都不同,协议较前者简单。
用户主机(M C U)发送一次开始信号后,DHT11从低功耗模式转换到高速模式,待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信采集。而操作DS18B20时,MCU初始化收到应答信号后,就可随时发个指令写或读,主机有更多主动权。按照官方产品手册提供的时序,编制程序如下:

主程序、1602显示驱动、其他功能等程序略去。
4.结论
本数字温湿度仪经试制、长时间运行,表现稳定,效果良好。在调试阶段,遇到并解决了一些问题,一个比较棘手的问题是,显示温度时偶尔会出现异常数字。经仔细分析发现,这是由于本仪表的多按键、多功能而采用的多个定时器,定时器产生的中断导致了DS18B20与MCU通信时序遭到破坏,造成传输的数据出错。本问题后来通过增加CRC8校验,对偶然出现的错误数据进行舍弃得到解决。
现阶段该温湿度仪只作为单独使用,在以后的升级型号中,可以加入数据存储功能(如24C02芯片记录峰值),以及多传感器总线方式,通过上位机监控各点温湿度等功能。
