单片机音乐播放器方案设计书报告_第1页
单片机音乐播放器方案设计书报告_第2页
单片机音乐播放器方案设计书报告_第3页
单片机音乐播放器方案设计书报告_第4页
单片机音乐播放器方案设计书报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、1.1显示电路 .11.2时钟电路 .12.电子音乐产生原理 .12.1音调 .12.2节拍 .33.系统硬件设计 .63.1系统总框图 .63.2电路设计 .73.2.1 单片机时钟电路 .73.2.2. 复位电路 .83.2.3电源电路 .83.2.4. USB 程序下载电路 .93.2.5. 蜂鸣器驱动电路 . 10 显示电路 .113.2.63.2.8 矩阵电路 .114.系统软件设计 .125.总结与展望 .146.参考文献 .14附 录.15附录 1 系统总电路 .15附录 2 源代码 .161.方案与论证1.1 显示电路方案 .1:采用 LED 数码管来显示(电路简单,成本低);

2、方案 .2:采用 LCD 液晶显示器来显示(电路简单,成本高);方案 3:采用 TFT 真彩液晶显示(电路复杂,成本高,但显示的分辨率高);综上所述,选择方案一进行设计。1.2 时钟电路方案 .1:选择 DS1302实时时钟芯片来实现音乐播放器(时间准确,但要增加额外开销);方案 .2:选择单片机的软件实时来实现音乐播放器(灵活性高,时间不准确);方案 .3:选择单片机内部可编程定时器来实现音乐播放器(在不增加额外的开销前提下,时间可以做到准确)。综上所述,选择方案三进行设计。2.电子音乐产生原理单片机发音原理:单片机演奏音乐基本是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样

3、能奏出多种音色的声音,但一定要弄清楚两个概念即可,也就是 “音调 ”和 “节拍 ”。·音调表示一个音符唱多高的频率。·节拍表示一个音符唱多长的时间。下面,就此两点,阐述说明:2.1 音调在音乐中所谓 “音调 ”,其实就是我们常说的 “音高 ”。在音乐中常把中央 C 上方的 A 音定为标准音高,其频率 f=440Hz ,其余与其比较。 f1 和 f2 为两个音符,当这两个音符的频率相差一倍时,也即 f2=2 ×f1 时,则称 f2 比 f1 高一个倍频程。在音乐中 1 与 , 2 与 ,正好相差一个倍频程,在音乐学中称它相差一个八度音。在一个八度音内,有 12 个半

4、音。以 1i 八音区为例, 12 个半音是: 1 1、 12、22、 23、3 4、44, 45、5 一 5、 56、66、 6 7、 7 i 。这 12 个音阶的分度基本上是以对数关系来划分的。如果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调的频率。确定一个频率所对应的定时器的定时初值的方法:以标准音高A 为例:标准音高A 的频率 f = 440 Hz, 其对应的周期为:T = 1/ f = 1/440 =2272因此,需要在单片机I/O 端口输出周期为T =2272s的方波脉冲,如下图所示。s图 1方波脉冲由上图可知 ,单片机上对应

5、喇叭的I/O 口来回取反的时间应为:t = T/2 = 2272/2 = 1136s处分此两种方式叙述,请比较选用,其实结果相同:.这个时间 t 也就是单片机上定时器应有的中断触发时间。一般情况下,单片机奏乐时,其定时器为工作方式1,它以振荡器的十二分频信号为计数脉冲。设振荡器频率为f0,则定时器的予置初值由下式来确定:t = 12×( TALLTHL ) / f0式中,TALL = 216 = 65536 , THL 为定时器待确定的计数初值。因此定时器的高低计数器的初值为:TH =THL / 256 = ( TALLt ×f0/12) / 256TL = THL % 2

6、56 = ( TALLt×f0/12) %256 将 t=1136 s代入上面两式(注意:计算时应将时间和频率的单位换算一致),即可求出标准音高A 在单片机晶振频率 f0=12Mhz ,定时器在工作方式1 下的定时器高低计数器的预置初值为: TH440Hz = (65536 1136 * 12/12) /256 = FBH TL440Hz = (655361136 * 12/12)%256 = 90H根据上面的求解方法,我们就可求出其他音调相应的计数器的予置初值。.假设单片机晶振频率f0=12Mhz ,定时器在工作方式 1 计数脉冲值与频率的关系为:N=FI ÷2÷

