仓库温度湿度监测系统的设计_第1页
仓库温度湿度监测系统的设计_第2页
仓库温度湿度监测系统的设计_第3页
仓库温度湿度监测系统的设计_第4页
仓库温度湿度监测系统的设计_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

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

文档简介

⑺适宜于制造流水线上的自动插件和自动装配过程。湿度传感器HS1101/HS1100基于独特工艺设计的电容元件,这些相对湿度传感器可以大批量生产。可以应用于办公自动化,车厢内空气质量控制,家电,工业控制系统等。在需要湿度补偿的场合他也可以得到很大的应用。HS1100/HS1101的外部结构及符号如图3.10所示:图3.10HS1101的外形图HS1101的特性参数见表3.9。表3.9HS1101的特性参数特性参数典型值单位湿度测量范围1~99%RH供电电压5V标称电容@55%RH180Pf温度系数0.04Pf/℃33-75%的平均灵敏度0.34Pf/%RH漏电流1Na150小时结露后恢复时间10S湿度迟滞±1.5%长时间稳定性0.5%RH/yr响应时间5S偏离曲线±2%RH工作温度-40~100℃储存温度-40~125℃图3.11为湿敏电容工作的温、湿度范围,图3.12为湿度-电容响应曲线。图3.11湿敏电容工作的温、湿度范围图3.12湿度—电容响应曲线相对湿度在0%~100%RH范围内;电容量由162PF变到200PF,其误差不大于±2%RH;响应时间小于5S;温度系数为0.04PF/℃,可见精度是较高的。3.2.2湿度测量电路HS1100/HS1101电容传感器,在电路构成中等效于一个电容器件,其电容量随着所测空气湿度的增大而增大。如何将电容的变化量准确地转变为计算机易于接受的信号,常用两种方法:一是将该湿敏电容置于运放与阻容组成的桥式振荡电路中,所产生的正弦波电压信号经整流、直流放大、再A/D转换为数字信号;另一种是将该湿敏电容置于555振荡电路中,将电容值的变化转为与之呈反比的电压频率信号,可直接被计算机所采集。我采用第二种方法。频率输出的555测量振荡电路如图3.13所示。集成定时器555芯片外接电阻R4、R2与湿敏电容C(这里的HS11××指HS1101),构成了对C的充电回路。7端通过芯片内部的晶体管对地短路又构成了对C的放电回路,并将引脚2、6端相连引入到片内比较器,便成为一个典型的多谐振荡器,即方波发生器。另外,R3是防止输出短路的保护电阻,R1用于平衡温度系数。由于Fout端的电压在0~5V之间,因此可以直接将与89C51的T1口连接。T1口作为计数器,它计得的数值是与环境相对湿度成反比的16进制的频率(相对湿度与频率的对应关系见表3.10。图3.13555测量振荡电路该振荡电路两个暂稳态的交替过程如下:首先电源Vs通过R4、R2向HS1101充电,经充电时间后,Uc达到芯片内比较器的高触发电平,约0.67Vs,此时输出引脚3端由高电平突降为低电平,然后通过R2放电,经t放电时间后,Uc下降到比较器的低触发电平,约0.33Vs,此时输出引脚3端又由低电平跃升为高电平。如此翻来覆去,形成方波输出。其中,充放电时间为:t充电=C(R4+R2)ln2t放电=CR2ln2因而,输出的方波频率为:f=1/(t充电+t放电)=1/[C(R4+2R2)ln2]]可见,空气湿度通过555测量振荡电路就转变为与之呈反比的频率信号,表3.10给出了其中的一组典型测试值。表3.10输出频率与相对湿度的对应关系湿度频率湿度频率(%RH)(HZ)(%RH)(HZ)0735160660010722470642820710080633030697690618640685310060335067283.2.3湿度传感器的标定湿度传感器的感湿特征量与环境气相湿度之间并不存在固有的定量关系,感湿特征量的测量值也不可能直接表征环境气相湿度的确切数值。因此,湿度传感器必须经过定量标定,方可使用。目前,相对湿度的标定有干湿球法、饱和盐溶液法、双压法、双温法等,我采用静态标定的饱和盐溶液法。此方法可提供工作标准湿度,在0℃以上对湿度传感器进行定量标定。为此,可把封闭容器中饱和盐溶液的平衡蒸汽压作为标准湿度,该湿度的高低,是由饱和盐溶液的种类和平衡温度所决定的,见表3.11。这种方法在量程为100%RH时,空气湿度传感器的示值误差小于±5%,分辩率为0.1%。但有几点需要注意:(1)水和盐的纯度要在分析纯以上,水必须用去离子水或蒸馏水。(2)盛饱和溶液的容器必须透明而且不漏气,使饱和蒸汽不与外部交换。(3)容器能加热和搅拌,有利于很快制成饱和溶液的蒸汽环境。表3.11通常使用的5种饱和盐溶液平衡相对湿度温度HFP/%℃LiCLMgCL2Mg(NO3)NaCLK2SO4151233.3±0.355.6±0.375.6±0.297.9±0.7201233.1±0.254.4±0.375.5±0.297.6±0.62511.3±0.332.8±0.252.9±0.375.3±0.297.3±0.53011.3±0.332.4±0.251.4±0.375.1±0.297.0±0.43511.3±0.332.1±0.249.9±0.374.9±0.296.7±0.43.3CPU单元的设计3.3.1单片机AT89S52介绍单片机是整个系统的核心,在此装置中选择8位微处理器AT89C51,AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。1.主要特性·AT89C51与MCS-51系列的单片机在指令系统和引脚上完全兼容·片内有4K字节在线可重复编程快擦写程序存储器·全静态工作,工作范围:0Hz~24MHz·三级程序存储器加密·128×8位内部RAM·32位双向输入输出线·两个16位定时器/计数器·五个中断源,两级中断优先级·一个全双工的异步串行口·间歇和掉电工作方式·可编程串行通道·片内整荡器和时钟电路2.功能描述AT89C51是一种低损耗、高性能、CMOS八位微处理器,片内有4K字节的在线可重复编程快擦快写程度存储器,能重复写入/擦除解1000次,数据保存时间为十年。它与MCA-51系列单片机在指令系统和引脚上完全兼容,不仅可完全代替MCS-51系列单片机,而且能使系统具有许多MCS-51系列产品没有的功能。AT89C51可构成真正的单片机最小应用系统,缩小系统体积,增加系统的可靠性,降低了系统成本。只要程序长度小于4K,四个I/O口全部提供给用户。可用5V电压编程,而且擦写时间仅需10毫秒,仅为8751/87C51的擦除时间的百分之一,与8751/87C51的12V电压擦写相比,不易损坏器件,没有两种电源的要求,改写时不拔下芯片,适合许多嵌入式控制领域。工作电压范围宽2.7V~6V,全静态工作,工作频率宽,在0Hz~24MHz内,比8751/87C51等51系列的6MHz~12MHz更具有灵活性,系统能快能慢。AT89C51芯片提供三级程序存储器加密,提供了方便灵活而可靠的硬加密手段,能完全保证程序或系统不被仿制。另外,AT89C51还具有MCS-51系列单片机的所有优点。128×8位内部RAM,32位双向输入输出线,两个十六位定时/计时器,5个中断源,两级中断优先级,一个全双工异步串行口及时钟发生器等。3.管脚功能AT89C51单片机为40引脚芯片,如下图3.14所示。图3.14AT89C51引脚图VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”P3口也可作为AT89C51的一些特殊功能口,如下表3.12所示。表3.12P3口的第二功能第一功能标记第二功能P3.0RXD串行输入口P3.1TXD串行输出口P3.2INT0外部中断0输入P3.3INT1外部中断1输入P3.4T0定时/计数器0外部输入P3.5T1定时/计数器1外部输入P3.6WD外部数据存储器写选通P3.7RD外部数据存储器读选通RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。3.振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。4.芯片擦除:整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。

