摘要
随着社会的发展、工业的发展。人们对健康问题越来越重视,空气进化器,既可以净化周围的环境又可以作为家中、寝室中的装饰品,外形美观大方又现代化,简约而不简单,因此这种产品也逐渐被人们所接受,随着人们观念的转换,空气净化器会有很好的发展前景。
本设计采用由STC89C52单片机最小系统、蓝牙模块、GP2Y1014AU粉尘传感器、ADC0832模数转换器模块、DHT11温湿度传感器模块、LCD1602液晶模块、电源模块、蜂鸣器报警模块、LED模块和按键模块模块组成。单片机实时通过ADC0832转换芯片采集GP2Y1010AU粉尘传感器的粉尘的浓度,同时,通过DHT11温湿度传感器感应当时的温度,然后通过单片机数据转换处理后在液晶屏上显示空气中的质量和温度,当测量空气中的温湿度大于或小于设置的温湿度时,蜂鸣器报警。不同的指示灯亮表示不同的温度。由电源变压器控制风机的开关,同时,通过蓝牙远程控制变压器的开关、报警器的开关和指示灯的开关,通过电池控制电路板上各模块的开关。
关键字:GP2Y1014AU0F粉尘传感器、DHT11温湿度传感器、蓝牙远程控制、空气质量
ABSTRACT
With the development of society and industry. People pay more and more attention to health problems. Air evolutional devices can not only purify the surrounding environment but also be ornaments in the home and bedroom. It is beautiful and modern, simple and simple. Therefore, this kind of product is gradually accepted by people. With the transformation of people's ideas, the air purifier will be good. Prospects for development.
This design USES the smallest system controlled by STC89C52, Bluetooth module, GP2Y1014AU dust sensor, ADC0832 analog to digital converter module, DHT11 temperature and humidity sensor module, LCD1602 module, power module, buzzer alarm module, LED module and key module module. The single chip microcomputer collects the dust concentration of the GP2Y1010AU dust sensor in real time through the ADC0832 conversion chip. At the same time, the temperature of the time is induced by the DHT11 temperature and humidity sensor, then the quality and temperature in the air are displayed on the LCD screen after the data conversion of the single chip microcomputer. When the temperature and humidity in the measured air is greater than or less than the setting of the air, the temperature and humidity are greater than or less than the setting. When the temperature and humidity, the buzzer alarm. Different lights show different temperatures. The switch of the fan is controlled by the transformer. At the same time, the switch of the transformer, the switch of the alarm and the switch of the indicator light are controlled by the Bluetooth, and the switch of each module on the circuit board is controlled by the power supply.
Key words: GP2Y1014AU0F dust sensor、DHT11 temperature and humidity sensor、Bluetooth remote control and air quality .
目录
摘要 I
ABSTRACT II
1、绪论 4
1.1课题的背景 4
2、总体方案设计 5
3、系统方案选择与比较、设计与论证 3
3.1主控制器模块选择 3
3.2按键的选择 4
3.3显示模块的选择 4
3.4电源选取 5
4、芯片资料简介
4.1 GP2Y1010AU0F传感器简介 5
4.2 ADC0832模数转换器简介 12
5、硬件实现及单元电路设计 21
5.1主控制模块 21
5.2显示模块电路 22
5.3报警模块的设计 23
5.4电源部分的设计 24
6、电路调试与分析 25
6.1电路的调试 25
6.2各个功能的实现
参考文献 29
整体电路原理图 30
1、绪论
1.1课题的背景
在现代生活中,由于经济的发展,空气污染越来越严重,更多的人涌向大城市,生活水平提高的同时带来的是生活质量的下降,空气是任何人每天必须呼吸的物质,然而由于空气的污染严重威胁到了人类的健康,越来越多的人们渴望在大城市也能呼吸道干净无污染的空气,大的环境无法改变,人们智能借助科技产品来改善小的环境,于是诸如空气加湿器、空气增湿器、空气净化器等等产品在市场上涌现出来。
此次设计的空气净化器从区域上定位为“家用”的行业,在人群的定位上主要是想设计一款适合青年人审美的空气净化器,简单来说主题就是“热爱生活,享受生活,关注健康”。
2、总体方案设计
本设计采用由STC89C52单片机最小系统、蓝牙模块、GP2Y1014AU粉尘传感器、ADC0832模数转换器模块、DHT11温湿度传感器模块、LCD1602液晶模块、电源模块、蜂鸣器报警模块、LED模块和按键模块模块组成。单片机实时通过ADC0832转换芯片采集GP2Y1010AU粉尘传感器的粉尘的浓度,同时,通过DHT11温湿度传感器感应当时的温度,然后通过单片机数据转换处理后在液晶屏上显示空气中的质量和温度,当测量空气中的温湿度大于或小于设置的温湿度时,蜂鸣器报警。不同的指示灯亮表示不同的温度。由变压器控制风机的开关,同时,通过蓝牙远程控制变压器的开关、报警器的开关和指示灯的开关,通过电源控制电路板上各模块的开关。
3、系统方案比较与选择、设计与论证
该系统主要由粉尘检测模块GP2Y1014AU、按键设置模块、DHT11温湿度传感器模块、报警模块和液晶显示模块态显电路组成,下面介绍实现此系统功能的方案。
3.1主控制器模块选择
方案一:
STC12C5A60S2是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。但本系统不需要复杂的AD转换,对数据的处理速度的要求也不是非常高。且从使用及经济的角度考虑我们放弃了此方案。
方案二:
采用STC89C52单片机作为整个系统的核心,用其进行程序数据处理,以实现其既定的性能指标。充分分析我们的系统,其关键在于实现温湿度传感器和PM2.5传感器的显示屏数据显示,而在这一点上,单片机就显现出来它的优势——控制简单、方便、快捷。这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。STC89C52单片机具有功能强大的位操作指令,I/O口均可按位寻址,程序空间多达8K,对于本设计也绰绰有余,更可贵的是STC89C52单片机价格非常低廉。
3.2按键的选择
本系统的按键用于切换和调节报警设定值,按键一用于调节报警值的自加功能,按键二是用于控制蜂鸣器,按键三用于报警值的自减。
方案一:
采用矩阵式键盘,此类键盘采用矩阵式行列扫描方式,优点是当按键较多时可降低占用单片机的I/O口数目,缺点为电路复杂且会加大编程难度。
方案二:
采用独立式按键电路,每个按键单独占有一根I/O接口线,每个I/O口的工作状态互不影响,此类键盘采用端口直接扫描方式。缺点为当按键较多时占用单片机的I/O口数目较多,优点为电路设计简单,且编程相对比较容易。
考虑到本系统所需要的按键较少,采用独立按键更方便更利于控制,故采用第二种方案。
3.3显示模块的选择
方案一:
用数码管进行显示。数码管由于显示速度快,使用简单,显示效果简洁明了而得到了广泛应用。但是由于要显示温湿度及PM值。用数码管无法显示如此丰富的内容,因此我们放弃了此方案。
方案二:
用LCD液晶进行显示。LCD由于其显示清晰,显示内容丰富、清晰,显示信息量大,使用方便,显示快速而得到了广泛的应用。
1、 用LCD12864显示。LCD12864是一种图形点阵液晶显示器,它主要分为两种,带字库的和不带字库的。不带字库的LCD需要自己提供字库字模,此时可以根据个人喜好设置各种字体显示风格,设计上较为灵活。带字库的LCD提供字库字模,但是只能显示GB2312的宋体。各有优缺点,根据不同应用场景灵活选择。其液晶模块原理图如下所示。
其中优点:功耗低、体积娇小不占面积、重量轻,超薄等。缺点:LCD12864液晶显示信息量大,相当来说程序和电路都比较复杂、价格较高。
2、 用LCD1602液晶显示,它的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。lcd1602液晶显示模块可以只用D4-D7作为四位数据分两次传送。这样的话,可以节省MCU的I/O口资源。lcd1602可以显示2行16个字符,有8为数据总线D0-D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。如图1所示:
其中优点:字符型液晶,显示字母和数字比较方便、控制简单、成本较低。缺点:显示的字体有大小限制、不能显示图形等等、它不能显示曲线。
由于本系统不需要使用文字,图形及曲线等较复杂的图案,只需要简单的字母数字显示即可。故采用LCD1602液晶显示屏。
3.4蓝牙模块的选择
方案一:
HC-06是主从一体化的蓝牙串口模块,主从可指令切换,指令少于HC-05,使用简单。优点:输出部分有增强,管容量更大,也可以接更高电压的外部驱动。
方案二:
HC-05是主从一体化的蓝牙串口模块,主从可指令切换,指令丰富齐全。优点:指令较多,简单,容易上手,对于AT设置来说相对容易。
综合本系统AT设置及指令发送等因素,选用方案二。
3.5电源选取
方案一:
采用5V和12V的蓄电池为系统供电。蓄电池具有较强的电流驱动能力以及稳定的电压输出性能。但是蓄电池的体积过于庞大,且电量太小,当使用过久后电压不太稳定。
方案二:
制作一个12V、9V和5V的变压器电源板供电,电压稳定,不用担心电量减少而导致电压不稳,也不用担心使用时间过长而导致电阻的变化。
最终应用中考虑到实际供电电压原因,故两种方案都采用。
4、芯片资料简介
4.1 GP2Y1014AU0F传感器简介
GP2Y1014AU0F是一个采用光学传感系统的灰尘传感器。该设备由红外线发光二极管(IRED)和一个光电管成对角布置而成。它通过检测空气中的尘埃的反射光。特别是,它能够有效地检测到像香烟烟雾等非常细的粒子。此外,他可以通过脉冲模拟输出区分房子内的烟雾和灰尘。
4.2 ADC0832模数转换器简介
ADC0832 是美国国家半导体公司生产的一种8 位分辨率、双通道A/D转换芯片。由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。学习并使用ADC0832 可是使我们了解A/D转换器的原理,有助于我们单片机技术水平的提高。ADC0832 具有以下特点:
· 8位分辨率
· 双通道A/D转换
· 输入输出电平与TTL/CMOS相兼容
· 5V电源供电时输入电压在0-5V之间
· 工作频率为250KHZ,转换时间为32μS
· 一般功耗仅为15mW
· 8P、14P—DIP(双列直插)、PICC 多种封装
· 商用级芯片温宽为0°C ~ +70°C,工业级芯片温宽为-40°C ~ +85°C
芯片顶视图:
图1
芯片接口说明:
· CS_ 片选使能,低电平芯片使能。
· CH0 模拟输入通道0,或作为IN+/-使用。
· CH1 模拟输入通道1,或作为IN+/-使用。
· GND 芯片参考0 电位(地)。
· DI 数据信号输入,选择通道控制。
· DO 数据信号输出,转换数据输出。
· CLK 芯片时钟输入。
· Vcc/REF 电源输入及参考电压输入(复用)。
ADC0832 与单片机的接口电路:
ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI 数据输入端,可以轻易的实现通道功能的选择。
单片机对ADC0832 的控制原理:
正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI 并联在一根数据线上使用。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。在第2、3个脉冲下沉之前DI端应输入2 位数据用于选择通道功能。当此2 位数据为“1”、“0”时,只对CH0 进行单通道转换。当2位数据为“1”、“1”时,只对CH1进行单通道转换。当2 位数据为“0”、 “0”时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。当2 位数据为“0”、“1”时,将CH0作为负输入端IN-,CH1 作为正输入端IN+进行输入。到第3 个脉冲的下沉之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。从第4个脉冲下沉开始由DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATD0。随后输出8位数据,到第19 个脉冲时数据输出完成,也标志着一次A/D转换的结束。最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。
ADC0832时序图:
图3
作为单通道模拟信号输入时ADC0832的输入电压是0~5V且8位分辨率时的电压精度为19.53mV。如果作为由IN+与IN-输入的输入时,可是将电压值设定在某一个较大范围之内,从而提高转换的宽度。但值得注意的是,在进行IN+与IN-的输入时,如果IN-的电压大于IN+的电压则转换后的数据结果始终为00H。
5、硬件实现及单元电路设计
5.1主控制模块
单片机最小系统包括单片机、复位电路、时钟电路构成。
STC89C52 单片机的工作电压范围:4V-5.5V,所以通常给单片机外界5V直流电源。连接方式为单片机中的40脚VCC接正极5V,而20脚VSS接电源地端。
复位电路就是确定单片机的工作起始状态,完成单片机的启动过程。单片机接通电源时产生复位信号,完成单片机启动确定单片机起始工作状态。当单片机系统在运行中,受到外界环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。一般有上电自动复位和外部按键手动复位,单片机在时钟电路工作以后,在RESET端持续给出2个机器周期的高电平时就可以完成复位操作。本设计采用的是外部手动按键复位电路,需要接上上拉电阻来提高输出高电平的值。
时钟电路好比单片机的心脏,它控制着单片机的工作节奏。时钟电路就是振荡电路,是向单片机提供一个正弦波信号作为基准,决定单片机的执行速度。XTAL1和XTAL2分别为反向放大器的输入和输出,该反向放大器可以配置为片内振荡器。如采用外部时钟源驱动器件,XTAL2应不接。因为一个机器周期含有6个状态周期,而每个状态周期为2个振荡周期,所以一个机器周期共有12个振荡周期,如果外接石英晶体振荡器的振荡频率为12MHZ,一个振荡周期为1/12us。
5.2显示模块电路
显示模块采用LCD1602液晶显示器,能够清晰的在液晶上显示字符和数字,看到能让人感觉到舒服感。液晶的命令操作脚是RS、RW、EN接在单片机的P3^5、P3^6、P3^7脚。,数据脚D0~D7分别接单片机的的P1口。具体电路图如图5所示:
图5驱动电路
5.3报警模块的设计
5.4电源部分的设计
6、电路的调试与分析
6.1电路的调试
首先烧入液晶显示程序,看显示是否正常显示。如果不正常检测LCD1602液晶的各引脚的焊接情况,有没有虚焊,短焊,错焊的情况。显示正常之后,在程序加入粉尘检测程序、温湿度检测程序、蓝牙模块、LCD1602液晶显示屏、ADC转化模块等一一进行调试。
6.2各个功能的实现
本系统属于检测显示模块,PM2.5检测到的数据通过AD转化后给显示屏,温湿度检测到的数据直接显示到显示屏上。净化功能的原理即是外面的空气进到滤网里,通过两层滤网,一层活性炭滤网,一层HEPA滤网最后经过离心涡旋风机将净化的空气传出去。
参考文献
【1】 郭天祥 《51单片机C语言教程》清华大学出版社
【2】 谭浩强 《C程序设计》电子工业出版社
部分程序如下:
#include
#include"LCD1602.h" //添加LCD1602头文件
#include"dht11.h" //添加DHT11头文件
#include"adc0832.h"
#include "intrins.h"
#include"delay.h"
#include"1602xs.h"
#include
//uchar Rx_buf[4],Rxnum=0;
uchar receiveData = '*'; //'1' '#' '%'
/*******************************************************************************
* 函数名 :UsartInit()
* 函数功能 :设置串口
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void UsartInit()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
/*UART 发送一字节
void Usart_send_byte(char dat)
{
SBUF = dat;
while (TI == 0);
TI = 0;
}*/
/* UART 发送字符串
void Usart_send_string(unsigned char *buf)
{
while (*buf != '\0')
{
Usart_send_byte(*buf++);
}
} */
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
LCDXS();
UsartInit(); // 串口初始化
// uchar Tx_Buf[15];
while(1)
{
LCDXS();
if(receiveData == '1')
{
BUZZER = 1;
}
else if(receiveData == '0')
{
BUZZER = 0;
}
else if(receiveData == 'L')
{
relay = 0;
}
else if(receiveData == 'O')
{
relay = 1;
}
else if(receiveData == 'V' )
{
LED1=0;
}
else if(receiveData == 'E')
{
LED2=0;
}
else if(receiveData == 'Y')
{
LED3=0;
}
else if(receiveData == 'U')
{
LED1=1;
LED2=1;
LED3=1;
}
/* Tx_Buf[0]='T'; //帧头
Tx_Buf[1]=T1_data/10%10+0x30; //将温湿度数据送往发送数组,送给蓝牙模块让手机APP显示
Tx_Buf[2]=T1_data%10+0x30;
Tx_Buf[3]=R1_data/10%10+0x30;
Tx_Buf[4]=R1_data%10+0x30;
Tx_Buf[5]=PMVAL/1000+0x30; //将pm值数据送往发送数组,送给蓝牙模块让手机APP显示
Tx_Buf[6]=PMVAL/100%10+0x30;
Tx_Buf[7]=PMVAL/10%10+0x30;
Tx_Buf[8]=PMVAL%10+0x30;
Tx_Buf[9]=0;//结束符
Tx_Buf[10]=0;//结束符
Tx_Buf[11]=0;//结束符
Usart_send_string(Tx_Buf); //串口发送温湿度数据出去*/
}
}
/*******************************************************************************
* 函数名 : Usart() interrupt 4
* 函数功能 : 串口通信中断函数
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void Usart() interrupt 4
{
receiveData=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志位
SBUF=receiveData;//将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
/*void UsartInterrupt(void) interrupt 4
{
ES=0; //关闭中断
if(RI) //接收到数据
{
Rx_buf[Rxnum]=SBUF; //接收数据进数组
if(Rx_buf[Rxnum]==0x08)
Rxnum=0;
else
Rxnum++;
if(Rx_buf[0]==0x01)//LED1灯
{
if(Rx_buf[1]==0x01)//开灯
LED1=0;//开灯
else
LED1=1; //关灯
}
if(Rx_buf[0]==0x02)//LED2灯
{
if(Rx_buf[1]==0x01)//开灯
LED2=0;//开灯
else
LED2=1; //关灯
}
}
RI=0;
ES=1; //关闭中断
} */
#include
#include"Delay.h" //添加延时函数头文件
#include"lcd1602.h"
#include"delay.h"
#include"adc0832.h"
#include"dht11.h"
void WriteCOMDATA(uchar LCD_DATA,uchar N)
{
Delay(5);
E=1;
RW=0;
RS=N;
LCD_PINDATA=LCD_DATA;
E=0;
}
/************************************************
** 函数名称 : void LCD_init(void)
** 函数功能 : LCD1602初始化操作
** 输 入 : 无
** 输 出 : 无
** 说 明 :
************************************************/
void LCD_Init(void)
{
WriteCOMDATA(0x01,0);
Delay(500);
WriteCOMDATA(0x38,0);
Delay(10);
WriteCOMDATA(0x06,0);
Delay(10);
WriteCOMDATA(0x0C,0);
Delay(10);
}
/************************************************
** 函数名称 :void WriteChar(uchar Row,uchar Col,uchar Num,uchar *pBuffer)
** 函数功能 :在任意位置写指定个字符
** 输 入 :Row : 要写的字符所在的行,只能为1或2;
Col : 要写的字符所在的列,只能为0---15
Num : 要写字符的个数
pbuffer : 要写字符的首地址
** 输 出 :无
** 说 明 :
************************************************/
void WriteChar(uchar Row,uchar Col,uchar Num,uchar *pBuffer)
{
uchar i;
if(Row==1)Row=0x80+Col;
else Row=0xC0+Col;
WriteCOMDATA(Row,0);
for(i=Num;i!=0;i--)
{
WriteCOMDATA(*pBuffer,1);
pBuffer++;
}
}
#include
#include"LCD1602.h" //添加LCD1602头文件
#include"dht11.h" //添加DHT11头文件
#include"adc0832.h"
#include "intrins.h"
#include"delay.h"
#include"1602xs.h"
#include"led.h"
#include
void leddisplay()
{
if(T1_data>=20&&T1_data<=35)
{
LED1=0 ;
}
else
{
if((T1_data>=15&&T1_data<20)||(T1_data>35&&T1_data<=40))
{
LED2=0;
}
else
{
LED3=0;
}
}
}
#include
#include"dht11.h"
#include"delay.h"
#include "intrins.h"
uchar U8count,U8temp,U8FLAG,U8comdata;
void Delay_10us(void)
{
uchar i;
i--;
i--;
i--;
i--;
i--;
i--;
}
void COM(uchar n)
{
uchar i;
for(i=0;i<8;i++)
{
U8FLAG=2;
if(n){while((!DHT11_DQ1)&&U8FLAG++);}
else {while((!DHT11_DQ2)&&U8FLAG++);}
Delay_10us();
Delay_10us();
U8temp=0;
if(n){if(DHT11_DQ1)U8temp=1;}
else {if(DHT11_DQ2)U8temp=1;}
U8FLAG=2;
if(n){while((DHT11_DQ1)&&U8FLAG++);}
else {while((DHT11_DQ2)&&U8FLAG++);}
if(U8FLAG==1)break;
U8comdata<<=1;
U8comdata|=U8temp;
}
}
uchar Read_TRH(uchar ch,uchar n)
{
uchar TRH_data=0;
static uchar U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
static uchar U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
if(n)DHT11_DQ1=0;
else DHT11_DQ2=0;
Delay(24);
if(n)DHT11_DQ1=1;
else DHT11_DQ2=1;
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
if(n)DHT11_DQ1=1;
else DHT11_DQ2=1;
if(!DHT11_DQ1 || !DHT11_DQ2)
{
U8FLAG=2;
if(n){while((!DHT11_DQ1)&&U8FLAG++);}
else {while((!DHT11_DQ2)&&U8FLAG++);}
U8FLAG=2;
if(n){while((DHT11_DQ1)&&U8FLAG++);}
else {while((DHT11_DQ2)&&U8FLAG++);}
COM(n);U8RH_data_H_temp=U8comdata;
COM(n);U8RH_data_L_temp=U8comdata;
COM(n);U8T_data_H_temp=U8comdata;
COM(n);U8T_data_L_temp=U8comdata;
COM(n);U8checkdata_temp=U8comdata;
if(n)DHT11_DQ1=1;
else DHT11_DQ2=1;
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp;
}
}
if(ch)TRH_data=U8RH_data_H;
else TRH_data=U8T_data_H;
return TRH_data;
}