7、;FR其中N 计数值; FI 内部计时一次为1us,故其频率为1MHz ; FR 要产生的频率。其计数值的求法为:T=65536 N=65536 FI ÷2÷FR 则标准音高A(频率 f = 440 Hz )的计数值为:T=65536 N=65536 FI ÷2÷FR=65536 1000000÷2÷ FR =65536 500000/440=65536 1136=64400=0FB90H 下面给出 C 调各音符频率值和定时器定时初值:(晶振频率f0=12Mhz ,定时器在工作方式1)表 1 C 调各音符频率值和定时初值对照表C 调1

8、1#22#344#55#66#7音符频率262277293311329349370392415440466494HzTH/TLF88BF8F2F9B7FA14FA66FAB9FB03FB4AFB8FFBCFFBCFFC0BC 调11#2#4#5#6#音符频率523553586621658697739783830879931987HzTH/TLFC43FC78FCABFCDBFD08FD33FD5BFD81FDA5FDC7FDE7FE05C 调11#22#344#55#66#7音符频率104511061171124113161393147615631658175518601791HzTH/TLF

9、B21FE3CFE55FE6DFE84FE99FEADFEC0FE02FEE3FEF3FF02对于非 C 调的歌曲,要对各音符的频率做相应的变化调号 音乐上指用以确定乐曲主音高度的符号。升 C 调: 1#C ,也就是降 D 调: 1 bD; 277(频率)升 D 调: 1 #D,也就是降 E 调: 1 bE; 311升 F 调: 1 #F,也就是降 G 调: 1bG; 369升 G 调: 1 #G,也就是降 A 调: 1 bA ; 415升 A 调: 1 #A ,也就是降 B 调: 1 bB。 4所谓 1 A ,就是说,这首歌曲的 “导 ”(即作为基调的中音 DO )要唱得同 A 音符一样高,

10、其它各音符依次向后递推,通常把这首歌曲叫做 A 调歌曲,或叫 “唱 A 调 ”。 1C,就是说,这首歌曲的 “导 ”要唱得同 C 一样高,或者说 “这歌曲唱 C 调”。同样是 “导 ”,不同的调唱起来的高低是不一样的。在递推的时候要严格按各音符间音程关系进行(全音还是半音,只有 3 4 和 7 i 之间是半音关系,其它音之间都是全音关系),下面以 1=D 调进行说明。参照上面的钢琴键盘图和表 ?,确定出 D调各音符对应的频率值为:(到后来制表时就以各音符对应的新频率值确定定时初值)?节拍音符的节拍我们可以举例来说明。在一张乐谱中,我们经常会看到这样的表达式,如 ?C?、 ?G?等等,这里 ?C

11、?G表示乐谱的曲调,和我们前面就是用来表示节拍的。以为例加以说明,它表示乐谱中所谈的音调有很大的关联,、以四分音符为节拍,每一小结有三拍。比如:其中 1 、2 为一拍, 3、 4、 5 为一拍, 6 为一拍共三拍。1 、 2 的时长为四分音符的一半,即为八分音符长,3、4 的时长为八分音符的一半,即为十六分音符长,5 的时长为四分音符的一半,即为八分音符长,6 的时长为四分音符长。那么一拍到底该唱多长呢?一般说来,如果乐曲没有特殊说明,一拍的时长大约为400 500ms 。我们以一拍的时长为400ms 为例,则当以四分音符为节拍时,四分音符的时长就为400ms,八分音符的时长就为200ms,十

12、六分音符的时长就为100ms。若乐谱有特别说明则另行对待。如有乐谱中注明每分钟86 拍,则一拍时间为60/86s=698ms。可见,在单片机上控制一个音符唱多长可采用循环延时的方法来实现。首先,我们确定一个基本时长的延时程序,比如说以十六分音符的时长为基本延时时间,那么,对于一个音符,如果它为十六分音符,则只需调用一次延时程序,如果它为八分音符,则只需调用二次延时程序,如果它为四分音符,则只需调用四次延时程序,依次类推。具体来说, . 每个音符使用一个字节,字节的高4 位代表音符的高低,低4 位代表音符的节拍,节拍与节拍码的对照,如下表所示。表 2 节拍与节拍码的对照表节拍码节拍数节拍码节拍数

13、1(十六分音符)1/4 拍 为 1DELAY11/8 拍2(八分音符)2/4 拍21/4 拍33/4 拍33/8 拍4(四分音符)1拍41/2 拍51又1/4拍55/8 拍61又1/2拍63/4 拍8(二分音符)2拍81拍10 A2又1/2拍A1又 1/4拍12 C3拍C1又 1/2拍15 F3又3/4拍16(全音符)4拍. 以 1/4 拍(十六分音符)为一个基准定时单位(1DELAY),则 2/4拍(八分音符)为2DELAY , 1 拍(四分音符)为4DELAY , 2 拍(二分音符)为8DELAY ,4 拍(全音符)为16DELAY 。 1/4 和 1/8 节拍的时间设定,如下表所示。表

