5.5.2 温湿度采集器设计
1.任务要求
利用STM32F1控制器、DHT22传感器(温湿度传感器)、LCD1602等设计一个温湿度采集器,要求在LCD1602第1行显示湿度,第2行显示温度,请设计硬件电路图,设计程序,并通过Proteus完成仿真和调试。
2.LCD1602的结构及功能
(1)LCD1602的结构。
LCD有数显笔段型、点阵字符型、点阵图形型。LCD1602属于点阵字符型,可以显示2行,每行可以显示16个ASCII码。模块内有80字节数据显示RAM(DDRAM),除显示192个字符(5×7点阵)的字符库ROM(CGROM)外,还有64字节的自定义字符RAM(CGRAM),用户可自行定义8个5×7点阵字符。LCD1602内置控制器和MCU I/O接口,可以直接连接,其外形和结构如图5.10所示。

图5.10 LCD1602外形和结构
LCD1602有标准的14引脚(无背光)或16引脚(有背光),工作电压为4.5~5 V,工作电流为2 mA,引脚由8条数据线、3条控制线和3条电源线组成,其功能如表5.9所示。
表5.9 LCD1602引脚及功能

(2)LCD1602字符的显示及指令字。
对LCD1602的初始化、读、写、光标设置、显示数据设置等,均通过MCU向LCD1602写入指令来实现。LCD1602字符的显示及指令功能表如表5.10所示。
表5.10 LCD1602字符的显示及指令功能表

续表

具体说明如下。
指令1:清屏,光标返回地址00H位置(显示屏的左上方)。
指令2:光标返回地址00H位置(显示屏的左上方)。
指令3:光标和显示模式设置。
I/D为地址指针加1或减1选择位。I/D=1表示,读或写一个字符后地址指针加1;I/D=0表示,读或写一个字符后地址指针减1。
S为屏幕上所有字符移动方向是否有效的控制位。S=1表示,当写入一字符时,整屏显示左移(I/D=1)或右移(I/D=0);S=0表示,整屏显示不移动。
指令4:显示开/关及光标设置。
D为屏幕整体显示控制位,D=0表示关显示,D=1表示开显示。
C为光标有无控制位,C=0表示无光标,C=1表示有光标。
B为光标闪烁控制位,B=0表示光标不闪烁,B=1表示光标闪烁。
指令5:光标或字符移位。
S/C为光标或字符移位选择控制位,S/C=0表示移动光标,S/C=1表示移动显示的字符。
R/L为移位方向选择控制位,R/L=0表示左移,R/L=1表示右移。
指令6:功能设置。
DL为传输数据的有效长度选择控制位,DL=1表示8位数据线接口,DL=0表示4位数据线接口。
N为显示器行数选择控制位,N=0表示单行显示,N=1表示两行显示。
F为字符显示的点阵控制位,F=0表示显示5×7点阵字符,F=1表示显示5×10点阵字符。
指令7:CGRAM地址设置。
指令8:DDRAM地址设置。LCD1602内部有一个数据地址指针,用户可通过它访问内部全部80字节的数据显示RAM。
指令格式:80H+地址码,其中80H为指令代码。
指令9:读忙标志或地址。
BF为忙标志。BF=1表示LCD1602忙,此时LCD1602不能接受指令或数据;BF=0表示LCD1602不忙。
指令10:写数据。
指令11:读数据。
例如,将显示设置为“16×2显示,5×7点阵,8位数据接口”,只需要向LCD1602写入功能设置指令(指令6)“00111000B”,即38H即可。
(3)字符显示位置的设置。
80字节的DDRAM与显示屏上字符显示位置一一对应,LCD1602内部显示DDRAM的地址映射如图5.11所示。当向DDRAM的00H~0FH(第1行)、40H~4FH(第2行)地址的任意一处写数据时,LCD1602立即显示出来,该区域也被称为可显示区域。而当写入10H~27H或50H~67H地址处时,字符不会显示出来,该区域也被称为隐藏区域。

