蔬菜大棚温度控制系统_第1页
蔬菜大棚温度控制系统_第2页
蔬菜大棚温度控制系统_第3页
蔬菜大棚温度控制系统_第4页
蔬菜大棚温度控制系统_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

目录TOC\o"1-4"\u一、引言 二、控制系统的总体设计 (一)控制系统具体功能该系统的设计使用温度传感器收集环境温度数据。它可以通过控制继电器的关闭开启进而控制风扇,加热器和其他外部设备实时控制的温室的温度。提供最佳的温度环境,蔬菜作物的生长能大大提高蔬菜作物的产量和品质,以满足日益增长的蔬菜作物的需要。本温控系统的开发设计有以下功能1.根据不同的作物,不同区域和不同季节的实际需要,不同的温度控制范围可以调节。2.实时采集,并在温室环境温度参数的显示。3.根据用户需求自动调整在一定范围内在温室的温度参数。该系统可以通过控制外部设备调整在温室到设定温度范围内的温度。4.温度超过设定上限报警。当温室内的环境温度超过允许范围时,该系统设备可以发出警报,并且可以导出一个报警信号。用户可以根据自己的情况连接各种报警装置。 (二)控制系统整体结构 本设计温度控制系统由硬件电路模块和单片机软件模块组成。本温度控制系统由电源、单片机、传感器、键盘输入、晶体管显示、报警、复位、继电器控制、晶振共八个部分组成硬件电路模块,系统框图如图2.1所示。图2.1(三)硬件设备的选择1.控制芯片的选择选择一:选用STC89C51单片机作为主控模块芯片。STC89C51具有8k在线编程一种非易失性(Non-Volatile)内存,是一款低功耗、高性能的八位ComplementaryMetalOxideSemiconductor微型处理器。STC89C51单片机的芯片内核使用的是英特尔公司MCS-51系列内核,使其指令完全兼容英特尔公司生产的MCS-51系列单片机,该单片机具有很多英特尔公司MCS-51系列单片机不具备的功能。该单片机还集成了4K的带电可擦可编程只读存储器,可以通过下载软件直接把程序导入单片机只读程序存储器,在系统无法保持不掉电运行时就不需要在外接存储器芯片进行存储。STC89C51单片机在大学的课程中接触和使用较多并且具有的开发简单、可在线编程下载、成本低等优点,如其余方案没有太大的优点优先选择此主控芯片。选择二:采用PIC16F877A单片机作为主控芯片。该单片机具一种电流关掉后所存储的数据不会消失的存储器,属于PIC系统8位单片机微机,可反复擦写程序。是由美国微芯科技公司所生产开发的新产品。但是PIC16F877A单片机相对STC89C51单片机开发成本高,难度较大。选择三:采用MSP430单片机作为主控芯片。将多个不同功能的微处理器、数字电路逻辑系统和模拟电路系统集成成系统封装成单个电气元件这就是MSP430单片机,该系列单片微控制器是全球最大的数字信号处理与模拟技术半导体供应商之一的德州仪器公司一九九六年开始推向市场的一种十六位超低功耗、具有采用多级指令流水线结构的混合信号处理器。该系列单片微控制器多应用于特殊环境下无法接入市电便携式仪器仪表中。MSP430相对51单片机价格昂贵、开发难度较大。所以在本次设计中不宜采用。考虑到资源的利用,节约成本和降低开发的难易程度,最后综合各方案的优缺点,最终选择使用具有英特尔公司MCS-51系列内核的STC89C51单片机作为主控芯片。 2.温度传感器的选择温度数据和人们生活密切相关,大多数人不能直接感知天气或湿度的变化只能间接感知,但温度从每天的开始就在时刻感知它的变化,影响人民生活的方方面面。在蔬菜大棚种植过程中,温度更是一个影响蔬菜生长发育的关键性数据。在各种传感器中,温度传感器是应用最广泛的一种。市面上有多种多样的温度传感器和各种不同的测量方法,温度传感器综合方案有以下几种:选择一:使用热敏电阻作为传感器众所周知温度的变化会造成电阻的变化,顾名思义热敏电阻是对温度敏感的电阻,正常电阻会极力的减小温度对阻值的影响,但热敏电阻却反其道而行,利用热敏电阻阻值随温度变化而显著变化的特性,采集这两个电阻变化的分压值,并进行模拟信号转数字信号转换。此设计方案需用模拟信号转数字信号电路,增加硬件成本。热敏电阻的阻值和温度变化曲线特殊转换函数复杂,而且模拟信号在传输过程中会失真经过数模转换后的数值会产生不小测量误差。选择二:使用模拟温度传感器AD590模拟温度传感器AD590需要设计复杂的模拟电路使电流变化转换成电压的变化,然后通过模拟信号转换数字信号电路转换后接到单片机中,因为该元件输出电流会随温度的变化而变化。这种方法焊接电路,而且费不低,还容易在线路传输、电流电压转换、模拟信号转换这些地方产生误差。选择三:采用数字式温度传感器DS18B20该传感器为数字式传感器可以使用单独的数据线和单片机进行串口通讯导入环境温度数据,电路上与单片机连接单线连接,不需要模拟信号转换数字信号电路,成本低廉,可以显著的简化系统电路,只需要在软件上多加注意串口通讯程序的细节。数字式温度传感器还具有测量精度高、体积小封装多样化等优点。综合各方案的优缺点选用DS18B20作为温度采集芯片。 3.显示器件的选择选择一:采用LCD1602液晶显示屏。该显示元件不仅可以使用并行数据传输,在控制元件引脚不足时串行数据传输也可以使用,软件编程简单,只要掌握采用HD44780液晶的软件编程设计就可以熟练编写程序控制该液晶显示屏。液晶显示功能强大,可以同时显示出两行各十六个字符即三十二个字符,其中每一个字符都是由5·7的点阵组成,可包括数字、字母、符号、并且可以根据特殊需要自定义字符。选择二:采用LCD12864液晶显示屏。带中文字库该显示模块最具特色的功能,内置八千一百九十二个16*16点汉字库,和一百二十八个分辨率16*8点ASCII字符库。利用LCD12864液晶显示屏各类接口方式和指令简单,操作方便,它可以形成一个完整的中文计算机交互式图形界面。可以显示两行共三十二个分辨率十六乘十六点阵的汉字。不仅低电压低功耗,还可以通过程序的编译进而实现图形显示。LCD12864液晶显示屏各类功能强大,但所显示内容过大,导致在显示空间的浪费,并且该液晶的成本高昂。选择三:采用LED数码管动态扫描显示。该显示如果采用静态扫描法与单片微控制器连接时占用单片微控制器的引脚口较多,当需求超过一定数量会时造成引脚不够,并且在较多的元件连接时单片机的引脚输出功率不足,需要额外设计一个三极管放大电路通过该驱动电路放大电流后控制该显示元件,会增大额外的焊接风险,还有就是采用数码管进行显示的话,由于数码管引脚较多,显示的内容多了后会增加元件的使用数量和成本,并且对于电路进行焊接容易造成虚焊概率增加,焊接错误概率增大。但是LED数码管的价格便宜,不仅仅可以显示数字,还可以进行简单的字母的显示,最主要的是熟悉该元件的焊接和编程设计。因为在大学的课程中接触和使用较多,如其余方案没有太大的优点优先选择此元件。结合本次设计中的实际情况发现设计中的只需要数字和简单字母,因此择数码管进行显示最具有实际意义。(四)系统工作原理温度传感器DS18B20的作用是采集蔬菜大棚内的环境温度,并进行转换为数字信号通过串口通讯导入单片机内部。数字信号通过过单线接口送入数字温度传感器元件或从数字温度传感器元件送出,该测温元件传感器和数字转换电路都集成封装在一起使其成为单个电器元件,每个数字温度传感器生产封装时都已给定了独一无二的六十四位序列号,并且该数字温度传感器只有一个数字信号输入输出口,因此,单片机只需一条信号导线就能与数字温度传感器进行通信,这样就节省了数模转换需要的电子元器件和大量导线。实时温度数据通过串口通讯以单线数字方式传输,使得温控系统极大的减小了信号失真发生的概率,适合于大部分环境和地区的温度测量。因为该温度计使用单个信号导线利用串口通讯形式传输环境温度数据,故不需要模拟信号转换数字信号转换器。系统主要技术指标如下表所示温度控制范围0℃~50℃温度测量精度±0.5℃显示分辨率0.1℃工作电压3v~5.5v三、温度控制系统电路设计(一)控制模块电路1.单片机芯片的内部逻辑一个芯片的微型计算机的内部结构可以被划分为四个部分:处理器CPU,存储器,并行输入和输出接口,定时和切断系统,如图3.1所示。图3.12.单片机引脚功能STC89C51引脚如图2.2所示图3.2电源引脚2个外接晶体引脚2个并行I/O引脚32(4个8位口)控制引脚4个3.单片机最小系统单片机最小系统也可以从字面上进行理解就是用最少的电子元器件和电路使其运行的系统。单片机不比得普通的数字电路逻辑芯片,它通电后并不能直接使用还需要而外的两个外部模块来实现单片机的正常运行。晶振电路单片机有两个独特的引脚分别是XTAL1和XTAL2,它们可以配置内部振荡电路或者由外部时钟驱动,因为它们是输入和输出反相放大器。图2.3中采用的是内内部振荡电路,在两个引脚上外接特定频率的石英晶体和两个特定大小的电容就可以生成自激振荡。石英晶体频率可以在一点二到十二兆赫兹范围内选择,在本设计中用的十二兆赫兹的石英晶振。电容可以在二十到四十皮法范围内选择通常选取三十皮法瓷电容就可以了。图3.3(2)复位电路·上电复位芯片通电后,使用R和C充电自动完成重新上电。当使用频率为六兆赫兹晶体振荡器,复位在图2.4所示电路。图3.4·上电复位兼手动复位不仅可以使用上述方式完成芯片复位,而且还使用该按钮来控制芯片复位,从而给与单芯片微计算机的复位引脚超过两个芯片机器周期的高电平来完成手动复位功能。复位电路如图2.5所示。图3.5完整的STC89C51单片机最小系统电路图如图2.6所示。图3.6(二)控制模块输入电路1.DS18B20温度传感器设计(1)温度传感器DS18B20概述该数字温度传感器相比传统的热敏电阻测温极大的简化了电路方便实际运用中的铺设,并且可根据实际要求通过单片机软件编程改变R1和R0来设置传感器分辨率用户以实际需要可以设置九到十二位分辨率设置(下表为各分辨率温度最大转换时间表2.6)。表3.7R1R0分辨率温度最大转换时间009位93.75ms0110位187.5ms1011位375ms1112位750ms(2)DS18B20的性能特点只需要单个引脚来传输环境温度数据与单片机双向通讯;多个该温度传感器可以连接到单片机单个通信引脚上,进而实现多点测控;不需要模拟信号转换数字信号转换器等外部器件;对电源属性要求不到,电压大于三伏小于五点五伏;待机功耗极低,静态电流小于三微安;温度以九到十二位二进制数字表示;在软件中可以定义报警设置;具有负压特性电源反接不容易烧坏;测量最低为负五十五摄氏度最高为一百二十五摄氏度;在负十摄氏度到八十五摄氏度区间内误差为零点五摄氏度 (3)DS18B20引脚温度传感器DS18B20采用三引脚或八引脚小外形集成电路封装如图2.8所示。图3.8各引脚说明: GND接地I/O 输入输出 VDD 外部电源NC 空引脚 (4)DS18D20内部结构该传感器由六十四位只读存储器、非挥发的温度报警触发器TH和TL、温度传感器、配置寄存器着这几部分组成。该温度传感器内部结构如图2.9所示。只读存储器中的六十四位序列号在元件生产封装的过程中刻录到内部,由于只读存储器一旦数据就无法再将之改变,它和人的身份证号差不多每个人的身份证号码各不相同,每个温度传感器的六十四位序列号也不相同。只读存储器的作用是使所有的数字传感器都各不相同,这样就可以实现单个单片机引脚上并联多个该温度传感器的目的。图3.9 (5)温度传感器DS18B20基本原理根据该温度传感器的通讯协议,主控模块控制该传感器完成环境数据读取之前需要经过下列步骤:首先在任何一次获取测控数据之前将数据线电平变为低电平一定时间然后恢复使其复位,然后收到低频电流复位成功信号后发送一条ROM指令,最后发送RAM指令,在这之后才能对该传感器进行操作。复位要求主控模块将数据线高电平转换为低电平五百微秒然结束后恢复,当传感器收到控制模块的反馈后等待十六到七十微秒,后发出五十到二百四十微秒的低频电流,主控模块收到其发送的低频电流以后就可以知道复位成功。下面表2.10为ROM指令表,表2.11位RAM指令表。表3.10DS18B20ROM指令表指令约定代码功能读ROM33H读DS1820温度传感器ROM中的编码(即64位地址)符合ROM55H发出此命令之后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS1820使之作出响应,为下一步对该DS1820的读写作准备。搜索ROM0FOH用于确定挂接在同一总线上DS1820的个数和识别64位ROM地址。为操作各器件作好准备。跳过ROM0CCH忽略64位ROM地址,直接向DS1820发温度变换命令。适用于单片工作。告警搜索命令0ECH执行后只有温度超过设定值上限或下限的片子才做出响应。表3.11DS18B20RAM指令表指令约定代码功能温度变换44H启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。结果存入内部9字节RAM中。读暂存器0BEH读内部RAM中9字节的内容写暂存器4EH发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。复制暂存器48H将RAM中第3、4字节的内容复制到EEPROM中。重调EEPROM0B8H将EEPROM中内容恢复到RAM中的第2、3字节。读供电方式0B4H读DS1820的供电模式。寄生供电时DS1820发送“0”,外接电源供电DS1820发送“1”。DS18B20单总线控制时序图如图3.12所示。图3.12当传感器完成复位与主控模块成功通讯后接收到的温度转换指令后启动转换。操作完成后单片微控制器通过串行通讯可以读取此环境温度数据,环境数据值以补码的十六位二进制数据保存在Cache的第一第二字节,读取温度二进制数据时从低位到高位的顺序读取,数据格式以零点零六二五摄氏度每最低有效位形式表示。当符号位(二进制数值前五位)数值为零时,代表测得环境温度数值大于等于零直接通过进制转换函数将所得的温度数据通过进制转换函数转换为十进制;当符号位数值为一时,代表测得环境温度数值小于零需要先将补码通过补码转换将变成原码,接下来才能将二进制转换为十进制。表3.5是一部分温度值对应的温度数据代码。温度值二进制输出十六进制输出+125℃000001111101000007D0h+85℃00000101010100000550h+25.0625℃00000001100100010191h+10.125℃000000001010001000A2h+0.5℃00000000000010000008h0℃00000000000000000000h-0.5℃1111111111111000FFF8h-10.125℃1111111101011110FF5Eh-25.0625℃1111111001101111FF6Fh-55℃1111110010010000FC90h表3.13DS18B20输出的温度值图3.14在使用时候在数字温度传感器的VCC和I/O引脚之间接一个上拉电阻。具体的电路图如图3.14所示。 (6)DS18B20使用中的注意事项·由于DS18B20传感器对比起模拟电路传感器省略了很多硬件,相辅相成硬件的减少就需要相对复杂的软件。如果无法获得检测温度数据可能是单片机对进行温度传感器进行串口通信编程时没有严格的保证时序。·在相关资料中有提到过多个BS18B20温度传感器相连的设计,容易让人误以为DS18B20可以无限量连接,但当连接数量大于八个时就需要处理单片机总线驱动。本次设计只用单个温度传感器完美解决此问题。·在信号传送电缆长度大于一定程度时需要按照实际需求使用不同屏蔽等级的电缆。主要是由电缆达到一定长度后会在线上形成布电容使信号产生识别错误造成的。·在温度传感器测温的控制程序中,单片机向温度传感器进行串行通讯时,当信号发出后需要等待温度传感器的返回信号,一旦温度传感器或者传输线路损坏可能仅仅是虚焊,当单片微控制器与温度传感器进行通讯时,如果出现线路问题或者传感器损坏等原因造成没有返回信号的情况控制系统程序将进入死循环。这一点在进行硬件连接和软件设计时需要进行额外的设计减少这种情况的发生。2.外部控制电路的设计本设计中设置有按键电路,通过几个独立按键来实现所控制的环境温度参数范围的调节。按键通过一点连接单片机的输入输出端口一端连接电源地。由于单片机的输入输出端口在开路没有进行输出的情况下是默认高电平的,在按键没有按下则相当于输入输出端口处于开路状态。例如按下设置键后P1.0口会获得低电平,进而主控模块进行不间断的检测P1.0口的电平是否有被拉低,如果拉低可以确认设置键被按下。需要注意的是这种按键实际波形不是理想状态,由于按键的设计和手速问题在电平转换的边缘会出现抖动纹波的情况,进而需要在程序读取按键数据时加上一定时间的延时消抖。具体电路如图3.15所示。图3.15独立按键电路设置键、加值键、返回键功能:设置按键:首次按下后设置所控制环境温度上限值,数码管显示H+温度数据;第二次按下后设置温度下限值,数码管显示L+温度数据;第三次按下后退出设置显示环境温度。加值按键:按下一或两次设置键后每按一次对应上下限值加一键值按键:按下一或两次设置键后每按一次对应上下限值减一(三)输出控制控温设备电路1.蜂鸣器电路的设计本设计蜂鸣器采用五伏有源蜂鸣器,由于单片机输入输出端口功率小于蜂鸣器运行功率,导致只靠单片机的引脚无法使蜂鸣器正常工作,要使用三极管电路放大电流来驱动该元件。本处选用的是S8550三极管,它是一个PNP型的三极管。基极串联一个一千欧姆的电阻连接到单片微控制器输入输出端口时。控制模块引脚拉低导线电平时三极管基极接收后导通电路接通,蜂鸣器开始运行;当控制模块引脚拉高导线电平时三极管基极接收后截止电路断路,蜂鸣器停止运行。蜂鸣器电路如下3.16所示。图3.16蜂鸣器电路2.继电器驱动电路设计继电器是一个由电控制的元器件,通电时通过电生磁原理吸合触点继电器导通,经常使用在小电流控制大功率电器的电路中。简单的说,继电器就是一个通过输入的小电流来控制大电流的输出的一个“自动开关”。因此在电路中继电器起着自动调节电路、转换电路、保护电路等作用。当温度到达最低下限后,单片机控制继电器导通,启动热风机等外接升温设备提升大棚内环境温度。如果使用单片微控制器引脚控制继电器,因为输入输出端口输出电流在四到二十毫安之间,而继电器工作吸合电流大约在四十毫安,所以通过单片微控制器引脚的输出电流直接控制继电器不现实电路中要添加一个电流放大电路来间接控制。三极管的选择应该符合:功率PCM大于5V*继电器电流的两倍最大集电极电流(ICM)大于继电器吸合电流40mA的两倍以上耐压BV(CEO)大于继电器电压5V,可选10V以上直流放大倍数取100图3.17继电器驱动电路发现上文蜂鸣器所用三级管正好可以满足需求,为了方便采购和电路焊接选用同种元件很有必要。驱动电路图如图3.17所示。(四)系统硬件测试在焊接电路的时候不同人、和细胞之间,存在着很多的可变因素,各类原因加起来造成错误的概率不可能为零。系统硬件电路的测试就是为了找出发生的错误并且把错误改正。本次设计使用的微动开关具有四个引脚,由于开关是方形的各引脚不容易区分焊接同侧引脚极其容易犯错,为了规避焊接风险采用对角引脚进行焊接。将焊接好无法运行的实物电路板对照着电路设计图的线路逐个检查每一个元件是否安装焊接正确,逐条对照每一条导线是否连接。发现漏装元件导线和连接错误等情况需及时的重新对照PCB图确定漏焊时及时的补焊。对于方向焊接错误和虚焊这些情况采用数字万用表二极管档位,然后通过万用表导通鸣叫特性就可以用来检测电路的大部分错误。在需要检测的方向性元器件或焊点的两端用两根表笔检测,通过万用表的蜂鸣器提示就可以判断二极管或三级管等方向性元件的引脚接线否正确或者是否虚焊。将得到的信息和电路图进行对比,在结合实际检测的现象进而判断电路是否正确。四、系统软件部分设计(一)主函数主函数是一个完整的单片机程序或者C语言程序必须要包含该函数。将单片微控制器中需要用到的符号变量进行定义声明,比如程序语句sbitled=P2^6就是对P2.6进行定义声明在接下来的编写中就可以直接使用led不需要再进行定义。在主程序的设计中需要注意的是主函数中除了基础的逻辑代码外,其余延时、数据读取等代码一般都是采用函数进行模块化设计然后在主函数需要用到此数值时调用,这样可以更清晰的了解主函数逻辑和减少了后续调试程序的工作量。具体流程图4.1如下所示。图4.1主函数流程图(二)数码管显示函数的设计此系统使用S8550三极管驱动的显示模块采用共阳数码管动态显示。在数码管控制程序采用动态显示的方式,该显示方式指的是通过程序控制在短时间内切换控制不同的数码管,每个数码管显示不同的的信息。这样利用人眼的无法察觉在24hz以上的刷新频率看起来就是全部一起显示出来的一样。数码管显示的频率不能过高也不能过低,过低容易使频率低于人眼识别下限,使用着能明显感觉到闪烁影响观察和调节,过高会低于数码管最短反应时间造成无法准确显示或者亮度过低。如果不使用动态显示使用一个个数码管单独显示的话,只单个数码管就要占用八位端口造成单片机引脚极大浪费。显示函数流程图如4.2所示。(三)DS18B20温度采集函数的设计首先在主函数前先对DS18B20进行初始化,初始化是为了设置传感器的寄存器让温度传感器DS18B20输出的二进制数据精度为12位。初始化完成后才可以运用单片机串行通讯对DS18B20进行操作读取温度。通电后先对温度传感器DS18B20进行复位如果在单片机通讯串口上只有一个温度传感器没有连接多个DS18B20的话可以跳过读传感器的六十四位系列号直接启动温度转换,由于本次设计中只运用了单个DS18B20传感器接下来只需要再进行一次复位再次跳过传感器六十四位系列号的匹配,单片机通过串行通讯发送读取温度指令,然后通过串行通讯读取温度寄存器。读取完后将得到的二进制数据进行转换成实际温度数值即可。具体流程图如图4.3所示。图4.3(四)系统单片机程序调试调试所需的工具:KEIL软件、单片机硬件、单片机程序下载器等。单片机控制程序KEIL软件进行编写,KEIL软件可以将将编写好的程序生成HEX文件。通过程序下载器将单片微控制器程序设计软件软件生成的后缀为.HEX文件下载到芯片中。使用热水和冰水或者其他的方法改变温度确认系统在温度达到上下限时功能能否实现,然后进行对出现的问题进行调试,最终得到一个完整的系统程序。五、结论本论文通过对当前温室环境现状分析,根据大棚内作物生长的需要,以STC89C51单片机单片机作为控制核心,以DS18B20数字温度传感器作为测温元件,实现了对温室环境因素中最重要的因素温度的自动控制。用户可以根据实际需要,及时修改环境控制参数,最终实现控制蔬菜大棚温度的目的。用户可以采集棚内测控点的环境参数值,及时了解温室内环境情况。在以往的学习中没有接触过DS18B20,只能通过查阅芯片资料去学习使用它。在前几次编写温控驱动程序时读取出来的温度数值总是出现问题,于是只能网上看别人是怎么处理的最终发现是传感器在开机后一段时间内会输出一个固定数值造成显示错误,最后使用一条语句进行规避。本蔬菜大棚温度控制虽然可以控制大棚内的环境温度给作物提供了一个舒适的环境生长,但由于条件的限制不能实现对温室内多因子的控制,许多方面还需要改进。