14、3 各调节拍时间设定表1/4 节拍的时间设定1/8 节拍的时间设定曲调值DELAY曲调值DELAY调 4/4125ms调 4/462ms调 3/4187ms调 3/494ms调 2/4250ms调 2/4125ms通过上面介绍的音符音调和节拍的相关知识,以及它们在单片机系统中的确定方法,我们就可以在单片机上实现演奏音乐了。具体的实现方法为:将乐谱中的每个音符的音调及节拍变换成相应的音调参数和节拍参数,将他们做成数据表格,存放在存储器中通过程序取出一个音符的相关参数,播放该音符,该音符唱完后,接着取出下一个音符的相关参数,如此直到播放完毕最后一个音符,根据需要也可循环不停地播放整个乐曲。请注意,

15、用单片机上实现音乐演奏关键在于,根据乐谱制作出数据表格,编程在其次,这个过程很耗费时间和精力。另外,对于乐曲中的休止符,一般将其音调参数设为FFH 或 00H,其节拍参数与其它音符的节拍参数确定方法一致,乐曲结束用节拍参数为00H 来表示。实例说明建立音乐的方法(1)建立简谱对应的简谱码、 T 值及节拍数表,画在草稿纸上。先对照歌曲的简谱把其中所有出现的音符找出,从低音到高音依次排序,确定各音的数值(编写查表程序时将此值减1,即得对应音符相对于TABL1 表头的偏移量)。对于不是 C 调的歌曲,要对各音符的频率做相应的变化。对照歌曲的简谱确定各音符的节拍数相对于基准定时单位的倍数,从小到大排列

16、。各音符时值的倍数关系是确定不变的,关键要正确确定其值。这需要懂一点简谱知识才能准确的确定出乐谱中音符节拍数。以歌曲兰花草为例,如下表:表 4简谱发音(这一列知道就行不必写简谱码T 值节拍码节拍数出)低 3低音 MI16402111/4 拍低 4低音 FA26410322/4 拍低 5低音 SO36426033/4 拍低 6低音 LA46440041 拍低 7低音 TI56425451又1/4拍中 1中音 DO66458061又1/2拍中 2中音 RE76468482 拍中 3中音 MI86477710 A2又1/2拍中 4中音 FA96482012 C3 拍中 5中音 SOA6489815

17、F3又3/4拍中 6中音 LAB64968164 拍中 7中音 TIC65030休止符不发音0关定时器注:以四分音符为一拍,现在以1/4拍为定时的基准单位,为1DELAY 。则 1 拍应为4 倍DELAY ,依次类推。所以只要求得各音符频率对应的定时 T 值建立在1/4 拍的DELAY时间,其余的节拍数就是它的倍数。(2)把TABLE1 表。各音符频率对应的定时值表TABLE1:。DW 64021,64103,64260,64400DW 64524,64580,64684,64777DW64820,64898,64968,65030 ( 3 )根据第一步建立的表,建立乐曲对应音符节拍码表TAB

18、LE ,其中简谱码(音符)在高 4 位(但是此种方法只能排 16 个音,若乐谱中音符较多可占一个字节来表示),节拍码(节拍数)在低 4 位(但此种方法也只能最大延时 15 个基准定时单位的时间)。 TABLE: 。歌曲兰花草的音符与节拍码表。高 4 位为简谱码(音符),低 4 位为该音符对应的节拍数DB 42H,82H,82H,82H,84H,02,72HDB62H,72H,62H,52H,48HDB0B2H,0B2H,0B2H,0B2H,0B4H,02H,0A2HDB12H,0A2H,0D2H,92H,88HDB82H,0B2H,0B2H,0A2H,84H,02H,72HDB 62H,72H

19、,62H,52H,44H,02H,12HDB 12H,62H,62H,52H,44H,02H,82HDB 72H,62H,52H,32H,48HDB 00H3.系统硬件设计3.1 系统总框图电路主要由 AT89C51芯片, LED发光二极管,喇叭,晶振电路组成,由引脚输出定时器产生的各种固定频率的方波信号,然后由喇叭产生各种频率的声音。同理,方波信号通过发光二极管可以使二极管闪烁发光,产生韵律灯的效果。由于该方案中使用内部振荡电路,XTAL1、 XTAL2引脚外界石英晶体和微调电容构成的晶振电路。晶振电路复位电路存储器扩展电路数码管4*4 矩阵电路AT89C51蜂鸣器图 2系统框图3.2电路设

