智能仪表设计(31页).doc
-智能仪表设计-第 31 页内蒙古科技大学智能仪表综合训练设计说明书题 目:带有实时曲线的温湿度监测系统学生姓名:xx学 号:xx专 业:测控技术与仪器班 级:xx指导教师:xx摘 要由于生产及生活的需要,经常需要对环境中的温湿度进行监测及显示。液晶是现代电子产品中使用越来越多的一种显示器件,液晶不但用来显示各种文字,还可以动态的显示各种图案及画面。本设计是一个基于单片机STC89C52的温湿度检测及显示装置。该装置由温湿度检测模块、液晶显示模块、键盘输入模块及声光报警模块四部分组成,本设计检测模块采用技术成熟的DHT11作为测量温湿度的传感器;控制系统芯片采用功能强大、价位低廉的AT89C52单片机;显示系统采用大屏幕的QC12864B液晶显示屏。整个电路采用模块化设计,由主程序、DHT11温湿度转换的驱动程序、显示子程序等模块组成。DHT11温湿度传感器数字信号经单片机综合分析处理,实现温湿度显示以及曲线绘图各种功能。由本设计课题做成的温湿度检测系统结构简单、价格便宜、量程宽,具有较高的可靠性、安全性及实用性。关键字:温湿度;STC89C51单片机;12864;DHT11目 录第一章 绪论1.1 研究背景随着计算机技术的发展,基于微处理器的智能仪表已成为仪表的主体。越来越多的智能仪表采用图形点阵液晶模块,液晶显示模块提供了丰富灵活的显示内容 ,更符合人性化的特点。智能仪表的功能是否强大、用户操作性是否方便 ,都必须通过界面友好的外观和可操作性来体现。可见,人机界面是智能仪表开发中的主要环节,在开发的工作量中占了很大的比例。目前已有很多文献对液晶显示技术、图形用户界面设计作了研究。1.2 液晶概述某些固体物质在一定条件下会呈现液态晶体状态,这种状态既不同于各向同性的液体,也不同于在三维空间分子完全规则排列的固体晶体,但又具有液体的流动性、连续性和分子排列的有序性。这种处于液体和晶体之间过渡相态的物质称为液晶。液晶分为热致液晶和溶致液晶。前者是物质在某一温度范围内呈现液晶状态,后者是物质溶于水或有机溶剂而形成的。液晶分子呈棒状或条状,宽约十几纳米,长约数纳米液晶分子有较强的电偶极矩和容易极化的化学团。由于液晶分子间的作用力比固体弱,所以液晶分子容易呈现各种状态。液晶分子的介电常数、电导率、折射率、磁化率等具有较大的各向异性,在外加电场作用下会产生各种电光效应,从而可应用于液晶显示器(Liquid Crystal Display Device ,缩写为LCD)。液晶的主要应用有:办公自动化(OA)、个人数字助理(PDA)、设备自动化(FA)、通讯、车辆设备等。1.3 传感器概述传感器是一种检测装置,能感受到被测量的信息,并能将检测感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。它是实现自动检测和自动控制的首要环节。目前,传感器及其应用技术已成为我国国民经济发展不可或缺的一部分,传感器在工业部门的应用普及率已被国际社会作为衡量一个国家智能化、数字化以及网络化的重要标志之一。1.4设计任务及要求设计任务温湿度变化时能及时再现正确的温湿度数值,并且可以在液晶显示屏上描绘出实时温湿度曲线及实时数字显示,并实现其画面切换,当湿度达到设定值时声光报警。设计要求 设计出温湿度实时曲线显示监测系统的硬件结构电路。 设计软件流程图并编写程序。第二章 系统设计方案选型2.1 总体选型方案2.1.1 温湿度检测模块选型方案考虑到经济、测量精度与52单片机I/O口的资源等因素,温湿度检测电路采用智能温湿度传感器DHT11,它与单片机相连只需要3根线,减少了外部的硬件电路。并且温湿度传感器DHT11输出的信号为数字信号,可以被单片机直接采集,省去了一般温湿度传感器输出信号要经过放大电路,模数转换的环节。2.1.2 液晶显示模块选型方案由于要显示温湿度实时曲线,传统的小的液晶显示屏1602不能满足本课题要求。故选用更宽,更大的液晶显示屏QC12864B。它可以显示半宽字型,显示CGRAM字型,显示中文字形。更为重要的是显示实时曲线必须满足打点要求,由于12864具有绘图功能可满足打点要求,可作为较合适的曲线显示模块。2.1.3 键盘输入模块选型方案 采用独立键盘,它的功能是作为52单片机触发外部中断硬件,以切换显示界面。2.1.4声光报警模块选型方案报警系统有声音报警和警报灯报警组成。声音报警通过P1.1口接蜂鸣器、P1.2口接LED灯控制系统的音效模块发声,同时报警灯发光,用CPU控制产生一定频率的方波就可以实现音效模块的发生。2.2整体设计思路本课题设计是带有实时曲线的温湿度监测系统,要达到在液晶屏上显示温湿度实时曲线.首先必须将温湿度传感器输出(数字量)信号传送至单片机,通过程序对信号进行处理,所以在这里我们需要存储器来储存一些必要的信息,之后是用LCD实现的显示,键盘是实现显示界面的切换。设计思路图见图2.1。图2.1 液晶显示整体方案设计图第三章 硬件设计3.1 控制模块硬件设计3.1.1 AT89S52单片机简介该系统采用的是Atmel公司生产的AT89S52单片机为主控器。AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash 存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完 全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。8位微控制器8K字节在系统可编程Flash AT89S52。在单片机的引脚外围固定的引脚,如VCC(40),GND(20)已经正确固定到电源和地上。X1(18),X2(19)是接晶振的引脚已经外接到11.0592MHZ和30PF的电容。RST(9)是单片机的复位引脚,通过RC回路,作为单片机的上电复位。作为P3口的第二功能端口,P3.0(10),P3.1(11)为单片机的通信引脚,和MAX232芯片连接。方便在下载程序时,只要上电复位即可完成下载的硬件操作。另外,为了提高P0口的驱动能力,在P0口的各引脚上接了上拉电阻5.1K到电源VCC=5V。采用一片MAX232,为RS232与TTL电平的转换,使得可以方面使用电脑的COM口对单片机进行程序的烧录。其芯片引脚图如图3.1所示。图3.1 AT89S52引脚图3.1.2 AT89S52单片机最小系统硬件设计单片机复位电路硬件设计原理图,如图3.2所示。图3.2 复位电路原硬件原理图单片机的时钟电路硬件设计原理图,如图3.3所示。图3.3 时钟电路硬件原理图按键硬件设计原理图,如图3.4所示。图3.4中断按键硬件原理图声光报警电路硬件设计原理图,如图3.5所示图3.5声光报警硬件原理图3.2液晶显示模块硬件设计3.2.1 QCLCD12864B液晶模块介绍 基本功能QC12864B汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字、128个字符及64*256点阵显示RAM(GDRAM)。中文液晶显示模块的屏幕由128*64点构成 ,可显示四行、每行8个汉字。其字型ROM内含8192个16*16点的中文字型和128个16* 8点的半宽字母符号字型。绘图显示RAM(GDRAM)提供64*32BYTE空间、最多控制256*64点的二维绘图缓冲空间,绘图显示画面提供一个64*256点的绘图区域。造字RAM (CGRAM)提供 4组软件可编程的16*16点阵造字功能。 QC12864B与单片机等微控器的接口界面灵活,有并行、串行两种模式 ,其中并行模式又有8位/4位两种接法,串行模式又分3线 /2线两种接法。 引脚功能如下表表3.1所示:表3.1 QC12864引脚功能功能指令系统简介QC12864B以ST7920为内核,其指令系统分为基本指令集和扩充指令集。基本指令集包括清除显示、位地址清零、进入点设定、显示状态开/关、光标或显示移位控制、功能设定、设定CGRAM位址、设定显示数据RAM (DDRAM)位址、读取忙标志(BF)、写数据到RAM(DDRAM/CGRAM /GDRA)、读出 RAM的值等指令;扩充指令集包括待命模式、卷动位址或RAM位址、选择睡眠模式、扩充功能设定、设定光标位址(IRAM)或卷动位址、设定绘图RAM地址等指令。下面介绍本课题中常用的12864功能指令,见表3.2、3.3。表3.2(RE=0:基本指令集)表3.3(RE=1:扩展指令集)备注: 当模块在接受指令前,微处理器必须先确认模块内部处于非忙碌状态,即读取BF标志时 BF需为0,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。 “RE”为基本指令集与扩充指令集的选择控制位元,当变更“RE”位元后,往后的指令集将维持在最后的状态,除非再次变更“RE”位元,否则使用相同指令集时,不需每次重设“RE”位元。3.2.2液晶显示模块硬件设计该模块设计的液晶显示器的数据端口连接在了单片机的P0、P2口,而控制端RS、RW、EN分别接单片机的P0.5、P0.6、P0.7。QC12864B低电平复位,电源5V直流供电。硬件电路如图3.6所示。图3.6 12864液晶显示原理图3.3温湿度模块的硬件设计3.3.1温湿度传感器DHT11概述DHT11数字温湿度传感器是一款温度和湿度复合的传感器,每一片都通过实验室校准,并前内部集成了一块8为的单片机是测量回来的数值一数字量的形式输送到单片机。为了确保传感器拥有极高的可靠性和稳定性它应用专用的温湿度传感技术和数字模块采集技术。传感器通过电阻式感湿元件测量当前空气中的湿度,通过NTC测温元件来测量当前空气中的温度值。每一个DHT11传感器在出厂前都经过非常严格的检查在非常精确的温湿度校验室中进行测量和校准。校准以后的系数用程序的形式保存在内部存储器中,在使用传感器的时候,传感器会测量40位的数据,第一个8位是湿度的整数部分,第二个8位是湿度的小数部分,第3个8位是温度的整数部分,第4个8位是温度的小数部分,第5个8位是校验位,当测量回来的温湿度数据相加等于校验位时,说明测量回来的数据是正确的。因此该产品具有非常高的品质、强抗干扰能力、响应速度超快、性价比极高等一些优点。传感器采用4 引脚封装,连接非常方便,如果客户有需要的话可以提供特殊的引脚形式。传感器采用单线制数据传输,这样使用起来简洁方便,也容易编程。小巧的体积和极低的功耗,并且信号传输距离非常棒,这使得他成为各类应用甚至最为苛刻的应用场合的最佳选则。本系统的采集对象是室内空气的温湿度,所以完全满足所需要求。DHT11的供电电压为35.5V。传感器上电后,要等待 1s 以越过不稳定状态在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去耦滤波。本系统采用DHT11温湿度传感器,可以同时测量温度和湿度。DHT11外形图如图3.7所示相对温度和湿度测量全部实验室校准,数字量输出稳定性特别高不需要其它部件拥有超强的型号传输能力超低能耗4 引脚安装完全互换 图3.7 DHT11外形图3.3.2传感器性能及电器特性下面通过一张表格介绍一下传感器的具体性能和一些测量参数表3.4 DHT11参数介绍电气特性:再通过表格介绍一下DHT11使用时的一些电参数传感器供电的额定电压VCC=5V除非特殊标注表3.5 DHT11电器特性介绍注:采样周期间隔不得低于1秒钟。3.3.2温湿度模块的硬件设计本系统采用DHT11温湿度传感器进行温度和湿度的测量,因为该传感器的湿度测量范围为20-90%,温度测量范围是0-50度,完全可以满足蔬菜大棚的数据测量。单模块测量器件引脚接线建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻如图3.8所示:图3.8 DHT11接线DHT11传感器的额定电压为35.5V。当传感器供电后,需要延时1s 在这段时间内不用发送任何指令,因为这段时间为不稳定状态。如果传感器工作不稳定可以在电源引脚和地线之间增加一个100nF 的电容,用来去耦滤波。3.3报警模块的硬件设计当温、湿度较大时,生产设备及仪器容易腐蚀、损坏,甚至可能使整个系统瘫痪,可设计声光报警,对湿度进行检测,有条件的情况下可进行有效的调节和控制。本报警模块具备两项功能,即为报警灯报警和蜂鸣器报警。当湿度高于40%时,蜂鸣器开始鸣叫,同时红色LED灯发光,在听觉和视觉上提醒用户。当湿度高于设定限时,为防止曲线打点影响显示的数字值,液晶上曲线保持在设定值,直至湿度降至设定值内才开始正常打点,与此同时蜂鸣器与报警灯均停止报警。第四章 软件设计4.1主程序设计主程序要满足不断地采集温度信息,实时显示温度数值,描绘温度实时曲线,等要求。故主程序流程图见图4.1。图4.1 主程序流程图 4.2 液晶显示模块的设计4.2.1 12864程序设计QC12864B控制器指令操作方式该课题使用液晶模块控制驱动器ST7920,它提供了并行和串行两类指令操作方式。这两种控制方式,由外部PSB引脚来选择:当PSB引脚输入高电平时,为并行操作方式。当PSB引脚输入低电平时,为串行操作方式。其中,并行操作方式又可以分为8位并行操作方式和4位并行操作方式两种。下面只对这8位并行操作方式进行介绍。QC12864B液晶模块8位并行连接时序图:MPU写资料到模块,见图4.2。图4.2 MPU写资料到模块时序图MPU从模块读出资料,见图4.3。图4.3 MPU从模块读出资料时序图主控制系统将配合(RS、RW、E、DB0DB7)来完成数据传送。从一次完整的流程来看,当执行设定地址(CGRAM,DDRAM,IRAM等)指令后,若要读取数据则需要先空读一次,才能得到正确的数据。第二次读取时不需要空读,除非又执行一次设定地址指令才需要再次空读一次。LCM绘图过程分析图形显示程序的关键在于解决图形坐标系、屏幕坐标系、GDRAM坐标系的转换问题,也就是确定要显示的点对应在液晶屏面上像素的位置和在 GDRAM中的地址。得到这个对应关系后 ,我们就可以通过将某个存储单元中的某一位置为1来实现在液晶屏上画出这个点。QC12864B的水平与垂直地址示意图如图4.4所示。图4.4QC12864B水平地址与垂直地址示意图QC12864B液晶模块内GDRAM与液晶屏幕的对应关系如图4.5所示。图4.5 GDRAM与液晶屏幕的对应关系示意图由以上GDRAM排列顺序及其与液晶屏幕的对应关系可知:QC12864B的绘图RAM(GDRAM)为64行*32BYTE/行(64行*16WORD/行 )。在液晶屏幕上只能显示 1283 64个点 ,对应于GDRAM中128*64bit。当GDRAM的横坐标小于8并且纵坐标值小于32时,其内容将显示在屏幕上半部,当GDRAM的横坐标为815并且纵坐标值小于32时,其内容将显示在屏幕下半部;当GDRAM的纵坐标大于31(3263)时其内容将不能显示在屏幕上。QC12864B在已知GDRAM位址的情况下,写图RAM步骤如下: 先将垂直坐标Y写入(063) ; 再将水平坐标X写入(015) ; 将D15D8数据写入; 将D7D0数据写入。在实际绘图过程中,由于每一个GDRAM地址对应于16个位(BIT)地址,所以如果第二次写GDRAM(H,V),则该RAM中其他位的值有时会改变,为了避免这种改变,需要事先将该地址中的内容读出来 (ST7920有此功能)与此次要写入的值取或后作为最终值写入。4.2.2 12864程序设计流程图由上述液晶显示模块的设计,设计的功能函数流程图见图4.6、图4.7、图4.8、图4.9、图4.10。图4.6 MPU往模块写数据流程图 图4.7 MPU从模块读出数据流程图 图4.8 MPU从模块读指令信息流程图 图4.9 MPU往模块写指令流程图图4.10 绘图程序总流程图4.3 温湿度模块软件设计4.3.1 DHT11测温湿度数据的读取程序设计DHT11采用单数据线双向接口,数据用于微处理器与传感器之间的通讯和同步,采用单总线数据传输格式,一次通讯时间一般在4ms左右,传感器送给单片机的数据可以分为整数部分和小数部分,具体传输方式我在这详细介绍一下,传感器的小数部分在本系统中并没有引入,读回来的小数数据都为0,小数数据可以用来以后扩展需要.传输回来的数据基本是这样子的:传感器一次给单片机发送40位的数据,高位先出。数据格式:第一个8位数据是湿度值的整数值,第二个8位数据是湿度小数值,第三个8位数据是温度整数值,第四个8位数据是温度的小数值,第五个8位数据是校验数据。当检测回来的数据传送正确时校验和数据等于第一个8位加第二个8位加第三个8位加第四个8位加所得结果的末8位。如果相等表示传输正确。用户利用单片机给传感器发送一次开始信号后,传感器会响应单片机从不测量状态转到测量状态,一旦传感器检测到主机的开始信号结束以后,传感器便发送响应信号,送出40位的数据,并且采集一次信号。也就是说传感器只有在接收到单片机给它发送的开始信号后,并且响应这个信号,告诉单片机以准备好之后才会进行数据采集,在没有接收到采集信号时,传感器不会主动进行温度和湿度的采集。在采集玩之后传感器又会进入休眠状态,等待下一次的采集信号。采集数据后转换到低速模式通讯过程如图4.11图4.11 单片机与传感器的通讯图再具体介绍一下开始信号的发射。当总线处于空闲状态时总线为高电平,发送开始信号时为了保证传感器能够检测到开始信号,单片机会吧总线拉低大概18毫秒以上的时间,等待传感器的响应。发送开始信号结束后主机在将电平拉高20-40us准备接收传感器的响应。传感器在接收到但单片机的开始信号以后,并且等待单片机的开始信号结束,然后发送响应信号,响应信号为80us的低电.这时候单片机将会收传感器的响应信号,单片机接收到DHT11发回来的响应信号后就切换到输入模式。如图4.12:图4.12 开始和响应信号当80us的响应时间结束后,传感器会通过上拉电阻将总线拉高80us,准备给单片机发送数据,每一次发送数据都是以50us的低电平为标志,而单片机将会根据传回来的电平高电平持续的时间的长短来判断传回来的数据是0还是1格式见下面图示.如果单片机检测到从传感器传回来的响应信号为高电平,就说明传感器没有作出响应,这时候需要检查线路连接是否正常.当最后一位数据传完之后,传感器会把总线拉低50us,接着由上拉电阻将总线拉高进入空闲状态。数字0信号表示方法如图4.13所示:图4.13 数字信号0表示方法数字1信号表示方法.如图4.14所示:图4.14 数字信号1表示方法4.3.2 DHT11温湿度读取流程单片机在实现DHT11温湿度转换和读取的程序设计中必须严格按照其时序来进行,此设计中,单总线上只挂接了一个DHT11,所以不用对ROM寄存器进行操作,直接跳过ROM,对RAM寄存器进行操作。在单片机发出温湿度转换命令后,须延时,以便DHT11完成温湿度转换,在单片机发出读温湿湿度命令后,必须马上产生读时隙接收DHT11的发回来的数据。单片机实现温湿度转换和读取的程序流程图如图4.15所示,温湿度模块主流程图如图4.15所示。图4.15 温湿度读程序流程图第五章 装置的调试与说明 这次的课程设计,让我体会到设计电路、调试电路过程中的苦与甜。设计是我们将来必须掌握的技能,这次实习恰恰给我们提供了一个应用所学知识的机会,从到图书馆和网站查找相应的资料到对电路的设计思考,和对每个模块的设计到不断的实验调试,这些都对我所学的理论知识进行了实践性的检验。在实习的过程中发现了以前学的单片机知识掌握的不牢。同时在设计的过程中,遇到了一些以前没有遇到过的问题。第一周画Protel,因为之前曾学过并成功制作出人生的第一块电路板,所以上手还是很快的。不过也存在一些问题,首先是导PCB时,有些元件的封装找不到,最开始我用DXP2004画图,后来用同学电脑却是Altium Designer 6,封装得重新选,还有就是后来布线的时候边框应该在Keep-out层,可我却在bottom层画框,导致线都跑到外面了。不过最后还是成功做出来了,而且又进一步巩固了对Protel的掌握。第二周主要是综合第一周查的资料,做了一个总体的设计,画设计流程图及思路图,并且在此基础上我组装了硬件电路图,检查了线路。这里我主要说一下流程图的设计,首先按照我自己的思路,参考资料大致设计了流程路,但是编程时发现有的部分不太合理,经过一番波折最终设计出了较合理的流程图。第三周到现在主要是软件设计和调试,在对原理等有了进一步的了解之后,我又复习了C51及其编程。编程过程比较艰难,因为这是我设计的重头戏。首先仔细研究了12864的显示原理,重点理解时序图,综合收集的资料编写了main函数、12864打点和DHT11程序,最后又加上了声光报警程序。但是过程中出现了一些问题,比如屏幕切换太慢,我改了延时时间后,屏幕又闪烁太厉害;最后在同学的帮助下,我加了一个补丁程序,可以在等待时接受按键的信号,所以可以快速切换,但限于硬件设备存在某些问题,如ST7920控制器的12864显示动态波形大概是16倍的数据处理时间,限于程序编程技术不够成熟,达不到每秒刷屏多余21次,所以屏幕还是比较闪烁。但是经过不断的努力与坚持不懈,已经尽可能达到一个较好的程度,算是调试成功了,还是很有成就感的。设计编程的过程是一个考验人耐心的过程,不能有丝毫的急躁、马虎,对程序的调试要一步一步来。目前为止,本设计实现了预期的基本功能,可以实现文字的显示、动态波形的显示及湿度的LED灯报警,蜂鸣器报警加上后液晶屏出现白屏,暂时还不知道原因;屏幕切换较好,不过仍存在一定的闪烁。通过紧张有序的设计实践,我的动手能力有了很大的提高,自信心也增强了,在课程设计中自己动脑子解决遇到的问题,书本上的知识得到了运用,同时也巩固和深化了自己的知识结构。结论近年来,随着温湿度检测技术和单片机的发展,基于单片机的测湿测温技术的应用越来越广泛,尤其是人机画面更加人性化。本设计主要以温湿度为研究对象,通过液晶模块显示实时温湿度值,能够显示温湿度实时曲线。主要做的工作可总结如下:综合分析了各种类型的传感器和它的工作特点,设计了一个可行的测量方案。实现了测温测湿系统的硬件电路和软件结构设计,综合考虑精度、成本等因素,合理选用了传感器、单片机及其外围芯片。 在课题的研究中,仍然存在一些问题有待进一步改进完善:对环境温湿度的测量只是用了一个DHT11温湿度传感器,室内某点温湿度不可能代替整个室内的温湿度,故要实现该设计的实用性,应该在单总线上挂上多个温湿度传感器分布在室内的关键角落。该设计是可以显示温湿度的实时曲线但由于刷新液晶屏幕频率过慢给人有闪烁感有待换用更高性能的单片机。参考文献1 景小健、尹清华等. MG - 12864液晶显示器在智能仪表中的应用,化工自动化及仪表,2003,30(6):62-64.2 北京青云创新科技发展有限公司.带中文字库图形液晶显示模块 LCM12864ZK使用说明书Z.2002.3 孙传友、孙晓斌、张一. 感测技术与系统设计M,北京:科学出版社,2004:708-710.4 徐科军.传感器与检测技术M,北京:电子工业出版社,2004.09:4.5 刘笃仁.传感器原理及应用技术.西安:西安电子科技大学出版社,20036 马家成、孙玉德、张颖. MCS- 51单片机原理与接口技术M. 2版. 哈尔滨:哈尔滨工业大学出版社,1998.7 广州奥松电子有限公司.DHT11说明书.8 金伟正.单线数字温度传感器的原理与应用J.电子技术应用,2000(6):66- 68 .9 马忠梅、籍顺心. 单片机的C语言应用程序设计M.北京航空航大大学出版社,2003.10沈兰荪编著.数据采集与处理M .北京:能源出版社,1987.11陶楚良编著。数据采集系统及其器件M .北京:北京理工大学出版社,1988.6.附录附录1(原理图)附录2(PCB图)附录3(程序)主函数程序文件名 : .c模块名称:12864液晶、DHT11温湿度检测功能概要:使用12864液晶打点显示温湿度数据完成日期:2011年9月18日完成#include <reg52.h>#include "DHT11.h" #define comm 0#define dat 1sbit RS = P05; /H=data; L="command"sbit RW = P06; /H=read; L="write"sbit E = P07; /input enable;sbit PSB= P37; /H=并口; L="串口"sbit RST= P36; /Reset Signal 低电平有效sbit SPP= P11; /BEEsbit LED= P12; sbit busy=P27; /lcd busy bitsbit key_light=P10;sbit key_temp=P00;sbit key_RH=P01;sbit key3=P02;sbit light=P35;uchar xdata huanzuobiao61;uchar xdata huanzuobiao22261;uchar speak,dispbuf='0','1','2','3','4','5','6','7','8','9' void wr_lcd (uchar dat_comm,uchar content);void chk_busy (void);void delay (uint us);void set_dot(uchar x,uchar y) ;uchar code dishow="温湿度监测简介:" "DHT11 检测温湿度" "使用液晶屏显示 " "完成温湿度监测 "void init_lcd (void) RST = 1; PSB = 1; wr_lcd(comm,0x30); /*30-基本指令动作*/ wr_lcd(comm,0x01); /*清屏,地址指针指向00H*/ wr_lcd(comm,0x06); /*光标的移动方向*/ wr_lcd(comm,0x0c); /*开显示,关游标*/void delayus(uint m) /延时m us程序 uint i,j; for(i=0;i<m;i+) for(j=0;j<10;j+);void delay(uint us) /delay time while(us-);void delay1(uint ms) uint i,j; for(i=0;i<ms;i+) for(j=0;j<15;j+)void TransferData(char data1,bit DI) /传送数据或者命令,当DI=0是,传送命令,当DI=1,传送数据.RW=0;RS=DI;delayus(1);P2=data1;E=1;delayus(1);E=0;/* 液晶初始化-字库 */void initinal(void) /LCD字库初始化程序 delayus(40); /大于40MS延时程序 PSB=1; /设置为8BIT并口工作模式 delayus(1); /延时 RST=0; /复位 delayus(1); /延时 RST=1; /复位置高 delayus(10); TransferData(0x30,0); /Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFF delayus(100); /大于100uS的延时程序 TransferData(0x30,0); /Function Set delayus(37); /大于37uS的延时程序 TransferData(0x08,0); /Display on Control delayus(100); /大于100uS的延时程序 TransferData(0x10,0); /Cursor Display Control光标设置 delayus(100); /大于100uS的延时程序 TransferData(0x0C,0); /Display Control,D=1,显示开 delayus(100); /大于100uS的延时程序 TransferData(0x01,0); /Display Clear delayus(10); /大于10mS的延时程序 TransferData(0x06,0); /Enry Mode Set,光标从右向左加1位移动 delayus(100); /大于100uS的延时程序void wr_lcd(uchar dat_comm,uchar content) chk_busy (); if(dat_comm) RS = 1; /data RW = 0; /write else RS = 0; /command RW = 0; /write P2=content; /output data or comm E = 1; E = 0;读数据操作*/read_lcd() uchar content; chk_busy (); delay(3); P2=0xFF; delay(3); RS = 1; /data RW = 1; /read E = 1; content=P2; /位置可能影响结果 delay(3);E = 0; return(content);void chk_busy(void) /检测12864是否忙 P2 = 0xff; RS = 0; RW = 1; E = 1; while(busy=1); E = 0;void set_dot1(uchar x,uchar y) /连续打点成功; uchar x_byt; uchar x_bit; uchar y_byt; uchar y_bit; uchar tmph, tmpl; /定义两个临时变量,用于存放读 x_byt = x/16; x_bit = x%16; y_byt = y/32; y_bit = y%32; wr_lcd(comm,0x34); wr_lcd(comm,0x80 + y_bit); wr_lcd(comm,0x80 + x_byt + 8 * y_byt); read_lcd(); tmph=read_lcd(); tmpl=read_lcd(); wr_lcd(comm,0x80 + y_bit); wr_lcd(comm,0x80 + x_byt + 8 * y_byt); if (x_bit < 8) wr_lcd(dat,tmph | (0x01 << (7 - x_bit); wr_lcd(dat,tmpl); else wr_lcd(dat,t