此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系本设计的CPU单元电路图如图3.15所示。图3.15CPU单元电路图3.3.2时钟信号设计时钟引脚为XTAL1、XTAL2。时钟引脚外接晶体与片内的反向放大器构成了一个振荡器,它提供单片机的时钟控制信号。时钟引脚也可外接晶体振荡器。XTAL1(19脚):接外部晶体的一个引脚。在单片机内部,它是一个反向放大器的输入端。这个放大器构成了片内振荡器。当采用外接晶体振荡器时,此引脚应接地。XTAL2(18脚):接外部晶体的另一端,在单片机内部接至内部反向放大器的输出端。若采用外部振荡器时,该引脚接收振荡器的信号,即把此信号直接接到内部时钟发生器的输入端。本系统采用晶振时钟电路。外部晶振以及电容C2和C3构成并联谐振电路,接在放大器的反馈回路中。对外接电容的值虽然没有严格要求,但电容的大小多少会影响振荡器频率的高低,振荡器的稳定性,起振的快速性和稳定性。外接晶振时,C1和C2通常选择30pf,晶振采用12MHz。时钟电路如下图3.16所示。图3.16时钟电路图3.3.3本系统采用的复位电路如图3.17所示。3.17复位电路图本复位电路必须确保系统上电时能够自动复位。上电自动复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为了可靠起见电源稳定后,还要经一定的延时才撤销复位信号以防电源开关或电源插头分-合过程中引起的抖动而影响复位。为了实现这种功能,本设计采用了一种RC定时电路。其时间常数τ=RC,系统上电时,C两端的电压为零,单片机的复位端的电平为高电平,单片机复位,经过4—5个τ后,C两端的电压约等于电源电压,单片机的复位端的电平为低电平,单片机退出复位状态。3.4显示电路的设计本系统利用LCD液晶显示屏显示温度、湿度参数。液晶显示屏的第一行显示用户可能需要调节的温湿度上下限值,第二行显示当前测得的温度、湿度值。3.4.1液晶显示简介①液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。②液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(SimpleMatrix)和主动矩阵驱动(ActiveMatrix)三种。③液晶显示器各种图形的显示原理:线段的显示点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。字符的显示用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。汉字的显示汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5……右边为2、4、6……根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节……直到32B显示完就可以LCD上得到一个完整汉字。3.4.21602字符型LCD简介字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法。1.1602LCD的基本参数及引脚功能1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图3.18所示:图3.181602LCD尺寸图1602LCD主要技术参数:显示容量:16×2个字符芯片工作电压:4.5—5.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.95×4.35(W×H)mm引脚功能说明1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表3.13所示:表3.13引脚接口说明表编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。2.1602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如表3.14所示:表3.14控制命令表序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L**6置功能00001DLNF**7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时双行显示F:低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。与HD44780相兼容的芯片时序如下表3.15:表3.15基本操作时序表读状态输入RS=L,R/W=H,E=H输出D0—D7=状态字写指令输入RS=L,R/W=L,D0—D7=指令码,E=高脉冲输出无读数据输入RS=H,R/W=H,E=H输出D0—D7=数据写数据输入RS=H,R/W=L,D0—D7=数据,E=高脉冲输出无读写操作时序如图3.19和3.20所示:图3.19读操作时序图3.20写操作时序3.1602LCD的RAM地址映射及标准字库表液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图3.21是1602的内部显示地址。图3.211602LCD内部显示地址例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图3.22所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”图3.22字符代码与图形对应图4.1602LCD的一般初始化(复位)过程延时15mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设置LCD液晶显示单元电路图如图3.23所示。图3.23液晶显示单元电路图3.5按键电路的设计本设计采用6个独立按键完成对温、湿度上下限的设定。设计7个按键以完成该功能。7个按键的功能如下:按键1:进入温度上下限设定;按键2:进入湿度上下限设定;按键3:进入上限设定;按键4:进入下限设定;按键5:温度或湿度的上限或下限值加1;按键6:温度或湿度的上限或下限值减1;按键7:退出温、湿度上下限设定。按键电路图如图3.24所示。图3.24按键电路图3.5报警单元的设计在监测系统中,对于重要的参数一般都设有紧急状态报警系统,以便提醒操作人员注意,或采取紧急措施。其方法就是把计算机采集的数据或记过计算机进行数据处理、数字滤波,标度变换之后,与该参数上下限设定值进行比较,如果高于上限值(或低于下限值)则进行报警,否则就作为采样的正常值,进行显示。本设计采用峰鸣音报警电路。峰鸣音报警接口电路的设计只需购买市售的压电式蜂鸣器,然后通过单片机的1根口线经驱动器驱动蜂鸣音发声。压电式蜂鸣器约需10mA的驱动电流,可以使用TTL系列集成电路7406或7407低电平驱动,也可以用一个晶体三极管驱动。在图中,P3.2接晶体管基极输入端。当P3.2输出高电平“1”时,晶体管导通,压电蜂鸣器两端获得约+5V电压而鸣叫;当P3.2输出低电平“0”时,三极管截止,蜂鸣器停止发声。图3.25是运用三极管驱动的峰鸣音报警电路。图3.25三极管驱动的峰鸣音报警电路4软件设计主程序由温度采集子程序、湿度采集子程序、键盘输入和显示子程序和报警子程序组成。本章将列出主程序清单,并详细说明温度、湿度采集子程序。4.1主程序设计系统主程序流程图如图4.1所示。返回返回初始化调用温度采集子程序调用湿度采集子程序显示采集的温湿度数据开始参数设定是否设定键是否按下图4.1主程序流程图4.2子程序设计4.2.1温度传感器子程序设计1.DS18B20温度采集子程序流程图如图4.2所示。图4.2DS18B20温度子程序设计流程图2温度显示子程序流程图如图4.3所示。检测DS18B20存在?NY读取温度数据发送DS18B20编码DS18B20复位I=1,等待温度转换发送跳过ROM指令读DS18B20的序列号初始化DS18B20开始检测DS18B20存在?NY读取温度数据发送DS18B20编码DS18B20复位I=1,等待温度转换发送跳过ROM指令读DS18B20的序列号初始化DS18B20开始图4.3温度显示程序流程图3温度报警子程序流程图如图4.4所示。开始开始总线复位总线复位跳过跳过ROM所有所有ds18b20开始温度转换延时1秒延时1秒设置匹配设置匹配ROM发送发送ROM编号开始温度转换开始温度转换是否是否超限制温度?Y所有读取完毕?所有读取完毕?显示温度报警显示温度报警NY图4.4温度报警流程图4.2.2湿度传感器子程序设计初始化设置定时常数在62.5ms内T0产生中断吗?共产生了20次中断吗?将T1计的数放入50H和51H初始化设置定时常数在62.5ms内T0产生中断吗?共产生了20次中断吗?将T1计的数放入50H和51H将其转化成10进制放入5CH和5DH返回重设定时时间常数关中断YESYESNONO开始图4.5湿度采集子程序4.2.3按键子程序设计根据课题要求,用户可以自行设定温、湿度上下限。由此,设计7个按键以完成该功能。7个按键的功能如下:按键1:进入温度上下限设定;按键2:进入湿度上下限设定;按键3:进入上限设定;按键4:进入下限设定;按键5:温度或湿度的上限或下限值加1;按键6:温度或湿度的上限或下限值减1;按键7:退出温、湿度上下限设定。通过按键设定温、湿度上下限的按键流程图如图4.6所示。图4.6按键设定温、湿度上下限流程图4.2.4报警子程序设计报警子程序流程图如图4.7所示。图4.7报警子程序流程图4.2.5显示子程序设计显示子程序流程图如图4.8所示。图4.8显示子程序流程图5调试结果与总结本文完成了温度传感器的选择、湿度传感器的设计、数据采集的硬件电路设计和软件编程。此部分与键盘显示部分和报警电路共同构成了整个系统。经过整个系统的研究与设计,最终采用单总线数字式温度传感器DS18B20进行温度采集,采用湿敏电容HS1101对湿度参数进行采集。LCD液晶显示屏对于当前的温度值和湿度值进行实时的显示,可以方便用户直观的了解所测得的温度、湿度环境参数值。用户可使用按键根据自身要求设定温湿度上下限,同时,报警装置可依据用户的设定针对温湿度超限情况进行报警。同时介绍了用单片机AT89C51控制DS18B20和HS1101,着重分析各单元电路的设计,以及各电路与单片机的接口技术。最后还给出系统的软件的设计过程,并进行程序设计。本文是采用模块化的方式进行叙述,对各模块的设计进行了比较详细地阐述。经过反复调试,温湿度能够正常显示当前值,而且最佳适宜温度值可以有操作人员根据不同作物的需求进行设定,在当前温度偏离所设定的适宜温度±3℃时,报警装置蜂鸣器即会启动,该系统基本实现了对温湿度的测量与显示,操作人员可以根该系统的不足之处在于没能够实现温湿度的自动调节,由于时间仓促和本人知识有限,在设计原理图时,没考虑清楚显示位数,以至该系统无法显示设定湿度,该系统可以进一步加入温湿度自动调节电路,在当前温湿度超出作物所需的最适宜条件时,启动温湿度调节装置,就可以真正的实现温湿度的自动控制。为了验证本系统的准确性,条件有限以至于湿度测量无法验证其准确性,在调试时只对环境温度做了十次测量,时间间隔为一个小时,并与温度计所测量的温度值做了比较。记录如表5.1所示:表5-1温度测量比较表测量次数测量值(℃)温度计显示值(℃)相对误差(℃)127.027.20.2226.526.40.1326.826.90.1425.525.80.3526.927.00.1625.225.00.2725.826.20.4827.026.70.3926.526.40.11025.225.00.2引起误差的原因,一方面可能是由于受到其他电路的干扰,另一方面可能就是读数估读造成的误差。仓库温、湿度监测系统的设计工作已经完成了。该系统是针对仓库管理设计的,但是从温湿度传感器的数据采集范围以及用户可设定的上、下限来看,它还可以应用到其它诸如图书馆、楼宇温湿度控制、电教中心温湿度控制等方面,因此用途是比较广泛的。致谢经过这段时间的忙碌和工作,本次毕业设计终于完成了,作为一个本科生的毕业设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,以及同学们的支持和帮助,想要完成这个设计是难以想象的。在此之际,我思绪万千,心情久久不能平静。回顾四年学习期间的一千余个日日夜夜,自己为课题的研究,静心钻研,潜心研究,并取得初步研究成果而感到欣慰。在这里首先要感谢我的导师徐老师。徐老师平日里工作繁多,但在我做毕业设计的每个阶段,从开题报告到毕设论文,从设计草案的确定和修改,中期检查,后期详细设计,装配草图等整个过程中都给予了我悉心的指导。徐老师对每一次批改都严格把关,指出了文章中出现的问题,多次修改之后我的论文达到了规定标准。在徐老师的帮助下,我的课题的设计任务得以顺利完成。徐老师严谨的治学态度和踏实的工作作风给我留下了深刻的印象,是我学习的榜样。在此,向徐老师致以最诚挚的谢意。同时还要感谢教育和指导过我的所有老师,你们给予我的不仅仅是知识,还有你们对知识孜孜不倦的追求精神和对生活的积极向上态度,使我终身受益。我将在以后的工作中继续努力,不断学习,努力提高自己。路漫漫其修远兮,吾将上下而求索。我愿在未来的学习和研究过程中,以更加丰厚的成果来答谢曾经关心、帮助和支持过我的所有领导、老师、同学、同事和朋友,一并表同时感谢我的母校兰州理工大学技术工程学院,它是一片培育桃李、播撒知识的芬芳的热土。学校雄厚的师资力量使我学到了丰富的知识;学校严格的基础培训使我掌握了基本的技能;学校淳厚的学风使我意识到知识可以改变命运。在这个大家庭里我学到了许多专业方面的知识和技能,在多样化的实验室里我实际动手操作了许多实验,亲手完成了许多实习项目,这使得我的动手能力有了显著提高,于此同时我对专业知识的掌握更加牢固与灵活。感谢电信学院所有的老师,谢谢你们对我的辛勤培育!最后,再次向他们表示我最诚挚的谢意,我将以最大的热情投入到工作中,以报答所以帮助我过的老师和同学。参考文献[1]张永瑞.电子测量技术基础[M].西安:西安电子科技大学出版社.2004.12[2]宋壮兴.我国气调库建设中的若干问题[J].辽宁:辽宁科学技术出版社.2001,5[3]张毅刚.新编MCS-51单片机应用设计[M].哈尔滨:哈尔滨工业大学出版.2003.7[4]杨文龙.单片机原理及应用[M].西安:西安电子科技大学出版社.2006.6[5]付家才.单片机控制工程实践技术[M].北京:化学工业出版社.2004.3[6]胡红生.石秀东,徐亚栋.气调保鲜自动控制系统的研究[J].2004.6[7]徐玮等.C51单片机高效入门[M].北京:机械工业出版社.2006年10月.[8]潭浩强.语言设计(第二版)[M].北京:清华大学出版社.1999.[9]何立民主编.单片机应用技术选编(第五册)[M].北京:北京航空航天大学出版社.2000[10]何立民.单片机应用技术选编[M].北京:北京航空航天大学出版社.2004.[11]李华.MCS51系列单片机实用接口技术[M].北京:北京航空航天大学出版社.1993.[12]徐亦朱.DS18B20中文手册.美国DALLAS半导体公司.1992.[13]郭强.液晶显示应用技术[M].北京:电子工业出版社.2000.[14]杨建等.湿度测量体制历史和现状分析及建议[J].白城:中国白城兵器试验中心,2009.6.[15]胡红生,石秀东,徐亚栋,气调保鲜自动控制系统的研究[J].2004.6[16]赵丽娟.基于单片机的温度监测系统的设计与实现.北京:机械制造出版社.2006.[17]吕泉.现代传感器原理及应用[M].北京:清华大学出版社.2006.附录程序清单/***************************************************/#include<reg51.h>#include<intrins.h>sbitrs=P2^0;sbitrw=P2^1;sbitep=P2^2;unsignedcharcodedis1[]={""};unsignedcharcodedis2[]={""};voiddelay(unsignedcharms){unsignedchari;while(ms--){for(i=0;i<250;i++){_nop_();_nop_();_nop_();_nop_();}}}bitlcd_bz(){bitresult;rs=0;rw=1;ep=1;_nop_();_nop_();_nop_();_nop_();result=(bit)(P0&0x80);ep=0;returnresult;}voidlcd_wcmd(unsignedcharcmd){while(lcd_bz());//判断LCD是否忙碌rs=0;rw=0;ep=0;_nop_();_nop_();P0=cmd;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;}voidlcd_pos(unsignedcharpos){lcd_wcmd(pos|0x80);}voidlcd_wdat(unsignedchardat){while(lcd_bz());//判断LCD是否忙碌rs=1;rw=0;ep=0;P0=dat;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;}voidlcd_init(){lcd_wcmd(0x38);delay(1);lcd_wcmd(0x0c);delay(1);lcd_wcmd(0x06);delay(1);lcd_wcmd(0x01);delay(1);}voidmain(void){unsignedchari;lcd_init();//初始化LCDdelay(10);lcd_pos(0x01);//设置显示位置i=0;while(dis1[i]!='\0'){lcd_wdat(dis1[i]);//显示字符i++;}lcd_pos(0x42);//设置显示位置i=0;while(dis2[i]!='\0'){lcd_wdat(dis2[i]);//显示字符i++;}//**************温度小数部分用查表法***********//ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//ucharcodedis_7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uchardatatemp_data[2]={0x00,0x00};//读出温度暂放uchardatadisplay[4]={0x00,0x00,0x00,0x00};//显示单元数据,共3个数据和一个运算暂用/*****************11us延时函数*************************/voiddel10ms(){uinta,b;for(a=40;a!=0;a--)for(b=248;b!=0;b--);}voiddelay(uintt){for(;t>0;t--);}/*******************************************************/voidtimer0()interrupt1{ TH0=0x3C; TL0=0xB0;//定时50ms num++;//记到20就直接停止}/*******************************************************/voidscankey(){if(key1==0){del10ms();if(key1==0){TH++;}}if(key2==0){del10ms();if(key2==0){TH--;}}T=display[2]*10+display[1];if((TH-3)<T<(TH+3)){LED1=0;LED2=1;BEEP=1;}if((T<TH-3)||(T>TH+3))}/****************显示扫描函数***************************/scan(){S=TH/10;G=TH%10;S8=1;S7=1;S6=1;S5=0;S4=1;S3=1;S2=1;S1=1;Disdata=dis_7[display[2]];delay(200);Disdata=0x00;S8=1;S7=1;S6=0;S5=1;S4=1;S3=1;S2=1;S1=1;Disdata=dis_7[display[1]];DIN=1;delay(200);Disdata=0x00;S8=1;S7=0;S6=1;S5=1;S4=1;S3=1;S2=1;S1=1;Disdata=dis_7[display[0]];delay(200);Disdata=0x00;S8=0;S7=1;S6=1;S5=1;S4=1;S3=1;S2=1;S1=1;Disdata=dis_7[S];delay(200);Disdata=0x00;S8=1;S7=1;S6=1;S5=1;S4=1;S3=1;S2=1;S1=0;Disdata=dis_7[G];delay(200);Disdata=0x00;S8=1;S7=1;S6=1;S5=1;S4=1;S3=1;S2=0;S1=1;Disdata=dis_7[B1];delay(200);Disdata=0x00;S8=1;S7=1;S6=1;S5=1;S4=1;S3=0;S2=1;S1=1;Disdata=dis_7[B2];DIN=1;delay(200);Disdata=0x00;S8=1;S7=1;S6=1;S5=1;S4=0;S3=1;S2=1;S1=1;Disdata=dis_7[B3];delay(200);Disdata=0x00;}/****************DS18B20复位函数************************/ow_reset(void){charpresence=1;while(presence){while(presence){DQ=1;_nop_();_nop_();//从高拉倒低DQ=0;delay(50);//550usDQ=1;delay(6);//66uspresence=DQ;//presence=0复位成功,继续下一步}delay(45);//延时500uspresence=~DQ;}DQ=1;//拉高电平}/****************DS18B20写命令函数************************///向1-WIRE总线上写1个字节voidwrite_byte(ucharval){uchari;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();//从高拉倒低DQ=0;_nop_();_nop_();_nop_();_nop_();//5usDQ=val&0x01;//最低位移出delay(6);//66usval=val/2;//右移1位}DQ=1;delay(1);}/****************DS18B20读1字节函数************************///从总线上取1个字节ucharread_byte(void){uchari;ucharvalue=0;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();value>>=1;DQ=0;_nop_();_nop_();_nop_();_nop_();//4usDQ=1;_nop_();_nop_();_nop_();_nop_();//4usif(DQ)value|=0x80;delay(6);//66us}DQ=1;return(value);}/****************读出温度函数************************///read_temp(){ow_reset();//总线复位delay(200);write_byte(0xcc);//发命令write_byte(0x4e);write_byte(TH);//发命令write_byte(RS);delay(200);ow_reset();write_byte(0xcc);//发命令write_byte(0x44);delay(200);ow_reset();write_byte(0xcc);//发命令write_byte(0xbe);temp_data[0]=read_byte();//读温度值的第字节temp_data[1]=read_byte();//读温度值的高字节temp=temp_data[1];temp<<=8;temp=temp|temp_data[0];//两字节合成一个整型变量。returntemp;//返回温度值}///****************温度数据处理函数************************///二进制高字节的低半字节和低字节的高半字节组成一字节,这个//字节的二进制转换为十进制后,就是温度值的百、十、个位值,而剩//下的低字节的低半字节转化成十进制后,就是温度值的小数部分/********************************************************/work_temp(uinttem){if(tem>6348)//温度值正负判断{tem=65536-tem;}//负温度求补码,标志位置1display[3]=tem&0x0f;//取小数部分的值 display[0]=ditab[display[3]];//存入小数部分显示值display[3]=tem>>4;//取中间八位,即整数部分的值display[2]=display[3]%100/10;//取十位数据暂存display[1]=display[3]%100%10;}/**********************湿度采集函数****************************/#include"reg51.h"#defineucharunsignedchar#defineuintunsignedintuchartem0,tem1;