20、计音乐播放器的硬件电路主要是以下8大部分:单片机时钟电路C4X 13 0pY211. 059 2MC5X 23 0p图 3 单片机时钟电路单片机时钟电路是用来配合外部晶体实现振荡的电路,这样可以为单片机提供运行时钟,如果运行时钟为0 的话,单片机就不工作,当然超出单片机的工作频率的时钟也会导致单片机不工作。在MCS 51 单片机片内有一个高增益的反相放大器,反相放大器的输入端为XTAL1 ,输出端为 XTAL2 ,由该放大器构成的振荡电路和时钟电路一起构成了单片机的时钟方式。根据硬件电路的不同,单片机的时钟连接方式可分为内部时钟方式和外部时钟方式。在内部方式时钟电路中,必须在XTAL1 和 X

21、TAL2引脚两端跨接石英晶体振荡器和两个微调电容构成振荡电路,通常C1和C2一般取30pF ,晶振的频率取值在 1.2MHz 12MHz 之间。对于外接时钟电路,要求XTAL1接地, XTAL2 脚接外部时钟,对于外部时钟信号并无特殊要求,只要保证一定的脉冲宽度,时钟频率低于12MHz即可。晶体振荡器的振荡信号从XTAL2端送入内部时钟电路,它将该振荡信号二分频,产生一个两相时钟信号P1和P2供单片机使用。时钟信号的周期称为状态时间S,它是振荡周期的2 倍, P1 信号在每个状态的前半周期有效,在每个状态的后半周期P2 信号有效。 CPU 就是以两相时钟P1 和 P2 为基本节拍协调单片机各部

22、分有效工作的。复位电路图 4 复位电路复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。所以可以通过按键的断开和闭合在运行的系统中控制其复位。在电路图中,电容的的大小是10uF ,电阻的大小是10k 。所以根据公式,可以算出电容充电到电源电压的0.7 倍(单片机的电源是5V ,所以充电到0.7 倍即为3.5V ),需要的时间是10K*10U

23、F=0.1S 。也就是说在电脑启动的 0.1S 内,电容两端的电压时在 03.5V 增加。这个时候10K 电阻两端的电压为从 51.5V 减少(串联电路各处电压之和为总电压)。所以在0.1S 内, RST 引脚所接收到的电压是5V1.5V 。在 5V 正常工作的 51 单片机中小于1.5V 的电压信号为低电平信号,而大于1.5V 的电压信号为高电平信号。所以在开机0.1S 内,单片机系统自动复位( RST 引脚接收到的高电平信号时间为 0.1S左右)。电源电路图 5 电源电路电源电路是指提供给用电设备电力供应的电源部分的电路设计,使用的电路形式和特点。电源有交流电源也有直流电源。直流电源电路分

24、为开关电源和非开关电源两种形式,电路也大不相同。开关电源一般不使用变压器;非开关电源是传统的设计方式,电源电路里多使用变压器来变压后再整流滤波的方式。几个组件通过导线互相连接,形成“电路”,也可以称为“网络”。更特定地,电路是可以形成闭合回路的网络。“支路”是电路的一部分,每一个组件都有它独属的支路。任意两条或多条支路的相交点,称为“节点”。几个组件通过导线互相连接,形成“电路”,也可以称为“网络”。更特定地,电路是可以形成闭合回路的网络。程序下载电路图 6 USB 下载电路USB 即“ Universal Serial Bus”,中文名称为通用串行总线。这是近几年逐步在 PC 领域广为应用的

25、新型接口技术。USB接口具有传输速度更快,支持热插拔以及连接多个设备的特点。目前已经在各类外部设备中广泛的被采用。目前USB 接口有两种: USB1.1 和 USB2.0。 USB接口的输出电压为直流5V,输出电流不大于500 毫安。 PC机的 USB接口可以连接外设、复合设备和集线器。最多可以连接5 级集线器,最多可连接 127 台外设和集线器。USB1.1 的高速模式为12Mb/s,低速模式为 1.5Mb/s 。 USB采用半双工传输方式。但当一个USB连接多个设备时,各个设备共享12Mb/s 的传输带宽。在传输的信息中还携带有状态、控制和差错校验信息,实际的信息传输速率要低一些,只连接一

26、台设备时,最高有效传输速率约为9.6Mb/s 。 USB2.0 的最高传输速率为 480Mb/s。)USB采用平衡传输方式,抗干扰性好。USB带纠错能力,可完成对软件透明的检错和重发。蜂鸣器驱动电路图 7蜂鸣器驱动电路蜂鸣器是一种一体化结构的电子讯响器,他广泛应用于计算机、打印机、复印机、报警器、电话机等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。蜂鸣器发声原理是电流通过电磁线圈,使

