文档详情

家居温湿度检测

d****2
实名认证
店铺
DOCX
545.20KB
约36页
文档ID:166972803
家居温湿度检测_第1页
1/36

OLTTtC'1毕业设计(论文)(2015 届)题 目: 家居环境检测专业名称: 应用电子工程技术姓 名: 徐日达 学 号: 1210401031班 级: 12应用电子技术指导教师: 吴小玲 2014年10月01日一绪论 11.1引言 11.2选题背景 11.3国内外发展状态 1二设计目标和要求 2三方案论证与设计 2方案论证 2设计 23.1控制部分的方案选择 23.2测温、湿部分的方案选择 23.3显示部分的方案选 3四硬件设计 34.1电路设计框图 34.2系统硬件概述 44.3主要单元电路设计 44.3.1 AT89S52单片机简介 44.3.2单片机主控制模块的设计 64.3.3温、湿度传感器电路设计 94.3.4显示模块的设计 94.3.5按键模块的设计 9五软件设计 105.1系统程序流程图 105.2按键程序流程图 105.3 LED程序流程图 105.4温、湿度程序流程图 105.5液晶显示流程图 15六仿真与调试 116.1 Proteus软件运行流程 116.2硬件调试结果 11七总结 13参考文献 14附录一:系统程序 14致谢 22一绪论1.1引言、随着科技水平的日益进步,人类的生活水平也在逐步的提高,对家居智能化也有了渴求, 智能家居在今后的市场将越来越大。

下面介绍一种温湿度采集系统在智能家居的应用方案该 方案采用DHT11温湿度传感器,STC89S52单片机MCU,LCD128*64驱动和显示器构建一个家庭 温湿度采集系统,用来检测室内外温湿度数据温湿度采集系统的工作原理:分别在室内外安装两个2个DHT11温湿度传感器,定时唤醒采集温湿度的原始数据,在DHT11 内部进行AD转换,经过I2C总线送往AT89S52处理AT89S52可以根据需要启用哪个采集节点 的数据来降低能耗,并控制LCD驱动,最终的数据在LCD显示屏上显示,方便用户读取1.2选题背景环境的监测与控制在日常生活、农业、国防等行业有着广泛的应用由于应用的场合不同 监测对象的不同,其系统设计也是千差万别在实际生活中此类系统有着广泛的应用,温室环 境检测系统中温度和湿度是两个重要的显示和分析指标,必须定期抽样检查室温环境温度和 度,以便采取相应的措施最宜人的室内温湿度是:冬天温度18-25^,湿度30-80%;夏天 温度23—28°C,湿度30—60%湿度是与温度有关的,此时,人的精神状态好,工作效率高,思 维最敏捷因此,温湿度测试仪意义很重大是生活中不可或缺的必备品1.3国内外发展状态目前国内外的温湿度检测使用的温湿度检测元件种类繁多、应用范围也较广泛加之单片机 和大规模集成电路技术的不断提高,出现了高性能、高可靠性的单片数据采集系统。

基于单机 片的温湿度监测控制系统的设计研究较少随着经济和社会的不断发展,人们对自己的生活 环境越来越严格特别在温室大棚中,对温湿度要求更为严格基于单片机的温湿度监测控制 系统,将对环境的温湿度监测控制系统做详细的设计与实现采用高性能的控制芯片89C51, 高精度数字温湿度传感器AM2301向模块化、高速化、智能化的单片机数据采集系统靠近将 此系统应用到温室大棚当中无疑为植物的生活提供了更加适宜的环境,符合植物的生活环境要 求,具有良好的发展前景二设计目标和要求本毕业设计目标和要求如下:1. 基于单片机的温度、湿度检测系统的设计;2. 测量范围:湿度20-90%RH,温度0~50°C3. 测量精度:湿度+-5%,温度+-21C4. 显示效果设计:所测的温、湿度值可以由液晶直接显示5. 运用Proteus仿真,并利用Protel软件设计硬件三方案论证与设计方案一:测温、湿电路使用热敏电阻之类的器件利用其感温效应,将被测温度变化的电 压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,通过液晶就可以将被 测温、湿度显示出来方案二:使用温、湿度传感器现在流行使用单片机设计电路,所以可以采用一只温、湿 度传感器DHT11,此传感器可以很容易就能读取到温度值。