uchartemp0,temp1;

uint

f=0;

//初值/****************************************************************/*名称:timer0()*功能:定时器1,每50000us中断一次。*入口参数:******************************************************************/voidtimer0()interrupt1{EA=0;TR0=0;

TR1=0;TL0=0xFF;

//重装值

定时50000usOX4BFFHTH0=0x4B;

tem0=TL1;//读数tem1=TH1;TL1=0x00;

//定时器1清零TH1=0x00;f=1;

//作标注位TR0=1;TR1=1;EA=1;}/*****************************************************************************名称:timer1()*功能:计数器,用于计数将555输出的频率,以计数相对湿度。*入口参数:****************************************************************************/voidtimer1()interrupt3

//T1中断,表示计数的频率溢出,超出了可测量的频率范围,显然在这里不可能。所以重新启动。{EA=0;TR0=0;

TR1=0;TL0=0x00;

//重装值

定时50000usTH0=0x4C;

TL1=0x00;

//定时器1清零TH1=0x00;

TR0=1;

TR1=1;EA=1;}voidInit_timer(){TMOD=0x51;

//01010001定时器0在模式1下工作16位定时器,定时方式定时器1在模式1下工作16位计数器,T1负跳变加1TL0=0x00;

//定时器0初值定时50000usTH0=0x4C;

TL1=0x00;

//定时器1清零TH1=0x00;ET0=1;

//使能定时器0中断ET1=1;

//使能定时器1中断EA=1;

//使能总中断TR0=1;

//开始计时TR1=1;}voidtran(){f=tem1;f=(f<<8)|tem0;

f=f*20;

//这里f的值是最终读到的频率,不同频率对于不同相对湿度。

if((5623<=f)&&(f<=6852))//相对湿度在有效范围内(0%--100%)

{if((6734<f)&&(f<=6852))

{temp0=0;temp1=(6852-f)*10/118;}if((6618<f)&&(f<=6734)){temp0=1;temp1=(6734-f)*10/116;}if((6503<f)&&(f<=6618)){temp0=2;temp1=(6618-f)*10/115;}if((6388<f)&&(f<=6503)){temp0=3;temp1=(6503-f)*10/115;}if((6271<f)&&(f<=6388)){temp0=4;temp1=(6388-f)*10/117;}if((6152<f)&&(f<=6271)){temp0=5;temp1=(6271-f)*10/119;}

if((6029<f)&&(f<=6152)){temp0=6;temp1=(6152-f)*10/123;}

if((5901<f)&&(f<=6029)){temp0=7;temp1=(6029-f)*10/128;}

if((5766<f)&&(f<=5901)){temp0=8;temp1=(5901-f)*10/135;}

if((5623<f)&&(f<=5766)){temp0=9;temp1=(5766-f)*10/143;}}else{

temp0=0;temp1=0;}}

