基于AT89C51的自动喷水系统毕业设计.docx_第1页
基于AT89C51的自动喷水系统毕业设计.docx_第2页
基于AT89C51的自动喷水系统毕业设计.docx_第3页
基于AT89C51的自动喷水系统毕业设计.docx_第4页
基于AT89C51的自动喷水系统毕业设计.docx_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

摘要本次设计的自动喷水系统包括土壤温湿度的采集与显示,计数器的设置与显示,独立按键以及喷水报警等四大部分。土壤温湿度的采集和显示以AM2301作为温湿传感器来采集温湿度,将采集到的土壤温湿度值送入AT89S52单片机,再由其传输到LED数码管进行显示。自动喷水系统设计为智能和手动两个部分:智能喷水部分是通过独立按键来设定比较值并输入到单片机与传感器送入单片机的土壤湿度值相比较,比如:当湿度低于下限值时,单片机将会输出一个信号控制喷水,同时,当温度高于上限值时,单片机也会输出一个信号控制喷水;手动部分也是由独立按键来设定喷水时间。关键词AT89S52 温湿度的采集与显示 定时器 LED AM2301引言21世纪水资源正在变成一种宝贵的稀缺资源,水资源问题已不仅仅是资源问题,更成为关系到国家经济、社会可持续发展和长治久安的重大战略问题。基于此种情况采用节水、节能的智能灌溉方法已成为全世界灌溉技术发展的趋势,推广使用智能化节水灌溉也已成为世界各国为缓解水资源危机和实现农业现代化的必然选择。于是,为了解决以上问题,我设计并初步实现了一套简单的智能化自动喷水系统。该系统可对土壤的温湿度进行监控,并对其进行适时适量的胶水。其核心是单片机控制模块,温湿度采集及显示模块。用户可以通过数码管显示浏览采集到实时的温湿度信息。自动喷水系统的初步设计所谓的自动喷水系统即利用温湿度传感器采集或监测土壤信息、田间信息和作物生长信息等。并将监测数据传到CPU,经过CPU相应程序的分析决策,对终端发出相应的指令,从而实现自动喷水的功能。起初,将系统划分为四个部分:温湿度传感器模块;显示模块;控制模块;单片机处理模块。控制模块有独立按键组成,设为4个按键,第一个为电源按键,其次为模式切换按键,然后分别为+,-功能键。显示模块选用6个动态数码管。温湿度传感器模块选用DS18B20和AM1001。单片机处理模块采用单片机AT89S51及其他相关硬件。由于,传感器部分作为相对独立的部分,同时考虑到硬件问题,我先初步的将定时模块程序规划好。定时模块需要采用单片机的定时器,来实现时分秒的递减显示,当时间归零时,报警器响。设计程序时,还要注意时分秒进位时,相关的细节操作。另外,独立按键的扫描,要求控制和设定时间,起初考虑用中断的方式来控制实现其功能。其次,考虑传感器部分,参考DS18B20温度采集与显示设计,注意传感器的初始化,写操作,读操作等,设计相应的程序。显示模块采用动态数码管显示,编程时注意ClK信号的设置,以及相应的延时子程序,段码表和位选等都要设定妥当。最后,将温度传感器得到的实时温度与用户设定值进行比较,通过if语句输出相应的信号来控制报警器和电磁阀的工作。在控制技术方面,有诸如开环、闭环反馈控制,模糊控制,自适应控制,神经网络控制等现代控制技术。模糊控制技术当前应用最广泛,一般用于有上、下位机的单片机控制系统。本系统采用传统的闭环控制技术,系统控制原理逻辑框图实现如下:土壤温湿度AT89S51处理数据电磁阀开关数据显示定时模式以上是通过网上查找资料等方式,定制的最初的功能实现方案。自动喷水系统功能设计进阶 现实生活中很多植物温度、湿度要保持在一个既定的值上,超出或者低于这个预定值将对植物的生长产生影响。该系统要求用单片机测控来 植物生长环境因子信息数据的实时采集、处理,而后输出控制执行机构,以实现环境湿度、温度的测控,达到节水节能,省时省工的效果。具体功能如下:1、 实现按需灌溉功能。按照植物的需求开启和关闭灌溉系统,实现一般的控制。具有结构简单,成本低,操作方便。2、 通过传感器检测植物生长的环境温度、土壤湿度;依据设定的植物要求的温度、湿度的上下限值,由单片机来控制开关电磁阀,从而调节温湿度。3、 室内环境中土壤湿度是重要因子,要求当土壤含水量过低而不能满足植物最低需求时,就打开电磁阀进行喷水,当湿度满足要求时关闭电磁阀。主要器件的选择一、 单片机的选择:电子技术飞速发展,使得计算机不断更新换代。其中单片机更是一枝独秀,广泛应用于各个领域,使其自动化程度大提高。单片机具有体积小,价格低廉,功能强大等优点。候选单片机AT89S51和AT89S52.下面是两单片机的比较:AT89S51功能特性a. 兼容MCS-51指令系统 b. 32个双向I/O口 c. 2个16位可编程定时/计数器 d. 全双工UART串行中断口线 e. 2个外部中断源 f. 中断唤醒省电模式g. 看门狗(WDT)电路h. 灵活的ISP字节和分页编程i. 4k可反复擦写(1000次)ISP Flash ROM j. 4.5-5.5V工作电压 k. 时钟频率0-33MHz l. 128x8bit内部RAMm. 低功耗空闲和省电模式 n. 3级加密位 o. 软件设置空闲和省电功能 p. 双数据寄存器指针AT89S52 功能特性a. 兼容MCS51指令系统b. 8k可反复擦写(大于1000次)Flash ROMc. 32个双向I/O口d. 256x8bit内部RAMe. 3个16位可编程定时/计数器中断f. 时钟频率0-24MHzg. 2个串行中断,可编程UART串行通道h. 2个外部中断源,共8个中断源i. 2个读写中断口线,3级加密位j. 低功耗空闲和掉电模式,软件设置睡眠和唤醒功能k. 有PDIP、PQFP、TQFP及PLCC等几种封装形式,以适应不同产品的需求。起初,我选择的是51单片机,但在编程设计中,为了更好地实现具体功能,我发现实现过程中需要用到三个定时器,并且综合考虑,52单片机能发挥出更强大的能效,同时我们手上正在使用的也是52单片机,因此相对熟悉。二、 传感器的选择对于传感器的选择,起初我是选用两个传感器,温度采集使用DS18B20,而湿度采用AM1001。但是,在网上查找资料的过程中发现市场上拥有已将温湿度采集集成在同一片传感器上的AM2301,同时,它是以效准数字信号输出的复合传感器,省去了模数转换的麻烦,节省了硬件资源。综合考虑,我选用了AM2301温湿度传感器。三、 显示器的选择 显示器可采用LED数码管和LCD显示屏,将二者进行比较,LED结构简单,它实际上是由七个发光二极管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的“8”数码管字样了。它的原理简单,容易理解和操作,对于一些简单的显示系统是非常理想的器件。LCD虽然功能强大,但是操作复杂,并且LED在本系统中就足以发挥作用,加上成本低廉,所以在本次设计中选用LED显示数据。主要模块分析一、 主输入输出控制电路自动控制系统通过AM2301传感器对受控对象的有关参数信息数据的实时采集及数字变化,进入单片机CPU进行必要的处理,而后输出以驱动执行器件或机构产生相应的动作,直接推动被控对象来调整被测参量,最终目的以使受控参量始终处于要求值或范围内。系统中我们选择主控制器芯片的时候需要考虑整个系统的功耗要低,并且有非易失性的程序和数据存储器方便数据的掉电存储,要集成内部基准电压源并采用at89s51单片机。AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,AT89S52在众多嵌入式控制应用系统中得到广泛应用。主机和传感器之间可通过三个步骤完成数据读取步骤一 : AM2301 上电后(AM2301 上电后要等待2S 以越过不稳定状态,在此期间读取设备不能发送任何指令),测试环境温湿度数据,并记录数据,此后传感器自动转入休眠状态。AM2301 的SDA 数据线由上拉电阻拉高一直保持高电平,此时 AM2301 的 SDA 引脚处于输入状态,时刻检测外部信号。步骤二: 微处理器的I/O 设置为输出,同时输出低电平,且低电平保持时间不能小于800us ,典型值是拉低1MS,然后微处理器的I/O 设置为输入状态,释放总线,由于上拉电阻,微处理器的I/O 即AM2301的SDA 数据线也随之变高,等主机释放总线后,AM2301 发送响应信号,即输出80 微秒的低电平作为应答信号,紧接着输出80 微秒的高电平通知外设准备接收数据。步骤三: AM2301 发送完响应后,随后由数据总线SDA 连续串行输出40 位数据,微处理器根据I/O 电平 的变化接收40 位数据。 位数据“0”的格式为: 50 微秒的低电平加26-28 微秒的高电平; 位数据“1”的格式为: 50 微秒的低电平加70 微秒的高电平。二、 电磁阀控制电路电磁阀控制电路主要由NPN共集-共射复合管及继电器组成,当单片机P0.7给出高电平,复合管导通,继电器接通,将开关吸合,电磁阀接通开始放水。因为单片机的带负载能力比较小,不足以驱动继电器和电磁阀,所以采用功率放大驱动电路,使得电磁阀能够工作。同时可以减少电磁阀对主电路的干扰作用。电磁阀单片机驱动电路继电器电磁阀控制电路原理图如图所示:三、 报警电路设计报警电路设计作为一个独立的模块,采用市面上比较普遍的蜂鸣器电路,结构比较简单,使用AT89S52上的一根口线驱动蜂鸣器发声。蜂鸣器原理图如图所示:四、 显示模块电路显示模块可采用两种方式,一种是采用动态显示方式驱动6个数码管工作,左边四位显示温湿度值,精确到小数点后一位,右边两位为温湿度的单位显示。其中通过S4键切换温湿度,数码管通过位段扫描实现显示功能。键盘模块原理图如下:五、 定时模块定时模块其中分为定时部分和调时部分,同样通过S1和S2键来控制时间的减和加,S3键来确定定时和切换设置时间。温湿度程序代 六、 温湿度采集模块首先是对AM2301的介绍。AM2301 湿敏电容数字温湿度模块是一款含有己校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电容式感湿元件和一个高精度测温元件,并与一个高性能8 位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在单片机中,传感器内部在检测信号的处理过程中要调用这 些校准系数。标准单总线接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20 米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选择。产品为3 引线(单总线接口)连接方便。特殊封装形式可根据用户需求而提供。AM2301引脚图及其分配引脚颜色名称描述1红色VDD电源(3.5-5.5v)2黄色SDA串行数据,双向3黑色GND地4NC空脚AM2301 的数据总线SDA 输出40 位数据后,继续输出低电平50 微秒后转为输入状态,由于上拉电阻随之变为高电平。同时AM2301 内部重测环境温湿度数据,并记录数据,测试记录结束,单片机自动进入休眠状态。单片机只有收到主机的起始信号后,才重新唤醒传感器,进入工作状态。AM2301 传感器读单总线的流程图如图所示: AM2301传感器读单总线的流程图 温湿度采集原理图如下图所示 七、 硬件抗干扰设计在自动浇灌控制系统中,系统可靠性的保证是非常重要的,单片机硬件系统的可靠性决定了整个系统的可靠性。硬件抗干扰技术主要体现在过程通道抗干扰设计、供电系统抗干扰设计和印刷电路板抗干扰设计三个方面。单片机硬件系统的抗干扰能力与元器件质量、装配质量等因素都有关系,但主要取决于设计的可制造性(DEM),本系统采取如下相应的抗干扰措施。1.采用抗干扰稳压电源采用具有抗干扰能力的稳压电源,绝大部分干扰都可以克服。提高稳压电源抗干扰能力,通常采用的措施:采用电源滤波;通过低通滤波器接入电网。 2.采用良好的接地系统。3.强电与弱电之间采用继电器隔离。总结由于水平、时间与试验条件有限,系统设计还不完善,程序不够简洁,功能没有完整。设计中系统关键部分电磁阀由于没有购买,用蜂鸣器代替,定时器模块不够完善,对定时器的定义有一定的误解,尚未找到比较好的解决办法。今后还应进行更多的学习和研究,例如自动控制部分,我并没有考虑外部扰动信号等更多地干扰因素,今后要完善产品的结构与设计,使其更具有实用性。设计中遇到的问题和解决方法举例:1、 起初用3个按键来控制整个程序的切换和设定,经过反复试验,无法达到预期的效果;最后经过假设和参考,在原来按键“切换功能加减”的设定上加上了“设定”按键,意在通过该按键可以实现修改上下限值,设定计时时间等功能。2、 在程序实现过程中,发现数码管数据有闪烁的现象,经过老师的提醒加上自己通过构思得到的方法,我采用了一个定时器,将温湿度扫描程序放在定时器中断里面,通过定时器的方式,避免程序的反复循环而导致数码管显示的延迟而造成闪烁的缺陷。设计中,还有其他许多的问题,由于不是关键部分不予赘述。在这次实习过程中,始终浸透着老师的心血和汗水,让我从中学到了许多重要的东西,为自己将来的工作和就业,提供了良好的借鉴和帮助,在此,向老师致以最诚挚的敬意和最美好的祝愿!附:原理图:实物图:程序:#include #include /typedef unsigned char U8; typedef unsigned int U16; #define uchar unsigned char#define uint unsigned intsbit beep=P32;sbit s0=P33;sbit s1=P34;sbit s2=P35;sbit s3=P36;sbit HR=P37 ;sbit clk=P27;U8 U8FLAG,q,w,e;U8 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 data tab6,tabs6;U8 U8comdata;U8 outdata6; /定义发送的字节数U8 count;U8 str6; U16 U16temp1,U16temp2;uchar shi,fen,miao,nam,dkey,num,key;uchar code wei=0x01,0x02,0x04,0x08,0x10,0x20;/八位位选码表uchar code duan=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/数码管显示编码(1-F)void SendData(U8 *a)outdata0 = a0; outdata1 = a1; outdata2 = a2; outdata3 = a3; outdata4 = a4; outdata5 = a5; count = 1; SBUF=outdata0;void delay1(U16 t)U16 i,j; for(i=t;i0;i-) for(j=25;j0;j-) ;void delay2(U8 z)uint i,j; for(i=z;i0;i-) for(j=110;j0;j-);void Delay(U16 j)U8 i; for(;j0;j-) for(i=0;i27;i+); void Delay_10us(void)U8 i; i-; i-; i-; i-; i-; i-;void COM(void)U8 i; for(i=0;i8;i+) U8FLAG=2; while(!HR)&U8FLAG+); Delay_10us(); Delay_10us(); Delay_10us(); U8temp=0; if(HR)U8temp=1; U8FLAG=2; while(HR)&U8FLAG+);/超时则跳出for循环 if(U8FLAG=1)break;/判断数据位是0还是1/ 如果高电平高过预定0高电平值则数据位为 1 U8comdata=1; U8comdata|=U8temp; /0 /rofvoid RH(void)/主机拉低18ms HR=0; Delay(180); HR=1;/总线由上拉电阻拉高 主机延时20us Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us();/主机设为输入 判断从机响应信号 HR=1;/判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!HR) /T ! U8FLAG=2;/判断从机是否发出 80us 的低电平响应信号是否结束 while(!HR)&U8FLAG+); U8FLAG=2;/判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 while(HR)&U8FLAG+);/数据接收状态 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; HR=1;/数据校验 U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp=U8checkdata_temp) U8RH_data_H=U8RH_data_H_temp; U8RH_data_L=U8RH_data_L_temp; U16temp1 =U8RH_data_H; U16temp1 = 8; U16temp1 |= U8RH_data_L;/获得完整的湿度 tab0=U16temp1/100; /湿度百位 tab1=U16temp1%100/10;/湿度十位 tab2=U16temp1%10; /湿度个位 U8T_data_H=U8T_data_H_temp; U8T_data_L=U8T_data_L_temp; U16temp2 = U8T_data_H; U16temp2=8; U16temp2 |= U8T_data_L;/获得完整的温度 tab3=U16temp2/100;/温度百位 tab4=U16temp2%100/10;/温度十位 tab5=U16temp2%10;/温度个位 U8checkdata=U8checkdata_temp;/校验位 void time_display(int a,int b,int c) uchar s,g; s=a/10; g=a%10; clk=0; P2=wei5; P0=duans; clk=1; delay2(1); clk=0; P2=0; clk=1; delay2(1); clk=0; P2=wei4; P0=duang|0x80; clk=1; delay2(1); clk=0; P2=0; clk=1; delay2(1); s=b/10; g=b%10; clk=0; P2=wei3; P0=duans; clk=1; delay2(1); clk=0; P2=0; clk=1; delay2(1); clk=0; P2=wei2; P0=duang|0x80; clk=1; delay2(1); clk=0; P2=0; clk=1; delay2(1); s=c/10; g=c%10; clk=0; P2=wei1; P0=duans; clk=1; delay2(1); clk=0; P2=0; clk=1; delay2(1); clk=0; P2=wei0; P0=duang; clk=1; delay2(1); clk=0; P2=0; clk=1; delay2(1);void time1_display()uchar s,g; s=shi/10; g=shi%10; clk=0; P2=wei5; P0=duans; clk=1; delay2(1); clk=0; P2=0; clk=1; delay2(1); clk=0; P2=wei4; P0=duang|0x80; clk=1; delay2(1); clk=0; P2=0; clk=1; delay2(1); s=fen/10; g=fen%10; clk=0; P2=wei3; P0=duans; clk=1; delay2(1); clk=0; P2=0; clk=1; delay2(1); clk=0; P2=wei2; P0=duang|0x80; clk=1; delay2(1); clk=0; P2=0; clk=1; delay2(1); s=miao/10; g=miao%10; clk=0; P2=wei1; P0=duans; clk=1; delay2(1); clk=0; P2=0; clk=1; delay2(1); clk=0; P2=wei0; P0=duang; clk=1; delay2(1); clk=0; P2=0; clk=1; delay2(1);void RH_display()uchar s,g,h; s=tab0; g=tab1; h=tab2; clk=0; P2=wei5; P0=duan0|0x80; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5); clk=0; P2=wei4; P0=duans; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5); clk=0; P2=wei3; P0=duang; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5); clk=0; P2=wei2; P0=duanh; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5); clk=0; P2=wei1; P0=0x77; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5); clk=0; P2=wei0; P0=0x76; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5);void RHS_display()uchar s,g,h; s=tabs0; g=tabs1; h=tabs2; clk=0; P2=wei5; P0=duan0|0x80; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5); clk=0; P2=wei4; P0=duans; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5); clk=0; P2=wei3; P0=duang; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5); clk=0; P2=wei2; P0=duanh; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5); clk=0; P2=wei1; P0=0x77; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5); clk=0; P2=wei0; P0=0x76; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5);void temp_display()uchar s,g,h; s=tab3; g=tab4; h=tab5; clk=0; P2=wei5; P0=duan0; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5); clk=0; P2=wei4; P0=duans; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5); clk=0; P2=wei3; P0=duang|0x80; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5); clk=0; P2=wei2; P0=duanh; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5); clk=0; P2=wei1; P0=0x39; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5); clk=0; P2=wei0; P0=0x3f; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5);void tempS_display()uchar s,g,h; s=tabs3; g=tabs4; h=tabs5; clk=0; P2=wei5; P0=duan0; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5); clk=0; P2=wei4; P0=duans; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5); clk=0; P2=wei3; P0=duang|0x80; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5); clk=0; P2=wei2; P0=duanh; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5); clk=0; P2=wei1; P0=0x39; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5); clk=0; P2=wei0; P0=0x3f; clk=1; delay1(5); clk=0; P2=0; clk=1; delay1(5);void keyscan()if(s0=1) delay2(50); if(s0=1) dkey+; if(dkey=3) dkey=0; delay2(2000); if(s1=1) delay1(5); if(s1=1) key+; if(key=2) key=0; while(s1); if(s2=1) delay1(5); if(s2=1) num=1; while(s2) ; if(s3=1) delay1(5); if(s3=1) num=2; while(s3); if(dkey=0) switch(key) case 0:TR1=1; TR0=0; RH_display();if(tab0*100+tab1*10+tab2)(tabs3*100+tabs4*10+tabs5) beep=1; Delay(20); break; case 1:beep=0; TR1=0; tempS_display(); if(num=1) num=0; +tabs5; if (tabs5=10) tabs5=0; +tabs4; if(tabs4=10) tabs4=0; +tabs3; tempS_display(); if(

温馨提示

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

评论

0/150

提交评论