论证:方案一由于需要对被测温、湿度变化的电压或者电流采集,以及进行A/D转换, 感温、湿度电路设计会比较麻烦,成本高而方案二设计只需一个单片机和一个DHT11就能很 容易读取温度值,电路设计简单,况且成本低,体积小,因而采用方案二3.1控制部分的方案选择用可编程逻辑器件设计,但从性价比考虑,主控芯片使用AT89S52单片机,对温度传感器 的数据进行采集以及传送给液晶显示3.2测温、湿度部分的方案选择DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用 的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性传 感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接因此 该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点每个DHT11传感器都在 极为精确的湿度校验室中进行校准校准系数以程序的形式存在OTP内存中,传感器内部在检 测型号的处理过程中要调用这些校准系数单线制串行接口,使系统集成变得简易快捷超小 的体积、极低的功耗,使其成为同类应用甚至最为苛刻的应用场合的最佳选择产品为4针单 排引脚封装,连接方便。

技术参数供电电压:3.3~5.5V DC输出:单总线数字信号测量范围:湿度20-90%RH,温度0~50°C测量精度:湿度+-5%RH,温度+-2C分辨率:湿度1%RH,温度1C互换性:可完全互换长期稳定性:<±1%RH/年3.3显示部分的方案选择带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含 有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128X64,内置8192 个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便 的操作指令,可构成全中文人机交互图形界面可以显示8X4行16X16点阵的汉字.也可 完成图形显示.低电压低功耗是其又一显著特点由该模块构成的液晶显示方案与同类型的图形 点阵液品显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低 于相同点阵的图形液晶模块四硬件设计4.1电路设计框图综上所述,按照系统设计功能的要求,确定硬件由主控制器、测温、湿电路、显示模块、按键模块、复位模块等模块组成,设计了硬件整体的框图:DHT11温、湿度探测 A ► =► >AT89S52主控电路 ►128*64液晶显示器按键输入复位电路Led指示指示 电源电路 ►图4.1数字体温计构成框图用DHT11来检测当前的环境温、湿度;AT89S52单片机通过输出各种电脉冲信号来驱动控制各部 分正常工作;温、湿度等数据则最终通过液晶模块显示出来。

2. 系统硬件概述本电路是以AT89S52单片机为控制核心,该芯片具有编程功能,功耗低,能在3.3V的 超低压下工作;驱动部分采用74HC537,它是一款高性能、低功耗、,其工作电压为2.5V〜5.5V; 温、湿4度检测模块由DHT11构成,DHT11由一个电阻式感湿元件和一个NTC测温元件组成,具 有测量精度高、测量范围广等优点,其温度0~50°C,工作电压为3v~5.5v;显示部份使用液晶 显示屏来实现,该显示具有内容丰富的特点3. 主要单元电路设计3.1 AT89S52单片机简介AT89S52是一种低功耗、高性能的8位CMOS微控制器,具有8K的可编程Flash存储器 使用高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容片上Flash允 许程序存储器在系统可编程,亦适于常规编程器在单芯片上,拥有灵巧的8位CPU和系 统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案AT89S52具有以下标准功能:8K字节Flash, 256字节RAM, 32位I/O 口线,看门狗定时器,2 个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振 及时钟电路。

