基于stc89c52单片机的温湿度检测系统设计论文-本科论文.doc
基于AT89C52单片机的温湿度检测系统设计基于STC89C52单片机的温湿度检测系统设计摘要随着人们的生活及其生产水平的不断提高,对生活环境和生产环境的要求就显的尤为重要,温湿度的控制就是一个典型的例子,因此温湿度检测系统就是现代生产生活中应运而生的一种智能、快捷、方便可靠的检测系统,特别是在工业生产中如果检测得不准确就会发生许多的生产事故。要为现代人工作、科研、生活提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。本设计是以单片机为核心,配合温湿度传感器,以及相关的外围电路组成的检测系统,可以接收所测环境的温度和湿度信号,检测人员可以通过LCD显示的数据,实时监控环境的温度和湿度情况。所有的测量操作都可以通过主机控制软件来实现,温度和湿度传感器得到的测量信号,经电路转换为电信号,然后通过转换送到单片机进行数据处理,经软件分析处理后送显示装置。本系统包括系统硬件和软件设计,可靠性高,结构简单,实现了对温湿度的自动调节。系统还应用RS232与上位机相连接,可以设置自动记录温度、湿度的相关的参数,也可以设置每隔一定的时间自动记录,可用在气象的观察方面。关键词:STC89C52单片机,温湿度传感器, LCD显示As people life level of production and improve the living environment and production environment to the demands of the significant particularly important, control of temperature and humidity is one example, so the temperature and humidity detection system is the modern production and life of a kind of intelligence have emerged in, quick, convenient and reliable detection system, especially in the industrial production, if detection is not accurate will happen many production accidents. For modern people to work, scientific research, and provide a better life more convenient facilities will need from single chip technology of digital control to all, intelligent control direction. This design is based on single chip microcomputer as the core, with temperature and humidity sensor, and related peripheral circuit composed of detection system, can receive the environment temperature and humidity signal, testing personnel can through the LCD display data, real-time monitoring of environmental temperature and humidity conditions. This system including the system hardware and software design, high reliability, simple structure, realize the automatic adjustment of the temperature and humidity. System is used RS232 and superordination machine connected, can set up automatic recording of temperature and humidity in related parameters, can also set every certain time to be automatic records, can be used in meteorological observation.Key words: STC89C52 microcontroller, temperature and humidity sensor, LCD display目录第1章 概述21.1课题的研究背景21.2温湿度检测的发展状况以及存在的问题31.3本课程设计的主要内容4第2章 系统总体方案设计42.1 温湿度传感器51、DHT11产品概述52接口说明53、电源引脚64、串行接口 (单线双向)65、DHT11引脚说明66、 焊接信息67、注意事项72.2 RS232接口72.3 单片机STC89C5272.4 LCD16029第3章 系统的硬件设计和连接103.1主控模块103.2显示模块123.3 温度和湿度采集模块123.4 键盘设计143.5与上位机相连电路的设计153.6 报警电路设计15第4章 系统软件方案的设计164.1 程序流程图16第5章 总结与展望36参考文献37第1章 概述1.1课题的研究背景工业生产中有些场合需要使用精密的机台设备,这些设备的精密度高、价格高,因此为了保证产品的质量及机台的使用寿命,对其环境的要求也很高,尤其的是对温度、湿度的控制。例如在我工作的生产发光二极管LED的工业现场,前面的两道工序固晶片和焊线要求的精度非常高,晶片必须固到碗杯的中心点,偏差不可超过1/5晶片的宽度,且对胶量的控制也有严格的要求,只有这道工序做好了,下一个工序焊线才会顺利,否则焊线将会出现很多异常,不仅会降低产量也会造成质量问题,因此要求每三个小时记录一次室内的温湿度,且要保证其温度在18-23之间,湿度不可超过60%。随着信息产业的发展及工业化的进步,温度和湿度不仅仅表现在以上几个方面直接或间接影响着人类基本生活条件, 还表现在对工生物制品、医药卫生、科学研究、国防建设等方面的影响。针对以上情况,研制可靠且实用的温湿度控制器显得非常重要。常用温湿度传感器的非线性输出及一致性较差,使温湿度的测量方法和手段相对较复杂,且给电路的调试带来很大的困难。传统的温湿度测量多采用模拟小信号传感器,不仅信号调理电路复杂,且温湿度值的标定过程也极其复杂,并需要使用昂贵的标定仪器设备。因此对于温湿度控制器的设计有着很大的现实生产意义。本文设计的是基于单片机STC89C52的温湿度检测和控制系统,主要以广泛应用的DHT11作为温度和湿度的检测,该仪器具有测量精度较高、硬件电路简单、并能很好的进行显示,可测试不同环境温湿度的特点。另外和控制电路相连,可以进行加湿电路和除湿电路的控制,使温度和湿度参数在预先设定的范围内,不需要人的直接参与。本系统还通过RS232和上位机相连,可以设置每隔一定的时间进行温度和湿度的采集,上传到上位机,以供查询。1.2温湿度检测的发展状况以及存在的问题传统的温度和湿度检测系统主要有以下几种:(1)水汽压(e):是水汽在大气总压力中的分压力。它表示了空气中水汽的绝对含量的大小,以毫巴为单位。(2)相对湿度(rh):湿空气中实际水汽压e与同温度下饱和水汽压E的百分比,相对湿度的大小能直接表示空气距离饱和的相对程度。空气完全干燥时,相对湿度为零。相对湿度越小,表示当时空气越干燥。当相对湿度接近于100%时,表示空气很潮湿,越接近于饱和。(3)露点(或霜点)温度:指空气在水汽含量和气压都不改变的条件下,冷却到饱和时的温度。(4)干湿球温度表:用一对并列装置的、形状完全相同的温度表,一支测气温,称干球温度表,另一支包有保持浸透蒸馏水的脱脂纱布,称湿球温度表。(5)发湿度表(计):利用脱脂人发(或牛的肠衣)具有空气潮湿时伸长,干燥时缩短的特性,制成毛发湿度表或湿度自记仪器,它的测湿精度较差,毛发湿度表通常在气温低于-10时使用。(6)电阻式湿度片:利用吸湿膜片随湿度变化改变其电阻值的原理,常用的有碳膜湿敏电阻和氯化锂湿度片两种。前者用高分子聚合物和导电材料碳黑,加上粘合剂配成一定比例的胶状液体,涂覆到基片上组成的电阻片;后者是在基片上涂上一层氯化锂酒精溶液,当空气湿度变化时,氯化锂溶液浓度随之改变从而也改变了测湿膜片的电阻。(7)薄膜湿敏电容:是以高分子聚合物为介质的电容器,因吸收(或释放)水汽而改变电容值。它制作精巧,性能优良,常用在探空仪和遥测中。随着智能检测系统的飞速发展,基于单片机的温湿度检测系统将多传感器系统结合在一起。如何把多传感器集中于一个检测控制系统,综合利用来自多传感器的信息,获得对被测对象的可靠了解和解释,以利于系统做出正确的响应、决策和控制,是智能检测控制系统中需要解决的首要问题。在温湿度要求严格的场合,利用多传感技术可以提高系统的可靠性和精度,亦可以提高系统的时间空间的覆盖范围。1.3本课程设计的主要内容单片机是系统的控制核心,所以单片机的性能关系到整个系统的好坏。因此单片机的选择,对所设计系统的实现以及功能的扩展有着很大的影响。单片机种类很多,在众多51系列单片机中,较为常用的是ATMEL 公司的AT89C51和AT89S52单片机,AT89C51片内4KROM是Flash工艺的,使用专用的编程器自己就可以随时对单片机进行电擦除和改写,片内有128字节的RAM。而AT89S52含有在系统可编程的Flash存储器,片内有8K闪存,RAM的容量也较AT89C51大,为256字节。显然这种单片机优点更多,开发时间也大为缩短。在本次设计中选用了STC89C52单片机。键盘接口电路较为简单,而显示部分有两种方案供选择:一种为LCD,一种为LED。LCD液晶显示的像素单元是整合在同一块液晶版当中分隔出来的小方格。通过数码控制这些极小的方格进行显像。显示非常细腻但是造价很高。而LED数码显示中每一个像素单元就是一个发光二极管,如果是单色,一般是红色发光二极管。如果是彩色,一般是三个三原色小二极管组成的一个大二极管。这些二极管组成的矩阵由数码控制实时显示文字或图象,造价相对低廉,显示效果也较好。本设计中,最终选用的集成温度传感器DHT11,采集到的温湿度信号送至单片机,实现温湿度的显示与控制。系统主要由以上元器件组成,通过硬件电路和软件程序的设计,实现系统的基本功能。第2章 系统总体方案设计本设计是基于单片机对数字信号的高敏感和可控性、温湿度传感器可以产生模拟信号,和A/D模拟数字转换芯片的性能,此设计以STC89C52基本系统为核心的一套检测系统,其中包括单片机、复位电路、温湿度检测、键盘及显示、报警电路、系统软件等部分的设计。系统总体方框图如图2.1。键盘控制显示电路系统晶振电平变换PC机报警电路温湿度传感器单片机 系统重点及组成:温湿度的检测 温湿度的显示 单片机与PC机间的通信 通过开关量控制实现温湿度上下限调节图2.1 系统总体框图2.1 温湿度传感器1、DHT11产品概述DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为 4 针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。2接口说明 建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻3、电源引脚DHT11的供电电压为35.5V。传感器上电后,要等待 1s 以越过不稳定状态在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去耦滤波。4、串行接口 (单线双向)DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右, 用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后转换到低速模式。5、DHT11引脚说明Pin名称注释1VDD供电 35.5VDC2DATA串行数据,单总线3NC空脚,请悬空4GND接地,电源负极6、 焊接信息手动焊接,在最高260的温度条件下接触时间须少于10秒。7、注意事项(1)避免结露情况下使用。(2)长期保存条件:温度1040,湿度60以下2.2 RS232接口RS232接口是1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。 该标准规定采用一个25个脚的DB25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。随着设备的不断改进,出现了代替DB25的DB9接口,现在都把RS232接口叫做DB9。2.3 单片机STC89C52STC89C52是一种低功耗、高性能CMOS八位微控制器,具有8K在系统可编程Flash存储器,使用ATMEL公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许ROM在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使其为众多嵌入式控制应用系统提供灵活的解决方案。2.3.1 主要特性(1) 与MCS-51单片机产品兼容;(2) 8K字节在系统可编程Flash存储器;(3) 1000次擦写周期;(4) 全静态操作:0Hz33Hz;(5) 三级加密程序存储器;(6) 32个可编程I/O口线;(7) 三个16位定时器/计数器;(8) 八个中断源;(9) 全双工UART串行通道;(10) 低功耗空闲和掉电模式;(11) 掉电后中断可唤醒; 图2.3 STC89C52芯片的引脚图(12) 看门狗定时器;(13) 双数据指针;(14) 掉电标识符。如图2.3所示STC89C52芯片的引脚图VCC:电源Vss:地 P0口:8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在Flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。P1口:具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),具体如表3-1所示。在Flash编程和校验时,P1口接收低8位地址字节。P2口:具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动四个TTL逻辑电平。对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在方位外部程序存储器或用16位地址读取外部数据存储器时,P2口送出高八位地址。在Flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动四个TTL逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为STC89C52特殊功能(第二功能)使用RST:复位输入。晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。DISRTO默认状态下,复位高电平有效。ALE/:控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。在Flash编程时,此引脚()也用作编程输入脉冲。在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时, ALE脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。:外部程序存储器选通信号()是外部程序存储器选通信号。当89S52从外部程序存储器执行外部代码时,在每个机器周期被激活两次,而在访问外部数据存储器时,将不被激活。/VPP:访问外部程序存储器控制信号。为使能从0000H到FFFFH的外部程序存储器读取指令,必须接地。为执行内部程序指令,应该接VCC。在Flash编程期间,也接收12伏VPP电压。XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。XTAL2:振荡器反相放大器的输出端。2.4 LCD1602工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线 VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中: 引脚符号功能说明1VSS一般接地2VDD接电源(+5V)3V0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。4RSRS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。5R/WR/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。6EE(或EN)端为使能(enable)端,下降沿使能。7DB0低4位三态、 双向数据总线 0位(最低位)8DB1低4位三态、 双向数据总线 1位9DB2低4位三态、 双向数据总线 2位10DB3低4位三态、 双向数据总线 3位11DB4高4位三态、 双向数据总线 4位12DB5高4位三态、 双向数据总线 5位13DB6高4位三态、 双向数据总线 6位14DB7高4位三态、 双向数据总线 7位(最高位)(也是busy flag)15BLA背光电源正极16BLK背光 电源负极寄存器选择控制表 RSR/W操作说明00写入指令寄存器(清除屏等)01读busy flag(DB7),以及读取位址计数器(DB0DB6)值10写入数据寄存器(显示各字型等)11从数据寄存器读取数据第3章 系统的硬件设计和连接3.1主控模块采用STC89C52单片机作为系统的控制器。Pl口控制数码管显示温度和湿度值。P2口与DHT11连接实现湿度模拟电压量转换为数字量便于单片机处理。键盘控制采用PO口其中POO是温度的设置,PO1是湿度的设置,PO2PO3是分别对温度与湿度的上下限值进行设置。原理如下图:图3.1 STC89C52单片机各引脚功能3.2显示模块3.3 温度和湿度采集模块1.通讯过程如图1所示图1总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束后,延时等待20-40us后, 读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可, 总线由上拉电阻拉高。图2总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1.格式见下面图示.如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。数字0信号表示方法如图4所示 图4数字1信号表示方法.如图5所示 图53.4 键盘设计用了几个简单的按键将它们拼成了一个简易的键盘。为提高CPU的效率,键盘采用中断方式。按键对单片机的接口电路图如图所示。行信号(KEY)接到高电平,当没有键按时,行线与列线(KEYSCAN)是断开的,且行线都是高电平(1111),行信号作为的输入端、列信号作为的输出端。可以设置列线初始状态为低电平(0000)。信号为从上到下的顺序当有键按下时,假如是K1按下,行信号与列信号接通,这时相应的行线(KEY0)变为低电平(01111),可以肯定第一行(K1,5,9,13)有键按下。下面就要运用扫描的原理了:1、因为只知道第一行有键按下,不知道是那个,可以设置列信号为0111,这时行信号变为(1111)(注:假设时钟周期很短,手还没松开,即键还在按下的状态)2、设置列信号为1011,行信号也变成(1111)3、设置列信号为1101,行信号也变成(1111)4、设置列信号为1110,行信号也变成(0111),这时就可以肯定是第一个键按下。3.5与上位机相连电路的设计通过和MAX232和上位机相连接,如图3-9所示。在大气气候的检测中需要做记录时,可以通过设置单片机的参数,每隔一定的时间进行自动的做记录,省去人工的记录麻烦。Max232的T1IN和单片机的P3.2相连,R1 OUT和单片机的P3.1相连。图3.5 单片机系统与上位机的连接3.6 报警电路设计NPN5.6K3.3K+5VP3.2AT89S52PB2130UP002A本设计采用峰鸣音报警电路。峰鸣音报警接口电路的设计只需购买市售的压电式蜂鸣器,然后通过MCS-51的1根口线经驱动器驱动蜂鸣音发声。压电式蜂鸣器约需10mA的驱动电流,可以使用TTL系列集成电路7406或7407低电平驱动,也可以用一个晶体三极管驱动。在图中,P3.2接晶体管基极输入端。当P3.2输出高电平“1”时,晶体管导通,压电蜂鸣器两端获得约+5V电压而鸣叫;当P3.2输出低电平“0”时,三极管截止,蜂鸣器停止发声。图3.6 三极管驱动的峰鸣音报警电路第4章 系统软件方案的设计温度控制主程序的设计应考虑以下问题:(1)温湿度采样,数字滤波;(2)越限报警和处理;(3)温度标度转换;(4)温湿度显示。通常,符合上述功能的温度控制程序由主程序和T0中断服务程序两部分组成。在该软件系统中,定时器T0为工作方式1,定时周期为125ms,8次定时器中断为1S,由于实际环境温度和湿度变化是连续和平缓的,故这里采用分段定值平缓滤波算法处理每次测得的温度和湿度值,有效防止了突发干扰使测得值波动很大,导致反馈系统关启工作,影响系统的稳定,提高了系统的抗干扰性。4.1 程序流程图LCD1602头文件#ifndef _LCD_1602_CLIMBERWIN_#define _LCD_1602_CLIMBERWIN_#define uchar unsigned char#define uint unsigned int#include <intrins.h>#include"lcd1602define.h"/*Port Definitions*/#define LCD_Data P0 /LCD的数据口sbit LCD_BF=LCD_Data7; /LCD忙信号位sbit LCD_RS = P27;sbit LCD_RW = P26;sbit LCD_EN = P25;unsigned char dis_buf3; /数值显示缓冲区unsigned char table11 = "0123456789 "/字码/*定义子程序*/void LCD_ClrAll(void); /清屏void Judge_LCD_busy(void); /检测是否忙碌void LCD_Write(uchar WriteData); /写控制字void LCD_write_data(uchar LCD_data); /写数据显示void LCD_cursor(uchar x); /光标起始地址void LCD_printc(unsigned char lcd_data) ; /输出一个字符void LCD_prints(unsigned char *lcd_string);/输出字符串void delay_ms(unsigned char i);/1ms延时/*/*LCD1602忙碌判断子程序*/void Judge_LCD_busy(void) /判断LCD1602是否忙状态 while(1) LCD_EN=0; LCD_RS=0; LCD_RW=1; LCD_Data=0xff; LCD_EN=1; /EN 是 10 使能 if(!LCD_BF)break; /LCD_BF=1表示忙碌,需要等待。 LCD_EN=0;/*LCD清屏*/void LCD_ClrAll(void) Judge_LCD_busy(); /判断是否忙碌 LCD_RS=0; LCD_RW=0; LCD_Data=0x01; LCD_EN=1; LCD_EN=0;/*LCD写数据定义各种模式*/void LCD_Write(uchar WriteData) /写指令到LCD Judge_LCD_busy(); LCD_RS=0; LCD_RW=0; LCD_Data=WriteData; /把WriteData的数据送到数据口 LCD_EN=1; LCD_EN=0; /*LCD显示数据*/void LCD_write_data(uchar LCD_data) /输出一个字节数据到LCD Judge_LCD_busy(); LCD_RS=1; LCD_RW=0; LCD_Data=LCD_data; LCD_EN=1; LCD_EN=0; /*光标位置的确定*/void LCD_cursor(uchar x) /LCD光标定位到x处 LCD_Write(0x80+x); /第一行地址是0x80/*输出一个字符*/void LCD_printc(unsigned char lcd_data) LCD_write_data(lcd_data);/*输出字符串*/void LCD_prints(unsigned char *lcd_string) unsigned char i=0; while(lcd_stringi!=0x00) LCD_write_data(lcd_stringi); i+; /*显示整数*/void LCD_ints(unsigned char num) signed char i=0; for(i=0;i<3;i+)/拆分bcd dis_bufi = num%10; num = num/10; for(i=2;i>0;i-)/灭零 if(dis_bufi=0)dis_bufi=10; else break; for(i=2;i>=0;i-)/逐个显示 LCD_write_data(tabledis_bufi); /*初始化程序*/void LCD_initial(void) /初始化LCD LCD_Write(LCD_AC_AUTO_INCREMENT|LCD_MOVE_DISENABLE); LCD_Write(LCD_DISPLAY_ON|LCD_CURSOR_OFF); LCD_Write(LCD_DISPLAY_DOUBLE_LINE); LCD_ClrAll();#endifUART头文件bit flag_uart = 0;/字符串接受完成后标志位置位,须软件复位unsigned char S_LEN = 4;unsigned char Res_buf20=0;void Uart_init()ES = 1;/set ES SCON = 0x52;/set SM1、REN and TI;TMOD = 0x20;/set M1,方式2;TH1 = 0xf3;TL1 = 0xf3; /baud rate 2400b/sTR1 = 1; /计数使能void Uart_sc(unsigned char byte) /发送单字符while(!TI);SBUF = byte;TI = 0;void Uart_ss(unsigned char *p,bit flag) /发送字符串while(*p)Uart_sc(*p+);if(flag=1)Uart_sc(0x0D);Uart_sc(0x0A); /结尾发送回车换行KEY头文件unsigned char code row_scan4=0xef,0xdf,0xbf,0x7f;void delay_1ms(unsigned int i) /1ms延时unsigned char x,j;for(j=0;j<i;j+)for(x=0;x<=40;x+);unsigned char key_scan()unsigned char i,j;unsigned char temp,key_vaul;for(i=0;i<4;i+)P1=row_scani;temp=0x01;for(j=0;j<4;j+) if(!(P1&temp) key_vaul=i*4+j+1;while(!(P1&temp);return key_vaul; temp<<=1; bit key_check()/检测有无键按下bit key_flag=0; /键标志。有键按下时为1P1=0x0f;if(P1!=0x0f)delay_1ms(1);if(P1!=0x0f)key_flag=1; /有键按下else key_flag=0; /为抖动return key_flag; DHT11头文件#ifndef _DHT11_H_ #define _DHT11_H_sbit DT0 =P20;sbitDT1 =P21;sbit BEEP = P23;#define OK 1#define ERROR 0#define NUMBER 20#define SIZE 5static unsigned char status; / 存放五字节数据的数组static unsigned char value_array_0SIZE;static unsigned char value_array_1SIZE;int h