参考文献石海锋丁书亚马梦彤.基于51单片机水温控制系统[J].电子世界,2018(15):1-1.

[2]何晓晖梁贵萍何裕源.基于单片机的供暖系统的设计与分析[J].贵阳学院学报(自然科学版),2013(02):33-36.

[3]杨茜李书领.基于SPCE061A单片机的红外测温仪设计[J].河南科技,2014(09):164-165.

[4]王慧.基于AT89S51的蔬菜大棚温控系统设计[J].农业科技与装备,2011(08):31-33.

[5]张发海.基于单片机STC89C52的LED数码管温度显示及报警器的实现[J].科技信息,2009(35):97-98.

[6]应锟.基于单片机的电子万年历设计[J].中国科技博览,2011(15):1-1.

[7]李娣娜马惠铖王海军.一种智能窗帘控制系统的设计[J].电子制作,2018(17):3-3.

[8]赵浪涛赵永花.DS18B20芯片在温度测量系统中的应用[J].兰州工业高等专科学校学报,2009(04):6-9.

[9]冯伟.基于51单片机的时间温度显示系统[J].现代显示,2008(12):53-57.

[10]易丽华黄俊.基于AT89C51单片机与DS18B20的温度测量系统[J].电子与封装,2009(05):43-47.谢辞本论文的顺利完成,离不开各位老师、同学和朋友的关心和帮助。在此,表示深深的感谢。没有他们的帮助和支持,我是没有办法完成我的毕业论文的。首先诚挚的感谢我的论文指导老师齐连众老师。他在忙碌的教学工作中挤出时间来审查、修改我的论文。还有教过我的所有老师们,你们严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;他们循循循善诱的教导和不拘一格的思路给予我无尽的启迪。感谢所有慷慨提供文献的编写者,感谢那些在个人博客中开放源程序的单片机爱好者。感谢我的同学和朋友们,在学习期间和课题研究期间正是有你们的关怀和帮助,才使我增添了无尽的动力,让我满怀信心完成这篇毕业之作。附录一:总原理图附录二:系统程序#include<reg52.h> #include<SMG.h>#include<DS18B20.h>#include<EEPROM.h>#defineucharunsignedchar //宏定义#defineuintunsignedint/*****************灯、蜂鸣器、按键引脚定义*******************/sbitled_shang=P3^2; //红色LED灯sbitled_xia=P3^3; //绿色LED灯sbitrelay =P3^7; //继电器sbitbuzz=P2^4; //蜂鸣器sbitkey_set=P1^0; //设置键sbitkey_jia=P1^3; //加值键sbitkey_jian=P1^6; //减值键/*********************全局变量定义***************************/ucharTemperature_up,Temperature_down;//存储温度上、下限值ucharset_f;//设置选择标记,=0非设置,=1设置上限,=2设置下限。/***********************毫秒延时函数************************/voiddelayms(uintms){ unsignedchari=100,j; for(;ms;ms--) { while(--i) { j=10; while(--j); } }}/********************************************************函数名称:voidscan(void)函数作用:按键检测处理函数********************************************************/voidscan(void){ //设置键,不支持连按 if(key_set==0) //按键按下 { delayms(7); //延时消抖 if(key_set==0) //再次确认按下按键 { led_shang=1;//关闭上限报警灯 led_xia=1; //关闭下限报警灯 buzz=1; //关闭蜂鸣器 relay=1; //关闭继电器 set_f++; //设置变量+1 if(set_f==3)//如果设置完成,退出设置 { set_f=0;//重置设置变量 EEPROM_delete(0x2002); //擦除扇区 EEPROM_write(0x2002,Temperature_up);//写入【温度上限值】数据保存 EEPROM_delete(0x2202); //擦除扇区 EEPROM_write(0x2202,Temperature_down);//写入【温度下限值】数据保存 } } while(!key_set);//等待按键松开 } //加值键,支持连按 if(key_jia==0&&set_f!=0) //按键按下 { delayms(7); //延时消抖 if(key_jia==0) //再次确认按下按键 { if(set_f==1)//设置温度上限值 { if(Temperature_up<125)//最大值可设置125℃ Temperature_up++;//温度上限值+1℃ } if(set_f==2)//设置温度下限值 { if(Temperature_down<125&&Temperature_down+1<Temperature_up)//最大值可设置125℃,并且下限不可超过上限 Temperature_down++;//温度下限值+1℃ } } } //减值键,支持连按 if(key_jian==0&&set_f!=0) //按键按下 { delayms(7); //延时消抖 if(key_jian==0) //再次确认按下按键 { if(set_f==1)//设置温度上限值 { if(Temperature_up>0&&Temperature_up>Temperature_down+1)//最小值可设置0℃,并且上限得比下限大 Temperature_up--;//温度上限值-1℃ } if(set_f==2)//设置温度下限值 { if(Temperature_down>0)//最小值可设置0℃ Temperature_down--;//温度下限值-1℃ } } }}/********************************************************函数名称:voidmain()函数作用:主函数********************************************************/voidmain(){ ucharnum=149; //循环计数变量 buzz=1; //开机关闭蜂鸣器 led_shang=1; //开机关闭上限报警灯 led_xia=1; //开机关闭下限报警灯 relay=1; //开机关闭继电器 if(key_jian==0) { led_shang=0; //红色LED灯 led_xia=0; //绿色LED灯 relay =0; //继电器 buzz=0; //蜂鸣? delayms(100); if(key_jian==0) { EEPROM_delete(0x2002); //擦除扇区 EEPROM_write(0x2002,38);//写入【温度上限值】数据保存 EEPROM_delete(0x2202); //擦除扇区 EEPROM_write(0x2202,12);//写入【温度下限值】数据保存 } led_shang=1; //红色LED灯 led_xia=1; //绿色LED灯 relay =1; //继电器 buzz=1; //蜂鸣? } Temperature_up=EEPROM_read(0x2002); //读取存储的【温度上限值】数据 Temperature_down=EEPROM_read(0x2202);//读取存储的【温度下限值】数据 DS18B20_init(); //DS18B20初始化 for(num=0;num<150;num++) //上电先等待DS18B20温度传感器进入正常工作。 { DS18B20_Read_Temperature(); //读取温度 DS18B20_Temperature(); //将温度数据转换成实际温度 display2(12,12,12,12); //显示“” } while(1) { scan(); //进行按键检测 if(set_f==0)//正常显示温度 { num++; //循序次数+1 if(num>=150) //每循环>=150次,进入读取温度 { num=0; //重置循环变量 DS18B20_Read_Temperature();//读取温度数据 DS18B20_Temperature(); //将温度数据转换成实际温度 } if(presence==0) //判断温度读取正常 { if(Temperature>=Temperature_up||Temperature<Temperature_down)//判断实际温度是否【大于等于上限】或【小于下限值】 { if(Temperature==85&&temp_d[2]==0&&temp_d[3]==0);//避免开机一小段时间读取为85 else { if(Temperature>=Temperature_up)//实际温度【大于等于上限】 { led_shang=0; //打开上限报警灯 relay=1; //关闭继电器 if( (Temperature-1)>=Temperature_up) buzz=0; //蜂鸣器报警 } else //否则,实际温度【小于下限值】 { led_xia=0; //打开下限报警灯 relay=0; //打开继电器 if(( Temperature+1)<Temperature_down) buzz=0; //蜂鸣器报警 } } } else//实测温度处于上、下限值之间 { buzz=1; //关闭蜂鸣器 led_shang=1; //关闭上限报警灯 led_xia=1; //关闭下限报警灯 } display(temp_d[0],temp_d[1],temp_d[2],temp_d[3]);//显示实际温度 } else //否则,温度读取不正常【可能传感器没有接】 { led_shang=1; //关闭上限报警灯 led_xia=1; //关闭下限报警灯 relay=1; //关闭继电器 display2(12,12,12,12);//显示“” } } if(set_f!=0)//设置模式显示 { if(set_f==1) //显示温度上限值"Hxxx" display2(10,Temperature_up%1000/100,Temperature_up%100/10,Temperature_up%10); if(set_f==2) //显示温度下限值"Lxxx" display2(11,Temperature_down%1000/100,Temperature_down%100/10,Temperature_down%10); } }}/*************************************************************数码管头文件实现功能:数码管的控制***************************************************************/#ifndef_SMG_H_#define_SMG_H_#include<reg52.h>#defineucharunsignedchar#defineuintunsignedint/*****************数码管引脚定义*******************/#defineduanP0sbitw1=P2^0;sbitw2=P2^1;sbitw3=P2^2;sbitw4=P2^3;/*****************数码管变量定义*******************/ucharcodewei1[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28,0x31,0xe5,0x7f}; //数码管显示段码ucharcodewei2[]={0x80,0x9b,0x42,0x0a,0x19,0x0c,0x04,0x9a,0x00,0x08}; //数码管显示段码,带小数点/*****************数码管函数定义*********************/voidDelay(unsignedintnum); //延时函数voiddisplay(uchara,ucharb,ucharc,uchard);//温度显示函数voiddisplay2(uchara,ucharb,ucharc,uchard);//设置显示函数/********************************************************函数名称:voidDelay(unsignedintnum)函数作用:US延时函数********************************************************/voidDelay(unsignedintnum){while(--num);}/********************************************************函数名称:voiddisplay(uchara,ucharb,ucharc,uchard)函数作用:正常显示温度函数参数说明:a:十位,b:个位,c:十分位,d:百分位********************************************************/voiddisplay(uchara,ucharb,ucharc,uchard){ duan=wei1[a]; //不带小数点 w1=0; Delay(300); w1=1; duan=wei2[b]; //带小数点 w2=0; Delay(300); w2=1;duan=wei1[c]; //不带小数点 w3=0; Delay(300); w3=1; duan=wei1[d]; //不带小数点 w4=0; Delay(300); w4=1;}/********************************************************函数名称:voiddisplay(uchara,ucharb,ucharc,uchard)函数作用:设置模式时显示函数参数说明:a:千位,b:百位,c:十位,d:个位********************************************************/voiddisplay2(uchara,ucharb,ucharc,uchard){ duan=wei1[a]; //不带小数点 w1=0; Delay(100); w1=1; duan=wei1[b]; //不带小数点 w2=0; Delay(100); w2=1; duan=wei1[c]; //不带小数点 w3=0; Delay(100); w3=1; duan=wei1[d]; //不带小数点 w4=0; Delay(100); w4=1;}#endif/*************************************************************单片机内部EEPROM头文件实现功能:单片机内部EEPROM的控制***************************************************************/#ifndef_EEPROM_H_#define_EEPROM_H_#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint/*****************STC内部EEPROM控制寄存器定义*******************/sfrISP_DATA=0xe2;sfrISP_ADDRH=0xe3;sfrISP_ADDRL=0xe4;sfrISP_CMD=0xe5;sfrISP_TRIG=0xe6;sfrISP_CONTR=0xe7;/*******************STC内部EEPROM函数定义***********************/voidEEPROM_delete(uintaddr); //擦除一个扇区voidEEPROM_write(uintaddr,uchardat);//往addr地址写入数据ucharEEPROM_read(uintaddr); //向addr地址读取一个数据voidISP_off(); //关闭ISP操作/***************************************************************函数:擦除某一扇区(每个扇区512字节)入口:addr=某一扇区首地址 ***************************************************************/voidEEPROM_delete(uintaddr){ //打开IAP功能(ISP_CONTR.7)=1:允许编程改变Flash,设置Flash操作等待时间ISP_CONTR=0x81;ISP_CMD=0x03; //用户可以对"DataFlash/EEPROM区"进行扇区擦除ISP_ADDRL=addr;//ISP/IAP操作时的地址寄存器低八位,ISP_ADDRH=addr>>8;//ISP/IAP操作时的地址寄存器高八位。 EA=0;ISP_TRIG=0x46;//在ISPEN(ISP_CONTR.7)=1时,对ISP_TRIG先写入46h,ISP_TRIG=0xB9;//再写入B9h,ISP/IAP命令才会生效。_nop_(); EA=1;ISP_off(); //关闭ISP/IAP}/***************************************************************函数:写一字节入口:addr=扇区单元地址,dat=待写入数据***************************************************************/voidEEPROM_write(uintaddr,uchardat){ISP_CONTR=0x81; ISP_CMD=0x02; //用户可以对"DataFlash/EEPROM区"进行字节编程ISP_ADDRL=addr;ISP_ADDRH=addr>>8;ISP_DATA=dat;//数据进ISP_DATAEA=0;ISP_TRIG=0x46;ISP_TRIG=0xB9;_nop_(); EA=1;ISP_off(); //关闭ISP/IAP}/***************************************************************函数:读一字节入口:addr=扇区单元地址出口:dat=读出的数据***************************************************************/ucharEEPROM_read(uintaddr){uchardat; ISP_CONTR=0x81; ISP_CMD=0x01;//用户可以对"DataFlash/EEPROM区"进行字节读ISP_ADDRL=addr;ISP_ADDRH=addr>>8;EA=0;ISP_TRIG=0x46;ISP_TRIG=0xB9;_nop_();dat=ISP_DATA; //取出数据 ISP_off(); //关闭ISP/IAP EA=1; returndat;}/***************************************************************函数:关闭ISP/IAP操作***************************************************************/voidISP_off(){ISP_CONTR=0;//关闭IAP功能ISP_CMD=0;//待机模式,无ISP操作ISP_TRIG=0;//关闭IAP功能,清与ISP有关的特殊功能寄存器 ISP_ADDRH=0; ISP_ADDRL=0;}#endif/*************************************************************DS18B20头文件实现功能:DS18B20的控制***************************************************************/#ifndef_DS18B20_H_#define_DS18B20_H_#include<reg52.h>#include<SMG.h>#defineucharunsignedchar#defineuintunsignedint/*****************DS18B20引脚定义*******************/sbitDQ=P3^4;//定义DS18B20端口DQ/*****************DS18B20变量定义*******************/uchartemp_data[2];//存储读回的数字温度uchartemp_d[4];//存储转换完后的温度bitpresence; //检测18b20是否插好ucharTemperature;//存储温度整数部分值/*****************DS18B20函数定义*********************/voidDelay(unsignedintnum); //us延时voidDS18B20_init(void); //DS18B20初始化bitDS18B20_res(void); //DS18B20复位ucharDS18B20_ReadOneChar(void); //DS18B20读一个字节voidDS18B20_WriteOneChar(unsignedchardat);//DS18B20写一个字节voidDS18B20_Read_Temperature(void); //DS18B20读取温度voidDS18B20_Temperature(void);//DS18B20温度转换/********************************************************函数名称:bitDS18B20_res(void)函数作用:DS18B20复位函数参数说明:返回0=复位成功,1=复位不成功********************************************************/bitDS18B20_res(void){DQ=1;//DQ复位Delay(8);//稍做延时DQ=0;//单片机将DQ拉低Delay(90);//精确延时大于480usDQ=1;//拉高总线Delay(5);presence=DQ;//如果=0则初始化成功=1则初始化失败Delay(100);DQ=1;return(presence);//返回信号,0=presence,1=nopresence}/********************************************************函数名称:voidDS18B20_init(void)函数作用:DS18B20初始化函数********************************************************/voidDS18B20_init(void){DS18B20_res(); //复位DS18B20_WriteOneChar(0xCC);//跳过读序号列号的操作DS18B20_WriteOneChar(0x4e);//写暂存 DS18B20_WriteOneChar(0x5f);//配置转换精度为12位 DS18B20_WriteOneChar(0x00); DS18B20_WriteOneChar(0x7f);}/********************************************************函数名称:ucharDS18B20_ReadOneChar(void)函数作用:DS18B20读一个字节数据********************************************************/ucharDS18B20_ReadOneChar(void){ unsignedchari=0; unsignedchardat=0; for(i=8;i>0;i--) { DQ=0;//给脉冲信号 dat>>=1; DQ=1;//给脉冲信号 if(DQ) dat|=0x80; Delay(15); }return(dat);}/********************************************************函数名称:voidDS18B20_WriteOneChar(unsignedchardat)函数作用:DS18B20写一个字节数据********************************************************/voidDS18B20_WriteOneChar(unsignedchardat){ unsignedchari=0; for(i=8;i>0;i--) { DQ=0; DQ=dat&0x01; Delay(5); DQ=1; dat>>=1; }}/********************************************************函数名称:voidDS18B20_Read_Temperature(void)函数作用:DS18B20读取温度********************************************************/voidDS18B20_Read_Temperature(void){DS18B20_res(); //复位DS18B20_WriteOneChar(0xCC);//跳过读序号列号的操作DS18B20_WriteOneChar(0x44);//启动温度转换DS18B20_res();DS18B20_WriteOneChar(0xCC);//跳过读序号列号的操作DS18B20_WriteOneChar(0xBE);//读取温度寄存器temp_data[0]=DS18B20_ReadOneChar();//温度低8位temp_data[1]=DS18B20_ReadOneChar();//温度高8位}/********************************************************函数名称:voidDS18B20_Temperature(void)函数作用:DS18B20温度转换********************************************************/voidDS18B20_Temperature(void){ uchartemp; inttemp_i; temp=temp_data[1]&0xf0; if(temp==0xf0)//判断是否为负温度,满足为负温度,进行取反加一 { if(temp_data[0]==0) //判断是否低位取反后有进位 { temp_data[0]=~temp_data[0]+1; temp_data[1]=~temp_data[1]+1; } else { temp_data[0]=~temp_data[0]+1; temp_data[1]=~temp_data[1]; } } //整数部分 temp=(temp_data[1]<<4)|(temp_data[0]>>4);//取高字节低4位,低字节高4位 //本项目由于显示空间的显示,我们只提取出温度的十位和个位进行显示 temp_d[0]=temp%100/10; //取十位 temp_d[1]=temp%10; //取个位 Temperature=temp;//整数部分 //小数部分 temp=temp_data[0]&0x0f;//取低字节的低4位 temp_i=temp*625;//625=0.0625*10000,先将小数放大10000倍进行处理 temp_d[2]=temp_i/1000; //取十分位 temp_d[3]=temp_i%1000/100; //取百分位}#endif