另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式空闲模 式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止引脚排 列如图4.2所示字 耕 沼 粘 洱 陪 落职理? 昂 艮 发 出 &S ZS Es 寸s SW 9.W Hd ECI2岩,-!< ddATla 言瓦 9.〔瓦 ”〔瓦 寸'F'l-l-l 舄瓦 ZU 二瓦 〔=;瓦 00>ss> zlx mix 〔唱.w ItSEd otMd OINW.Ed CKLTmd CKWEd WAAL 贸g.Id "Id 寸rl-L. 『云 Z.Id I.Id l=!Id图4.2 AT89S52引脚图从引脚功能来看,可将引脚分为三部分:a、 电源及时钟引脚VCC:接+5V电源;VSS:接地;XTAL1和XTAL2:时钟引脚,外接晶体引线端当使用芯片 内部时钟时,此两引脚端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟 脉冲信号b、 控制引脚RST/VPT: RST是复位信号输入端,VPT是备用电源输入端。

当RST输入端保持2个机器周 期以上高电平时,单片机完成复位初始化操作当主电源VCC发生故障而突然下降到一定低电 压或断电时,第2功能VPT将为片内RAM提供电源以保护片内RAM中的信息不丢失ALE/PROG:地址锁存允许信号输出端在存取外存储器时,用于锁存低8位地址信号当单片 机正常工作后,ALE端就会周期性地以时钟振荡频率的1/6固定频率向外输出正脉冲信号此引 脚的第2功能PROG是对片内带有4K字节EPROM的8751固化程序时,作为编程脉冲输入端PSEN:程序存储允许输出端是片外程序存储器的读选通信号,低电平有效°CPU从外部程序存 储器取指令时,PSEN信号会自动产生负脉冲,作为外部程序存储器的选通信号EA/VPP:程序存储器地址允许输入端当EA为高电平时,CPU执行片内程序存储器指令,但当 PC中的值超过0FFFFH时,将自动转向执行片外程序存储器指令;当EA为低电平时,CPU只执 行片外程序存储器指令对8031单片机,EA必须接低电平在8751中,当对片内EPROM编程 时,该端接21V的编程电压C、I/O 口引脚P0.0〜P0.7: P0 口是一个8位漏极开路的双向I/O 口。

作为输出口,每位能驱动8个TTL 逻辑电平对P0端口写“1”时,引脚用作高阻抗输入当访问外部程序和数据存储器时,P0 口也被作为低8位地址/数据复用P1.0〜P1.7: P1 口是一个具有内部上拉电阻的8位双向I/O 口作为输出口,每位能驱动4个 TTL逻辑电平此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器 /计数器2的触发输入(P1.1/T2EX)在flash编程和校验时,P1 口接收低8位地址字节P2.0〜P2.7:P2 口是一个具有内部上拉电阻的8位双向I/O 口作为输出口,每位能驱动 4个TTL逻辑电平在访问外部程序存储器或用16位地址读取外部数据存储器时,P2 口送出高 八位地址在使用8位地址访问外部数据存储器时,P2 口输出P2锁存器的内容在flash编程 和校验时,P2 口也接收高8位地址字节和一些控制信号P3.0〜P3.7: P3 口是一个具有内部上拉电阻的8位双向I/O 口作为输出口,每位能驱动 4个TTL逻辑电平P3 口亦作为AT89S52特殊功能(第二功能)使用在flash编程和校验时, P3 口也接收一些控制信号3.2单片机主控制模块的设计本设计中单片机主要负责对外设的控制和各个功能模块间的协调,没有复杂的数据计算,因 此,8位的51系列单片机足以胜任。