voidmain(){uchari,k;ucharcount;Init_timer();count=0;while(1){

for(i=0;i<200;i++)

for(k=0;k<200;k++);

//延时

tran();

temp0&=0x0F;

temp1&=0x0F;

temp0=temp0<<4;

count=temp0|temp1;

Ddisp(count);/****************主函数************************/main(){Disdata=0x00;//初始化端口TH=24;BEEP=1;LED1=1;LED2=1;TMOD=0x51;//T0记时T1计数TH0=0x3c;//定时50msTL0=0xB0;TH1=0x00;//计数TL1=0x00;TR0=1;//开T0TR1=1;//开T1ET0=1;//开中断EA=1;//打开总中断ow_reset();//开机先转换一次write_byte(0xcc);//SkipROMwrite_byte(0x44);//发转换命令while(1){if(num>=60){//记满一秒number=TH1*256+TL1;number=25000/(number-500);B1=number%1000/100;//百位B2=number%100/10;//十位B3=number%100%10;//个位num=0;TMOD=0x51;//T0记时T1计数TH0=0x3c;//定时50msTL0=0xB0;TH1=0x00;//计数TL1=0x00;TR0=1;//开T0TR1=1;//开T1ET0=1;//开中断EA=1;//打开总中断}work_temp(read_temp());//处理温度数据scankey();scan();//显示温度值}}////***********************结束**************************//外文资料DescriptionTheAT89C51isalow-power,high-performanceCMOS8-bitmicrocomputerwith4KbytesofFlashProgrammableandErasableReadOnlyMemory(PEROM)and128bytesRAM.ThedeviceismanufacturedusingAtmel’shighdensitynonvolatilememorytechnologyandiscompatiblewiththeindustrystandardMCS-51™instructionsetandpinout.Thechipcombinesaversatile8-bitCPUwithFlashonamonolithicchip,theAtmelAT89C51isapowerfulmicrocomputerwhichprovidesahighlyflexibleandcosteffectivesolutiontomanyembeddedcontrolapplications.Features:•CompatiblewithMCS-51™Products•4KBytesofIn-SystemReprogrammableFlashMemory•Endurance:1,000Write/EraseCycles•FullyStaticOperation:0Hzto24MHz•Three-LevelProgramMemoryLock•128x8-BitInternalRAM•32ProgrammableI/OLines•Two16-BitTimer/Counters•SixInterruptSources•ProgrammableSerialChannel•LowPowerIdleandPowerDownModesTheAT89C51providesthefollowingstandardfeatures:4KbytesofFlash,128bytesofRAM,32I/Olines,two16-bittimer/counters,afivevectortwo-levelinterruptarchitecture,afullduplexserialport,on-chiposcillatorandclockcircuitry.Inaddition,theAT89C51isdesignedwithstaticlogicforoperationdowntozerofrequencyandsupportstwosoftwareselectablepowersavingmodes.TheIdleModestopstheCPUwhileallowingtheRAM,timer/counters,serialportandinterruptsystemtocontinuefunctioning.ThePowerDownModesavestheRAMcontentsbutfreezestheoscillatordisablingallotherchipfunctionsuntilthenexthardwarereset.BlockDiagramPinDescription:VCCSupplyvoltage.GNDGround.Port0Port0isan8-bitopendrainbidirectionalI/Oport.AsanoutputporteachpincansinkeightTTLinputs.Whenisarewrittentoport0pins,thepinscanbeusedashighimpedanceinputs.Port0mayalsobeconfiguredtobethemultiplexedloworderaddress/databusduringaccessestoexternalprogramanddatamemory.InthismodeP0hasinternalpullups.Port0alsoreceivesthecodebytesduringFlashprogramming,andoutputsthecodebytesduringprogramverification.Externalpullupsarerequiredduringprogramverification.Port1Port1isan8-bitbidirectionalI/Oportwithinternalpullups.ThePort1outputbufferscansink/sourcefourTTLinputs.When1sarewrittentoPort1pinstheyarepulledhighbytheinternalpullupsandcanbeusedasinputs.Asinputs,Port1pinsthatareexternallybeingpulledlowwillsourcecurrent(IIL)becauseoftheinternalpullups.Port1alsoreceivesthelow-orderaddressbytesduringFlashprogrammingandverification.Port2Port2isan8-bitbidirectionalI/Oportwithinternalpullups.ThePort2outputbufferscansink/sourcefourTTLinputs.When1sarewrittentoPort2pinstheyarepulledhighbytheinternalpullupsandcanbeusedasinputs.Asinputs,Port2pinsthatareexternallybeingpulledlowwillsourcecurrent(IIL)becauseoftheinternalpullups.Port2emitsthehigh-orderaddressbyteduringfetchesfromexternalprogrammemoryandduringaccessestoexternaldatamemorythatuse16-bitaddresses(MOVX@DPTR).Inthisapplicationitusesstronginternalpull-upswhenemitting1s.Duringaccessestoexternaldatamemorythatuse8-bitaddresses(MOVX@RI),Port2emitsthecontentsoftheP2SpecialFunctionRegister.Port2alsoreceivesthehigh-orderaddressbitsandsomecontrolsignalsduringFlashprogrammingandverification.Port3Port3isan8-bitbidirectionalI/Oportwithinternalpullups.ThePort3outputbufferscansink/sourcefourTTLinputs.When1sarewrittentoPort3pinstheyarepulledhighbytheinternalpullupsandcanbeusedasinputs.Asinputs,Port3pinsthatareexternallybeingpulledlowwillsourcecurrent(IIL)becauseofthepullups.Port3alsoservesthefunctionsofvariousspecialfeaturesoftheAT89C51aslistedbelow:PortpinalternatefunctionsP3.0rxd(serialinputport)P3.1txd(serialoutputport)P3.2^int0(externalinterrupt0)P3.3^int1(externalinterrupt1)P3.4t0(timer0externalinput)P3.5t1(timer1externalinput)P3.6^WR(externaldatamemorywritestrobe)P3.7^rd(externaldatamemoryreadstrobe)Port3alsoreceivessomecontrolsignalsforFlashprogrammingandverification.RSTResetinput.Ahighonthispinfortwomachinecycleswhiletheoscillatorisrunningresetsthedevice.ALE/PROGAddressLatchEnableoutputpulseforlatchingthelowbyteoftheaddressduringaccessestoexternalmemory.Thispinisalsotheprogrampulseinput(PROG)duringFlashprogramming.InnormaloperationALEisemittedataconstantrateof1/6theoscillatorfrequency,andmaybeusedforexternaltimingorclockingpurposes.Note,however,thatoneALEpulseisskippedduringeachaccesstoexternalDataMemory.Ifdesired,ALEoperationcanbedisabledby

温馨提示

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

评论

0/150

提交评论