课程设计报告-嵌入式单片机系统的硬软件设计.doc_第1页
课程设计报告-嵌入式单片机系统的硬软件设计.doc_第2页
课程设计报告-嵌入式单片机系统的硬软件设计.doc_第3页
课程设计报告-嵌入式单片机系统的硬软件设计.doc_第4页
课程设计报告-嵌入式单片机系统的硬软件设计.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1 设计目的本课程设计旨在帮助同学们进一步掌握单片机理论知识,理解嵌入式单片机系统的硬软件设计,加强对实际应用系统设计的能力。通过本课程的学习,使同学们掌握单片机程序设计和微机接口应用的基本方法,并能综合运用本科阶段所学软、硬件知识分析实际问题,提高解决工程设计实际问题的能力,为工业生产、科学研究和实验设备等领域的单片机应用和开发打下良好的基础。1.1 对字符液晶显示模块的工作原理,如初始化、清屏、显示、调用及外特性有较清楚的认识,并会使用lcd(液晶显示模块)实现计算结果的显示;掌握液晶显示模块的驱动和编程,设计lcd和单片机的接口电路,以及利用单片机对液晶模块的驱动和操作; 1.2 在充分分析内部逻辑的概念,进行软件和调试,学会使用,并能够以其为平台设计出具有四则运算能力简易计算器的硬件电路和软件程序。2 设计要求2.1认真查阅资料;根据题目要求完成相关程序及硬件电路设计;认真书写报告,完成相关课程设计。2.2 a模仿一般的计算器设计一个能实现+/-运算及显示输入的数值和结果的简单10进制计算器。b能够计算小数3 课程设计的进度安排3.1单片机原理及c语言的学习。学习at89c51的内部结构、lcd液晶显示屏显示接口技术;以及mcs-51系列单片机的指令系统及c语言。3.2、基于proteus软件环境下的单片机系统仿真。熟习proteus元器件库、元件属性修改、源程序加载、器件布线等。3.3、查阅相关资料,选题。查阅关于显示器接口、单片机与键盘接口等方面的相关资料(单片机引用技术(西安电子科技大学出版社)、单片机应用系统开发实例导航(人民邮电出版社)。3.4、根据选题内容,设计“基于at89c51的简单计算器系统”。实现以lcd液晶显示屏为主的显示模块、编码键盘模块等模块,以及c语言源程序的编写。3.5、后期系统调试,撰写课程设计报告。3.6、修改报告,定稿。4 设计原理及结果 摘要:随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其是微电子技术的发展,犹如雨后春笋般的变化。电子产品的更新速度快就不足惊奇了。计算器在人们的日常中是比较的常见的电子产品之一。如何使计算器技术更加的成熟,充分利用已有的软件和硬件条件,设计出更出色的计算器,使其更好的为各个行业服务,成了如今电子领域重要的研究课题。 科技的进步需要技术不断的提升。一块大而复杂的模拟电路花费了您巨大的精力,繁多的元器件增加了您的成本。而现在,只需要一块几厘米平方的单片机,写入简单的程序,就可以使您以前的电路简单很多。相信您在使用并掌握了单片机技术后,不管在您今后开发或是工作上,一定会带来意想不到的惊喜。 现在应用较广泛的是科学计算器,所谓科学计算器,与我们日常所用的简单计算器有较大差别:只能进行正数加、减、乘、除四则运算的计算器叫做简单计算器;科学计算器是指能兼容正数的四则运算和乘方、开方运算,具有指数、对数、三角函数、反三角函数及存储等计算功能的计算器。 计算器的未来是小型化和轻便化,如使用太阳能提供电池的计算器,使用asic设计的计算器,如使用纯软件实现的计算器等,随着社会的发展,知识的更新,各行各业的需要带动了电子产品的发展,未来的智能化计算器将是我们的发展方向,更希望成为现代社会应用广泛的计算工具。 关键词:单片机;计算器;模拟电路;4.1、相关技术和基础理论4.1.1.1 at89c51特点at89c51主要功能特性: (1)、 兼容mcs51指令系统 (2)4k可反复擦写(1000次)flash rom (3) 32个双向i/o口 (4)可编程uarl通道 (5) 两个16位可编程定时/计数器 (6) 全静态操作0-24mhz (7) 1个串行中断 (8) 128x8bit内部ram (9) 两个外部中断源 (10) 共6个中断源 (11) 可直接驱动led (12) 3级加密位 (13) 低功耗空闲和掉电模式 (14) 软件设置睡眠和唤醒功能4. 1.1.2 at89c51的功能描述 at89c51是一个低电压,高性能cmos 8位单片机,片内含4k bytes的可反复擦写的flash只读程序存储器和128 bytes的随机存取数据存储器(ram),器件采用atmel公司的高密度、非易失性存储技术生产,兼容标准mcs-51指令系统,片内置通用8位中央处理器和flash存储单元,内置功能强大的微型计算机的at89c51提供了高性价比的解决方案。 at89c51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(i/o)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,at89c51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和flash存储器结合在一起,特别是可反复擦写的flash存储器可有效地降低开发成本。4. 1.1.3 at89c51引脚功能at89c51 单片机为40 引脚芯片见图1.1。 图1.1 at89c51引脚图 口线:p0、p1、p2、p3 共四个八位口。 p0 p0口是一个8位漏极开路的双向i/o口。作为输出口,每位能驱动8个ttl逻辑电平。对p0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,p0口也被作为低8位地址/数据复用。在这种模式下,p0具有内部上拉电阻。在flash编程时,p0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。 p1 p1 口是一个具有内部上拉电阻的8 位双向i/o 口,p1 输出缓冲器能驱动4 个ttl 逻辑电平。对p1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(iil)。此外,p1.0和p1.2分别作定时器/计数器2的外部计数输入(p1.0/t2)和时器/计数器2的触发输入(p1.1/t2ex),具体如下表所示。在flash编程和校验时,p1口接收低8位地址字节。引脚号第二功能p1.0 t2(定时器/计数器t2的外部计数输入),时钟输出p1.1 t2ex(定时器/计数器t2的捕捉/重载触发信号和方向控制)p1.5 mosi(在系统编程用)p1.6 miso(在系统编程用)p1.7 sck(在系统编程用) p2 p2 口是一个具有内部上拉电阻的8 位双向i/o 口,p2 输出缓冲器能驱动4 个ttl 逻辑电平。对p2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(iil)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行movx dptr)时,p2 口送出高八位地址。在这种应用中,p2 口使用很强的内部上拉发送1。在使用8位地址(如movx ri)访问外部数据存储器时,p2口输出p2锁存器的内容。在flash编程和校验时,p2口也接收高8位地址字节和一些控制信号。 p3 p3 口是一个具有内部上拉电阻的8 位双向i/o 口,p2 输出缓冲器能驱动4 个ttl 逻辑电平。对p3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(iil)。p3 口的第二功能如表1.2 所示。 表1.2 rst: 复位输入。晶振工作时,rst脚持续2 个机器周期高电平将使单片机复位。看门狗计时完成后,rst 脚输出96 个晶振周期的高电平。特殊寄存器auxr(地址8eh)上的disrto位可以使此功能无效。disrto默认状态下,复位高电平有效。ale/prog:地址锁存控制信号(ale)是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在flash编程时,此引脚(prog)也用作编程输入脉冲。在一般情况下,ale 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ale脉冲将会跳过。如果需要,通过将地址为8eh的sfr的第0位置“1”,ale操作将无效。这一位置“1”,ale 仅在执行movx 或movc指令时有效。否则,ale 将被微弱拉高。这个ale 使能标志位(地址为8eh的sfr的第0位)的设置对微控制器处于外部执行模式下无效。psen:外部程序存储器选通信号(psen)是外部程序存储器选通信号。当at89c51从外部程序存储器执行外部代码时,psen在每个机器周期被激活两次,而在访问外部数据存储器时,psen将不被激活。ea/vpp:访问外部程序存储器控制信号。为使能从0000h 到ffffh的外部程序存储器读取指令,ea必须接gnd。为了执行内部程序指令,ea应该接vcc。在flash编程期间,ea也接收12伏vpp电压。xtal1:振荡器反相放大器和内部时钟发生电路的输入端。xtal2:振荡器反相放大器的输出端。xtal1,xtal2接石英晶体振荡器。如下图所示外接晶体引脚图: c2 xtal2 悬空 xtal2 c1 xtal1 外部振荡信号 xtal1 gnd gnd 接地 接地a内部方式 b外部方式 1.3晶振外接结构引脚图xtal1是片内振荡器的反相放大器输入端,xtal2则是输出端,使用外部振荡器时,外部振荡信号应直接加到xtal1,而xtal2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12mhz,时钟频率就为6mhz。晶振的频率可以在1mhz-24mhz内选择,在本设计电路中选用了12mhz。电容取20pf左右。机器周期12时间周期,如12mhz的机器周期为1微秒。控制或复位引脚reset 此脚为高电平时(约2个机器周期)可将单片机复位。rst/vpd当出现两个机器周期高电平时,单片机复位。复位后,p0p3输出高电平;sp寄存器为07h;其它寄存器全部清0;不影响ram状态。如图1.4所示。 图1.4复位电路4. 1.1.4 at89c51的编程方法 编程前,须按编程模式表设置好地址、数据及控制信号;顺序如下: 在地址线上加上要编程单元的地址信号。 在数据线上加上要写入的数据字节。 激活相应的控制信号。 将ea/vpp端加上+12v编程电压。 每对flash存储阵列写入一个字节或每写入一个程序机密位,加上一个ale/prog编程脉冲。每个字节写入周期是自身定时的,大多数约为50us。改变编程单元的地址和写入的数据,重复步骤,直到全部文件编程结束。(5)单片机的现状及发展方向单片机是为了工业控制需要满足而诞生的,是自动控制系统的核心部件,因而也主要用于工业控制、智能化仪器仪表、家用电器中。它具有体积小,功能多、价格低、使用方便、系统设计灵活等优点,应用领域不断扩大,除了工业控制,智能化仪表,通讯,家用电器外,在智能化高档电子玩具产品中也大量采用单片机芯片作为核心控制部件。由于单片机主要面向工业控制,工作环境比较恶劣,入高温,强电磁干扰,甚至含有腐蚀性气体,在太空中工作的单片机控制系统,还必须具有抗辐射能力,这决定了单片机cpu于通用微机cpu具有不同的技术特征和发展方向:(1) 可靠性高;(2) 控制功能往往很强,数值计算交叉;(3) 指令系统比通用微处理器慢的多;(4) x系列芯片取代;(5) 抗干扰性强,工作温度范围宽。4.1.2 lcd的特点1、低压微功耗2、平板型结构 3、被动显示型(无眩光,不刺激人眼,不会引起眼睛疲劳) 4、显示信息量大(因为像素可以做得很小) 5、易于彩色化(在色谱上可以非常准确的复现) 6、无电磁辐射(对人体安全,利于信息保密) 7、长寿命(这种器件几乎没有什么劣化问题,因此寿命极长,但是液晶背光寿命有限,不过背光部分可以更换)4.2设计原理分析4.2.1 设计方案的确定 按照设计要求,本课题需要使用lcd液晶显示屏和编码键盘。故选择静态显示和用编码键盘。使用lcd液晶显示屏显示运算结果。 主程序进行初始化,其他的程序选择模块式的方式。首先对每个模块进行调试, 当模块调试成功后,逐一的加入主程序中,最后完成整个软件部分的设计。4.3计算器硬件方案及硬件资源分配4.3.1 硬件资源分配主要用到的硬件:at89c51 lcd液晶显示屏 编码键盘 硬件分配:1、p0、p3口:做为输出口,控制lcd液晶显示屏显示数据的结果。2、p1口:做为输入口,与键盘连接,实现数据的输入。3、lcd液晶显示屏显示输出。4.3.2 系统的硬件设计为了更好的实现系统得功能,硬件电路的设计应该遵循以下原则:(1) 优化硬件电路 采用软件设计与硬件设计相结合的方法;尽管采用软件来实现硬件系统的功能时,也许响应时间会比单纯使用硬件时长,而且还要占用微处理器(mcu)的时间;但是,用软件实现硬件的功能可以简化硬件结构,提高电路的可靠性。所以,在设计本系统得时候,在满足可靠性和实时性的前提下,尽可能的通过软件来实现硬件功能。(2)可靠性及抗干扰设计根据可靠性设计理论,系统所用芯片数量越少,系统的平均无故障时间越长。而且,所用芯片数量越少,地址和数据总线在电路板上受干扰的可能性也就越小。因此,系统的设计思想是在满足功能的情况下力争使用较少数量的芯片。 (3)灵活的功能扩展功能扩展是否灵活是衡量一个系统优劣的重要指标。一次设计往往不能完全考虑到系统的各个方面,系统需要不断完善以及进行功能升级。进行功能扩展时,应该在原有设计的基础上,通过修改软件程序和少量硬件完成。对于本系统而言,就是要求在系统硬件不变的情况下,能够通过修改软件程序,完成功能的升级和扩展。根据第提出的系统设计方案,结合以上三条原则,确定了系统硬件的设计。计算器主要由以下一些功能模块构成:编码键盘模块、lcd液晶显示屏模块等。该系统的硬件设计采用了模块化的设计方法。at89c51 单片机与lcd液晶显示屏显示电路是整个电路的核心,它们实现系统的功能要求。 简易计算器主要包括:键盘电路,显示电路。 首先,来看一下总体硬件结构。(如图3.1 所示为整个系统的原理图) 图3.1计算器原理图 前面叙述了该系统的设计说明,系统采用了比较简单的设计方案,所以该系统的硬件设计的总外围电路不会产生过多的干扰。在下面的阐述中,对系统的外围电路分别予以介绍。键盘部分采用编码键盘,显示部分采用lcd液晶显示屏完全能够很好的实现显示方面的要求。4.3.3 键盘电路的设计 键盘可分为两类:编码键盘和非编码键盘。编码键盘是较多按键(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。通用计算机使用的标准键盘就是编码键盘。在智能仪器中,使用并行接口芯片8279或串行接口芯片hd7279均可以组成编码键盘,同时还可以兼顾数码管的显示驱动,其相关的接口电路和接口软件均可在芯片资料中得到。当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计 本课题为了设计方便,选用的是编码键盘。如图3.2 图3.2编码键盘电路4.3.4 显示电路的设计 当系统需要显示少量数据时,采用lcd液晶显示屏进行显示是一种经济实用的方法。p0口作为液晶显示的数据端口,p3.5-p3.7口作为其控制端口,控制lcd液晶显示屏显示输出数据。最终电路如图3.3所示: 图3.3 lcd液晶显示屏显示4.4 计算器的软件设计4.4.1计算器的软件规划 简易计算器的程序主要包括以下功能模块: (1) 定时查键模块,分为读键程序、判键程序段、运算操作子程序等部分; (2) 基于lcd液晶显示屏的显示模块; (3) 主模块,为系统的初始化。 4.4.2 键盘扫描的程序设计 键盘扫描子程序,首先读出p1的低四位,然后读出p1口的高四位。然后键值并显示缓存。然后将键如的值转换为ascii码然后就可以软件来设置硬件按键各个键代表的内容。 读键程序使用的是反转法读键,不管键盘矩阵的规模大小,均进行两次读键。第一次所有行线均输出低电平,从所有读入键盘信息(列信息);第二次所有列线均输出低电平,从所有行线读入键盘信息(行信息)。数字键按下则将相应的数字送入缓存区,功能键按下则执行相应的程序。 4.4.3 显示模块的程序设计 显示模块程序首先要对显示模块进行初始化;然后控制光标的位置;定义液晶显示的控制端口,用sbit指令完成;然后设置清屏、关闭显示、归位、开显示、显示位置的首地址等等。显示模块的流程图如图4.1所示: 图4.14.4.4 主程序的设计 主程序主要是用来对lcd液晶显示屏进行初始化的4.4.5 软件的可靠性设计 提高本仪器其可靠性措施主要有: (1) 为防止程序跑飞,软件中设置了软件陷阱。 (2) 为防止程序死循环,软件中使用了看门狗技术。 4.5 程序代码4.5.1主程序#include #include lcd1602.h#include keypade.h#include operation.hvoid key_press()char a16;/第一次输入数字存在b16里,按下中间计算符后,循环alen=blen;清空blenchar b16;/再次输入数字仍存在b16里,按下等号后,计算a,b,结果存在blen;char key;char i;char arc;/运算符char len;/数字长度bitsign;/正负号bit point;/小数点key=key_get();/数字键处理if(key=12) key=7;else if(key=13) key=8;else if(key=14) key=9;else if(key=22) key=4;else if(key=23) key=5;else if(key=24) key=6;else if(key=32) key=1;else if(key=33) key=2;else if(key=34) key=3;else if(key=42) key=0;else if(key=11) key=c;/清空else if(key=21) key=s;/正负号else if(key=31) key=%;else if(key=41) key= ; /空格else if(key=43) key=.;else if(key=44) key=;else if(key=45) key=+;else if(key=25) key=-;else if(key=15) key=*;else if(key=16) key=/;else if(key=26) key=m;/mrcelse if(key=36) key=d;/m-else if(key=46) key=a;/m+else key=e;/错误if(len0;len-)blen= ;b0=0;b1=.;lcd_moveto(1,14);lcd_printf(0.);if(key0x2f&key0x3a)if(len=0&key=0)lcd_moveto(1,14);lcd_printf(0.);/第一位输入0不响应else if(point=0)blen=key;blen+1=.;len+;elseblen+1=key;len+;/小数点处理else if(key=.)/point=1,已存在小数点/len=15,最后一位按下小数点if(point=0)if(len0)if(sign=0&len0;i-) bi=bi-1;b0=-;sign=1;else if(sign=1)for(i=0;ilen;i+) bi=bi+1;sign=0;len-;lcd_moveto(1,14-len);lcd_printf( );else if(key=%)else if(key=+|key=-|key=*|key=/)/运算符if(arc=0)for(i=0;i16;i+)/把第一个数存入aai=bi;bi= ;b0=0;b1=.;len=0;sign=0;point=0;arc=key;elseif(arc=/&point=len)key=e;elseoperation(a,b,arc);for(i=0;i16;i+)/清空bbi= ;b0=0;b1=.;len=0;sign=0;point=0;arc=key;else if(key=)/等号if(arc=/&point=len)key=e;else if(arc!=0)operation(a,b,arc);for(i=0;i16;i+)/清空bbi= ;b0=0;b1=.;len=0;sign=0;point=0;arc=0;/清除计算标志while(p3_2=0)if(key=c)/清零lcd_moveto(0,0);lcd_printf( );lcd_moveto(1,0);lcd_printf( 0.);for(i=0;i16;i+)ai= ;bi= ;b0=0;b1=.;len=0;sign=0;point=0;arc=0;else if(key=e)/意料外的按键lcd_init();lcd_printf(error!);for(i=0;i16;i+)ai= ;bi= ;b0=0;b1=.;len=0;sign=0;point=0;arc=0;elselcd_moveto(0,13);lcd_printf( );lcd_moveto(0,0);lcd_printf(a);if(len=0)lcd_moveto(1,0);lcd_printf( 0.);elselcd_moveto(1,15-len);lcd_printf(b);4.5.2 lcd液晶显示屏模块程序#include /*【端口设置宏定义】*/#define lcdport p0/lcd数据接口。#define lcdbf p0_7/读写操作使能:1-禁止;0-允许.#define lcdrs p3_5/寄存器选择信号:0-数据寄存器;1-指令寄存器。#define lcdrw p3_6/读写信号:1-读lcd;0-写lcd。#define lcde p3_7/片选信号,当输入下降沿信号时,执行指令或传送数据。/*【n ms延时】*/void lcd_delay(int n)int i;for(;n0;n-)for(i=0;i122;i+)/1ms延时 /*【忙检测】*/void detect()lcde=0; lcdport=0xff;lcdrs=0; lcdrw=1;lcde=1;lcd_delay(1);while(lcdbf)lcde=0; lcd_delay(1); lcde=1; lcd_delay(1);lcde=0; /*【不检测忙的指令写入】*/void nwr_cmd(char cmd)lcdrs=0;lcdrw=0;lcdport=cmd;lcde=1;lcd_delay(1);lcde=0;/*【不检测忙的数据写入】*/*void nwr_data(char dat)这个貌似没用,凑数的lcdrs=1;lcdrw=0;lcdport=dat;lcde=1;lcd_delay(1);lcde=0;*/*【带忙检测的指令写入】*/void bwr_cmd(char cmd)detect();lcdrs=0;lcdrw=0;lcdport=cmd;lcde=1;lcd_delay(1);lcde=0;/*【带忙检测的数据写入】*/void bwr_data(char dat)detect();lcdrs=1;lcdrw=0;lcdport=dat;lcde=1;lcd_delay(1);lcde=0;/*【行列坐标设定】*/void lcd_moveto(unsigned char x, unsigned char y)if(x=0)bwr_cmd(0x80|y);if(x=1)bwr_cmd(0xc0|y);/*【字符串输出】*/ void lcd_printf(unsigned char *str)while(*str!=0)bwr_data(*str);str+;/*【初始化】*/void lcd_init(void)lcd_delay(10);nwr_cmd(0x38);lcd_delay(5);nwr_cmd(0x38);lcd_delay(5);nwr_cmd(0x38);bwr_cmd(0x38);/显示模式设置bwr_cmd(0x08);/显示关闭bwr_cmd(0x01);/显示清屏bwr_cmd(0x06);/显示光标移动设置,指针减一bwr_cmd(0x0c);/显示开及光标设置,不显示光标4.5.3 编码键盘模块程序#include /*【n ms延时】*/*void key_delay(int n)int i;for(;n0;n-)for(i=0;i122;i+)/1ms延时 */*【键码处理】*/char key_get()char key,rn,ln;p2=p2|0x0f;/扫描行p1=p1&0xc0;rn=p2&0x0f;p1=p1|0x3f;/扫描列p2=p2&0xf0;ln=p1&0x3f;p2=p2|0x0f;p1=p1&0xc0;if(rn=0x0e)key=10;else if(rn=0x0d)key=20;else if(rn=0x0b)key=30;else if(rn=0x07)key=40;if(ln=0x3e)key=key+1;else if(ln=0x3d)key=key+2;else if(ln=0x3b)key=key+3;else if(ln=0x

温馨提示

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

评论

0/150

提交评论