51单片机以其低廉的价格以及较出色的性能成了很多控制 系统的首选它具有丰富的内部资源,较大的数据、程序存储区一个典型的单片机最小系统一般由时钟电路、复位电路、电源指示灯和外部扩展接口等部分组成,本系统也不例外,当单 片机具备了这些最基本的条件后,就可以正常工作了单片机的最小系统如图4.3所示,单片机的XTAL0和XTAL1引脚用于连接晶振电路XTAL0 接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL1接外部晶振和微调 电容的另一端,在片内它是振荡器倒相放大器的输出RESET为复位引脚,连接复位电路,它用于 对单片机进行初始化复位电路包括复位电容(C6)、复位电阻(R3)和复位开关(S4)VSS为电源地,VCC为电源正C2,, U2F.ST■ =rE::?T'I-XTAL1PDU'h.DDpn.v.H[nPDZi'h.DZXT» 12PD^ADlPD.^h.Dm.PDSi'h.DSPD.S'h.DSpj=TTpn 7^AD7pzh'.hePZ.Ii'hBpz^H.inPSEMpz^h.hXLEP2 4i'A1Z声P2.&H.1 ♦PZ.TWISp 1 (VTZpi rvRxnp 1 1iTZB

① 单片机常见的复位电路通常单片机复位电路有两种:上电复位电路,按键复位电路上电复位电路:上电复位是单 片机上电时复位操作,保证单片机上电后立即进入规定的复位状态它利用的是电容充电的原 理来实现的按键复位电路:它不仅具有上电复位电路的功能,同时它的操作比上电复位电路 的操作要简单的多如果要实现复位的话,只要按下RESET键即可它主要是利用电阻的分压图4.4复位电路② 复位电路工作原理上电复位要求接通电源后,单片机自动实现复位操作上电瞬间RESET引脚获得高电平,随着电容的充电,RERST引脚的高电平将逐渐下降RERST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作上电与按键均有效的复位电路不仅在上电时可以自动复位,而且在单片机运行期间,利用按键也可以完成复位操作(2)晶振电路的设计晶振电路用于产生单片机工作所需要的时钟信号,而时序所研究的是指令执行中各信号之间的相互关系单片机本身就如一个复杂的同步时序电路,为了保证同步工作方式的实现,电 路应在唯一的时钟信号控制下严格地工作通常在引脚XTALl和XTAL2跨接石英晶体和两个补偿电容构成自激振荡器,如图4. 5Y1、C1、C2。

可以根据情况选择6MHz、12MHz或24MHz等频率的石英品体,补偿电容通常选择30pF左右 的瓷片电容 XTAL1——/= =C130PF 1,■=^112MHZ-^L_ ―—C2 2 IL-^0PF 1 3.3温、湿度传感器电路设计数字温、湿度传感器DHT11适用于各种狭小空间设备数字测温和控制领域图4.6 DHT11封装 图4.7 DHT11接线图DHT11的主要特性① 适应电压范围更宽,电压范围:3.0〜5.5V,在寄生电源方式下可由数据线供电② 独特的单线接口方式,DTH11在与微处理器连接时仅需要一条口线即可实现微处理器与DHT11的双向通讯③ DHT11支持多点组网功能,多个DHT11可以并联在唯一的三线上,实现组网多点测温④ DHT11在使用中不需要任何外围元件,全部传感元件及转换电路集成电路内 一个I/O 口上只接一个按键,按键的另一端接电源或接地,这种接法程序比较简单且系统更加 稳定;而矩阵式键盘式接法程序比较复杂,但是占用的I/O少根据本设计的需要这里选用了 独立式键盘接法五软件设计5.1系统程序流程图如下所示图5.1系统程序流程图5.2按键程序流程图下图所示(a) 判别键盘上有无键按下。

其方法为扫描键盘接入口,若全为“1”,则键盘无键按下,若不全为“1”,则有键按下b) 去除键的抖动影响其方法为判断到有键按下后,软件延时一段时间(一般为10ms左右)后,再判断键盘状态,如果仍为按下状态,则认为有一个确定的键按下,否则按键抖动处则认为键确理当键盘释放时,判断到有键释放也软件延时一段时间,如果仍为键释放状态, 实释放了b)求按键位置,对各键进行逐个扫描,最后却定按下的键号•开始键盘扫描T有键闭合YI 计算键值n,闭合键释放Y建立无效标志建立有效标志返回图5.2按键程序流程图5.3 LED程序流程图*■结束图5.3 LED显示流程图5.4温、湿度程序流程图温、湿度读取流程图如图5.4所示流程图分析:开始进入初始化DHT11,就是通过主机拉 低单线产生复位脉冲然后释放该线,如果有应答脉冲,即发起ROM命令当成功的执行操作命令 后,就使用Convert T命令即开始温度转换,当转换完后,又初始化DHT11是否有应答脉冲, 若有,就发起Read Scratchpad (读取暂存器和CRC字节)命令,既同时读出第1, 2个字节,图5.4 DHT11测温程序流程5.5液晶显示程序流程图显示程序流程图如图5.4。

