网站首页 公文大全 个人文档 实用范文 讲话致辞 实用工具 心得体会 哲学范文 总结范文 范文大全 报告 合同 文书 信函 实用
  • 情书
  • 检讨书
  • 委托书
  • 保证书
  • 承诺书
  • 证明
  • 倡议书
  • 公证书
  • 悔过书
  • 意向书
  • 担保书
  • 请假条
  • 百花范文网 > 文书 > 情书 > 基于单片机的温湿度测量系统设计 基于单片机温湿度测量系统的研究与设计

    基于单片机的温湿度测量系统设计 基于单片机温湿度测量系统的研究与设计

    时间:2021-09-29 09:07:47来源:百花范文网本文已影响

    XX高等专科学校 综合实训论文 实训题目:基于单片机温湿度测量系统的研究与设计 系部:电子通信工程系 专业:应用电子技术 班级:应电班 姓名:
    学号:
    2013年月日 摘 要 温湿度的测量应用范围是很广的,对温湿度测量系统的研究也具有深远意义,本课题针对国内外对温湿度测量系统的研究与发展状况,分析了目前温湿度测量系统存在的主要问题,设计了一种基于单片机的温湿度测量系统,对某些有着特殊要求温度和湿度的场合实现长期、稳定、定时、自动的检测。本设计主要由硬件电路和软件电路两部分组成,系统通过温湿度检测电路,把采集到的信号传给单片机,通过单片机来处理采集到的信号并通过LCD显示出来,如果温湿度过高或过低,报警电路会自动报警。它以AT89C52单片机为核心,采用SHT11集成温湿度传感器实现一种智能、快捷、方便的温湿度测量系统,整个系统由温湿度检测电路、时钟电路、LCD显示电路、键盘电路、报警电路和单片机等组成。设计的系统结构简单紧凑、功耗较低、抗干扰能力强、总体性能比较好,符合了智能仪器仪表小型化的潮流,为今后开发高性能和商品化的温湿度测量仪器奠定了良好的基础。

    关键词 单片机,温湿度,SHT11传感器 目 录 摘要……………………………………………………………..……….….……..…Ⅰ 目录…………………………………………………………………………………Ⅱ 绪论……………………………………………………………….….…………… ……1 第1章……………………………………………………………….….…………… 1 1.1 概述..........................……………………….…………….…..… …1 1.2 国内外研究现状………………….……………………………..……1 1.2.1 国外研究现状…………………………………………………………………1 1.2.2 国内研究现状…………………………………………………………………1 1.3 温湿度检测的发展状况以及存在的问题………………………………………1 1.4 课题研究的主要内容……………………………………………………………2 第2章 系统硬件部分设计…………………..….…… ……………………….…....……4 2.1 AT89C52单片机介绍………………………………………………….……………...4 2.2 温湿度测量电路的设计……………………………………………...……....…9 2.2.1 SHT11简介………………………………………………………………………9 2.2.2 SHT11主要性能特点……………………………………………………………9 2.2.3 SHT11工作原理…………………………………………………………………10 2.2.4 SHT11输出特性…………………………………………………………………10 2.2.5 运行条件………………………………………………………………………11 2.2.6 安装注意事项…………………………………………………………………11 2.2.7 SHT11与单片机连接……………………………………………………………12 2.3 LCD显示电路设计…………………………………………………………………12 2.3.1 LCD1602简介…………………………………………………………………12 2.3.2 LCD1602的特性…………………………………………………………………12 2.3.3 LCD1692引脚功能………………………………………………………………13 2.3.4 指令集……………………………………………………………………………13 2.3.5 LCD1602与单片机连接…………………………………………………………14 2.4 时钟电路设计……………………………………………………………………15 2.4.1 DS1302简介…………………………………………………………………15 2.4.2 DS1302工作原理………………………………………………………………15 2.4.3 DS1302结构及引脚功能……………………………………………………15 2.4.4 DS1302与单片机连接………………………………………………………16 2.5 键盘电路设计……………………………………………………………………17 2.5.1 键盘工作原理……………………………………………………………………17 2.5.2 独立式键盘与单片机的连接……………………………………………………18 2.6 报警电路设计……………………………………………………………………18 2.7 抗干扰措施……………………………………………………………………19 第3章 系统软件设计…………………………………………………………………21 3.1 系统总体流程图…………………………………………………………………21 3.2 温湿度采集模块软件设计…………………………………………………………22 3.3 LCD显示模块软件设计……………………………………………………………24 3.4 时钟模块软件设计………………………………………………………………28 3.5 报警电路软件设计…………………………………………………………………28 第4章 仿真与调试………………………………………………………………………30 4.1 电气原理图…………………………………………………………………………30 4.2 部分参考程序………………………………………………………………………30 4.3 仿真结果…………………………………………………………………………44 结束语…………………………………………………………………………………49 致谢…………………………………………………………………………………50 参考文献…………………………………………………………………………………51 第1章 绪论 1.1 概述 温湿度测量是现代检测技术的重要组成部分,在保证产品质量,提高产品量,节约资源和安全生产方面起着非常重要的作用。因此,能够确保快速、准确的测量温湿度的技术及其装置受到各国的重视。随着信息产业的发展及其工业化的进步,温度和湿度不仅仅变现在以上几个方面直接或间接影响人类基本生活条件,还表现在对生物用品、医药卫生、科学研究、国防建设等方面的影响。针对以上情况,实现对温湿度的准确可靠测量显的尤其重要。近年来,利用智能化数字式温湿度传感器以及实现温湿度信息的在线检测已成为温湿度检测技术的一种发展趋势。本文介绍的温湿度检测系统,以智能化数字化温湿度传感器与52单片机有机结合,构成一种温湿度检测系统。该系统具有性能可靠、测温准确、结构简单、价格低廉、抗干扰能力强等优点,可在工程实际中得到广泛应用。

    1.2 国内外研究现状 1.2.1 国外研究现状 国外对温湿度控制技术研究较早,始于20世纪70年代。先是采用模拟式的组合仪器,采集现场信息并进行指示、记录和控制。80年代末出现了分布式控制系统。目前正开发和研制计算机数据采集控制系统的多因子综合控制系统。现在世界各国的温湿度测控技术发展很快,一些国家在实现自动化的基础上正向着完全自动化、无人化的方向发展。

    1.2.2 国内研究现状 我国对于温湿度测控技术的研究较晚,始于20世纪80年代。我国工程技术人员在吸收发达国家温湿度测控技术的基础上,才掌握了温湿度室内微机控制技术,该技术权限于对温湿度的单项环境因子的控制。我国温湿度测控设施计算机应用,在总体上正从消化吸收、简单应用阶段向实用化、综合性应用阶段过渡和发展。在技术上,以单片机控制的单参数单回路系统居多,尚无真正意义上的多参数综合控制系统,与发达国家相比,存在较大差距。我国温湿度测量控制现状还远远没有达到工厂化的程度,生产实际中任然有许多问题困扰着我们,存在着装备配套能力差,产业化程度低,环境控制水平落后,软硬件资源不能共享和可靠性等特点。

    1.3 温湿度检测的发展状况以及存在的问题 传统的温度和湿度检测系统主要有以下几种:
    (1) 水汽压(e):是水汽在大气总压力中的分压力。它表示了空气中水汽的绝对含量的大小,以毫巴为单位。

    (2) 相对湿度(rh):湿空气中实际水汽压e与同温度下饱和水汽压E的百分比,相对湿度的大小能直接表示空气距离饱和的相对程度。空气完全干燥时,相对湿度为零。相对湿度越小,表示当时空气越干燥。当相对湿度接近于100%时,表示空气很潮湿,越接近于饱和。

    (3) 露点(或霜点)温度:指空气在水汽含量和气压都不改变的条件下,冷却到饱和时的温度。

    (4) 干湿球温度表:用一对并列装置、形状完全相同的温度表,一支测气温,称干球温度表,另一支包有保持浸透蒸馏水的脱脂纱布,称湿球温度表。

    (5) 湿度表(计):利用脱脂人发(或牛的肠衣)具有空气潮湿时伸长,干燥时缩短的特性,制成毛发湿度表或湿度自记仪器,它的测湿精度较差,毛发湿度表通常在气温低于—10℃时使用。

    (6) 电阻式湿度片:利用吸湿膜片随湿度变化改变其电阻值的原理,常用的有碳膜湿敏电阻和氯化锂湿度片两种。前者用高分子聚合物和导电材料碳黑,加上粘合剂配成一定比例的胶状液体,涂覆到基片上组成的电阻片;
    后者是在基片上涂上一层氯化锂酒精溶液,当空气湿度变化时,氯化锂溶液浓度随之改变从而也改变了测湿膜片的电阻。

    (7) 薄膜湿敏电容:是以高分子聚合物为介质的电容器,因吸引(或释放)水汽而改变电容值。它制作精巧,性能优良,常用在探空仪和遥测中。

    (8) 露点仪:能直接测出露点温度的仪器。使一个镜面处在样品湿空气中降温,直到镜面上隐现露滴(或冰晶)的瞬间,测出镜面平均温度,即为露(霜)点温度。它测湿精度高,但需光洁度很高的镜面,精度很高的温控系统,以及灵敏度很高的露滴(冰晶)的光学探测系统。使用时必须使吸入样本空气的管道保持清洁,否则管道内的杂质将吸收或放出水分造成测量误差。

    随着智能检测系统的飞速发展,基于单片机的温湿度检测系统将多传感器系统结合在一起。如何把多传感器集中于一个检测控制系统,综合利用来自多传感器的信息,获得对被测对象的可靠了解和解释,以利于系统做出正确的响应、决策和控制,是智能检测控制系统中需要解决的首要问题。在温湿度要求严格的场合,利用多传感技术可以提高系统的可靠性和精度,亦可以提高系统的时间空间的覆盖范围。

    1.4 课题研究的主要内容 本设计主要作了如下几个方面:一是确定系统的总体功能设计方案;
    二是进行自 能传感器的硬件电路和软件系统的设计;
    三是单片机及通信接口的硬件电路及软件系 统设计。

    本课题针对这些弱点,利用52单片机为核心,连接电源模块(USB接口)、温湿度采集与转换模块、LCD显示模块、键盘控制模块、时钟模块、报警模块及其附属电路,以实现对温湿度的精度、稳定的测量。本系统具有温、湿度测量精度高、功能高、体积小、价格低、简单灵活等优点,能很好的满足工农业工艺要求。

    第二章 系统硬件部分设计 本系统硬件部分:AT89C52单片机、温湿度测量电路、键盘电路、时钟电路、LCD显示电路、报警电路以及其它附属电路的设计。系统设计的整体框图如下图所示。

    系统设计的整体框图 2.1 AT89C52单片机介绍   AT89C52是一个低电压,高性能CMOS8位单片机,片内含8K bytes的可反复檫写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS—51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。

    AT89C52提供以下标准功能:8K字节Flash闪速存储器,256字节内部RAM,32个I/O口线,3个16为定时计数器,一个6向量两级中断结构,一个全双工串行通信接口,片内振荡器及时钟电路。同时,AT89C52可降至0Hz的静态逻辑操作,并支持两种软件可选的节点工作模式。空闲方式停止CPU的工作,但允许RAM、定时/计数器、串行通信口和中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其他所有部门工作直到下一个硬件复位。

    主要特征:
    ·与MCS—52兼容 ·8K字节可重复擦写FLASH闪速存储器 ·1000次写/擦循环周期 ·全静态工作:0Hz—24MHz ·三级加密程序存储器锁存 ·256×8位内部RAM ·32个可编程I/O线 ·3个16位定时器/计数器 ·8个中断源 ·可编程串行UART通道 ·低功耗的闲置和掉电模式 管脚说明:
    VCC:供电电压 GND:接地 P0口:
    P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。作用输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。

    在访问外部数据存储器或程序存储器时,这组口分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。

    在Flash编程时,P0口接收指令字节,而在程序校检时,输出指令字节,校检时,要求外接上拉电阻。

    P1口:
    P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL,逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

    与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1.1/T2EX),参见下表 Flash编程和程序校检期间,P1接收低8位地址。

    引脚号 功能特性 P1.0 T2,时钟输出 P1.1 T2EX(定时、计数器2) P2口:
    P2是一个带有内部上拉电阻的8位双向I/O,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

    在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVX@RI)时,P2口输出P2锁存器的内容。

    Flash编程或校检时,P2亦接收高位地址和一些控制信号。

    P3口:
    P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。

    P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能。

    P3口还接收一些用于Flash闪速存储器编程和程序校检的控制信号。

    RST:
    复位输出。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

    ALE/PROG:
    当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟震荡频率的1/6输出固定的脉冲信号,因此它可对输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。

    对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。

    如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。

    PSEN:
    程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次PSEN信号。

    EA/VPP:
    外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端 必须保持低电平(接地)。需注意的事:如果加密位LBI被编程,复位时内部会锁存EA端状态。

    如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。

    Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。

    XTAL1:
    振荡器反相放大器的及内部时钟发生器的输入端。

    XTAL2:
    振荡器反相放大器的输出端。

    外接晶体引脚 XTAL1、XTAL2:当使用单片机内部振荡器电路时,这两个引脚用来外接石英晶体和微调电容,如下图所示。在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。当采用外部时钟时,对于HMOS单片机,XTAL1引脚接地,XTAL2接片外振荡脉冲输入(带上拉电阻);
    对于CHMOS单片机,XTAL2引脚接地,XTAL1接片外振荡脉冲输入(带上拉电阻),如下图所示。

    外接晶体电路 复位方式 MCS—52单片机有一个复位引脚RET,高电平有效。在时钟电路工作以后,当外部电路使得RST端出现2个机器周期(24个时钟周期)以上的高电平,系统内部复位。复位有两种方式:上电复位和按钮复位,如下图。

    MCS—52复位电路 2.2 温湿度测量电路的设计 2.2.1 SHT11简介 SHT11时瑞士Sensirion公司推出的基于COMSEnsTM技术的新型温湿度传感器。该传感器将CMOS芯片技术与传感器技术结合起来,从而发挥出它们强大的优势互补作用。

    2.2.2 SHT11主要性能特点 ·将温湿度传感器、、信号放大调理、A/D转换、I2C总线接口全部集成于一芯片(COMSEnsTM技术) ·可给出全校准相对湿度和温度值输出 ·带有工业标准的I2C总线数字输出接口 ·具有露点值计算输出功能 ·具有卓越的长期稳定性 ·湿度值输出分辨率为14位,温度值输出分辨率为12位,并可编程为12位和8位 ·小体积(7.65×5.08×23.5mm),可表面贴装 ·具有可靠的CRC数据传输校验功能 ·片内装载的校准系数可保证100%互换性 ·电源电压范围2.4-5.5V ·电流消耗,测量时550uA,平均为28uA,休眠时为3uA SHT11温湿度传感器采用SMD(Lcc)表面贴片封装形状,管脚排列如下图,其引脚说明如下:由于将传感器与电路部分结合在一起。该传感器具有比其它的温湿度传感器优越得多的性能。首先是传感器信号强度的增加增强了传感器的抗干扰性能,保证了传感器的长期稳定性,而A/D转换的同时完成,则降低了传感器对干扰噪声的敏感程度。其次在传感器芯片内装载的校准数据保证了每一只温湿度传感器都具有相同的功能,即具有100%的互换性。最后,传感器可直接通过I2C总线与任何类型的微处理器、微控制器系连接,节省了单片机的I/O接口线,降低了成本。

    (1)GND:接地端 (2)DATA:双向串行数据线 (3)SCK:串行时钟输入 (4)VDD:0.4V—5.5V电源端 (5)NC:空管脚 2.2.3 SHT11工作原理 SHT11的湿度检测运用电容式结构,并采用具有不同保护的‘微型结构’检测电极系统与聚合物覆盖层来组成传感器芯片的电容,除保持电容式湿敏器件的原有特性外,还可抵御来自外界的影响。由于它将温度传感器与湿度传感器结合在一起而构成了一个单一的个体,因而测量精度较高且可精确得出露点,同时不会产生由于温度与湿度传感器之间随温度梯度变化引起的误差CMOSensTM技术不仅将温湿度传感器结合在一起,而且还将信号放大器、模/数转换器、校准数据存储器、标准I2C总线等电路全部集成在一个芯片内。SHT11传感器的内部结构图如下图示。

    SHT11的每一个传感器都是在极为精确的湿度室中校准的。SHT11传感器的校准系数预先存在OTP内存中。经校准的相对湿度和温度传感器与一个14位的A/D转换器相连,可将转换后的数字温湿度值送给二线I2C总线器件,从而将数字信号转换为符合I2C总线协议的串行数字信号。

    SHT11传感器的内部结构框图 2.2.4 SHT11输出特性 (1) 湿度值输出 SHT11可通过I2C总线直接输出数字量湿度值,其相对湿度数字输出特性曲线。可看出SHT11的输出特性呈一定的非线性,为了补偿湿度传感器的非线性,可按如下公式修正湿度值:
    RHIinear=c1+c2S0RH+C3S0RH 式中,SORH为传感器相对测量值,系数取值如下:
    12位:SORH:c1=-4,c2=0.0405,c3=-2.8×10-6 8位:SORH:c1=-4,c2=0.648,c3=-7.2×10-4 (2) 温度值输出 由于SHT11温度传感器的线性非常好,故可用下列公式将温度数字输出转换成实际温度值:T=d1+d2SOT 当电源电压为5V,且温度传感器的分辨率为14位时,d1=-40,d2=0.01,当温度传感器的分辨率为12位时,d1=-40,d2=0.04. (3) 露点计算 空气的露点值可根据相对湿度和温度值来得出,具体的计算公式如下:
    LogEW=(0.66077+7.5T/(237.3+T)+[log10(RH)-2]) Dp=[(0.66077-logEW)×237.3]/(logEW-8.16077) 2.2.5 运行条件 测量量程以外的温度会使湿度信号暂时地偏移+3%。然后传感器会慢慢返回到校准调教。若将芯片在湿度小于5%环境下加热24小时到90℃,芯片就会迅速恢复高相对湿度、高温度环境的影响,但是,延长强度条件会加速芯片的老化。

    2.2.6 安装注意事项 由于大气的相对湿度与温度的关系比较密切,因此,测量大气温度时的要点是将 传感器与大气保持同一温度,如果传感器线路板上有发热元件,SHT11应与热源保持良好的通风,为减少SHT11和PCB之间的热传达,应使铜导线最细并在其中加上窄缝,同时应避免使传感器在强光或UV下曝晒。

    传感器在布线时,SCK和DATA信号平坦且相互接近,或信号线长于10cm时,均会产生干扰信息,此时应在两组信号之间放置VDD或GND。

    2.2.7 SHT11与单片机连接 SHT11与单片机连接电路图 2.3 LCD显示电路设计 2.3.1 LCD1602简介 1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5×7或者5×11等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔每行之间也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形。

    2.3.2 LCD1602的特性 ·1602液晶显示器为若干5×8或5×11的点阵显示字符。每个点阵块为一个字符位,字符间距和行距都为一个点的宽度 ·1602液晶主控制驱动电路为HD44780或其他全兼容电路 ·提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能 ·具有字符发生器的ROM可显示192种字符(160个5×7点阵字符和32个5×10点阵字符) ·有80字节显示数据存储器DDRAM ·内建有192个5×7点阵的字型的字符发生器CGROM ·8个可由用户自定义的5×7的字符发生器CGROM 2.3.3 LCD1602引脚功能 引脚号 引脚名 电平 输入/输出 作用 1 Vss 电源地 2 Vcc 电源(+5V) 3 Vee 对比调整电压 4 RS 0/1 输入 0=输入指令 1=输出数据 5 R/W 0/1 输入 0=向LCD写入指令或数据 1=从LCD读取数据 6 E 1,1→0 输入 使能信号,1时读取信号,1→0(下降沿)执行指令 7 DB0 0/1 输入/输出 数据总线Line0(最低位) 8 DB1 0/1 数据总线Line1 9 DB2 0/1 输入/输出 数据总线Line2 10 DB3 0/1 输入/输出 数据总线Line3 11 DB4 0/1 输入/输出 数据总线Line4 12 DB5 0/1 输入/输出 数据总线Line5 13 DB6 0/1 输入/输出 数据总线Line6 14 DB7 0/1 输入/输出 数据总线Line7(最高位) 15 DB8 +Vcc LCD背光电源负极 16 DB9 接地 LCD背光电源正极 2.3.4 指令集 1602通过D0-D7的8位数据端传输数据和指令。

    显示模式设置:(初始化) 0011 0000[0×38]设置16×2显示,5×7点阵,8位数据接口;

    显示开关及光标设置:(初始化) 0000 1DCB D显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效) 0000 01NS N=1(读或写一个字符后地址指针加1&光标加1), N=0(读或写一个字符后地址指针减1&光标减1), S=1 且 N=1(当写一个字符后,整屏显示不移动) S=0 当写一个字符后,整屏显示不移动 数据指针设置:
    数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H) 其他设置:
    01H(显示清屏,数据指针=0,所有显示=0);
    02H(显示回车,数据指针=0)。

    2.3.5 LCD1602与单片机连接 LCD1602与单片机连接 2.4 时钟电路设计 2.4.1 DS1302简介 DS1302是美国DALLAS公司推出的一种高性能、低消耗、带RAM的实时时钟电路,附加31字节静态RAM,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V-5.5V。采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。

    2.4.2 DS1302工作原理 DS1302工作时为了对任何数据传送进行初始化,需要将复位脚(RST)置位高电平且将8位地址和命令信息装入移位寄存器。数据在时钟(SCLK)的上升沿串行输入,前8位指定访问地址,命令字装入移位寄存器后,在之后的时钟周期,读操作时输入数据,写操作时输出数据,时钟脉冲的个数在单字节方式下为8+8(8位地址+8位数据),在多字节方式下最多可达248位的数据。

    2.4.3 DS1302结构及引脚功能 下图(a)为DS1302引脚排列图,(b)为其内部结构图 (a) (b) ·Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。

    ·X1和X2是振荡源,外接32.768KHz晶振。

    ·RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;
    其次,RST提供终止单字节或多多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高组态。上电运行时,在Vcc>2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置位高电平。

    ·SCLK:串行时钟,输入,控制数据的输入和输出 ·I/O:三线接口时的双向数据线 ·CE:输入信号,在读、写数据期间必须为高,该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;
    第二,CE提供结束单字节或多字节数据传输的方法。

    2.4.4 DS1302与单片机连接 DS1302与CPU的连接需要三条线,即SCLK(7)、I/O(6)、RST(5)。Vcc2为备用电源,外接一个32.768KHz的晶振。下图为DS1302与52单片机的连接图。

    DS1302与52单片机的连接 2.5 键盘电路设计 2.5.1 键盘工作原理 键盘实际上是一组按键开关的集合,平时按键开关总是处于断开状态,当按下键时它才闭合。它的结构和产生的波形如下图所示。

    键盘开关及波形 2.5.2 独立式键盘与单片机的连接 独立式键盘就是个按键相互独立,每个按键各接一根I/O接口线,每根I/O接口线都不会影响其它I/O接口线。因此,通过检测I/O接口线的电平状态就可以容易的判断出哪个按键被按下了。

    本次设计只需用到五个键,所以采用独立式键盘,在程序设计中采用查询方式来判别是否有键按下。SH为湿度限设置键、ST为温度限设置键、V+为加一键、V-为减一键、RE为返回键。如下图 独立式键盘 2.6 报警电路设计 在微型计算机控制系统中,为了生产的安全,在紧急情况或参数指标超限时要进行及时的报警,以便操作人员及时修改一些重要的参数或系统部位,采取紧急措施,确保生产的安全性。其方法是将检测值与设定值进行比较,如果高于上限值或低于下限值则进行报警,否则就正常显示。

    本报警系统的设计由发光二极管和蜂鸣器组成,如下图所示,当P3.1输出高电平,则蜂鸣器鸣叫,当P3.1输出低电平,则蜂鸣器停止。TH为温度上限指示灯,当温度超过设定的上限值,P3.3输出高电平,TH发光,同时P3.1输出高电平,蜂鸣器鸣叫;
    TL为温度下限提示灯,当温度超过设定的下限值,P3.4输出高电平,TL发光,同时P3.1输出高电平,蜂鸣器鸣叫;
    HH为湿度上限提示灯,当湿度超过设定的上限值,P3.5输出高电平,HH发光,同时P3.1输出高电平,蜂鸣器鸣叫;
    HL为湿度下限提示灯,当湿度超过设定的下限值,P3.6输出高电平,HL发光,同时P3.1输出干电平,蜂鸣器鸣叫。

    报警电路与单片机接口 2.7 抗干扰措施 单片机应用系统的工作环境往往都是具有多种干扰源的场所,为提高系统的可靠性和精确性,抗干扰措施在硬件系统设计中显得的尤为重要。

    根据干扰源引入的途径,抗干扰措施可以从以下几个方面考虑:
    (1) 电源供电系统 为了克服电网及系统自身的干扰,可采用隔离变压器、交流稳压、线滤波器、稳压电路各级滤波等抗干扰措施。

    (2) 电路上的考虑 为进一步提高系统的可靠性,在硬件电路设计时,应采取一系列的抗干扰措施:
    a) 大规模IC芯片电源供电端都应加高高频滤波电容,根据负载电流的情况,在各级供电节点还应加足够容量的退耦电容;

    b) 开关量I/O通道与外界的隔离可采用光电耦合器件,特别是与继电器、可控硅等连接的通道,一定要采取隔离措施;

    c) 可采用CMOS器件提高工作电压(如+15V),这样干扰门限也相应提高;

    d) 传感器后缀的变送器尽量采用电流式传输方式,因电流型比电压型抗干扰能力强;

    e) 电路应有合理的布线及接地方法;

    f) 与环境干扰的隔离可采用屏蔽措施。

    本章中确定了系统的设计总体方案,温湿度测量所用到的方法,单片机应用系统的研制方案。还具体介绍了各模块设计方案,初步明确了系统的研制方法。此处还考虑到了系统设计中所遇到的干扰和消除干扰的方式,为系统进一步的设计做好了准备。

    第3章 系统软件设计 在单片机系统中,软件系统与硬件系统紧密结合,为提高设计的通用性,必须根据具体的硬件电路来设计与之相对应的软件,硬件设计的优劣直接关系到软件设计的难易,软件设计的优劣又直接影响到硬件的发挥。本课题软件部分设计方法与硬件部分设计相对应,同样采用模块化的思路,将该部分设计分成不同的程序模块,分别进行编译、调试、最后通过主程序将各模块连接起来。这样有利于程序的修改和调试,增强了程序的可移植性。本系统软件设计主要包括:温湿度采集转换模块、时钟模块、LCD显示模块、键盘模块等。

    3.1 系统总体流程图 系统总体流程图 当单片机上电复位后,LCD会显示当前的时间和温度、湿度,按下相应的功能按键,可以调整时间和温湿度的设定值。系统的总体流程图如上图示。

    3.2 温湿度采集模块软件设计 SHT11传感器共有5条用户命令,具体命令格式见下表所列。下面介绍一下具体的命令顺序及命令时序。

    表1 SHT11传感器命令列表 命令 编码 说明 测量温度 00011 温度测量 测量湿度 00101 湿度测量 读寄存器状态 00111 “读”寄存器状态 写寄存器状态 00110 “写”寄存器状态 软启动 11110 重启芯片,清除状态记录器的错误记录11毫秒后进入下一个命令 (1) 传输开始 初始化传输时,应首先发出“传输开始”命令,该命令可在SCK为高时使DATA由高电平变为低电平,并在下一个SCK为高时将DATA升高。

    接下来的命令顺序包含三个地址位(目前只支持“000”)和5个命令位,当DATA脚的SCK位处于低电平时,表示SHT11正确收到命令。

    (2) 连接复位顺序 如果与SHT11传感器的通讯中断,下列信号顺序会使串口复位:即当DATA线处于高电平时,触发SCK9次以上(含9次),次后应该看发一个“传输开始”命令。

    表2 SHT11状态寄存器类型及说明 位 类型 说明 缺省 7 保留 0 6 读 工检限(低电压检查) X 5 保留 0 4 保留 0 3 只用于试验,不可以使用 0 2 读/写 加热 0 关 1 读/写 不从OTP重下载 0 重下载 0 读/写 ‘1’=8相对湿度,12位温度分辨率。‘0’=12位相对湿度,14位湿度分辨率 (3) 温湿度测量时序 当发生了温(湿)度测量命令后,控制器就要等到测量完成。使用8/12/14位的分辨率测量分别需要大约11/55/210ms的时间。为表明测量完成,SHT11会使数据线为低,此时控制器必须重新启动SCK。然后传送两字节的测量数据与1字节的CRC校检和。控制器必须通过使DATA为低来确认每一个字节,所有的量均从右算MSB列于第一位。通讯在确认CRC数据位后停止。如果没有用CRC-8校验和,则控制器就会在测量数据LSB后保持ack为高来停止通讯,SHT11在测量和通讯完成后会自动返回睡眠模式。需要注意的是,为使SHT11的温度低于0.1℃。此时的工作频率不能大于标定值的15%(如:12位精确度时,每秒最多进行3次测量)。

    温湿度采集模块程序流程如下图示。

    温湿度采集模块程序流程图 3.3 LCD显示模块软件设计 LCD控制器总共有11条指令,它们的格式和功能如下:
    (1) 清屏命令 格式:
    RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 0 0 0 1 功能:清除屏幕,将显示缓冲区DDRAM的内容全部写入空格(ASCII20H) 光标复位,回到显示器的左上角 地址计数器AC清零 (2) 光标复位命令 格式:
    RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 0 0 1 X 功能:光标复位,回到显示器的左上角 地址计数器AC清零 显示缓冲区DDRAM的内容不变 (3) 输入方式设置命令 格式:
    RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 0 1 I/D S 功能:设定当写入一个字节后,光标的移动方向以及后面的内容是否移动 当I/D=1时,光标从左向右移动;
    当I/D=0时,光标从右向左移动 当S=1,内容移动;
    当S=0,内容不移动 (4) 显示开关控制命令 格式:
    RS R/W DB DB DB DB DB DB DB DB 0 0 0 0 0 0 1 D C B 功能:控制显示的开关,当D=1时显示,D=0时不显示 控制光标开关,当C=1时光变显示,C=0时光标不显示 控制字符是否闪烁,当B=1时字符闪烁,B=0时字符不闪烁 (5) 光标移位置命令 格式:
    RS R/W DB DB DB DB DB DB DB DB 0 0 0 0 0 1 S/C R/L X X 功能:移动光标或整个显示字幕移位 当S/C=1时整个显示字幕移位,S/C=0时只光标移位 当R/L=1时光标右移,R/L时光标左移 (6) 功能设置命令 格式:
    RS R/W DB DB DB DB DB DB DB DB 0 0 0 0 1 DL N F X X 功能:设置数据位数,当DL=1时数据位为8位,DL=0时数据位为4位 设置显示行数,当N=1时双行显示,N=0时单行显示 设置字形大小,当F=1时5×10点阵,F=0时5×7点阵 (7) 设置字库CGRAM地址命令 格式:
    功能:设置用户自定义CGRAM的地址,对用户自定义CGRAM访问时,要先设 定CGRAM的地址,地址范畴为0~63 (8) 显示缓冲区DDRAM地址设置命令 格式:
    功能:设置当前显示缓冲区DDRAM的地址,对DDRAM访问时,要先设定DDRAM 的地址,地址范畴为0~127 (9) 读忙标志及地址计数器AC命令 格式:
    功能:读忙标志及地址计数器AC命令 当BF=1时表示忙,这时不能接收命令和数据,BF=0时表示不忙 低7位为读出的AC的地址,值为0~127 (10) 写DDRAM或CGRAM命令 格式:
    功能:向DDRAM或CGRAM当前位置中写入数据。对DDRAM或CGRAM写入 数据之前必须设定DDRAM或CGRAM的地址 (11) 读DDRAM或CGRAM命令 格式:
    功能:从DDRAM或CGRAM当前位置中读出数据。当DDRAM或CGRAM读出 数据时,必须设定DDRAM或CGRAM的地址 下图为LCD显示流程图 LCD显示流程图 3.4 时钟模块软件设计 本次设计时钟模块采用DS1302时钟芯片,将当前时间显示于LCD上,方便人们观察和记录当前的温度和湿度,程序流程图如下图示。

    时钟模块程序流程图 3.5 报警电路软件设计 本次设计采用4个发光二极管和蜂鸣器组成的报警电路,通过查询的方式判断温度、湿度是否超限,执行相应的报警程序。程序流程图如下图示。

    报警电路程序流程图 第4章 仿真与调试 4.1 电气原理图 电气元路图 4.2 部分参考程序 #ifndef__TOU_H__ #define__TOU_H__ #include<reg51.h> #include<intrins.h> #include<math.h> #include<string.h> #define uint unsigned int #define uchar unsigned char enum{TEMP,HUMI}; sbit DATA=P2^5; sbit SCK=P2^4; sbit RS=P2^0; sbit RW=P2^1; sbit E=P2^2; sbit beep=P3^1; sbit THW=P3^3; sbit TLW=P3^4; sbit HHW=P3^5; sbit HLW=P3^6; sfr DBPort=0x80; /******** LCD1602函数声明 ********/ void LCD_Initial(); void GotoXY(unsigned char x,unsigned char y); void Print(unsigned char*str); void LCD_Write(bit style,unsigned char input); void delay(int z); /******** SHT11函数声明 ********/ void s_connectionreset(void); char s_measure(unsigned char *p_value,unsigned char *p_checksum,unsigned char mode); void calc_sth10(float *p_humidity,float *p_temperature); Float calc_dewpoint(float h,float t); #endif //******DS1302****** sbit IO=P1^0; //1302数据线 sbit SCLK=P1^1; //1302时钟线 sbit RST=P1^2; //复位 unint num=0; //uchar*week[]={“SUN”,“***”,“MON”,“TUS”,“WEN”,“THU”,“FRI”,“SAT”};

    uchar idata Date[]={“Date:2000-00-00”}; uchar idata Time[]={“Time: 00-00-00”}; uchar idata date_time[7];//从ds1302读取的当前日期时间 //********向1302写数据******** void write_ds1302(uchar dat) { uchar i; for(i=0;i<8;
    i++) { IO=dat&0x01;//保持最后一位为1,读状态 SCLK=1; delay(1); SCLK=0; dat >>= 1; } } //********从1302读数据******** uchar reaf_ds1302() { uchar i,b=0x00; for(i=0;i<8;
    i++) { b|=_crol_((uchar)IO,i); SCLK=1; delay(1); SCLK=0; } return b/16*10+b%16; //与BCD码转换 } //********从指定位置读数据******** uchar read_data(uchar addr) { uchar dat; RST=0; SCLK=0; RST=1; write_ds1302(addr); dat=read_ds1302(); SCLK=1; RST=0; return dat; } //********读取当前日期时间******** void read_data_time() { uchar i,addr=0x81; for(i=0;i<7;
    i++) { date_time[i]=read_data(addr); addr+=2; } } //--------LCD写指令-------- void lcd_write_com(uchar com) { RS=0; //RS为0时,写指令,RS为1时,写数据 P0=com; delay(5); E=0; } //--------日期时间转换--------- void format_datetime(uchar d,uchar*p) { p[0]=d/10+‘0’;

    p[1]=d%10+‘0’;

    } //SHT11程序(SHT11.c):
    //#include<tou.h> #define noACK 0 //继续传输数据,用于判断是否结束通讯 #define ACK 1 //结束数据传输;

    //地址 命令 读/写 #define STATUS_REG_W 0x06 //000 0011 0 #define STATUS_REG_R 0x07 //000 0011 1 #define MEASURE_TEMP 0x03 //000 0001 1 #define MEASURE_HUMI 0x05 //000 0010 1 #define RESET 0x1e //000 1111 0 //写字节程序 char s_write_byte(unsigned char value) { unsigned char i,error=0; for (i=0x80;i>0;i>>=1) //高位为1,循环右移 { if (i&value) DATA=1; //和要发送的数相与,结果为发送的位 else DATA=0; SCK=1; _nop_();_nop_();_nop_(); //延时3us SCK=0; } DATA=1; //释放数据线 SCK=1; error=DATA; //检查应答信号,确认通讯正常 _nop_();_nop_();_nop_(); SCK=0; DATA=1; return error; //error=1 通讯错误 } //读字节程序 char s_read_byte(unsigned char ack) { unsigned char i,val=0; DATA=1; //释放数据线 for(i=0x80;i>0;i>>=1) //高位为1,循环右移 { SCK=1; if(DATA) val=(val|i); //读一位数据线的值 SCK=0; } DATA=!ack; //如果是校验,读取完后结束通讯;

    SCK=1; _nop_();_nop_();_nop_(); //延时3us SCK=0; _nop_();_nop_();_nop_(); DATA=1; //释放数据线 return val; } //启动传输 void s_transstart(void) { DATA=1; SCK=0; _nop_(); SCK=1; _nop_(); DATA=0; _nop_(); SCK=0; _nop_();_nop_();_nop_(); SCK=1; _nop_(); DATA=1; _nop_(); SCK=0; } void s_connectionreset(void) { unsigned char i; DATA=1; SCK=0; //准备 for(i=0;i<9;i++) //DATA保持高,SCK时钟触发9次,发送启动传输,通迅即复位 { SCK=1; SCK=0; } s_transstart(); //启动传输 } //温湿度测量 char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode) // 进行温度或者湿度转换,由参数mode决定转换内容;

    { unsigned error=0; unsigned int i; s_transstart(); //启动传输 switch(mode) //选择发送命令 { case TEMP : error+=s_write_byte(MEASURE_TEMP); break; //测量温度 case HUMI : error+=s_write_byte(MEASURE_HUMI); break; //测量湿度 default : break; } for (i=0;i<65535;i++) if(DATA==0) break; //等待测量结束 if(DATA) error+=1; // 如果长时间数据线没有拉低,说明测量错误 *(p_value) =s_read_byte(ACK); //读第一个字节,高字节 (MSB) *(p_value+1)=s_read_byte(ACK); //读第二个字节,低字节 (LSB) *p_checksum =s_read_byte(noACK); //read CRC校验码 return error; // error=1 通讯错误 } //温湿度值标度变换及温度补偿 void calc_sth10(float *p_humidity ,float *p_temperature) { const float C1=-4.0; // 12位湿度精度 修正公式 const float C2=+0.0405; // 12位湿度精度 修正公式 const float C3=-0.0000028; // 12位湿度精度 修正公式 const float T1=0.46; // 14位温度精度 5V条件 修正公式 const float T2=+0.00008; // 14位温度精度 5V条件 修正公式 float rh=*p_humidity; // rh: 12位 湿度 float t=*p_temperature; // t: 14位 温度 float rh_lin; // rh_lin: 湿度 linear值 float rh_true; // rh_true: 湿度 ture值 float t_C; // t_C : 温度 ℃ t_C=t*0.01 - 40; //补偿温度 rh_lin=C3*rh*rh + C2*rh + C1; //相对湿度非线性补偿 rh_true=(t_C-25)*(T1+T2*rh)+rh_lin; //相对湿度对于温度依赖性补偿 if(rh_true>100)rh_true=100; //湿度最大修正 if(rh_true<0.1)rh_true=0.1; //湿度最小修正 *p_temperature=t_C; //返回温度结果 *p_humidity=rh_true; //返回湿度结果 } //从相对温度和湿度计算露点 float calc_dewpoint(float h,float t) { float logEx,dew_point; logEx=0.66077+7.5*t/(237.3+t)+(log10(h)-2); dew_point = (0.66077-logEx)*237.3/(logEx-8.16077); return dew_point; } unsigned char LCD_Wait(void) { RS=0; RW=1; _nop_(); E=1; _nop_(); E=0; return DBPort; } //向LCD写入命令或数据******************************************************** #define LCD_COMMAND 0 // Command #define LCD_DATA 1 // Data #define LCD_CLEAR_SCREEN 0x01 // 清屏 #define LCD_HOMING 0x02 // 光标返回原点 void LCD_Write(bit style, unsigned char input) { E=0; RS=style; RW=0; _nop_(); DBPort=input; _nop_();//注意顺序 E=1; _nop_();//注意顺序 E=0; _nop_(); LCD_Wait(); } //设置显示模式************************************************************ #define LCD_SHOW 0x04 //显示开 #define LCD_HIDE 0x00 //显示关 #define LCD_CURSOR 0x02 //显示光标 #define LCD_NO_CURSOR 0x00 //无光标 #define LCD_FLASH 0x01 //光标闪动 #define LCD_NO_FLASH 0x00 //光标不闪动 void LCD_SetDisplay(unsigned char DisplayMode) { LCD_Write(LCD_COMMAND, 0x08|DisplayMode); } /设置输入模式************************************************************ #define LCD_AC_UP 0x02 #define LCD_AC_DOWN 0x00 // default #define LCD_MOVE 0x01 // 画面可平移 #define LCD_NO_MOVE 0x00 //default void LCD_SetInput(unsigned char InputMode) { LCD_Write(LCD_COMMAND, 0x04|InputMode); } //初始化LCD************************************************************ void LCD_Initial() { E=0; LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵 LCD_Write(LCD_COMMAND,0x38); LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标 LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏 LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动 } //液晶字符输入的位置************************ void GotoXY(unsigned char x, unsigned char y) { if(y==0) LCD_Write(LCD_COMMAND,0x80|x); if(y==1) LCD_Write(LCD_COMMAND,0x80|(x-0x40)); } //将字符输出到液晶显示 void Print(unsigned char *str) { while(*str!='\0') { LCD_Write(LCD_DATA,*str); str++; } } typedef union //定义共用同类型 { unsigned int i; float f; } value; //延时函数 void delay(int z) //z为毫秒数 { int x,y; for(x=z;x>0;x--) for(y=125;y>0;y--); } void sound() interrupt 1 { beep=~beep; } void warn() { TR0=1; } void main() { uchar txt[5],hg; unsigned int temp,humi; value humi_val,temp_val; //定义两个共同体,一个用于湿度,一个用于温度 float dew_point; //用于记录露点值 unsigned char error; //用于检验是否出现错误 unsigned char checksum; //CRC uchar idata wendu[6]; //用于记录温度 uchar idata shidu[6]; //用于记录湿度 beep=0;THW=0;TLW=0;HHW=0;HLW=0; TMOD=0x02; TH0=0x01 ; TL0=0x01; ET0=1; EA=1; LCD_Initial(); //初始化液晶 GotoXY(9,1); //选择温度显示位置 Print(“T:“); //5格空格 GotoXY(0,1); //选择湿度显示位置 Print(“RH:“); //5格空格 s_connectionreset(); //启动连接复位 while(1) { error=0; //初始化error=0,即没有错误 error+=s_measure((unsigned char*)&temp_val.i,&checksum,TEMP); //温度测量 error+=s_measure((unsigned char*)&humi_val.i,&checksum,HUMI); //湿度测量 if(error!=0) s_connectionreset(); ////如果发生错误,系统复位 else { read_date_time(); format_datetime(date_time[6],Date+8); //年月日 format_datetime(date_time[4],Date+11); format_datetime(date_time[3],Date+14); for(hg=0;hg<5;hg++) { txt[hg]=Date[hg+11] ; } strncpy(Time,txt,5); format_datetime(date_time[2],Time+7); //时间转换 format_datetime(date_time[1],Time+10); format_datetime(date_time[0],Time+13); GotoXY(0,0); Print(Time); humi_val.f=(float)humi_val.i; //转换为浮点数 temp_val.f=(float)temp_val.i; //转换为浮点数 calc_sth10(&humi_val.f,&temp_val.f); //修正相对湿度及温度 dew_point=calc_dewpoint(humi_val.f,temp_val.f); //计算e dew_point temp=temp_val.f*10; humi=humi_val.f*10; GotoXY(11,1); //设置温度显示位置 wendu[0]=temp/1000+'0'; //温度百位 wendu[1]=temp%1000/100+'0'; //温度十位 wendu[2]=temp%100/10+'0'; //温度个位 wendu[3]=0x2E; //小数点 wendu[4]=temp%10+'0'; //温度小数点后第一位 Print(wendu); //输出温度 GotoXY(3,1); //设置湿度显示位置 shidu[0]=humi/1000+'0'; //湿度百位 shidu[1]=humi%1000/100+'0'; //湿度十位 shidu[2]=humi%100/10+'0'; //湿度个位 shidu[3]=0x2E; //小数点 shidu[4]=humi%10+'0'; //湿度小数点后第一位 Print(shidu); //输出湿度 if((temp>400)) {THW=1;} else {TR0=0;beep=0;THW=0;} if((temp<200)) {TLW=1;} else {TR0=0;beep=0;TLW=0;} if((humi>700)) {HHW=1;} else {TR0=0;beep=0;HHW=0;} if((humi<500)) {HLW=1;} else {TR0=0;beep=0;HLW=0;} if((temp>400)||(temp<200)||(humi>700)||(humi<500)) {warn();} } delay(800); //等待足够长的时间,以现行下一次转换 } } 4.3 仿真结果 正常工作情况 上图是系统工作在正常状态下的仿真图,LCD显示的是当前的时间、温度和湿度。软件设计的温度的上限值是40℃,下限值是20℃;
    湿度的上限值是70%rh,下限值是50%rh。当前的温度和湿度均在设定的范围内,工作正常。

    温度高于上限情况 上图是系统工作在湿度超过设定上限值状态下的仿真图,LCD显示的是当前的时间、温度和湿度。软件设计的湿度的上限值是70%rh,下限值是50%rh。由于此时的湿度值为70.9%rh,超过了设定的70%rh,HH(湿度超上限指示灯)亮,同时蜂鸣器鸣叫。

    温度低于下限情况 上图是系统工作在温度低于设定下线状态下的仿真图,LCD显示的是当前的时间、温度和湿度。软件设计的温度的上限值是40℃,下限值是20℃。由于此时的温度值为19.1℃,低于了设定的20℃,TL(温度超下限指示灯)亮,同时蜂鸣器鸣叫。

    湿度低于下限值,温度高于上限值情况 上图是系统工作在湿度低于下限值、温度高于上限值状态下的仿真图,LCD显示的是当前的时间、温度和湿度。软件设计的温度的上限值是40℃,下限值是20℃;
    湿度的上限值是70%rh,下限值是50%rh。当前的湿度是46.9%rh,低于了设定的50%rh,HL(湿度超下限指示灯)亮;
    当前的温度是42.1℃,高于了设定的40℃,TH(温度超上限指示灯)亮;
    同时蜂鸣器鸣叫。

    结束语 单片机在各行各业中正得到越来越广泛的应用,尤其是51、52系列单片机,在自动化领域迅速占领着重要地位,并取得了许多令人瞩目的成就,展现了广阔的应用前景。

    本次毕业设计:基于单片机的温湿度测量系统的研究与设计,已经基本完成。通过这次毕业设计,我掌握了一些实践性质的设计的基本步骤:首先,对市场上温湿度测量系统要有初步了解,并了解其研究现状及存在的不足,本设计方案的可利用程度等等,明确设计的任务及要达到的目标。其次,要确立设计方案,进行原器件的选型与硬件设计,并用protues软件画出设计电路图并仿真。最后,进行系统软件设计时,要弄清楚各个模块实现的功能,对整个系统进行软件编程实现。

    由于个人的能力有限,系统还存在不完善的地方,还值得改进和优化。比如本设计中只对键盘模块进行了硬件部分的设计,而未能完成对软件的设计。在调试过程中,有些部分程序运行的结果总是达不到预期的效果,温湿度的修正还存在着一些问题,导致检测出来的温湿度与实际的存在着误差,这些方面的问题会在以后的学习和工作中逐步加强与完善。

    致谢 经过将近两个月的努力,毕业设计已经基本完成。这和老师的悉心指导和同学们的热心帮助是分不开的。通过大学四年对专业知识的学习和大量的课余阅读,使我对理论知识有了较好的掌握;
    通过本论文的设计,使我的实践能力也得到了飞速的提高。从论文的选题到设计,一路上都得到了xxx教授悉心的指导,他以渊博的知识、严谨的治学态度和崇高的责任心指导着我顺利的完成了本次毕业设计。xxx教授对工作的执着和奉献精神将是我终生学习的楷模。在此,向xxx教授致以深深的谢意! 衷心的感谢在学业上给予我指导和帮助的各位任课老师,他们对工作的勤恳和对学生的关怀使我们受益匪浅,帮助我顺利完成了学业。同时,感谢在学习过程中帮助过我的各位同学们。

    参考文献 [1] 陆子明,徐长根.单片机设计与应用基础教程[M].国防工业出版社,2005.01 [2] 朱勇.单片机原理与应用技术[M].清华大学出版社,2006.01 [3] 杨将新,李华军,刘东俊.单片机程序设计及应用从基础到实践[M].电子工业出 版社 [4] 李发春.单片机原理及接口技术案例教程[M].北京,机械工业出版社,2006 [5] 李朝青.单片机原理及接口技术[M].北京,航空航天大学出版社,2005 [6] 杨加国,谢维成.单片机原理与应用及C51程序设计(第2版)[M].清华大学出 版社,2009 [7] 夏路易.单片机技术基础教程与实践[M].电子工业出版社,2008 [8] 求是科技.单片机典型模块设计实例导航[M].人民邮电出版社,2004 [9] 蒋辉平,周国雄.基于Protues的单片机系统设计与仿真实例[M].机械工业出版 社,2009 [10] 祁伟,杨亭.单片机C51程序设计教程与实验[M].北京航空航天大学出版社,2006 [11] 刘文涛.单片机语言C51典型应用设计[M].人民邮电出版社,2005 [12] 谭浩强.C语言设计(第三版)[M].清华大学出版社,2005 [13] 沈德金.MCS-51系列单片机接口电路与应用程序实例[M].北京航空航天大学出 版社,1990.4 [14] 赖麒文.8051单片机C语言彻底应用[M].科学出版社,2002 [15] 余永权.单片机在控制系统中的应用[M].电子工业出版社,2003 [16] 张艳丽,杨仁弟.数字温湿度传感器SHT11及其应用[J].工矿自动化,2007.6第 3期 [17] 赵健,吴顺伟.基于单片机的温湿度测量系统的研究与设计[M].电子技术 [18] go-gddq网站 [19] A.J.van der WAL.Application of fuzzy logic contro in industry.Fuzzy Sets andSystems[J].1995,74:33_41 [20] Dallas Semiconductor Data Book.Dallas Semiconductor Corp[M].2000 [21] ATMEL:8-bit Mircrocontroller with 8k Bites in-system programmable Flash ST89C52[M].200

    相关热词搜索:温湿度 单片机 测量 基于单片机温湿度测量系统的研究与设计 基于单片机的温湿度测量系统设计 基于单片机温湿度检测

    • 范文大全
    • 说说大全
    • 学习资料
    • 语录
    • 生肖
    • 解梦
    • 十二星座

    推荐访问

    单片机 单片机c51交通灯课程设计 单片机c语言面试题 单片机信号发生器程序 单片机原理及实验 单片机原理及应用实验指导书 单片机原理及应用试题答案 单片机原理试题 单片机和c语言的关系 单片机和plc的区别 单片机实训 单片机实训心得体会 单片机实训总结800字 单片机实训目的 单片机实验一实验报告 单片机实验总结1000字 单片机实验报告点亮第一个led灯 单片机报警器设计 单片机控制led灯论文 单片机控制交通灯论文 单片机控制电梯系统的设计 单片机数字时钟设计 单片机毕业论文设计 单片机毕业设计论文 单片机毕设题目 单片机温控风扇 单片机温湿度传感器 单片机点阵显示控制 单片机电子时钟设计程序 单片机电风扇设计 单片机直流电机调速系统的设计毕业论文 单片机简易信号发生器设计 单片机课程设计报告 单片机课程设计报告基于单片机的温控系统 单片机课程设计报告模板 单片机课程设计的设计方法 单片机音乐播放器课程设计 单片机题库及答案 基于单片机三层电梯系统设计 基于单片机温室大棚温湿度采集系统设计 基于单片机温湿度检测 基于单片机温湿度测量系统的研究与设计 基于单片机火灾报警系统 基于单片机电梯控制系统设计 基于单片机的乒乓球游戏系统的设计 基于单片机的信号发生器设计 基于单片机的倒车防撞系统 基于单片机的北斗定位系统 基于单片机的数字温度计设计课程设计 基于单片机的数控恒流源设计 基于单片机的时钟设计