图5.11 LCD1602内部显示DDRAM的地址映射
需说明的是,在向DDRAM写入字符时,首先要设置DDRAM定位数据指针,此操作可通过指令8完成。例如,要写字符到DDRAM的40H处,则指令8的格式为80H+40H=C0H,其中80H为指令代码,40H是要写入字符处的地址。
(4)LCD1602基本操作。
①初始化步骤。
写指令38H,即功能设置(16×2显示,5×7点阵,8位接口)。
写指令08H,显示关闭。
写指令01H,显示清屏,数据指针清0。
写指令06H,写一个字符后地址指针加1。
写指令0CH,设置开显示,不显示光标。
②读写操作。
MCU读写LCD1602的操作规范如表5.11所示。(https://www.daowen.com)
表5.11 MCU读写LCD1602的操作规范

3.DHT22传感器的结构及功能
(1)DHT22传感器的结构。
DHT22传感器是一款含有已校准数字信号输出的温湿度复合传感器,内部由一个8位MCU控制一个电阻式感湿元件和一个NTC测温元件。其采用单总线协议与外部MPU等通信,具有能耗超低、传输距离远、全部自动化校准、采用电容式湿敏元件等特点,可用于暖通空调、除湿器、调试及检测设备、气象站及其他相关温湿度检测控制。其温度测量范围为-40~80℃,精度为±0.5℃;湿度测量范围为0~99.9%RH,精度为±2%RH(25℃)。其外形如图5.12所示,①脚为电源VDD(3.3~5.5 V),②脚为串行数据线(Serial Data,SDA),双向口,③脚为空脚,④脚为地。

图5.12 DHT22传感器外形
(2)DHT22传感器总线通信时序。
由于DHT22传感器采用单总线协议通信,所以MPU通过一个漏极开路或三态接口连至该数据线,以允许设备在不发送数据时能够释放总线;单总线通常要求外接一个约5.1 kΩ的上拉电阻,这样,当总线闲置时,其状态为高电平。由于它们是主从结构,只有当主机呼叫传感器时,传感器才会应答,所以主机访问传感器必须严格遵循单总线时序,如果出现时序混乱,传感器将不响应主机。DHT22传感器通信时序图如图5.13所示。

图5.13 DHT22传感器通信时序图
DHT22传感器的通信过程如下:主机发送一次起始信号(把SDA拉低至少800μs)后,传感器从休眠模式转换到高速模式;待主机起始信号发送结束后,传感器发送响应信号,从SDA串行送出40比特的数据,先发送字节的高位;发送的数据依次为湿度高位、湿度低位、温度高位、温度低位、校验位,发送数据结束后触发一次信息采集,采集结束后传感器自动转入休眠模式,直到下一次通信来临,两次读取传感器最小间隔时间为2 s。图5.13中的各时序信号特性如表5.12所示。
表5.12 时序信号特性

续表

DHT22传感器上电后,调试环境温湿度数据,并记录数据,此后传感器自动转入休眠状态。SDA由上拉电阻拉高,一直保持高电平,此时SDA引脚处于输入状态,时刻检测外部信号。
MPU的I/O设置为输出,输出低电平,保持低电平时间不能小于800μs,典型值是1 ms。然后MPU的I/O设置为输入状态,释放总线,由于上拉电阻,MPU的I/O随之变高。等主机释放总线后,DHT22传感器发送响应信号,输出80μs的低电平作为响应信号,紧接着输出80μs的高电平,通知MPU接收数据。
DHT22传感器发送完响应信号后,随后由SDA连续串行输出40位数据,MPU根据I/O电平的变化接收40位数据。位数据0的格式为50μs的低电平加26~28μs的高电平;位数据1的格式为50μs的低电平加70μs的高电平。
(3)DHT22传感器数据格式
DHT22传感器输出的40位数据分别是湿度高8位、湿度低8位、温度高8位、温度低8位和校验8位,如图5.14所示。

图5.14 数据结构
例如有数据:
![]()
湿度:0000 0010 1001 0010=0292H(十六进制)=2×256+9×16+2=658→湿度=65.8%RH。
温度:0000 0001 0000 1101=10DH(十六进制)=1×256+0×16+13=269→温度=26.9℃。
注:当温度低于0℃时温度数据的最高位置1,例如:-10.1℃=1 000000001100101。最高位为1,表示负温度;其余的温度数值:0000000001100101=0065H(十六进制)=6×16+5=101,可推出该温度为-10.1℃。
4.硬件设计
硬件电路图如图5.15所示,LCD1602的8位数据端与STM32F1的PC0~PC7引脚相连,寄存器选择端RS与PC8相连,读写操作端R/W与PC9相连,使能信号端E与PC10相连。接地端VSS与电路的地线相接,电源端VCC与电路的5 V电源相连,BLA和BLK为背光调节端,VO为对比度调节端。DHT22传感器的数据线SDA与STM32F1系列MCU的PC11相连。

图5.15 硬件电路图
5.软件设计
在STM32CubeMX中配置工程文件,将PC0~PC10设置为输出,系统时钟采用HSI,频率为8 MHz。在MDK工程文件中编写LCD1602的驱动文件“LCD1602.h”和“LCD1602.c”。
头文件LCD1602.h的程序如下。

LCD1602的源文件“LCD1602.c”的程序如下。



DHT22传感器的头文件“DHT22.h”的程序如下。

DHT22传感器的驱动程序的源文件为“DHT22.c”,DHT22传感器的时序通过定时器TIM3实现1μs的定时,“DHT22.c”文件的程序如下。



在MDK工程文件中的“main.c”文件中添加如下代码。


另外,MDK工程文件中生成的“gpio.c”“gpio.h”“tim.c”“tim.h”“stm32f1xx_it.c”等文件无须修改,然后编译生成.hex可执行文件。
6.仿真与调试
在Proteus中绘制仿真电路图,加载.hex文件到程序存储器中,全速仿真运行,在LCD1602中第1行显示湿度,第2行显示温度,通过修改DHT22传感器的参数,显示器中显示的数据和传感器的数据一致。所以,硬件电路和软件设计正确。仿真电路图与调试效果如图5.16所示。

图5.16 仿真电路图与调试效果