毕业设计(论文)-基于STM32的自动灌溉控制系统设计_第1页
毕业设计(论文)-基于STM32的自动灌溉控制系统设计_第2页
毕业设计(论文)-基于STM32的自动灌溉控制系统设计_第3页
毕业设计(论文)-基于STM32的自动灌溉控制系统设计_第4页
毕业设计(论文)-基于STM32的自动灌溉控制系统设计_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

西昌学院毕业论文(设计)①将GPIO调成输出模式;②让定时器TIM3输出化6ms低电平向传感器请求数据包;③将GPIO调成模拟输入模式;④采用定时器捕获模式及中断响应,在传感器返回了数据之后,将之存入HUMI中。⑤调用数据处理函数计算有效数据并将之存入指定变量以及计算串口发送数据包并存入指定数组;⑥等待主程序调用HUMI输出函数。温湿度采集模块在本设计中至关重要,在DHT11程序编写及调试时应注意其时序,端口,电平的跳变等。主机控制DHT11完成温湿度转换时,在每一次读写之前,都要对DHT11进行复位。DHT11主机发送开始信号,即:拉低数据线,保持t1(至少18ms)时间,然后拉高数据线t2(20~40us)时间,然后读取DHT11的响应,正常的话,DHT11会拉低数据线,保持t3(40~50us)时间,作为响应信号,然后DHT11拉高数据线,保持t4(40~50us)时间后,开始输出数据。由于DHT11与STM32间采用串行数据传送方式,因此,在对DHT11进行读写编程时,必须严格地保证读写时序,否则,将无法正确读取结果。DHT11数据发送时序图

如图24-26所示。图24DHT11数据发送流程图25DHT11输出数字“0”的时序图图26DHT11输出数字“1”的时序图根据电路的硬件设计,在单片机控制下,传感器DHT11检测温湿度数据,然后送入单片机进行数据转换,数据被转换成能够在OLCD液晶显示屏上显示的格式,然后单片机控制温湿度在显示屏上实时显示;再通过程序,将温湿度数值与预设值进行比较,若温度超过30℃,则发出高温报警信号,通过程序启动蜂鸣器,蜂鸣报警。根据硬件电路连接,DHT11的2号管脚与单片机连接,用于单片机与DHT11之间的通讯和同步。DHT11采用单总线数据格式,一次通讯时间为4ms左右,一次完整的数据传输为40bit,高位先出。数据格式为:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据数据+8bit校验和,如果数据正确传送,校验和数据就等于前4部分所得结果的末8位。主机发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后转换到低速模式。总线空闲状态为高电平,主机把总线拉低,等待DHT11响应,主机把总线拉低时间必须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号。主机发送开始信号结束后,延时等待20~40us后,读DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可,总线由上拉电阻拉高。总线为低电平,说明DHT11发送了响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1。当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。根据以上对电路与通信时序的分析,DHT11程序设计流程图如图27所示。图27温湿度监测模块程序流程图参考文献[1]王友贞.节水灌溉与农业可持续发展[M].

中国机械出版社,2005:15—23[2]刘建辉.单片机智能控制技术[M].国防工业出版社,2007[3]吴普特,牛文全,郝宏科.现代化高效节水灌溉设施[M].化学工业出版社,2002:12—37[4]涂安富,金诚谦,吴崇友,卢宴,钟伟民.几种节水灌溉新技术分析[M].中国农机化出版社,2005[5]刘明真,陈鸿.基于单片机智能节水灌溉系统的设计[J].学术问题研究,2010-06-15:08—15[6]宫建华,徐志祥,袁虎成,张家桂.基于单片机技术的灌溉控制系统的设计与实现[J].机械研究与应用,2004-04-30[7]刘瑞新.单片机原理及应用教程[M].机械工业出版社,2003-07[8]郑毛祥.单片机应用基础[M].人民邮电出版社,2009-02[9]郑锋.51单片机典型应用开发范例大全[M].中国铁道出版社,2011[10]张连华.单片机应用系统设计方法[J].科学之友,2010-04[11]范风强,兰婵丽.单片机语言C51应用实战集锦[M].电子工业出版社,2003-03-01[12]谭浩强.C程序设计[M].清华大学出版社,2006[13]赵负图.传感器集成电路手册[M].化学工业出版社,2004[14]赵燕.传感器原理及应用[M].北京大学出版,2010-02-01[15]蔡自兴.智能控制[M].电子工业出版社,2004[16]吴景社,李久生.21世纪节水农业中的高新技术重点研究领域[M].

