完整的单片机智能家居系统(程序+原理图+实物图+仿真图).doc_第1页
完整的单片机智能家居系统(程序+原理图+实物图+仿真图).doc_第2页
完整的单片机智能家居系统(程序+原理图+实物图+仿真图).doc_第3页
完整的单片机智能家居系统(程序+原理图+实物图+仿真图).doc_第4页
完整的单片机智能家居系统(程序+原理图+实物图+仿真图).doc_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

江苏科技大学毕业论文智能家居控制系统通信与信息工程学院 电信1202班 苏伟、杨博、张波波摘要一方案论证与设计1.1 方案来源-1.2系统设计-1.3主要器件及型号-二系统实现 2.1 原理分析与硬件电路图-2.2测量模块-2.3感应模块-2.4显示模块-2.5控制模块-2.6软件调试-2.7性能分析-三.系统设计与误差分析四.总结4.1系统功能-4.2资料来源-4.3 单片机控制总程序代码-4.4 单片机仿真原理图-4.5 单片机系统实物图-4.6 实验设计总结心得-摘要:(简要总结)当今世界,随着科技的不断发展,智能家居成了人类关注的话题。智能家居是在物联网的影响之下物联化体现。智能家居通过物联网技术将家中的各种设备(如照明系统、窗帘控制、空调控制、安防系统,报警控制等)连接到一起,提供家电控制、照明控制、窗帘控制、室内外遥控、防盗报警、环境监测、红外遥感以及可编程定时控制等多种功能和手段。与普通家居相比,智能家居不仅具有传统的居住功能,兼备建筑、信息家电、设备自动化,集系统、结构、服务、管理为一体的高效、舒适、安全、便利、环保的居住环境,而且提供全方位的信息交互功能,帮助家庭与外部保持信息交流畅通,优化人们的生活方式,帮助人们有效安排时间,增强家居生活的安全性,甚至为各种能源费用节约资金。 本文首先介绍了智能家居的发展前景,接着介绍了该课题设计构想,各模块电路的选择及其电路工作原理,最后对该课题的设计过程进行了总结与展望并附带各个模块的电路原理图,和本设计实物图,以及c语言思想。一、方案论证与设计1.1 方案来源设计背景:智能家居实验是为智能家居系统实验做准备的,是实验的基础,智能家居是为了提高学生的动手能力,配合各类电子设计大赛,科技活动等而开发的设计模型。在此模型上我们可以进行多种实验,如测量,感应,报警,控制,自动控制等等。为了能更好的控制模拟家居,实现手动与自动控制相结合,进行各种功能实现,并且这个实验对现实生活也有一定的意义,所以我们就需要对这个实验进行一定的研究。理论来源:本次设计主要分五个个功能,分别为测温湿度,烟雾及红外感应和报警,显示信息和报警信息、自动与手动风扇控制以及键盘控制。将这几个个功能巧妙的与家居结合,我们已经知道五个单独功能如何实现,现在要将五个功能通过单片机系统化反馈,以达到能实现综合五种功能的智能家居。设计涉及主硬件: stc89c52rc单片机,dht11温室度传感器,ds1302时钟芯片,人体红外感应器,烟雾传感器,智能风扇及其驱动器,按键设置与调控,lcd1602液晶显示模块,光电效应电路,蜂鸣器报警电路,以及超标指示显示模块组成。系统功能介绍:智能家庭控制系统的主要功能包括家庭设备自动及部分手动控制、家庭安全防范二个方面。其中家庭设备自动监控包括电器设备的集中、安全防御、显示完备、控制及数据采集。(1)通过dht11温湿度采集数据将信息显示于lcd1602上面,如果温湿度超出设定的预警值,那么风扇会自动开启,并且显示器有显示,指示灯有提示;待到坏境温湿度降到低于预警值的时候,风扇自动关闭指示也关闭;同时我们也可以手动按键开启风扇,不需要时则可手动关闭。(2)通过ds1302时钟芯片可以及时准确的显示时间(年月日,时分秒,及周期)于显示器,非常容易知道查看我们的日常所需时间,并且该时钟芯片带有备用的电池,以便在断电情况下持续备电,以避免时间的不连续。(3)采用烟雾探头传感器来检测我们周围环境的烟雾,可对煤气甲烷,以及我们周围着火的烟雾,或是抽烟的浓度等实时监测,如有超标,蜂鸣器报警,并有指示灯动作来提醒你解决当前的问题,解决之后,这些显示和指示指标自动关闭,所以能给您带来一定的安全感。(4)光电感应电路能够根据外界环境光照强度大小来显示是否自动开启光敏电路灯,晚上灯照自动开启,白天则自动关闭,我们可以通过调节其灵敏度来达到我们的日常需求,此外该系统也可以手动开启led灯,来更进一步全方位的满足您的需求(5)该设计的许多功能可以通过调节其灵敏度或是按键等来更进一步实现需求。1.2简易方案设计测温湿度: 测温湿度功能采用了dht11传感器,该传感器能同时测出环境的温湿度,减少了外部硬件电路,具有低成本和易使用的特点。感应方案: 感应分为烟雾传感器感测,红外距离感测,光电感测,其中烟雾传感器采用mq2探头,红外传感器采用人体感测效应,光电感测采用根据外界光照强度大小效应。显示方案:显示功能分别采用1602液晶显示器,1602内部集成有显示芯片,可以识别英文字母、阿拉伯数字和日语片假名,功能比较齐全;另外含有ds1302时钟芯片能显示完整的时间,基本可以满足本系统的要求。控制方案:控制分为手动和自动两种,其中自动控制有光敏电阻(代表日光灯),风扇和蜂鸣器报警,而同时也可以手动控制风扇和灯的开关,体现出人性化以及易操作性的特性。1.3主要器件型号a.单片机stc89c52rcb.温湿度传感器(dht11)掌柜档c.显示器 (lcd1602液晶)d.烟雾测试(mq-2探头)e.红外传感器:(人体红外探头)f.时钟模块:(ds1302芯片)g.电机驱动模块:(lm298驱动)h.光电感应模块(lm393驱动)二系统实现2.1 原理分析与硬件电路图系统总体设计框图:蜂鸣器 显示器烟雾感测红外报警 智能家居系统万年历光控灯风扇测量温湿度按键控制总电路图:总实物图:简易的pcb图(stc89c52单片机最小系统图):2.2单片机最小系统模块:stc89c52具有以下标准功能: 8k字节flash,256字节ram, 32 位i/o 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。另外,at89s52 可降至0hz 静态逻 辑操作,支持2种软件可选择节电模式。空闲模式下,cpu 停止工作,允许ram、定时器/计数器、串口、中断继续工 作。掉电保护方式下,ram内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。其主要功能特性:兼容mcs-51指令系统 1000次擦写周期32个可编程i/o口8k字节在系统可编程flash存储器3个16位可编程定时/计数器 时钟频率0-33mhz六个中断源 看门狗定时器低功耗空闲和掉电模式 掉电标识符全双工uart串行通道 3级加密程序存储器双数据指针 掉电后中断可唤醒stc89c52引脚简介说明vcc:电源电压gnd:地p0 口:p0口是一个8位漏极开路的双向i/o口。p1 口、p2 口和p3 口:都是具有内部上拉电阻的8 位双向i/o 口,它们的输出缓冲器能驱动4 个 ttl 逻辑电平。rst:复位输入。当振荡器工作时,rst引脚出现两个机器周期以上高电平将是单片机复位。ale/prog:当访问外部程序存储器或数据存储器时,ale(地址锁存允许)输出脉冲用于锁存地址的低8位字节。psen:程序储存允许(psen)输出是外部程序存储器的读选通信号,当at89s52由外部程序存储器取指令(或数据)时,每个机器周期两次psen有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次psen信号。ea/vpp:外部访问允许,欲使cpu仅访问外部程序存储器(地址为0000h-ffffh),ea端必须保持低电平(接地)。xtal1:振荡器反相放大器及内部时钟发生器的输入端。xtal2:振荡器反相放大器的输出端。简述电路:该电路模块含有电路所需要的晶振起振电路,上电自动或是手动复位电路2.3光电感应模块: 该电路采用lm393运放芯片来将光敏电阻采集到的模拟数据放大后给予单片机处理,从而达到在白天光照灯亮,而到了晚上则自动熄灭的要求,同时可通过滑动变阻器来调节其灵敏度来满足不同需求。2.4显示模块: 图.1602引脚图 图.1602实物图本系统显示采用1602显示器: 引脚:1602采用标准的16脚接口,其中:第1脚:vss为电源地第2脚:vcc接5v电源正极第3脚:v0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10k的电位器调整对比度)。第4脚:rs为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:rw为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:e(或en)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第714脚:d0d7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极 特性:3.3v或5v工作电压,对比度可调;内含复位电路;提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能;有80字节显示数据存储器ddram;内建有192个5x7点阵的字型的字符发生器cgrom。8个可由用户自定义的5x7的字符发生器cgram。字符集:1602液晶模块内部的字符发生存储器(cgrom)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“a”的代码是01000001b(41h),显示时模块把地址41h中的点阵字符图形显示出来,我们就能看到字母“a”。因为1602识别的是ascii码,试验可以用ascii码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如a。具体读如下图。 图该液晶的功能室显示采集到的温度和湿度,而且当有温湿度和烟雾浓度超过预警值的时候会显示(yw over和wh over字样),在开启系统时有(welcome to zh jiaju)字样提醒的界面。2.5温湿度模块:dht11系列数字温湿度传感器的特性:全量程标定,单线数字输出;湿度测量范围:2090%rh(050温度补偿);温度测量范围:0+50;湿度测量精度:5.0%rh温度测量精度:2.0响应时间:5s;低功耗特点:相对湿度和温度一体测量全量程标定,无需重新标定即可互换使用超快响应时间单线制数字接口(最简单的系统集成,超低的价格)超小尺寸(12x15.5x5.5mm)高可靠性优化的长期稳定性电气特性:vdd=5v,t =25,除非特殊标注参数条件mintypmax单位供电dc355.5v供电电流测量0.52.5ma平均0.20.5ma待机100150ua采样周期秒1次dht11 的主要功能室采集外界环境的温湿度状况,然后将采集到的数据进行一定的算法转换来将温湿度的大小显示在液晶显示屏上面,该器件采用一根线来与单片机实现数据的传输,所以程序必须根据该器件的时序来严格的编程,否则效果会大大不佳,该器件的引脚分别为vcc,gnd,以及data数据传输,其中的nc(第三脚)处于空穴状态,不需要与任何引脚连接,当该温湿度超过预警值时 ,风扇会自动开启来达到降温降湿的作用,同时会有相应的指示灯开启提醒。2.6烟雾测试模块和人体红外感应模块:a. 标准工作条件符号参数名称技术条件备注vc回路电压15vac or dcvh加热电压5.0v0.2 vac or dcrl负载电阻可调rh加热电阻313室温ph加热功耗900mwb. 环境条件符号参数名称技术条件备注tao使用温度-10-50tas储存温度-20-70rh相对湿度小于 95%rho2氧气浓度21%(标准条件)氧气浓度会影响灵敏度特性最小值大于c. 灵敏度特性符号参数名称技术参数备注rs敏感体表面电阻3k-30k(1000ppm 异丁烷 )探测浓度范围100ppm-10000ppm液化气和丙烷300ppm-5000ppm 丁烷5000ppm-20000ppm 甲烷300ppm-5000ppm 氢气100ppm-2000ppm 酒精(3000/1000)异丁烷浓度斜率0.6标准工作条件温度: 202 vc:5.0v0.1v相对湿度: 65%5% vh: 5.0v0.1v预热时间不超过1小时应用:适用于家庭或工厂的气体泄漏监测装置,适宜于液化气、丁烷、丙烷、甲烷、酒精、氢气、烟雾等监测装置。4、 原理特点:1、具有信号输出指示。2、双路信号输出(模拟量输出及ttl电平输出)3、ttl输出有效信号为低电平。(当输出低电平时信号灯亮,可直接接单片机)4、模拟量输出05v电压,浓度越高电压越高。5、对液化气,天然气,城市煤气有较好的灵敏度。6、具有长期的使用寿命和可靠的稳定性7、快速的响应恢复特性该器件有四个引脚,分别为vcc,gnd,ao(模拟信号输出端),do(数字信号输出端),本次系统所应用的是数字信号的输出传输给单片机处理,当外界的浓度超过一定值时,该传感器输出低电平,从而引发单片机去处理相应的报警动作响应,同时会有指示灯来提醒你目前环境状况处于不佳状态,显示器提醒超标状态。2.7电机驱动模块示意:lm298 n 引脚恒压恒流桥式2a驱动芯片l298nl298是sgs公司的产品,比较常见的是15脚multiwatt封装的l298n,内部同样包含4通道逻辑驱动电路。可以方便的驱动两个直流电机,或一个两相步进电机。l298n可接受标准ttl逻辑电平信号vss,vss可接457 v电压。4脚vs接电源电压,vs电压范围vih为2546 v。输出电流可达25 a,可驱动电感性负载。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。l298可驱动2个电动机,out1,out2和out3,out4之间可分别接电动机,本实验装置我们选用驱动一台电动机。5,7,10,12脚接输入控制电平,控制电机的正反转。ena,enb接控制使能端,控制电机的停转。lm298n 功能表格:pwm_xx_en1x_en2运转状态0xx停止110正转101反转111刹停100停止风扇控制分为手动和自动,通过中断的控制可以按键开启与关闭,也可以根据温湿度是否超标来自动感应器风扇的关闭与否。2.8 ds1302时钟模块:ds1302 是dallas 公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31 字节静态ram ,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天数可自动调整。时钟操作可通过am/pm 指示决定采用24 或12 小时格式。ds1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:(1)rst 复位(2)i/o 数据线(3)sclk串行时钟。时钟/ram 的读/写数据以一个字节或多达31 个字节的字符组方式通信。ds1302 工作时功耗很低保持数据和时钟信息时功率小于1mwds1302主要性能指标: 实时时钟具有能计算2100 年之前的秒、分、时、日、星期、月、年的能力,还有闰年调整的能力 8位暂存数据存储ram 串行 i/o 口方式使得管脚数量最少 宽范围工作电压2.0 5.5v 工作电流 2.0v 时,小于300na 读/写时钟或ram 数据时有两种传送方式单字节传送和多字节传送字符组方式 8 脚dip 封装或可选的8 脚soic 封装根据表面装配 简单 3 线接口 与 ttl 兼容vcc=5v 可选工业级温度范围-40 +85 双电源管用于主电源和备份电源供应6.模块工作电压兼容3.3v/5v,可与5v及3.3v单片机连接7.工作温度:0-70接线方法:vcc+5v/3.3vgndgndclkp02datp01rstp00 ds1302芯片需要严格的读写时序才能将其内部资源利用起来,其中主要的就是时钟,复位脚,以及数据传输脚的协调配合,通过读写时序的结合将(年与日,时分秒,星期)显示于屏幕上面。2.9报警电路模块(蜂鸣器) 该电路通过接一个pnp三极管将信号放大来控制蜂鸣器的响否,从而通过超标控制产生报警提示。3.0人体红外感应模块:功能特点:1、全自动感应:人进入其感应范围则输出高电平,人离开感应范围则自动延时关闭高电平,输出低电平。2、两种触发方式:(可跳线选择)a、不可重复触发方式:即感应输出高电平后,延时时间段一结束,输出将自动从高电平变成低电平;b、可重复触发方式:即感应输出高电平后,在延时时间段内,如果有人体在其感应范围活动,其输出将一直保持高电平,直到人离开后才延时将高电平变为低电平(感应模块检测到人体的每一次活动后会自动顺延一个延时时间段,并且以最后一次活动的时间为延时时间的起始点)。5、具有感应封锁时间(默认设置:2.5s封锁时间):感应模块在每一次感应输出后(高电平变成低电平),可以紧跟着设置一个封锁时间段,在此时间段内感应器不接受任何感应信号。此功能可以实现“感应输出时间”和“封锁时间”两者的间隔工作,可应用于间隔探测产品;同时此功能可有效抑制负载切换过程中产生的各种干扰。(此时间可设置在零点几秒几十秒钟)。6、工作电压范围宽:默认工作电压dc3.6v30v。7、微功耗:静态电流50微安,特别适合干电池供电的自动控制产品。8、输出高电平信号:可方便与各类电路实现对接。注:调节距离电位器顺时针旋转,感应距离增大(约7米),反之,感应距离减小(约3米)。调节延时电位器顺时针旋转,感应延时加长(约300s),反之,感应延时减短(约5s)。它能自动快速开启各类白炽灯、荧光灯、蜂鸣器、自动门、电风扇、烘干机和自动洗衣机等装置,是一种高技术产品。特别适用于企业,宾馆、商场、库房及家庭的过道、走廊等敏感区域,或用于安全区域的自动灯光、照明和报警系统。3.1按键模块: 该电路采用矩阵键盘来控制电路相关硬件设备工作与否,这也是手动设备给我们带来的方便之处。3.2 程序下载部分:通过下载电路,可以把需要应用的程序载入到单片机芯片at89s52之中进行调试。三系统设计与误差分析四.总结 4.2 资料来源:参考文献1 何立民.单片机应用系统设计.北京:航天航空大学出版社.2001年.2 李广弟.单片机基础.北京:北京航空航天大学出版社,2001年.3 何希才.新型实用电子电路400例.电子工业出版社,2000年.4 赵负图.传感器集成电路手册,第一版.化学工业出版社,2004年.5 杨邦文.新型实用电路制作200例.北京:人民邮电出版社,1998年.6 邹其洪.电工电子试验与计算机仿真.北京:电子工业出版社.2003年.40 4.3总结: 通过本次电子设计的参与以及行动,同学的互相合作以及老师的及时指导,感觉有不少的收获,从题目的选取到材料的准备,从硬件的焊接到软件的编程,都有所感悟。其中硬件的测试涉及到了示波器和万用表等的使用,软件设计到了keil编程环境的熟悉,proteus仿真电路的应用,以及altium的使用(单片机最小系统设计)等。但是过程中也遇到了很多麻烦,通过网络,老师,同学间的合作力量基本将其解决。由于水平的有限,所以各方面的设计效果还有很多欠缺待我们去进一步的学习与努力才能行之有效。 4.4 系统调试与分析: 在硬件准备差不多的时候,最关键的就是软件的程序调试。在这个过程中程序出现过很多错误,以致于硬件无法运行或是效果太差等。1. 比如说这次用到的液晶显示,刚开始用的是p0口,程序没有错误和警告,但是液晶却无法显示字符,通过多番测试才知道p0口的驱动不足,所以更换io口后,便能正确显示。2.如由于这次程序用的比较多,但是ram空间又小,所以程序中的变量定义,必须改为idata(就是全部ram区)型的,包括数组,否则变量随意分配会引发意想不到的后果。3.如光电感应的调试,刚开始怎么也不显示效果,多番检测之后,发现不是程序的问题,而是硬件电路lm393没有连接好导致的。4.再如由于这次的使用传感器较多,所以带来的后果是如果公地太多势必会影响到实际的运行结果及其稳定性,比方说液晶,温湿度,以及光电的共地会使液晶的显示极度不稳定。5.烟雾的调节也很重要,如果灵敏度这些太高或是太低都会带来比较麻烦的后果,我们通过多次测试将其调节到一定值后才能更加有效的工作。6.延时的多少也很重要,该次使用11.0592mhz的,如果不当会使有关硬件的响应缓慢或是误差太大。 4.5 系统性能分析与评估: 该系统的基本功能实现基本还算稳定,但是由于这次设计的硬件主要是以最小系统为基准设计的,所以在外扩展其他硬件功能时难免会用到导线连接,而这次设计所占用的io口比较多,所以带来的后果是看起来并不是美观而协调的。相如温湿度的采集可以说是灵敏迅速,能够实时的显示环境的温湿度。光敏电阻通过滑动变阻器的调节也是很灵敏,处于黑暗状态他能马上亮起来,明亮状态马上熄灭。当烟雾超标时,液晶屏及时的显示超标信息以及指示信号。其他功能基本都行,但是由于时间紧急加上水平有限,往后还有很多方面需要改善,而且最好能够实现无线控制或是基于gsm的控制。5 电路运行代码源程序:1.主程序(zhineng.c)#include #include #include1602.h /采用1602液晶显示#includedht11.h#includetiaosu.h /风扇头文件#includeshizhong.h /ds1302显示时钟:年月日,时分秒,以及星期显示#define uint unsigned int #define uchar unsigned charuchar idata temp =sd:set:00% 0; /设置 的湿度值显示uchar idata temp_s =rs:00% temp:00 0;/实时湿度显示uchar idata wsdisplay= wh over:0; /温湿度超载显示uchar idata ywdisplay= yw over:0;/烟雾超载浓度显示uchar idata title0= welcome to:0;/上电显示界面uchar idata title1= zn house 0 ;sbit sw1=p30; /温湿度调节sbit sw2=p31; /温湿度调节p25sbit led=p21;/ 光敏电阻光照灯显示 35sbit ss=p22;/光照检测p01 p00sbit led1=p35;/温湿度异常指示sbit led2=p36;/烟雾浓度过高指示sbit led3=p37;/手动开启照明灯指示sbit key4=p25;/按键控制开启照明灯sbit baojing=p36;/蜂鸣器报警sbit yw=p22; /烟雾探头sbit key1=p32;/中断控制风扇自动停止与否sbit key2=p33;/风扇停止位控制sbit key3=p34; /功能选择:进行时间和温湿度显示的切换 /sbit hw=p21; /人体红外检测模块uchar idata set;/变量定义uchar idata num1;uchar idata getdata=55;uint idata shangxian=85; /湿度上线值设置uchar idata temp_h,temp_t,fleg;void conv();void key();void kongzhi();void guangming();void ywjiance();void hwjiance();void autoled();void guangming() led=0; if(ss=0) led=1; void zhuanhuan()/扫描数据转换 temp7=shangxian/10%10+0x30; temp8=shangxian%10+0x30; temp_s3=temp_h/10%10+0x30; temp_s4=temp_h%10+0x30; temp_s3=temp_h/10%10+0x30; temp_s4=temp_h%10+0x30; temp_s12=temp_t/10%10+0x30; temp_s13=temp_t%10+0x30; temp_s14=0xdf; temp_s15=c; void main(void) baojing=1; delay(200); pwm1=0; pwm2=0; lcd_initial(); /液晶初始化 gotoxy(0,0); print(title0); gotoxy(0,1);/显示起始位置 y=0,第一行,y=1 第二行显示第二行 print(title1);/ 内容 delay(500); clock(); delay(100); while(1) ea=1; it0=1; ex0=1; / it1=1; / ex1=1; / ip=0x01;delay(10); ywjiance();hwjiance(); guangming(); autoled();delay(10);rh();temp_t=u8t_data_h;temp_h=u8rh_data_h; zhuanhuan(); key();/ 按键检测 kongzhi(); if(key3=0) delay(10); if(key3=0) display(); delay(3000); lcd_clear(); gotoxy(0,0);/显示起始位置 y=0,第一行,y=1 第二行/显示第一行 print(temp);/ 内容 gotoxy(0,1);/显示起始位置 y=0,第一行,y=1 第二行显示第二行 print(temp_s);/ 内容 delay(1); /getdate= getadcresult(0)*3.9; void key() /按键检测程序if(set=0)/上限设置 if(sw1=0) /上限 减功能 delay(50); if(sw1=0) if(shangxian0) shangxian-; else( shangxian=255); if(sw2=0)/上限 加功能 delay(50);if(sw2=0) if(shangxian=shangxian)|(temp_t35) /此处 设定预设温度 gotoxy(0,0); print(wsdisplay); delay(1000); led1=1; pwm1=0; pwm2=1; else led1=0; pwm1=0; pwm2=0; void int0(void) interrupt 0 delay(10); while(key2!=0) pwm1=0; pwm2=1; 2. 头文件(dht11.h) #include #include typedef unsigned char u8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */typedef signed char s8; /* defined for signed 8-bits integer variable 有符号8位整型变量 */typedef unsigned int u16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */typedef signed int s16; /* defined for signed 16-bits integer variable 有符号16位整型变量 */typedef unsigned long u32; /* defined for unsigned 32-bits integer variable 无符号32位整型变量 */typedef signed long s32; /* defined for signed 32-bits integer variable 有符号32位整型变量 */typedef float f32; /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */typedef double f64; /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */#define uchar unsigned char#define uint unsigned int#define data_0_time 4 /相当于用data_0_time代替4.sbit dq = p27; / io口定义u8 u8flag,k;/定义区u8 u8count,u8temp;u8 u8t_data_h,u8t_data_l,u8rh_data_h,u8rh_data_l,u8checkdata;u8 u8t_data_h_temp,u8t_data_l_temp,u8rh_data_h_temp,u8rh_data_l_temp,u8checkdata_temp;u8 u8comdata;u8 outdata5; /定义发送的字节数u8 indata5;u8 count, count_r=0;u16 u16temp1,u16temp2;/以上为变量的定义.void com(void);void delay2(u16 j) /延时函数 u8 i; for(;j0;j-) for(i=0;i27;i+); void delay_10us(void) /延时10us的延时函数. u8 i; i-; i-; i-; i-; i-; i-;void com(void) u8 i; for(i=0;i8;i+) u8flag=2;while(!dq)&u8flag+);delay_10us(); delay_10us();delay_10us();u8temp=0; if(dq)u8temp=1; u8flag=2; while(dq)&u8flag+);/超时则跳出for循环 if(u8flag=1)break;/判断数据位是0还是1/ 如果高电平高过预定0高电平值则数据位为 1 u8comdata=1; /左移1位 u8comdata|=u8temp; /u8comdata与u8temp相或,结果保存在u8comdata中. /-/-湿度读取子程序 -/-/-以下变量均为全局变量-/-温度高8位= u8t_data_h-/-温度低8位= u8t_data_l-/-湿度高8位= u8rh_data_h-/-湿度低8位= u8rh_data_l-/-校验 8位 = u8checkdata-/-调用相关子程序如下-/- delay();, delay_10us();,com(); /-void rh(void) /主机拉低18ms dq=0; delay2(180); dq=1; /总线由上拉电阻拉高 主机延时20us delay_10us(); delay_10us(); delay_10us(); delay_10us(); /主机设为输入 判断从机响应信号 dq=1; /判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!dq) /t ! u8flag=2; /判断从机是否发出 80us 的低电平响应信号是否结束 while(!dq)&u8flag+); u8flag=2; /判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 while(dq)&u8flag+); /数据接收状态 com(); /调用com函数 u8rh_data_h_temp=u8comdata; com();u8rh_data_l_temp=u8comdata; com(); u8t_data_h_temp=u8comdata; com(); u8t_data_l_temp=u8comdata; com(); u8checkdata_temp=u8comdata; dq=1; /数据校验 u8temp=(u8t_data_h_temp+u8t_data_l_temp+u8rh_data_h_temp+u8rh_data_l_te

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论