2.3 MCU选型
鉴于温湿度测量实时性要求不高,数字化温度、湿度传感器及液晶显示模块对M C U速度要求也不算高,以上器件加上键盘、蜂鸣器等硬件资源占用的引脚数也不多,所以采用经典的51系列单片机是很好的选择。尤其美国Atmel公司生产的AT89S5x系列单片机[3],质优价廉,完全满足上述要求,而且具有ISP下载功能,可实现在对板载芯片进行程序升级,十分方便。最终C51程序经编译生成的HEX文件为15k大小,可下载到AT89S52芯片。
根据官方数据手册,相关温度操作包括启动温度转换(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摄氏度时,需要显示的负号等情况都可在液晶显示温度的程序段中考虑。典型程序如下:
用户主机(M C U)发送一次开始信号后,DHT11从低功耗模式转换到高速模式,待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信采集。而操作DS18B20时,MCU初始化收到应答信号后,就可随时发个指令写或读,主机有更多主动权。按照官方产品手册提供的时序,编制程序如下:
主程序、1602显示驱动、其他功能等程序略去。