流程图分析:首先对液晶段控制端P2 口赋值P2=0x00,然后打 开位控制端P2.0,这样的作用是消除显示残影,使显示清晰显示时先向段控制写入数据,再 打开位控制,这样就可以把数据准确地显示到液晶六仿真与调试6.1 Proteus软件运行流程Proteus ISIS的工作界面是一种标准的Windows界面,如图所示包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方 位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口运行Proteus程序后,进入软件的主界面通过左侧工具栏中的P(从库中选择元件命令) 命令,在Pick Devices左侧窗口中选择所需元件的关键字,然后放置元件并调整方向和位置以 及参数设置,最后进行连线将所需要的元器件放置好后,绘制成原理图,导入程序仿真图如下数字体温、湿计的电路,对于焊接方面不可轻视,只要电路系统中出于一处的错误,就会对检测造成很大的不便,而且电路的交线较多,对于各种锋利的引脚要注意处理,否则会刺破 带有包皮的导线,则会对电路造成短路现象在本次数字体温计的设计调试中遇到了很多的问题回想这些问题只要认真多思考都是可以避免的,以下为主要的问题:(1)由于没有做复位电路,使得输出信号不正常,跟所设计的电平不一样。

2)烧入程序后,显小亮度不好解决:对电路进行测试,如对单片机的输出管脚信号进行测试,观察是否存在漏焊,虚焊,或 者元件损坏的现象若无此问题查看烧写的程序是否正确无误,对程序进行认真修改当显示 亮度不好时阻器的阻值,直到看到合适的亮度为止经过多次的反复调试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计能力与及 对电路的分析能力同时在软件的编程方面得到更到的提高,对编程能力得到加强,同时对所学 的知识得到很大的提高与巩固如下为硬件实物图:图6.2硬件实物图按下设置键:屏幕的右下角会显示数字0〜7,其分别设置星期、最高温湿度、最低温湿度、分、时、日、月、年;按下加减键:分别对应个数值的加减;七总结经过一番努力后,数字温湿计设计的终于完成在未做该项设计前,我对DHT11这个温、 湿度传感器不怎么了解,由于设计的需要我查阅了关于DHT11的资料才发现它的功能是如此强 大的,使用又很方便在设计该温、湿计的过程中,我首先按照温、湿计的功能设计出其大致 的电路方框图,然后分析各个功能模块:温度、湿采集模块、信号转换模块、液品显示模块的 选好材后画出电路原理图,再到编写程序,最后进行仿真,这次课题设计可以说成功完成。

说 到编写程序是可花了不少功夫,因为该设计需要精确到小数位的个位,这个可给我带来了苦恼, 在同学的帮助下最终解决了这个问题实验结果表明此温度体温计实现后具有读取方便、显示 直观、电路简洁等优点,符合电子仪器仪表的发展趋势,具有良好的市场前景在整个设计过程中,充分发挥了人的主观能动性,自主学习,学到了许多没学到的知识 程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考查资料,和同学 讨论,向老师请教,理清了思路,完成对程序的编写通过设计提高了对单片机的认识,进一 步熟悉和掌握单片机的结构及工作原理通过实际程序设计和调试,逐步掌握模块化程序设计 方法和调试技术,提高软件设计、调试能力;通过这次设计熟悉以单片机核心的应用系统开发 的全过程,掌握硬件电路设计的基本方法和技术,掌握相关电路参数的计算方法最终较好的 完成了设计,达到了预期的目的但是由于个人能力的原因,没能解决所显示的数字有些闪动的效果,以及焊接技能需要加强 锻炼,在功能方面是显得的简单一些,只实现了一个最基本的功能,还有许多不足和可以扩展 的地方例如多页面操作或语音报警等,这些有待以后来弥补,还望各位老师予以指正和修改。