27、电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO 引脚输出的电流较小,单片机输出的TTL 电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。S51增强型单片机实验板通过一个三极管C8550来放大驱动蜂鸣器,原理图见下面图3:蜂鸣器的正极接到VCC( 5V)电源上面,蜂鸣器的负极接到三极管的发射极E,三极管的基级B 经过限流电阻R1 后由单片机的P3.7引脚控制,当P3.7输出高电平时,三极管T1截止,没有电流流过线圈,蜂鸣器不发声;当P3.7输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制P3.7 脚的电平来使蜂鸣器发

28、出声音和关闭。 显示电路本设计显示是采用液晶显示器LCD1602 进行显示,LCD1602 的功能、P0口是一个地址/数据复用的双向I/O 口,当使用P0口访问外部存储器和数据存储器时,P0口内部已有上拉电阻,当P0口作程序检验,输出指令字节时,必须外界上拉电阻。LCD1602 的控制信号RS、 RW、 E分别接到单片机的 P2.0、 P2.1、P2.2。本设计中主要用LCD1602 显示开机画图 8 液晶显示矩阵电路采用 4*4 行列式键盘来实现选择歌曲播放,以及对歌曲号做基本的操作,即上一曲、下一曲以及暂停 /播放。图 8 矩阵电路4.系统软件设计本设计采用了自定义下的流程图。主要程序流程

29、有:主程序、判断有无按键子程序、键盘扫描子程序、显示键号/ 歌曲号子程序、开机画面子程序、按键值播放歌曲子程序等。程序中使用了两个定时中断,定时中断0 用于产生整个音程的频率,以便驱动扬声器。程序的总体流程是当P1 由按键按下时,读键盘,并储存键值,若为F 键则通过查表的方式,调用字符串下手键号/曲目子程序,将键号显示出来。若为1-A ,程序根据储存的键号,将相应歌曲的表头地主赋给DPTR ,取出曲谱,判断是否为休止符,通过查表的方式将表中的定时器初值装入定时器T0 ,在定时中断0 里面,重装初值,将输出口取反,完成发声。在此设计中,每发一个调,调用一个30MS的延时,一次当做曲谱的节拍码。在

30、此过程中若有功能键按下,将当前歌曲的表头地址加513/减513 或等待。于此同时调用播放时间初始化子程序,显示00:00:00 ,装定时器T1 的初值,准备更新播放时间。程序流程如图9 所示。开始显示初始内存初始无有无按键?有判断键值并存取键值ASCII 码显是F 键?开机画面否否1-A 键?是播放时间初始是按键值存储相应曲谱首否取乐谱进行演再一次按有有无功能键?是无暂停?等待装 T1 初值刷新播放时间否是否单独唱完?上 1 曲乐谱首地址减否是否是全部唱完?下 1 曲乐谱首地址加是结束图 9音乐播放器程序流程图5.总结与展望通过这几天的单片机的实训,我在理论的基础上更深刻的掌握了单片机的深层内

31、容及实际生活中的应用,实训锻炼了自己的动手能力和思维能力,还有在软件方面的编程能力,让我受益匪浅,学会了如何制作单片机应用程序,并且可以在今后的日常生活中灵活运用。在单片机音乐播放器的制作过程中,在设计中因为牌组的方向出现错误,导致电路无法连接成功,但是经过修改正确后,效果还是比较理想。也说明动手能力还有不足,仍有待提高。现将本次的设计总结如下:5.1 加深了对16 位单片机结构和原理的了解;5.2 基本掌握了用Altium Desinger Summer09、 Keil uvision4 、 Protues7 Profession、Microsoft Visio的制图的方法;5.3 再次温习

32、数字电路与模拟电路,提高了分析电路原理图的能力,综合了解了不同的使用与制图方法、总结了分析电路原理的方法;5.4 遇到不懂时,多动脑、多看、多听。虚心接受别人给予的意见但不改变自己的初衷。在肯定成绩的同时也要指出缺点和不足。5.5 今后,我会更加努力学习,认真掌握老师所讲的知识,勤动脑,勤动手。相信有一天,我会以优秀的成绩来回报老师、回报学校、回报社会。?参考文献2附?录附录 ?系统总电路附录 ?源代码#include<regx51.h>/ 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义sbitspeaker=P12 。 / 定 义 音 乐 输 出 端 口 , 需 要 连 接 到 对 应 的 喇 叭 , 请 参 考 电 路 图unsigned char timer0h,timer0l,time。/送别数据表code unsigned char sszymmh=6,2,3,5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1,

温馨提示

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

评论

0/150

提交评论