农业工程出版社,2003[17]李泉溪.单片机原理与应用实例仿真[M].北京:北京航空航天大学出版社,2009:38—45.致谢经过了两个多月的努力,我最后完成了论文的写作。从开始接到论文题目到系统的实现,再到论文文章的完成,每走一步对我来说都是新的尝试与挑战,这也是我在大学期间独立完成的最大的项目。在这段时间里,我学到了很多知识也有很多感受,从一无所知,我开始了独立的学习和试验,查看相关的资料和书籍,让自己头脑中模糊的概念逐渐清晰,使自己十分稚嫩作品一步步完善起来,每一次改善都是我学习的收获,每一次设计的成功都会让我兴奋好一段时间。我的论文作品不是很成熟,还有很多不足之处。但是这次做论文的经历使我终身受益。我感受到做论文是要真真正正用心去做的一件事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的潜力,没有自己的研究,就不会有所突破,那也就不叫论文了。期望这次的经历能让我在以后学习中激励我继续进步。在这里,我有许多想要感谢的人。首先,我要衷心感谢我的导师老师,感谢导师对我的关心与照顾。能够在百忙中为我们细心讲解论文的内容与格式;还为我们提供实验室供我们使用,给我们带来方便;精心制作时间安排表,督促我们学习。老师认真的工作态度影响了我,让我懂得问题的解决需要时间的积累;让我明白努力总是会有收获的;让我体会到了生活的艰辛,现实的残酷,想要绽放自己的光彩,就需要花费更多的时间,比别人更加勤奋。然后,我要感谢我的同学和舍友对我的鼓励和帮助,在我松懈时提醒我,让我能够及时调整自己的状态,最终完成毕业论文。其次,我还要感谢我的家人,他们的鼓励和支持成为了我最强的依靠,每次遇到困难时,都能及时认清自己,及时改正,以全新的姿态面对困难,解决困难。最后,由衷地感谢各位评审老师在百忙之中审阅我的本科论文和给予指导。再次感谢所有帮助过我的老师、同学、朋友以及家人。谢谢各位!代码#ifndef__DHT11_H#define__DHT11_H#include"stm32f10x.h" #defineDHT11_GPIO_TYPEGPIOA#defineDHT11_GPIO_PINGPIO_Pin_4#defineDHT11_RCCRCC_APB2Periph_GPIOA//IO方向设置#defineDHT11_IO_IN(){DHT11_GPIO_TYPE->CRL&=0XFFF0FFFF;DHT11_GPIO_TYPE->CRL|=8<<16;}#defineDHT11_IO_OUT(){DHT11_GPIO_TYPE->CRL&=0XFFF0FFFF;DHT11_GPIO_TYPE->CRL|=3<<16;}////IO操作函数 #define DHT11_DQ_OUTPAout(4)//数据端口 PA4#define DHT11_DQ_INPAin(4)//数据端口 PA4#defineu8uint8_tu8DHT11_Init(void);//初始化DHT11u8DHT11_Read_Data(u16*temp,u16*humi);//读取温湿度值u8DHT11_Read_Byte(void);//读出一个字节u8DHT11_Read_Bit(void);//读出一个位u8DHT11_Check(void);//检测是否存在DHT11voidDHT11_Rst(void);//复位DHT11#endif#include"dht11.h"#include"sys.h"//复位DHT11voidDHT11_Rst(void) { DHT11_IO_OUT(); //SETOUTPUTDHT11_DQ_OUT=0; //拉低DQdelay_ms(20); //拉低至少18msDHT11_DQ_OUT=1; //DQ=1 delay_us(30); //主机拉高20~40us}//等待DHT11的回应//返回1:未检测到DHT11的存在//返回0:存在u8DHT11_Check(void) { u8retry=0; DHT11_IO_IN();//SETINPUT while(DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80us { retry++; delay_us(1); }; if(retry>=100)return1; elseretry=0;while(!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~80us { retry++; delay_us(1); }; if(retry>=100)return1; return0;}//从DHT11读取一个位//返回值:1/0u8DHT11_Read_Bit(void) { u8retry=0; while(DHT11_DQ_IN&&retry<100)//等待变为低电平 { retry++; delay_us(1); } retry=0; while(!DHT11_DQ_IN&&retry<100)//等待变高电平 { retry++; delay_us(1); } delay_us(40);//等待40us if(DHT11_DQ_IN)return1; elsereturn0; }//从DHT11读取一个字节//返回值:读到的数据u8DHT11_Read_Byte(void){u8i,dat;dat=0; for(i=0;i<8;i++) { dat<<=1; dat|=DHT11_Read_Bit();} returndat;}//从DHT11读取一次数据//temp:温度值(范围:0~50°)//humi:湿度值(范围:20%~90%)//返回值:0,正常;1,读取失败u8DHT11_Read_Data(u16*temp,u16*humi){ floatbuf[5]; u8i; DHT11_Rst(); if(DHT11_Check()==0) { for(i=0;i<5;i++)//读取40位数据 { buf[i]=DHT11_Read_Byte(); } if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]) { *humi=buf[0]; *temp=buf[2]; } }elsereturn1; //return0; }//初始化DHT11的IO口DQ同时检测DHT11的存在//返回1:不存在//返回0:存在 u8DHT11_Init(void){ GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(DHT11_RCC,ENABLE); //使能PB端口时钟 GPIO_InitStructure.GPIO_Pin=DHT11_GPIO_PIN; //PG11端口配置 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(DHT11_GPIO_TYPE,&GPIO_InitStructure); //初始化IO口 GPIO_SetBits(DHT11_GPIO_TYPE,DHT11_GPIO_PIN); //PG11输出高 DHT11_Rst();//复位DHT11 returnDHT11_Check();//等待DHT11的回应}#ifndef__DELAY_H#define__DELAY_H #include"sys.h"voiddelay_init(void);voiddelay_ms(u16nms);voiddelay_us(u32nus);#endif#include"delay.h"staticu8fac_us=0; //us延时倍乘数 staticu16fac_ms=0; //ms延时倍乘数,在ucos下,代表每个节拍的ms数 #ifSYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS定义了,说明要支持OS了(不限于UCOS).//当delay_us/delay_ms需要支持OS的时候需要三个与OS相关的宏定义和函数来支持//然后是3个函数://delay_osschedlock:用于锁定OS任务调度,禁止调度//delay_osschedunlock:用于解锁OS任务调度,重新开启调度//delay_ostimedly:用于OS延时,可以引起任务调度.#ifdef OS_CRITICAL_METHOD //OS_CRITICAL_METHOD定义了,说明要支持UCOSII #definedelay_osrunning OSRunning //OS是否运行标记,0,不运行;1,在运行#definedelay_ostickspersec OS_TICKS_PER_SEC //OS时钟节拍,即每秒调度次数#definedelay_osintnesting OSIntNesting //中断嵌套级别,即中断嵌套次数#endif//支持UCOSIII#ifdef CPU_CFG_CRITICAL_METHOD //CPU_CFG_CRITICAL_METHOD定义了,说明要支持UCOSIII #definedelay_osrunning OSRunning //OS是否运行标记,0,不运行;1,在运行#definedelay_ostickspersec OSCfg_TickRate_Hz //OS时钟节拍,即每秒调度次数#definedelay_osintnesting OSIntNestingCtr //中断嵌套级别,即中断嵌套次数#endif//us级延时时,关闭任务调度(防止打断us级延迟)voiddelay_osschedlock(void){#ifdefCPU_CFG_CRITICAL_METHOD //使用UCOSIII OS_ERRerr; OSSchedLock(&err); //UCOSIII的方式,禁止调度,防止打断us延时#else //否则UCOSII OSSchedLock(); //UCOSII的方式,禁止调度,防止打断us延时#endif}//us级延时时,恢复任务调度voiddelay_osschedunlock(void){ #ifdefCPU_CFG_CRITICAL_METHOD //使用UCOSIII OS_ERRerr; OSSchedUnlock(&err); //UCOSIII的方式,恢复调度#else //否则UCOSII OSSchedUnlock(); //UCOSII的方式,恢复调度#endif}//调用OS自带的延时函数延时//ticks:延时的节拍数voiddelay_ostimedly(u32ticks){#ifdefCPU_CFG_CRITICAL_METHOD OS_ERRerr; OSTimeDly(ticks,OS_OPT_TIME_PERIODIC,&err); //UCOSIII延时采用周期模式#else OSTimeDly(ticks); //UCOSII延时#endif}//systick中断服务函数,使用ucos时用到voidSysTick_Handler(void){ if(delay_osrunning==1) //OS开始跑了,才执行正常的调度处理 { OSIntEnter(); //进入中断 OSTimeTick(); //调用ucos的时钟服务程序 OSIntExit(); //触发任务切换软中断 }}#endif //初始化延迟函数//当使用OS的时候,此函数会初始化OS的时钟节拍//SYSTICK的时钟固定为HCLK时钟的1/8//SYSCLK:系统时钟voiddelay_init(){#ifSYSTEM_SUPPORT_OS //如果需要支持OS. u32reload;#endif SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //选择外部时钟HCLK/8 fac_us=SystemCoreClock/8000000; //为系统时钟的1/8#ifSYSTEM_SUPPORT_OS //如果需要支持OS. reload=SystemCoreClock/8000000; //每秒钟的计数次数单位为K reload*=1000000/delay_ostickspersec; //根据delay_ostickspersec设定溢出时间 //reload为24位寄存器,最大值:16777216,在72M下,约合1.86s左右 fac_ms=1000/delay_ostickspersec; //代表OS可以延时的最少单位 SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk; //开启SYSTICK中断 SysTick->LOAD=reload; //每1/delay_ostickspersec秒中断一次 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //开启SYSTICK#else fac_ms=(u16)fac_us*1000; //非OS下,代表每个ms需要的systick时钟数#endif} #ifSYSTEM_SUPPORT_OS //如果需要支持OS.//延时nus//nus为要延时的us数. voiddelay_us(u32nus){ u32ticks; u32told,tnow,tcnt=0; u32reload=SysTick->LOAD; //LOAD的值 ticks=nus*fac_us; //需要的节拍数 tcnt=0; delay_osschedlock(); //阻止OS调度,防止打断us延时 told=SysTick->VAL; //刚进入时的计数器值 while(1) { tnow=SysTick->VAL; if(tnow!=told) { if(tnow<told)tcnt+=told-tnow; //这里注意一下SYSTICK是一个递减的计数器就可以了. elsetcnt+=reload-tnow+told; told=tnow; if(tcnt>=ticks)break; //时间超过/等于要延迟的时间,则退出. } }; delay_osschedunlock(); //恢复OS调度 }//延时nms//nms:要延时的ms数voiddelay_ms(u16nms){ if(delay_osrunning&&delay_osintnesting==0) //如果OS已经在跑了,并且不是在中断里面(中断里面不能任务调度) { if(nms>=fac_ms) //延时的时间大于OS的最少时间周期 { delay_ostimedly(nms/fac_ms); //OS延时 } nms%=fac_ms; //OS已经无法提供这么小的延时了,采用普通方式延时 } delay_us((u32)(nms*1000)); //普通方式延时}#else//不用OS时//延时nus//nus为要延时的us数. voiddelay_us(u32nus){ u32temp; SysTick->LOAD=nus*fac_us; //时间加载 SysTick->VAL=0x00; //清空计数器 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //开始倒数 do { temp=SysTick->CTRL; }while((temp&0x01)&&!(temp&(1<<16))); //等待时间到达 SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器 SysTick->VAL=0X00; //清空计数器 }//延时nms//注意nms的范围//SysTick->LOAD为24位寄存器,所以,最大延时为://nms<=0xffffff*8*1000/SYSCLK//SYSCLK单位为Hz,nms单位为ms//对72M条件下,nms<=1864voiddelay_ms(u16nms){ u32temp; SysTick->LOAD=(u32)nms*fac_ms; //时间加载(SysTick->LOAD为24bit) SysTick->VAL=0x00; //清空计数器 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //开始倒数 do { temp=SysTick->CTRL; }while((temp&0x01)&&!(temp&(1<<16))); //等待时间到达 SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器 SysTick->VAL=0X00; //清空计数器 }#endif#ifndef__SYS_H#define__SYS_H #include"stm32f10x.h"//0,不支持ucos//1,支持ucos#defineSYSTEM_SUPPORT_OS 0 //定义系统文件夹是否支持UCOS //IO口操作宏定义#defineBITBAND(addr,bitnum)((addr&0xF0000000)+0x2000000+((addr&0xFFFFF)<<5)+(bitnum<<2))#defineMEM_ADDR(addr)*((volatileunsignedlong*)(addr))#defineBIT_ADDR(addr,bitnum)MEM_ADDR(BITBAND(addr,bitnum))//IO口地址映射#defineGPIOA_ODR_Addr(GPIOA_BASE+12)//0x4001080C#defineGPIOB_ODR_Addr(GPIOB_BASE+12)//0x40010C0C#defineGPIOC_ODR_Addr(GPIOC_BASE+12)//0x4001100C#defineGPIOD_ODR_Addr(GPIOD_BASE+12)//0x4001140C#defineGPIOE_ODR_Addr(GPIOE_BASE+12)//0x4001180C#defineGPIOF_ODR_Addr(GPIOF_BASE+12)//0x40011A0C#defineGPIOG_ODR_Addr(GPIOG_BASE+12)//0x40011E0C#defineGPIOA_IDR_Addr(GPIOA_BASE+8)//0x40010808#defineGPIOB_IDR_Addr(GPIOB_BASE+8)//0x40010C08#defineGPIOC_IDR_Addr(GPIOC_BASE+8)//0x40011008#defineGPIOD_IDR_Addr(GPIOD_BASE+8)//0x40011408#defineGPIOE_IDR_Addr(GPIOE_BASE+8)//0x40011808#defineGPIOF_IDR_Addr(GPIOF_BASE+8)//0x40011A08#defineGPIOG_IDR_Addr(GPIOG_BASE+8)//0x40011E08//IO口操作,只对单一的IO口!//确保n的值小于16!#definePAout(n)BIT_ADDR(GPIOA_ODR_Addr,n)//输出#definePAin(n)BIT_ADDR(GPIOA_IDR_Addr,n)//输入#definePBout(n)BIT_ADDR(GPIOB_ODR_Addr,n)//输出#definePBin(n)BIT_ADDR(GPIOB_IDR_Addr,n)//输入#definePCout(n)BIT_ADDR(GPIOC_ODR_Addr,n)//输出#definePCin(n)BIT_ADDR(GPIOC_IDR_Addr,n)//输入#definePDout(n)BIT_ADDR(GPIOD_ODR_Addr,n)//输出#definePDin(n)BIT_ADDR(GPIOD_IDR_Addr,n)//输入#definePEout(n)BIT_ADDR(GPIOE_ODR_Addr,n)//输出#definePEin(n)BIT_ADDR(GPIOE_IDR_Addr,n)//输入#definePFout(n)BIT_ADDR(GPIOF_ODR_Addr,n)//输出#definePFin(n)BIT_ADDR(GPIOF_IDR_Addr,n)//输入#definePGout(n)BIT_ADDR(GPIOG_ODR_Addr,n)//输出#definePGin(n)BIT_ADDR(GPIOG_IDR_Addr,n)//输入//以下为汇编函数voidWFI_SET(void); //执行WFI指令voidINTX_DISABLE(void);//关闭所有中断voidINTX_ENABLE(void); //开启所有中断voidMSR_MSP(u32addr); //设置堆栈地址#endif#include"sys.h"//THUMB指令不支持汇编内联//采用如下方法实现执行汇编指令WFIvoidWFI_SET(void){ __ASMvolatile("wfi"); }//关闭所有中断voidINTX_DISABLE(void){ __ASMvolatile("cpsidi");}//开启所有中断voidINTX_ENABLE(void){ __ASMvolatile("cpsiei"); }//设置栈顶地址//addr:栈顶地址__asmvoidMSR_MSP(u32addr){MSRMSP,r0 //setMainStackvalueBXr14}#ifndef__LCD_H#define__LCD_H #include"sys.h"#defineRSPCout(14) //RS???#defineENPCout(15)//ENvoidLCD1602_Init(void); //3????voidLCD1602_Write_Dat(u8dat);voidLCD1602_Write_Cmd(u8cmd);voidLCD1602_Show_Str(u8x,u8y,u8*str);voidLCD1602_Set_Cursor(u8x,u8y);voidLCD1602_Show_dat(u8x,u8y,u8dat); #endif#include"lcd.h"#include"delay.h"#include"stdio.h"#include"sys.h"voidGPIO_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);//GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;//GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_14|GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

温馨提示

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

评论

0/150

提交评论