电脑不启动故障诊治了解电脑启动的过程在诸多电脑故障中,无法正常启动是最令用户头痛的事了。笔者长期从事维护电脑的工作,在这个方面积累了一些经验,现在就将这些经验整理归纳出来与朋友们分享。本文将以家用电脑和windows98操作系统为基础,介绍电脑无法正常启动故障的诊治。要想准确地诊断电脑不启动故障,首先要了解的起动过程,当我们按下电源开关时,电源就开始向主板和其它设备供电,此时电压还没有完全稳定,主板控制芯片组会根据CMOS中的CPU主频设置向CPU发出一个Reset(重置)信号,让CPU初始化,电压完全稳定后,芯片组会撤去Reset信号,CPU马上从地址FFFF0H处执行一条跳转指令,跳到系统BIOS中真正的启动代码处。系统BIOS首先要做的事情就是进行POST(PowerOnSelfTest,加电自检)。POST的主要任务是检测系统中的一些关键设备(电源、CPU芯片、BIOS芯片、定时器芯片、数据收发逻辑电路、DMA控制器、中断控制器以及基本的64K内存和内存刷新电路等)是否存在和能否正常工作,如内存和显卡等。自检通过后,系统BIOS将查找显示卡的BIOS,由显卡BIOS来完成显示卡的初始化,显示器开始有显示,自此,系统就具备了最基本的运行条件,可以对主板上的其它部分进行诊断和测试,再发现故障时,屏幕上会有提示,但一般不死机,接着系统BIOS将检测CPU的类型和工作频率,然后开始测试主机所有的内存容量,内存测试通过之后,系统BIOS将开始检测系统中安装的一些标准硬件设备,这些设备包括:硬盘、CD-ROM、软驱、串行接口和并行接口等连接的设备,大多数新版本的系统BIOS在这一过程中还要自动检测和设置内存的相关参数、硬盘参数和访问模式等。标准设备检测完毕后,系统BIOS内部的支持即插即用的代码将开始检测和配置系统中已安装的即插即用设备。每找到一个设备之后,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断、DMA通道和I/O端口等资源。最后系统BIOS将更新ESCD(ExtendedSystemConfigurationData,扩展系统配置数据)。ESCD数据更新完毕后,系统BIOS的启动代码将进行它的最后一项工作,即根据用户指定的启动顺序从软盘、硬盘或光驱启动。以从C盘启动为例,系统BIOS将读取并执行硬盘上的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的分区引导记录,而分区引导记录将负责读取并执行IO.SYS,这是Windows最基本的系统文件。IO.SYS首先要初始化一些重要的系统数据,然后就显示出我们熟悉的蓝天白云,在这幅画面之下,Windows将继续进行DOS部分和GUI(图形用户界面)部分的引导和初始化工作,一切顺利结束,电脑正常启动。根据故障现象诊治了解电脑启动的过程,故障就好判断了,下面我们就根据故障现象开始诊治了:现象一:系统完全不能启动,见不到电源指示灯亮,也听不到冷却风扇的声音。这时,基本可以认定是电源部分故障,检查:电源线和插座是否有电、主板电源插头是否连好,UPS是否正常供电,再确认电源是否有故障,最简单的就是替换法,但一般用户家中不可能备有电源等备件,这时可以尝试使用下面的方法(注意:要慎重):先把硬盘,CPU风扇,或者CDROM连好,然后把ATX主板电源插头用一根导线连接两个插脚(把插头的一侧突起对着自己,上层插脚从左数第4个和下层插脚从右数第3个,方向一定要正确),然后把ATX电源的开关打开,如果电源风扇转动,说明电源正常,否则电源损坏。如果电源没问题直接短接主板上电源开关的跳线,如果正常,说明机箱面板的电源开关损坏。现象二:电源批示灯亮,风扇转,但没有明显的系统动作。这种情况如果出现在新组装电脑上应该首先检查CPU是否插牢或更换CPU,而正在使用的电脑的CPU损坏的情况比较少见(人为损坏除外),损坏时一般多带有焦糊味,如果刚刚升级了BIOS或者遭遇了CIH病毒攻击,这要考虑BIOS损坏问题(BIOS莫名其妙的损坏也是有的),修复BIOS的方法很多杂志都介绍过就不重复了;确认CPU和BIOS没问题后,就要考虑CMOS设置问题,如果CPU主频设置不正确也会出现这种故障,解决方法就是将CMOS信息清除,既要将CMOS放电,一般主板上都有一个CMOS放电的跳线,如果找不到这个跳线可以将CMOS电池取下来,放电时间不要低于5分钟,然后将跳线恢复原状或重新安装好电池即可;如果CPU、BIOS和CMOS都没问题还要考虑电源问题:PC机电源有一个特殊的输出信号,称为POWERGOOD(PG)信号,如果PG信号的低电平持续时间不够或没有低电平时间,PC机将无法启动。如果PG信号一直为低电平,则PC机系统始终处于复位状态。这时PC机也出现黑屏、无声响等死机现象。但这需要专业的维修工具外加一些维修经验,因此,建议采用替换法;电源没有问题就要检查是否有短路,确保主板表面不和金属(特别是机箱的安装固定点)接触。把主板和电源拿出机箱,放在绝缘体表面,如果能启动,说明主板有短路现象;如果还是不能启动则要考虑主板问题,主板故障较为复杂,可以使用替换法确认,然后更换主板。现象三:电源指示灯亮,系统能启动,但系统在初始化时停住了,而且可以听到嗽叭的鸣叫声(没有视频):根据峰鸣代码可以判断出故障的部位。ccid_page/AwardBIOS1短声:说明系统正常启动。表明机器没有问题。2短声:说明CMOS设置错误,重新设置不正确选项。1长1短:说明内存或主板出错,换一个内存条试试。1长2短:说明显示器或显示卡存在错误。检查显卡和显示器插头等部位是否接触良好或用替换法确定显卡和显示器是否损坏。1长3短:说明键盘控制器错误,应检查主板。1长9短:说明主板FlashRAM、EPROM错误或BIOS损坏,更换FlashRAM。重复短响:说明主板电源有问题。不间断的长声:说明系统检测到内存条有问题,重新安装内存条或更换新内存条重试。AMIBIOS1短:说明内存刷新失败。更换内存条。2短:说明内存ECC较验错误。在CMOS中将内存ECC校验的选项设为Disabled或更换内存。3短:说明系统基本内存检查失败。换内存。4短:说明系统时钟出错。更换芯片或CMOS电池。5短:说明CPU出现错误。检查CPU是否插好。6短:说明键盘控制器错误。应检查主板。7短:说明系统实模式错误,不能切换到保护模式。8短:说明显示内存错误。显示内存有问题,更换显卡试试。9短:说明BIOS芯片检验和错误。1长3短:说明内存错误。内存损坏,更换。1长8短:说明显示测试错误。显示器数据线没插好或显示卡没插牢。现象四:系统能启动,有视频,出现故障提示,这时可以根据提示来判断故障部位。下面就是一些常见的故障提示的判断:一、提示“CMOSBatteryStateLow”原因:CMOS参数丢失,有时可以启动,使用一段时间后死机,这种现象大多是CMOS

温馨提示

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

评论

0/150

提交评论