室内温湿度控制系统报告

  • 格式:doc
  • 大小:77.50 KB
  • 文档页数:52

室内温湿度控制系统报告室内温湿度控制系统设计报告室内温湿度控制系统摘要本文利用89C52单片机设计一个温室大棚的温湿度检测控制系统对室内的温湿度进行检测控制并实时显示其中温湿度传感器采用DHT11数字温湿度传感器通过89C52单片机的处理把温湿度值显示在1602A液晶上并实时判断温湿度值是否满足设定的温湿度范围若超出设定范围通过89C52启动温湿度控制系统达到恒温恒湿的目的关键字89C52DHT111602A液晶显示温湿度控制系统目录摘要 11本系统主要研究内容 311基本要求 31.2发挥部分 32 系统总体设计 321系统的组成 322系统的工作原理43 单元电路设计 631单片机系统设计632传感器的设计833 液晶显示装置设计934 光声报警系统与温湿度控制系统设计1235温湿度系统设计134 软件设计1441初始化模块 1442温湿度检测模块1443 温湿度判断控制模块1544 1602液晶显示模块 1545报警模块1546 系统整体软件程序165 系统测试166总结17参考文献17附录181本系统主要研究内容设计一个室内温湿度检测装置检测和显示室内的温度湿度并在温度湿度超过设置的范围是采取相应的措施使得温度达到设置的范围11 基本要求1采集温度传感器数据在显示器上显示室内的温度2采集湿度传感器数据在显示器上显示室内的湿度3可以通过按键来设定目标温度和湿度的范围12 发挥部分1当温度和湿度超过设置的范围时用蜂鸣器发出不同的声音报警并且用LED 灯指示是温度还是湿度超出了预设的范围2用两个电机模拟对温度和湿度的控制当温度和湿度超出设置范围时控制两个电机动作调节温度和湿度达到预设的范围电机1正转顺时针表示加热反转逆时针表示制冷电机2正转顺时针表示加湿反转逆时针表示干燥3用电机的转速表示控制作用的强弱程度并与温度湿度的偏差大小相关2 系统的总体设计21 系统的组成以单片机为控制核心采用温湿度测量通信技术控制技术等技术以温湿度传感器作为测量元件构成智能温湿度测量控制系统可分为温湿度测量电路显示电路声光报警电路温湿度控制电路选用的主要器件有 89C52温湿度传感器DHT111602A显示模块红绿白LED灯报警装置蜂鸣器等系统原理图22 系统的工作原理本系统以单片机89C52为核心数据采集传输显示报警都要通过单片机数据采集通过单总线的智能数字温湿度传感器DHT11完成通过单片机把采集的数据显示在1602A上当采集的数据超出给定范围时有蜂鸣器实时报警并显示红灯提示并进行相应的控制处理在整个系统中采用了DHT11单总线技术单片机采用C 语言编程· 89C52作为中央控制装置负责中心运算和控制协调系统各个模块的工作·电机1反转实现系统的降温工作·电机1正转实现系统的加热工作·电机2正转实现系统的加湿工作·电机2反转实现系统的干燥工作·两盏灯报警模块负责系统的报警功能如果当前的温度超过用户设定的界限值时系统将自动报警灯在单片机的控制下有规律的闪烁同时报警模块发出报警声通知用户采取相应的措施系统工作流程图系统的工作流程图3 单元电路设计31 单片机系统设计经过上面的总体方案和实施措施的讨论后可以开始着手硬件系统的设计硬件系统是应用系统的基础软件系统设计的依据根据总体功能和性价比及其运行速度等因素的考虑选用STC89C52为主机满足上面的要求而且设计方便不需要再存储扩展STC89C52单片机概述STC89C52是一种低功耗高性能CMOS8位微控制器具8K在系统可编程Flash 存储器在单芯片上拥有灵巧的8位CPU和在系统可编程Flash使得STC89C52为众多嵌入式控制应用系统提供高灵活超有效的解决方案具有以下标准功能8k字节Flash512字节RAM32位IO口线看门狗定时器内置4KB EEPROM810复位电路2个16位定时器计数器一个6向量2级中断结构全双工串行口另外STC8952可降至0Hz静态逻辑操作支持2种软件可选择节电模式空闲模式下CPU停止工作允许RAM定时器计数器串口中断继续工作掉电保护方式下RAM内容被保存振荡器被冻结单片机一切工作停止直到下一个中断或硬件复位为止最高运作频率35MHz6T12T可选相关参数工作电压55V~33V5V单片机8V~20V3V单片机工作频率范围0~40MHz相当于普通8051的0~80MHz实际工作频率可达48MHz 用户应用程序空间为8K字节片上集成512字节RAM 通用IO口32个复位后为P0P1P2P3是准双向口上拉P口是漏极开路输出作为总线扩展用时不用加上拉电阻作为IO 口用时需加上拉电阻ISP在系统可编程IAP在应用可编程无需专用编程器无需专用仿真器可通过串口RxDP30TxDP31直接下载用户程序数秒即可完成具有EEPROM功能具有看门狗功能共3个16位定时器计数器即定时器T0T1T2 10外部中断4路下降沿中断或低电平触发电路PowerDown模式可由外部中断低电平触发中断方式唤醒11通用异步串行口UART还可用定时器软件实现多个UART 12工作温度范围-40~85℃工业级0~75℃商业级13PDIP封装89C532 传感器的设计DHT11产品概述DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器它应用专用的数字模块采集技术和温湿度传感技术确保产品具有极高的可靠性与卓越的长期稳定性传感器包括一个电阻式感湿元件和一个NTC 测温元件并与一个高性能8位单片机相连接因此该产品具有品质卓越超快响应抗干扰能力强性价比极高等优点每个DHT11传感器都在极为精确的湿度校验室中进行校准校准系数以程序的形式储存在OTP内存中传感器内部在检测信号的处理过程中要调用这些校准系数单线制串行接口使系统集成变得简易快捷超小的体积极低的功耗信号传输距离可达20米以上使其成为各类应用甚至最为苛刻的应用场合的最佳选则产品为4 针单排引脚封装连接方便特殊封装形式可根据用户需求而提供DHT11引脚说明VDD 供电3-55VDCDATA 串行数据单总线NC 空脚请悬空GND 接地电源负极33 液晶显示装置设计1602A是一种工业字符型液晶能够同时显示16x02即32个字符下图为1602A 模块尺寸图引脚接口说明VSS 电源地 9 D2 数据VDD 电源正极 10 D3 数据VL 液晶显示偏压11 D4 数据RS 数据命令选择12 D5 数据RW 读写选择13 D6 数据E 使能信号 14 D7 数据D0 数据 15 BLA 背光源正极D1 数据 16 BLK 背光源负极第1脚VSS为地电源第2脚VDD接5V正电源第3脚VL为液晶显示器对比度调整端接正电源时对比度最弱接地时对比度最高对比度过高时会产生鬼影使用时可以通过一个10K的电位器调整对比度第4脚RS为寄存器选择高电平时选择数据寄存器低电平时选择指令寄存器第5脚RW为读写信号线高电平时进行读操作低电平时进行写操作当RS和RW共同为低电平时可以写入指令或者显示地址当RS为低电平RW为高电平时可以读忙信号当RS为高电平RW为低电平时可以写入数据第6脚E端为使能端当E端由高电平跳变成低电平时液晶模块执行命令第7~14脚D0~D7为8位双向数据线第15脚背光源正极第16脚背光源负极控制命令表1602液晶模块的读写操作屏幕和光标的操作都是通过指令编程来实现的说明1为高电平0为低电平指令1清显示指令码01H光标复位到地址00H位置指令2光标复位光标返回到地址00H指令3光标和显示模式设置ID光标移动方向高电平右移低电平左移S屏幕上所有文字是否左移或者右移高电平表示有效低电平则无效指令4显示开关控制D控制整体显示的开与关高电平表示开显示低电平表示关显示C控制光标的开与关高电平表示有光标低电平表示无光标B控制光标是否闪烁高电平闪烁低电平不闪烁指令5光标或显示移位SC高电平时移动显示的文字低电平时移动光标指令6功能设置命令DL高电平时为4位总线低电平时为8位总线N低电平时为单行显示高电平时双行显示F 低电平时显示5x7的点阵字符高电平时显示5x10的点阵字符指令7字符发生器RAM地址设置指令8DDRAM地址设置指令9读忙信号和光标地址BF为忙标志位高电平表示忙此时模块不能接收命令或者数据如果为低电平表示不忙指令10写数据指令11读数据1602LCD的一般初始化复位过程延时15mS写指令38H不检测忙信号延时5mS以后每次写指令读写数据操作均需要检测忙信号写指令38H显示模式设置写指令08H显示关闭写指令01H显示清屏写指令06H显示光标移动设置写指令 0CH显示开及光标设置液晶显示原理读写操作时序如图13和图14所示读操作时序写操作时序34 光声报警系统与温湿度控制系统设计本系统采用绿白LED灯作为光报警提示当系统检测到的数据符合给定的要求时现场始终白绿灯不亮当系统检测到的数据不符合给定的要求时根据情况温度超限白灯亮湿度超限绿灯亮报警提示本系统采用蜂鸣器作为声报警提示当系统检测到的数据符合给定的要求时现场没有蜂鸣器报警提示当系统检测到的数据不符合给定的要求时现场蜂鸣器报警提示光声报警系统电路图35 温湿度控制系统本系统温湿度控制系统主要组成有电机1和电机2当系统检测到的数据不符合给定的要求时系统启动温湿度控制系统实现恒温恒湿的目的·电机1反转实现系统的降温工作·电机1正转实现系统的加热工作·电机2正转实现系统的加湿工作·电机2反转实现系统的干燥工作温湿度检测电路温湿度控制电路4 软件系统设计本系统软件系统设计包括系统初始化模块温湿度检测模块1602LCD显示模块报警模块温湿度判断控制模块系统软件总体流程图系统流程图41 初始化模块系统初始化模块的主要功能是完成系统的初始化以及设定系统的工作状态初始化部分包括以下方面的内容com 单片机初始化以及各种引脚定义com 1602液晶初始化及工作方式com 系统进入正常工作状态42 温湿度检测模块温湿度检测模块是本系统中的核心模块之一它负责完成温度和湿度的测量及模拟量转换为数字量的全过程这也是它为什么重要的原因数字式温湿度传感器DTH11直接把检测到的模拟量转化为数字量送给单片机在经过单片机的处理把温湿度值显示在1602液晶上温湿度传感器的精确度值直接影响到整个系统的检测与控制所以本系统采用数字式温湿度传感器DTH11采集温室内的温湿度43 温湿度判断控制模块温湿度判断控制模块也是系统的核心模块之一所谓判断控制模块就是对当前温室内的实际温湿度与给定的温湿度范围进行比较先进行判断然后再进行控制控制模块是决定系统将要进行什么工作的如温度高于上限时需要降温低于下限时需要升温如湿度高于上限时需要降湿低于下限时需要増湿同时还要启动警报等等温湿度判断控制部分的程序整体思路如图温湿度判断控制程序整体思路44 1602液晶显示模块本系统采用1602液晶显示温湿度值当系统刚开始上电时1602液晶不显示任何数据等待DTH11的监测数据双行显示在1602液晶上第一行显示T--C第二行显示H --45 报警模块报警模块具备两项功能即为报警灯和声音报警报警灯模块是完成LED有规律的闪烁以便从视觉上提醒用户LED是由单片机控制2个双色LED灯组成的其转换规律为1 系统温湿度值在给定的范围时绿色LED亮2 系统温湿度值超出给定的范围时白色LED亮在LED灯转换的同时声音报警也会同时启动可采用延时的方式来延长声音报警的声音46 系统整体软件程序见附录5系统测试整个软件通过C语言编程现在keilC51集成开发环境下将程序写出来并进行编译调试调试通过后会生成HEX文件具体过程为新建一个工程然后在新建一个C语言程序并把新建的C语言程序添加到工程中然后编译工程编译后就会生成HEX文件HEX文件就是要下载到单片机中的程序文件1点击Project菜单选择下拉菜单中的NEW Project工程名用test1表示保存文件2选择所要的单片机我们选择Ateml公司的AT89C513在工程中创建新的程序文件现在编写程序我们先编写一个单片机IO口控制LED灯闪烁的程序includesbit p1 p10unsigned int avoid maina 5000p1 0while a--a 5000p1 1while a--这段程序是用单片机的P10口控制小灯闪烁编译然后将HEX文件下载到单片机中运行程序观察LED灯的点亮情况当运行程序后LED灯闪烁说明编译的程序正确当简单的程序正确就可以慢慢的加深难度开始编写温湿度控制程序在这里就不在写了见附表将写好的程序编译好无错后下载到单片机运行软件观察程序运行情况进行优化改进6结论虽然这个设计做的比较简单但能完成给定的设计内容很多东西考虑的不是很细也有一些特别情况没有做但是用了很多精力用来完成这个设计鉴于个人水平和时间的关系所以并没有把自己当初设想的所有情况都考虑进去这两个星期的设计让我学会的很多觉得自己学的太少还有很多需要认真学习学无止境所以要更努力参考文献[1]林国汉基于单片机的温度控制系统设计[J]微计算机信息200925 21~24[2]易顺明基于单片机的大棚温湿度控制系统设计[J]现代电子技术20117 7~15[3]张毅刚单片机原理及应用[M]北京高等教育出版社200812~106[4] Atmel Atmel 89C51 Microcontrollers Hardware Manual2010 35~98[5]陈桂友柴远斌单片机应用技术[M]北京机械工业出版社200810~88[6]熊诗波机械工程测试技术基础[M]4版北京机械工业出版社2008 60~102[7]张新荣[J]工业控制计算机[8]夏晓南基于单片机的温箱温度和湿度的控制[J]现代电子技术2008 5 6~12[9]com[M]7版北京高等教育出版社200834~80附录includeincludeincludevoid dangqianzhivoid read_wsddefine uchar unsigned char 定义无符号字符型define uint unsigned int 定义无符号整型typedef unsigned char unint8 定义无符号字节型typedef unsigned char unint16 定义无符号字型sbit en1 P16 L298的Enable Asbit en2 P11 L298的Enable Bsbit IN1 P12 L298的Input 1sbit IN2 P13 L298的Input 2sbit IN3 P14 L298的Input 3sbit IN4 P15 L298的Input 4uchar t 0 中断计数器uchar m1 0 电机1速度值uchar m2 0 电机2速度值uchar tmp1tmp2 电机当前速度值sbit wsd P10 DHT11数据接受sbit s1 P30 按键s1sbit s2 P31 按键s2sbit s3 P32 按键s3sbit s4 P33 按键s4sbit s5 P36 按键s5sbit rs P37sbit fm P23 蜂鸣器接口sbit led1 P24 温度警报灯sbit led2 P25 湿度警报灯sbit lcden P34 液晶使能端sbit lcdrs P35 液晶数据命令选择端sbit dula P26 段选端sbit wela P27 位选端uchar code table[] "T" 温度uchar code table1[] "H" 湿度uchar code table2[] "FW" 温度范围uchar code table3[] "FW" 湿度范围uchar code table4[] 0x300x310x320x330x340x350x360x370x380x39 uchar code table5[] "0"uchar code table6[] "C"uchar numnum1s1numdiwengaowendishigaoshiunint8 RHRLTHTLCK_dataunint8 TH_tempTL_tempRH_tempRL_tempCK_tempunint8 com_datauntemptempunint8 respondchar piancha1piancha2piancha3piancha4void delay uint z 延时函数1ms为单位uint xyfor x zx 0x--for y 110y 0y--void write_com uchar com 液晶写命令函数lcdrs 0P0 comdelay 5lcden 1delay 5lcden 0void write_data uchar date 液晶写数据函数lcdrs 1P0 datedelay 5lcden 1delay 5lcden 0void motor1 char speed1 电机1read_wsddangqianzhim1 abs speed1void motor2 char speed2 电机2read_wsddangqianzhim2 abs speed2void initdiwen 0gaowen 0dishi 0gaoshi 0TMOD 0x02 设定T0的工作模式为2TH0 0x9B 装入定时器的初值TL0 0x9BEA 1 开中断ET0 1 定时器0允许中断TR0 0rs 0dula 0wela 0s1num 0num1 0lcden 0write_com 0x38 设置16X2显示5X7点阵8位数据接口write_com 0x0f 设置开显示不显示光标write_com 0x06 写一个字符后地址指针加1write_com 0x01 显示清零数据指针清write_com 0x80 设置显示初始坐标void timer0 interrupt 1 T0中断服务程序if t 0 1个PWM周期完成后才会接受新数值tmp1 m1tmp2 m2if t tmp1en1 1elseen1 0 产生电机1的PWM信号if t tmp2en2 1elseen2 0 产生电机2的PWM信号tif t 100t 0read_wsddangqianzhi1个PWM信号由100次中断产生if s5 0TR0 0en1 0en2 0void keyscan 按键扫描函数if s1 0delay 5if s1 0s1numwhile s1if s1num 1write_com 0x800x4fwrite_com 0x0fif s1num 2write_com 0x800x4cwrite_com 0x0fif s1num 3write_com 0x800x0fwrite_com 0x0fif s1num 4write_com 0x800x0cwrite_com 0x0fif s1num 5s1num 0write_com 0x0cif s1num 0if s2 0delay 5if s2 0while s2if s1num 1gaoshiwrite_com 0x800x4ewrite_datatable4[gaoshi10]write_com 0x800x4fwrite_datatable4[gaoshi10]write_com 0x800x4fif s1num 2dishiwrite_com 0x800x4bwrite_datatable4[dishi10]write_com 0x800x4cwrite_datatable4[dishi10]write_com 0x800x4cif s1num 3gaowenwrite_com 0x800x0ewrite_datatable4[gaowen10]write_com 0x800x0fwrite_datatable4[gaowen10]write_com 0x800x0fif s1num 4diwenwrite_com 0x800x0bwrite_datatable4[diwen10]write_com 0x800x0cwrite_datatable4[diwen10]write_com 0x800x0cif s3 0delay 1if s3 0while s3if s1num 1gaoshi--write_com0x800x4ewrite_datatable4[gaoshi10]write_com0x800x4fwrite_datatable4[gaoshi10]write_com0x800x4fif s1num 2dishi--write_com 0x800x4bwrite_data table4[dishi10]write_com 0x800x4cwrite_data table4[dishi10]write_com 0x800x4cif s1num 3gaowen--write_com 0x800x0ewrite_data table4[gaowen10]write_com 0x800x0fwrite_data table4[gaowen10]write_com 0x800x0fif s1num 4diwen--write_com 0x800x0bwrite_data table4[diwen10]write_com 0x800x0cwrite_data table4[diwen10]write_com 0x800x0cif s4 0delay 1if s4 0s1num 0num1 0write_com 0x0cTR0 0en1 1en2 1void delay_usunint8 ii--i--i--i--i--i--char receiveunint8 icom_data 0for i 0i 7irespond 2while wsd responddelay_usdelay_usdelay_usif wsdtemp 1respond 2while wsd respondelsetemp 0com_data 1 左移后赋值为1 com_data temp 按位或后赋值com_data com_datatempreturn com_datavoid read_wsd 湿度读取子程序wsd 0 主机拉低18msdelay 18wsd 1 DATA总线由上拉电阻拉高主机延时20usdelay_usdelay_usdelay_usdelay_uswsd 1 主机设为输入判断从机响应信号if wsd 判断DHT11是否有低电平响应信号如不响应则跳出响应则向下运行respond 2while wsd respond 判断DHT11发出 80us 的低电平响应信号是否结束respond 2while wsdrespond 判断从机是否发出80us 的高电平如发出则进入数据接收状态RH_temp receive 数据接收状态RL_temp receiveTH_temp receiveTL_temp receiveCK_temp receivewsd 1untemp RH_tempRL_tempTH_tempTL_temp 数据校验 if untemp CK_tempRH RH_temp 湿度高8位RL RL_temp 湿度低8位TH TH_temp 温度高8位 TL TL_temp 温度低8位CK_data CK_temp 数据校检位void xianshiwrite_com 0x80 给液晶写入数据for num 0num 2numwrite_data table[num]delay 5delay 5write_com 0x800x04for num 0num 2numwrite_data table5[num]delay 5write_com 0x800x06write_data table6[2]write_com 0x800x40for num 0num 2numwrite_data table1[num]delay 5write_com 0x800x44for num 0num 2numwrite_data table5[num]delay 5write_com 0x800x46write_data table6[1]delay 5write_com 0x800x08for num 0num 3numwrite_data table2[num]delay 1void xiefanweiwrite_com 0x800x0Bwrite_data table4[diwen10]delay 1write_com 0x800x0cwrite_data table4[diwen10]delay 1write_com 0x800x0dwrite_data table6[0]delay 1write_com 0x800x0ewrite_data table4[gaowen10]delay 1write_com 0x800x0fwrite_data table4[gaowen10]delay 1write_com 0x800x48for num 0num 3numwrite_data table3[num]delay 1write_com 0x800x4Bwrite_data table4[dishi10]delay 1write_com 0x800x4cwrite_data table4[dishi10]delay 1write_com 0x800x4dwrite_data table6[0]delay 1write_com 0x800x4ewrite_data table4[gaoshi10]delay 1write_com 0x800x4fwrite_data table4[gaoshi10]delay 1void dangqianzhiwrite_com 0x800x02write_data table4[TH10]delay 1write_com 0x800x03write_data table4[TH10]delay 1write_com 0x800x42write_data table4[RH10]delay 1write_com 0x800x43write_data table4[RH10]write_com 0x0cvoid jingbao1 温湿度低于下限while TH diwen RH dishiread_wsddangqianzhiif s5 0TH diwenRH dishiTR0 0en1 0en2 0breakfm 0delay 50fm 1delay 50led1 0delay 50led1 1delay 50led2 0delay 50led2 1delay 50piancha1 diwen-THif piancha1 1piancha1 3piancha1 30else if piancha1 3piancha1 6piancha1 40else if piancha1 6piancha1 10piancha1 60elsepiancha1 80delay 5motor1 piancha1delay 2IN1 0IN2 1piancha2 dishi-RHdelay 5if piancha2 1piancha2 5piancha2 30else if piancha2 5piancha2 10piancha2 40else if piancha2 10piancha2 20piancha1 60elsepiancha1 80delay 2motor2 piancha2delay 2IN3 0IN4 1void jingbao2 温度低于下限while TH diwen RH dishi RH gaoshiread_wsddangqianzhiif s5 0TH diwenRH dishiRH gaoshiTR0 0en1 0en2 0breakfm 0delay 10fm 1delay 10led1 0delay 50led1 1delay 50piancha1 diwen-THdelay 10if piancha1 1piancha1 3piancha1 30else if piancha1 3piancha1 6piancha1 40else if piancha1 6piancha1 10piancha1 60elsepiancha1 80delay 10motor1 piancha1delay 1IN1 0IN2 1void jingbao3 温度低于下限湿度高于上限while TH diwen RH gaoshiread_wsddangqianzhiif s5 0TH diwenRH gaoshiTR0 0en1 0en2 0breakfm 0delay 50fm 1delay 50led1 0delay 50led1 1delay 50led2 0delay 50led2 1delay 50piancha1 diwen-THdelay 10if piancha1 1piancha1 3piancha1 30else if piancha1 3piancha1 6piancha1 40else if piancha1 6piancha1 10piancha1 60elsepiancha1 80delay 2motor1 piancha1delay 2IN1 0IN2 1piancha3 RH-gaoshidelay 5if piancha3 1piancha3 5piancha3 30else if piancha3 5piancha3 10piancha3 40else if piancha3 10piancha3 20piancha3 60elsepiancha3 80delay 2motor2 piancha3IN3 1IN4 0void jingbao4 湿度低于下限while TH diwen TH gaowen RH dishiread_wsddangqianzhiif s5 0TH diwenTH gaowenRH dishiTR0 0en1 0en2 0breakfm 0delay 100fm 1delay 100led2 0delay 50led2 1delay 50piancha2 dishi-RHdelay 5if piancha2 1piancha2 5piancha2 30else if piancha2 5piancha2 10piancha2 40else if piancha2 10piancha2 20piancha2 60elsepiancha2 80motor2 piancha2IN3 0IN4 1void jingbao5 湿度高于上限while TH diwen TH gaowen RH gaoshiread_wsddangqianzhiif s5 0TH diwenTH gaowenRH gaoshiTR0 0en1 0en2 0breakfm 0delay 100fm 1delay 100led2 0delay 50led2 1delay 50piancha3 RH-gaoshidelay 5if piancha3 1piancha3 5piancha3 30else if piancha3 5piancha3 10piancha3 40else if piancha3 10piancha3 20piancha3 60elsepiancha3 80delay 1motor2 piancha3delay 1IN3 1IN4 0void jingbao6 温度高于上限湿度低于下限while TH gaowen RH dishiread_wsddangqianzhiif s5 0TH gaowenRH dishiTR0 0en1 0en2 0breakfm 0delay 50fm 1delay 50led1 0delay 50led1 1delay 50led2 0delay 50led2 1delay 50piancha4 TH-gaowenif piancha4 1piancha4 3piancha4 30else if piancha4 3piancha4 6 piancha4 40else if piancha4 6piancha4 10 piancha4 60elsepiancha4 80delay 4motor1 piancha4delay 1IN1 1IN2 0piancha2 dishi-RHif piancha2 1piancha2 5piancha2 30else if piancha2 5piancha2 10piancha2 40else if piancha2 10piancha2 20piancha2 60elsepiancha2 80delay 1motor2 piancha2IN3 0IN4 1void jingbao7 温度高于上限while TH gaowen RH dishi RH gaoshiread_wsddangqianzhiif s5 0TH gaowenRH dishiRH gaoshiTR0 0en1 0en2 0breakfm 0delay 10fm 1delay 10led1 0delay 50led1 1delay 50piancha4 TH-gaowenif piancha4 1piancha4 3piancha4 30else if piancha4 3piancha4 6piancha4 40else if piancha4 6piancha4 10piancha4 60elsepiancha4 80motor1 piancha4delay 1IN1 1IN2 0void jingbao8 温湿度高于上限while TH gaowen RH gaoshiread_wsddangqianzhiif s5 0TH gaowenRH gaoshiTR0 0en1 0en2 0breakfm 0delay 50fm 1delay 50led1 0delay 50led1 1delay 50led2 0delay 50led2 1delay 50piancha4 TH-gaowenif piancha4 1piancha4 3piancha4 30else if piancha4 3piancha4 6piancha4 40else if piancha4 6piancha4 10piancha4 60elsepiancha4 80motor1 piancha4IN1 1IN2 0piancha3 RH-gaoshiif piancha3 1piancha3 5piancha3 20else if piancha3 5piancha3 10piancha3 40else if piancha3 10piancha3 20piancha3 60elsepiancha3 80motor2 piancha3IN3 1IN4 0void maininitxianshixiefanweiwhile 1read_wsddangqianzhiif s5 0breakwhile 1num1 0if s5 0delay 5TR0 0en1 0en2 0IN1 0IN2 0IN3 0IN4 0if s5 0while s5num1while num1 0TR0 0en1 0en2 0IN1 0IN2 0IN3 0IN4 0fm 1led1 1led2 1keyscan if num1 0while 1if s5 0TR0 0en1 0en2 0breakread_wsddangqianzhikeyscanif TH diwenTH gaowen RH dishiRH gaoshiTR0 0en1 0en2 0if TH diwen RH dishijingbao1。