毕业设计(论文)-基于AT89C51单片机的数字温度计设计.doc_第1页
毕业设计(论文)-基于AT89C51单片机的数字温度计设计.doc_第2页
毕业设计(论文)-基于AT89C51单片机的数字温度计设计.doc_第3页
毕业设计(论文)-基于AT89C51单片机的数字温度计设计.doc_第4页
毕业设计(论文)-基于AT89C51单片机的数字温度计设计.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

基于温度传感器的数字温度计 1摘要 在日常生活及工业生产过程中,经常要用到温度的检测及控制,温度是生产过程和科学实验中普遍而且重要的物理参数之一。在生产过程中,为了高效地进行生产,必须对它的主要参数,如温度、压力、流量等进行有效的控制。温度控制在生产过程中占有相当大的比例。温度测量是温度控制的基础,技术已经比较成熟。传统的测温元件有热电偶和二电阻。而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,这些方法相对比较复杂,需要比较多的外部硬件支持。我们用一种相对比较简单的方式来测量。基于AT89C51单片机作为控制器、使用数字温度传感器DS18B20作为温度采集器的数字温度计。重点阐述了AT89C51的结构性能和引脚功能,DS18B20的性能结构、工作原理和控制方法,以及单片机AT89C51和数字温度传感器DS18B20之间的接口、数据传递。该数字温度计能够测出-2070之间的温度,适合日常生活、工业生产和科学研究等领域对温度测量的需要。 目录摘要11绪论41.1选题背景及研究意义41.2 温度测量的意义41.3 系统预期目标42 开发工具Proteus与Keil52.1 Proteus软件简单应用52.2 Keil软件调试应用53 系统设计概述63.1 方案确定63.2 系统设计原理63.3 系统组成框图64 元器件介绍74.1 AT89C51单片机介绍74.1.1 AT89C51单片机主要特性84.1.2 AT89C51单片机管脚84.2 1602LCD 液晶模块简介94.3 DS18B20介绍94.3.1 DS18B20内部结构及功能104.3.2 测温原理105 系统硬件设计115.1主板电路115.2液晶显示部分与89C51的接口电路115.3 DS18B20温度传感器与单片机的接口电路126 系统软件设计136.1 主程序设计136.2 DS18B20初始化136.3 读出温度子程序146.4 温度转换命令子程序146.5 计算温度子程序156.6显示数据刷新子程序157 系统仿真测试15结束语17参考文献18附录1 系统整体电路19附录2 实物图19附录3 元件清单(名称、型号、数量)20附录4 全部程序清单201绪论1.1选题背景及研究意义随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。温度测量在物理实验、医疗卫生、食品生产等领域,尤其在热学试验(如:物体的比热容、汽化热、热功当量、压强温度系数等教学实验)中,有特别重要的意义。现在所使用的温度计通常都是精度为1和0.1的水银、煤油或酒精温度计。这些温度计的刻度间隔通常都很密,不容易准确分辨,读数困难,而且他们的热容量还比较大,达到热平衡所需的时间较长,因此很难读准,并且使用非常不方便。本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确等优点,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用。本设计使用单片机作为核心进行控制。单片机具有集成度高,通用性好,功能强,特别是体积小,重量轻,耗能低,可靠性高,抗干扰能力强和使用方便等独特优点,在数字、智能化方面有广泛的用途。1.2 温度测量的意义温度是一种最基本的环境参数,人民的生活与环境的温度息息相关,随着人们生活水平的不断提高,对生活质量的要求不断提升,自然会更加关注跟人身体健康紧密联系的温度;同时在工业生产过程中经常需要实时测量温度,尤其是在高危生产行业,如花炮生产、煤矿行业等。但依靠人工检测既浪费时间、物力、人力, 又有一定的危险性,且测量的数据也不准确;在农业生产中也离不开温度的测量,各种农作物的生长都跟温度有直接的关系,掌握了温度的变化就可以更好的控制农作物的生长。因此研究温度的测量方法和装置具有重要的意义。1.3 系统预期目标 本课题的研究重点是设计一种基于单片机的数字温度计控制系统。利用数字温度传感器DS18B20,此传感器课读取被测量温度值,进行转换。(1)本范围-20+70。(2)精度误差0.5。(3)液晶屏显示温度信息。(4)温度报警功能,当温度超过设定上下限温度时,发出声音报警。2 开发工具Proteus与Keil2.1 Proteus软件简单应用 图2-1 proteus绘图界面1. 绘制原理图:绘制原理图要在原理图编辑窗口中的蓝色方框内完成。原理图编辑窗口的操作是不同于常用的WINDOWS应用程序的,正确的操作是:用左键放置元件;右键选择元件;双击右键删除元件;右键拖选多个元件;先右键后左键编辑元件属性;先右键后左键拖动元件;连线用左键,删除用右键;改连接线:先右击连线,再左键拖动;中键放缩原理图。2. 定制自己的元件:有三个个实现途径,一是用PROTEUS VSM SDK开发仿真模型,并制作元件;另一个是在已有的元件基础上进行改造,比如把元件改为bus接口的;还有一个是利用已制作好(别人的)的元件,我们可以到网上下载一些新元件并把它们添加到自己的元件库里面。3. Sub-Circuits应用:用一个子电路可以把部分电路封装起来,这样可以节省原理图窗口的空间。2.2 Keil软件调试应用应用Keil进行软件仿真开发的主要步骤为:编写源程序并保存建立工程并添加源文件设置工程编译/汇编、连接,产生目标文件程序调试。3 系统设计概述3.1 方案确定该系统主要由温度测量和数据采集两部分电路组成,采用数字温度芯片DS18B20 测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在-20+70 摄氏度时,最大线形偏差小于0.5 摄氏度。DS18B20 的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89C51构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大。采用51 单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。既可以单独对多DS18B20控制工作,还可以与PC 机通信上传数据,另外AT89S51 在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。3.2 系统设计原理利用温度传感器DS18B20可以直接读取被测温度值,进行转换的特性,模拟温度值经过DS18B20处理后转换为数字值,然后送到单片机中进行数据处理,并与设置的温度报警限比较,超过限度后通过扬声器报警。同时处理后的数据送到LCD中显示。3.3 系统组成框图 图3-1 系统基本方框图1. 主控制器单片机AT89C51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。2. 显示电路显示电路采用LCD液晶屏。3. 温度传感器温度传感器采用美国DALLAS半导体公司生产的DS18B20温度传感器。DS18B20输出信号全数字化。便于单片机处理及控制,在-20+70 摄氏度时,最大线形偏差小于0.5 摄氏度,采用单总线的数据传输,可直接与计算机连接。用AT89C51芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。4 元器件介绍4.1 AT89C51单片机介绍T89系列单片机在内部结构上基本相同,其中不同型号的单片机只不过在个别模块和功能方面有些区别。AT89C51单片机内部硬件结构框图如图所示。它由一个8位中央处理器(CPU)、一个256B片内RAM及4KB Flash ROM 、21个特殊功能寄存器、4个8位并行I/O口、两个16位定时/计数器、一个串行I/O口以及中断系统等部分组成,各功能部件通过片内单一总线联成一个整体,集成在一块芯片上。 时序和振荡电路程序存储器 ROM数据存储器RAM2个16位定时/计数器CPU内部8位数据总线中断系统并行I/O口 串行I/O口内部中断外部中断 P0 P1 P2 P3 RXD TXD时钟源外部事件 图4-1 AT89C51单片机内部结构框图4.1.1 AT89C51单片机主要特性1. 一个8 位的微处理器(CPU)。2. 片内数据存储器RAM(128B),用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据等,SST89 系列单片机最多提供1K 的RAM。3. 片内程序存储器ROM(4KB),用以存放程序、一些原始数据和表格。目前单片机的发展趋势是将RAM 和ROM 都集成在单片机里面,这样既方便了用户进行设计又提高了系统的抗干扰性。4. 四个8 位并行IO 接口P0P3,每个口既可以用作输入,也可以用作输出。5. 两个定时器计数器,每个定时器计数器都可以设置成计数方式,用以对外部事件进行计数,也可以设置成定时方式,并可以根据计数或定时的结果实现计算机控制。6. 五个中断源的中断控制系统。7. 一个全双工UART(通用异步接收发送器)的串行IO 口,用于实现单片机之间或单机与微机之间的串行通信。8. 片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接。最高允许振荡频率为12MHz。4.1.2 AT89C51单片机管脚 图4-2 AT89C51单片机管脚4.2 1602LCD 液晶模块简介1602LCD液晶模块的引脚图如图4-3所示。图4-3 1602LCD引脚图 LCD1602引脚介绍:Vss(1脚):一般接地。Vdd(2脚):接电源。Vee(3脚):液晶显示器对比度调整端,接电源时对比度最弱,接地时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。RS(4脚):RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。R/W(5脚):R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。E(6脚):E(或EN)端为使能(enable)端,下降沿使能。DB 0-7(7-14脚):双向数据总线 。4.3 DS18B20介绍DS18B20模块引脚如图4-4所示。图4-4 DS18B20引脚图DALLAS 最新单线数字温度传感器DS18B20是一种新型的“一线器件”,其体积更小、更适用于多种场合、且适用电压更宽、更经济。DALLAS 半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。温度测量范围为-55+125 摄氏度,可编程为9位12 位转换精度,测温分辨率可达0.0625摄氏度,分辨率设定参数以及用户设定的报警温度存储在EEPROM 中,掉电后依然保存。被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可以在远端引入,也可以采用寄生电源方式产生;多个DS18B20可以并联到3 根或2 根线上,CPU只需一根端口线就能与诸多DS18B20 通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。4.3.1 DS18B20内部结构及功能DS18B20的内部结构如图4-5所示。主要包括:寄生电源,温度传感器,64位ROM和单总线接口,存放中间数据的高速暂存器RAM,用于存储用户设定温度上下限值的TH和TL触发器,存储与控制逻辑,8位循环冗余校验码(CRC)发生器等7部分。图4-5 DS18B20内部结构4.3.2 测温原理DS18B20测温原理:低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振 随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对 低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重 新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。5 系统硬件设计5.1主板电路 系统整体硬件电路包括:传感器数据采集电路,温度显示电路,报警调整电路,单片机主板电路等。主板电路如图5-1所示。 图5-1 主板电路5.2液晶显示部分与89C51的接口电路 如图5-2所示,用89C51的P0口作为数据线,用P2.0、P2.1、P2.2分别作为LCD的E、R/W、RS。其中E是下降沿触发的片选信号,R/W是读写信号,RS是寄存器选择信号本模块设计要点如下:显示模块初始化:首先清屏,再设置接口数据位为8位,显示行数为1行,字型为57点阵,然后设置为整体显示,取消光标和字体闪烁,最后设置为正向增量方式且不移位。向LCD的显示缓冲区中送字符,程序中采用2个字符数组,一个显示字符,另一个显示电压数据,要显示的字符或数据被送到相应的数组中,完成后再统一显示.图5-2 液晶与89C51的接口5.3 DS18B20温度传感器与单片机的接口电路 DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。 当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。 图5-3 DS18B20温度传感器与单片机的接口电路6 系统软件设计系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。6.1 主程序设计主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图6-1所示。 图6-1 程序流程图6.2 DS18B20初始化DS18B20初始化流程图见图6-2。6.3 读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。6.4 温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。图6-3 温度转换流程图6.5 计算温度子程序计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图6.6显示数据刷新子程序显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。7 系统仿真测试设置温度上限为70度,温度下限为-20度。1. 此时温度时70.5度,超出上限温度,D1灯亮,实现报警。2. 此时温度为-20.5度,低于下限温度,D2灯亮,实现报警。3. 此时温度为30.5度,在所设范围内,两灯都没亮,说明温度正常。参考文献1 何立民著单片机高级教程北京:北京航空航天大学出版社,2000.2 李全利,仲伟峰,徐军著.单片机原理及应用.北京:清华大学社,2006.3 杨素行著.模拟电子技术基础(第二版) .北京:高等教育出版社,2006.4 马忠梅,籍顺心,张凯等著.单片机的C语言应用程序设计(第4版) .北京:北京航天航空大学出版社,2007.5 白驹珩,雷晓平著单片计算机及其应用成都:电子科技大学出版社,1997.6 阎石著.数字电子技术基础(第五版) .北京:高等教育出版社,2006.7 谭浩强著程序设计与开发技术北京:清华大学出版社,19918 杨路明著C语言程序设计教程(第2版) 北京:北京邮电大学出版社,2005.9 梁翎著C语言程序设计实用技巧与程序实例.上海:上海科普出版社,199810 钟富昭著.8051单片机典型模块设计与应用.北京:人民邮电出版,2007.附录1 系统整体电路附录2 实物图附录3 元件清单(名称、型号、数量)元件名称型号数量单片机芯片AT89C511温度传感器DS18B201晶振12MHz1电源5V1液晶屏lcd16021电容30pF210uF(极性)1排阻1K1万能板1开关3导线若干电阻1K4发光二极管绿色2蜂鸣器1附录4 全部程序清单程序代码:#include #include #define uchar unsigned char#define uint unsigned int#define delayNOP() _nop_();_nop_();_nop_();_nop_();sbit HI_LED = P23;sbit LO_LED = P26;sbit DQ = P33;sbit BEEP = P37;sbit LCD_RS = P20;sbit LCD_RW = P21;sbit LCD_EN = P22;sbit K1 = P17;sbit K2 = P14;sbit K3 = P11;uchar code RomCodeStr=-ROM CODE-;uchar RomCode8=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;uchar code Temp_Disp_Title =Current Temp : ;uchar Current_Temp_Display_Buffer=TEMP: ;uchar code Temperature_Char8=0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00;uchar code Alarm_Temp=ALARM TEMP Hi Lo;uchar Alarm_HI_LO_STR=Hi: Lo: ;uchar temp_data2=0x00,0x00;uchar temp_alarm2=0x00,0x00;uchar display5=0x00,0x00,0x00,0x00,0x00;uchar display13=0x00,0x00,0x00;uchar code df_Table=0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9;char Alarm_Temp_HL2=70,-20;uchar CurrentT=0;uchar Temp_Value=0x00,0x00;uchar Display_Digit=0,0,0,0;bit HI_Alarm=0,LO_Alarm=0;bit DS18B20_IS_OK=1;uint Time0_Count=0;void DelayXus(int x) uchar i; while(x-) for(i=0;i200;i+);bit LCD_Busy_Check() bit result; LCD_RS=0;LCD_RW=1;LCD_EN=1;delayNOP(); result=(bit)(P0 & 0x80); LCD_EN=0; return result;void Write_LCD_Command(uchar cmd) while(LCD_Busy_Check(); LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_();_nop_(); P0=cmd; delayNOP(); LCD_EN=1;delayNOP();LCD_EN=0;void Write_LCD_Data(uchar dat) while(LCD_Busy_Check(); LCD_RS=1;LCD_RW=0;LCD_EN=0; P0=dat;delayNOP(); LCD_EN=1;delayNOP();LCD_EN=0;void LCD_Initialise() Write_LCD_Command(0x01); DelayXus(5); Write_LCD_Command(0x38); DelayXus(5); Write_LCD_Command(0x0c); DelayXus(5); Write_LCD_Command(0x06); DelayXus(5);void Set_LCD_POS(uchar pos) Write_LCD_Command(pos | 0x80);/自定义字符写CGRAMvoid Write_NEW_LCD_Char() uchar i; Write_LCD_Command(0x40); for(i=0;i4)|(Temp_Value1 & 0x07)=Alarm_Temp_HL0?1:0; LO_Alarm=Signed_Current_Temp=Alarm_Temp_HL1?1:0; Display_Digit3=CurrentT/100; Display_Digit2=CurrentT%100/10; Display_Digit1=CurrentT%10; Current_Temp_Display_Buffer11=Display_Digit0+0; Current_Temp_Display_Buffer10=.; Current_Temp_Display_Buffer9=Display_Digit1+0; Current_Temp_Display_Buffer8=Display_Digit2+0; Current_Temp_Display_Buffer7=Display_Digit3+0; if(Display_Digit3=0) Current_Temp_Display_Buffer7= ; if(Display_Digit2=0 & Display_Digit3=0) Current_Temp_Display_Buffer8= ; if(ng) if(Current_Temp_Display_Buffer8= ) Current_Temp_Display_Buffer8=- ; else if(Current_Temp_Display_Buffer7= ) Current_Temp_Display_Buffer7=-; else Current_Temp_Display_Buffer6=-; Set_LCD_POS(0x00); for(i=0;i16;i+) Write_LCD_Data(Temp_Disp_Titlei); Set_LCD_POS(0x40); for(i=0;i16;i+) Write_LCD_Data(Current_Temp_Display_Bufferi); Set_LCD_POS(0x4D);Write_LCD_Data(0x00); Set_LCD_POS(0x4E);Write_LCD_Data(C);/定时器中断void_To_INT() interrupt 1 TH0=-1000 / 256; TL0=-1000 % 256; BEEP=!BEEP; if (+Time0_Count =400) Time0_Count=0; if (HI_Alarm) HI_LED=HI_LED;else HI_LED=0; if (HI_Alarm) LO_LED=LO_LED;else LO_LED=0; TR0=0; /rom的转换与显示void Display_Rom_Code() uchar i,t; Set_LCD_POS(0X40); for(i=0;i 4); if(t9) t+=0x37; else t+=0; Write_LCD_Data(t); t=RomCodei & 0x0F; if(t9) t+=0x37; else t+=0; Write_LCD_Data(t); uchar Init_DS18B20() uchar status; DQ=1;Delay(8);DQ=0;Delay(90);DQ=1;Delay(8); status=DQ; Delay(100); DQ=1; return status;uchar ReadOneByte() uchar i,dat=0; DQ=1;_nop_(); for(i=0;i=1;DQ=1;_nop_();_nop_(); if(DQ) dat |=0x80; Delay(30); DQ=1; return dat;WriteOneByte(uchar dat) uchar i; for(i=0;i=1; void Read_Temperature() if( Init_DS18B20()=1 ) DS18B20_IS_OK=0; else WriteOneByte(0xCC); WriteOneByte(0x44); Init_DS18B20(); WriteOneByte(0xCC); WriteOneByte(0xBE); Temp_Value0=ReadOneByte(); Temp_Value1=ReadOneByte(); DS18B20_IS_OK=1; /读64位序列码void Read_Rom_Code() uchar i; Init_DS18B20(); WriteOneByte(0x33); for(i=0;i8;i+) RomCodei=ReadOneByte();/显示romcodevoid Display_RomCode() uchar i; Set_LCD_POS(0X00); for(i=0;i16;i+) Write_LCD_Data(RomCodeStri); Read_Rom_Code(); Display_Rom_Code();/显示报警温度void Disp_Alarm_Temperature() uchar i,ng; ng=0; if(Alarm_Temp_HL00) Alarm_Temp_HL0=Alarm_Temp_HL0+1; ng=1; Alarm_HI_LO_STR4=Alarm_Temp_HL0 / 100+0; Alarm_HI_LO_STR5=Alarm_Temp_HL0 / 10 % 10+0; Alarm_HI_LO_STR6=Alarm_Temp_HL0 % 10+0; if(Alarm_HI_LO_STR4 = 0) Alarm_HI_LO_STR4= ; if(Alarm_HI_LO_STR4 = & Alarm_HI_LO_STR5=0) Alarm_HI_LO_STR5= ; if(ng) if(Alarm_HI_LO_STR5 = ) Alarm_HI_LO_STR5=-; else if(Alar

温馨提示

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

评论

0/150

提交评论