本帖最后由 lisingch 于 2018-10-5 16:09 编辑
这个温湿度测试仪以SC92F8003作为主控MCU,对AM2302采集的室内温、湿度数据进行处理,并驱动4位液晶显示模块PDC401分时显示温、湿度数据。温度显示为“XX.X口”;湿度显示为“XX.XH”;AM2302故障时显示为“Erro”。电源采用3节“AAA”电池供电,本打算设置为“IDLE”或者“STOP”工作方式减少电池消耗,便于长时间待机。最后考虑只是短暂室内温、湿度测试,便选用了通过开关控制,需要测试时打开电源开关,测试完成后即可切断电源。下面是整体实验过程:
一、实验环境及资源
1、Keil MDK51 9.59
2、SC-LINK
3、SC92F8003的DEMO硬件板
4、PDC401模块
5、AM2302模块
二、硬件
1、PDC401模块。该模块采用HD44100控制,可显示4位数字,字符高度与0.56数码管相近,模块整体外围尺寸为:35*60。模块与外部通过4位2.54的排针相连,即:Pin1 GND、Pin2 CLK、Pin3 DI、Pin4 VCC。手里没有模块的资料,有两份HD44100的,有兴趣的可以看看;(详附件)
2、AM2302温、湿度传感器。这个也叫DHT22,比之前的DHT11性能要好,体积也大,当然价格也相对贵一些;(资料详附件)
3、PCB。PCB采用Sprint-Layout 6.0 绿色汉化版绘制,尺寸同PDC401;(资料详附件)
4、电源。电源采用带开关三节“AAA”电池盒,其宽尺寸较PDC401稍大一点。成品采用三层结构,PCB与PDC401通过两只15mm铜柱连接;PCB背面用胶与电池合粘结;
三、软件
1、PDC401驱动。程序比较简单,主要是对HD44100的操控。另外为了显示温度、湿度以及错误“Erro”写了三个显示函数,不知有没有更好的处理办法?请朋友们指教!
- /******************************************************
- 函数功能: 显示温度
- 输入参数: temp
- 返 回 值: 无
- 说 明:最后一位显示温度标志“口”
- ******************************************************/
- void DispTemp(unsigned int temp)
- {
- unsigned char w1,w2,w3;
- w1 = temp / 100;
- w2 = temp % 100 / 10;
- w3 = temp % 10;
-
- WriteBuf();
- DispBuff[0]= tab[w1];
- DispBuff[1]= tab[w2] & 0xfe; //加显小数点
- DispBuff[2]= tab[w3];
- DispBuff[3]= 0X39; //显示温度标志“口”
- }
- /******************************************************
- 函数功能: 显示错误“Erro”
- 输入参数: 无
- 返 回 值: 无
- 说 明:如果AM2302没有连接显示“Erro”
- ******************************************************/
- void DispErro(void)
- {
- WriteBuf();
- DispBuff[0]= 0X61;//E
- DispBuff[1]= 0XF5;//r
- DispBuff[2]= 0XF5;//r
- DispBuff[3]= 0XC5;//o
- }
2、AM2302数据处理。这个采集处理程序移植、修改自硬石YS-F1Pro相关例程,在此表示感谢!- /************************AM2302数据类型定义**********************/
- typedef struct
- {
- unsigned char humH8bit; //湿度高8位
- unsigned char humL8bit; //湿度低8位
- unsigned char temH8bit; //温度高8位
- unsigned char temL8bit; //温度高8位
- unsigned char check; //校验和
- float hum; //实际湿度
- float tem; //实际温度
- } AM2302_TypeDef;
|