在学校领导的关怀下;在吴小玲老师的耐心指导下;在各位同学、朋友的贴心帮助下,本 设计成功完成由于该设计较为普通,为了突出它体温'湿计的特点,吴老师给我提了建议,要 在精确度上要突出,把小数的显示提高到两位,这样可以让使用者对温度的准确性更为乐观 我想如果没有吴老师这开放性思想的指导我就很难在此有所突破了她待人和蔼、认真求实的 工作作风,对指导毕业设计工作积极负责的态度都深深影响着即将走出社会的我让我不仅系 统的掌握了专业知识体系,也让我有了正确的态度和坚定地信念去面对未来当然我的亲朋好 友、同学也给予了我太多的帮助,大家互相鼓励、一起探讨,让我们的毕业设计顺利完成最后,我对所有关心我们的领导、老师和同学、朋友表示最为真切的感谢!参考文献【1】杨黎,基于C语言的单片机应用技术与Proteus仿真,2012年第1版【2】宋卫海、杨德现,数字电子技术,北京大学出版社,2009年第1版附录一:系统程序主程序"""""""""""""""""""""""""""""""""*********************************///初始化要显示的值sbitS3 = P3"2;//定义开关s3选择键sbitS4 = P3"5;//s4加一键sbitS5 = P3"4;//s5减一键sbitRS=P2"0;sbitRW=P2"1;sbitEN=P2"2;sbitPSB=P2"3;sbitRST=P「1;sbitio=P3"0;//io=DHT11 数据接收/发送口sbitled=P「5;/*************** 函数声明""""""""""""************voidT1_ini();//定时器int Adjustment();〃调整时钟部分voidread_io();voiddelay(uint a);//延时voidLCD_init();/*初始化*/voidwrite_cmd(uchar cmd);voidwrite_data(uchar dat);bit check_busy();/***毕业设计:家居环境监测*******/ /***** 芯片 AT89S52,显示 128*64,温湿传感器DHT11 *********//***** 作者:徐日达 ***********/ /***** 时间:2014-9-14 *******//""""""""""""""""""""""""""""""""" /个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个/#include#define uchar unsigned char#define uint unsigned intuchar lcd_x,lcd_y,data_byte=0,count;//LCD128 * 64显示参数 uintTH_data,TL_data,RH_data,RL_data,CK_d ata; //DTH11温湿度参数uintTH_temp,TL_temp,RH_temp,RL_temp,CK_t emp; //DTH11温湿度参数uchar codeCCW[8] = {0x98,0x9c,0x94,0x96,0x92,0x9 3,0x91,0x99};uchar codeCW[80] = {0xf9,0xf1,0xf3,0xf2,0xf6,0xf 4,0xfc,0xf8};uint p;/************** 时间 ***************/ unsigned int year=14; //初始化年year: 2014uchar num,RH_dat=30,RH_da=60;char hour = 21, min = 56, sec = 0,N=0,moth=9,day=26,week=3,miao=0; //hour:时;min:分;sec:秒;N:选择提示; moth:月;day: 0; week:星期;miao:秒;void clock_delay(unsigned i);void delay1();void lcd_dis_code(uint cmd_addr,uchar num,uchar dis[]);void lcd_pos(unsigned char X,unsignedchar Y);void shizhong(); //时钟void delay2(int t); //电机延时void dianji(); //电机/"""""""""""""""""""""""""""""""" /个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个/uchar code SEG_TAB[]={'0','1','2','3','4','5','6','7','8','9'};//0-9 数字uchar code lcd[] = {"日期:20"};uchar code lcd5[] = {"时间:"};uchar code lcd1[] = {"温度:"};uchar code lcd2[] = {"湿度:"};uchar code lcd3[] = {"°C”};uchar code lcd4[]={"%RH"};uchar code lcd6[] = {"比较"};uchar code lcd6_1[] = {"干燥"};uchar code lcd7[] = {"温度适宜"};uchar code lcd7_1[] = {"适宜"};uchar code lcd8[] = {"天气"};uchar code lcd8_1[] = {"潮湿"};uchar str1[] = {""};uchar str2[] = {""};*个*个*******************************"""""""""""""""""""""""""""""""""""" ************************************"""""""""""""""***************/void shiwen(){read_io();lcd_pos(4,3); //地址write_data(str1[0]); //湿度write_data(str1[1]); //湿度write_data('.');write_data(str1[2]);lcd_pos(3,3);write_data(str2[0]); //温度write_data(str2[1]); //温度write_data('.');write_data(str2[2]);delay(500);}void main(){LCD_init();lcd_dis_code(0x80,9,lcd);//显示函数lcd_dis_code(0x90,9,lcd5);lcd_dis_code(0x88,6,lcd1);lcd_dis_code(0x98,6,lcd2);lcd_dis_code(0x8d,2,lcd3);lcd_dis_code(0x9d,5,lcd4);while(1){shizhong();shiwen();dianji();}}int Adjustment() //调整时钟部分{if(S3==0){delay(3);N++;if(N>6){N=0;}lcd_pos(4,7);write_data(SEG_TAB[N]);〃显示切换键位所示的位置N//0:湿度,1:分,2:时,3:日,4:月,5:年6:星期while(!S3);}if(S4==0)//时间调整一加{delay(3);if(N==1){RH_dat=RH_dat+5;str1[3] = (char)(0x30+RH_dat/10);〃湿度str1[4] = (char)(0x30+RH_dat%10);if(RH_dat>=95){RH_dat=30;}lcd_pos(4,3); //地址write_data(str1[3]);//湿度write_data(str1[4]);//湿度 return RH_dat;}if(N==2) // 分{min++;if(min==60)min=0;}if(N==3) //时{hour ++;if(hour==24)hour=0;}if(N==4) //日{day++;if(moth==2&&(year%4==0)&&day==30)day=1; //闰年2月天数计算if(moth==2&&(year%4!=0)&&day==29)day =1; 〃平年2月if((moth==4||moth==6||moth==9||moth= =11)&&day==31)day=1;//4, 6, 9, 11 月 计算if(day==32)day=1;//1, 3, 5, 7, 8, 10, 12月天数计算}if(N==5) //月{moth++;if(moth==13) moth=1;}if(N==6) //年{year++;if(year==51)year=0;}if(N==0){week++;if(week==8)week=1;}while(!S4);}if(S5==0)//时间调整一减{delay(3);if(N==1)//电机正转{RH_da=RH_da+5; str1[3] = (char)(0x30+RH_da/10);//精确度str1[4] = (char)(0x30+RH_da%10);if(RH_da>=95){RH_da=60;}lcd_pos(4,3);〃地址write_data(str1[3]); //湿度write_data(str1[4]); //湿度return RH_dat;}if(N==2){ min—;if(min<0){min=59;}}if(N==3){ hour—;if(hour<0){hour=23;}}if(N==4){day--;if(moth==2&&(year%4==0)&&day<1)day=2 9;if(moth==2&&(year%4!=0)&&day<1)day=2 8;if((moth==4||moth==6||moth==9||moth= =11)&&day<1)day=30;if(day<1)day=31;}if(N==5){ moth--;if(moth==0){moth=12;}}if(N==6){year--;if(year<0){year=50;}}if(N==0){week--;if(week==0)week=7;}while(!S5);}return RH_dat;}void delay1() //延时{unsigned char i;for(i=0;i<3;i++);}void lcd_pos(unsigned charX,unsigned char Y) //128*64地址{unsigned char pos;if(X==1){pos=0x80;}else if(X==2){pos=0x90;}else if(X==3){pos=0x88;}else{pos=0x98;}write_cmd(Y|pos);}/*************DHT11********//************ 温湿传感 ***********/uchar receive_byte(){uchar i,temp;for(i=0;i<8;i++){count=2;while((!io)&&count++)//io=DHT11数据接收/发送口temp=0;delay1();delay1();delay1();if(io==1){temp=1;count=2;while(io&&count++);}elsetemp=0;data_byte<<=1;data_byte|=temp;}return(data_byte);}void read_io() //湿温{io=0;delay(18);io=1;delay1();delay1();delay1();delay1();io=1;if(!io){count=2;while((!io)&&count++);count=2;while(io&&count++);RH_temp=receive_byte();RL_temp=receive_byte();TH_temp=receive_byte();TL_temp=receive_byte();CK_temp=receive_byte();io=1;num=(RH_temp+RL_temp+TH_temp+TL_temp );if(num==CK_temp){RH_data=RH_temp;RL_data=RL_temp;TH_data=TH_temp;TL_data=TL_temp;CK_data=CK_temp;}}str1[0] = (char)(0x30+RH_data/10);//精确度str1[1] = (char)(0x30+RH_data%10);str1[2] = (char)(0x30+RL_data/10);str2[0] = (char)(0x30+TH_data/10);str2[1] = (char)(0x30+TH_data%10);str2[2] = (char)(0x30+TL_data/10);}void lcd_dis_code(uint cmd_addr,uchar num,uchar dis[]) /*128*64 读取数 据*/{uint i;write_cmd(cmd_addr);for(i=0;i=10)//1秒种时间到{miao = 0;sec++;if(sec == 59)//1分钟时间到{min++;sec = 0;if(min == 60)//1 小时时间到{hour++;min = 0;if(hour == 24)//24 小时时间到{ day++;week++;hour = 0;min = 0;sec = 0;if(week==7){week=0;}if((moth==2&&(year%4==0)&&day==30)||(moth==2&&(year%4!=0)&&day==29)||((moth==4||moth==6||moth==9||moth==11)&&day==31)||(day==32)) //一个月到{moth++;day=1;if(moth==13) //一年到{ year++;moth=1;}}}//时间显示 lcd_pos(2,3);write_data(SEG_TAB[hour/10]); //时 write_data(SEG_TAB[hour%10]);write_data(':');write_data(SEG_TAB[min/10]); //分 write_data(SEG_TAB[min%10]);write_data(':');write_data(SEG_TAB[sec/10]); //秒 write_data(SEG_TAB[sec%10]);write_data('-');write_data(SEG_TAB[week]); //星期 lcd_pos(1,4);write_data(SEG_TAB[year/10]); //年 write_data(SEG_TAB[year%10]);write_data('-');write_data(SEG_TAB[moth/10]); //月 write_data(SEG_TAB[moth%10]);write_data('-');write_data(SEG_TAB[day/10]); //日 write_data(SEG_TAB[day%10]);lcd_pos(4,7); //星期}/*环境提示*/void delay2(int t){int k;int i;for(i=0;i=RH_da)//高于设定的最高温度{lcd_dis_code(0x8e,4,lcd8);delay2(a);lcd_dis_code(0x8e,4,lcd6);delay2(a);lcd_dis_code(0x8e,4,lcd8_1);}if(RH_data<=RH_da&&RH_data>=RH_dat) //合适的温度状态{lcd_dis_code(0x8e,4,lcd7);delay2(a);lcd_dis_code(0x8e,4,lcd7_1);} }指导教师评语:初评成绩:指导教师签名:年 月 日毕业论文(设计)评审小组意见:终评成绩:组长签章:年 月 日备注。

下载提示
相关文档
正为您匹配相似的精品文档