任务124秒进攻数码显示电路_第1页
任务124秒进攻数码显示电路_第2页
任务124秒进攻数码显示电路_第3页
任务124秒进攻数码显示电路_第4页
任务124秒进攻数码显示电路_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、学习情境2 篮球计时计分控制系统的设计任务1 24秒进攻数码显示电路篮球是我们大家都很喜欢的一种体育运动,在比赛时,需要记录两队的比分,还要知道每一节还剩多长时间,以及每一次的进攻时间。现在我们利用单片机来设计一个小制作,能实现对篮球比赛时的相关信息进行实时记录和显示,我们把这个小制作叫篮球计时计分控制系统。为便于我们的学习,把本系统分为3个任务,分别是:(1)24秒进攻数码显示(2)单节时间按键处理和数码显示电路(3)按键计分模块。最后我们把所有数码管换成液晶LCD160128,对系统进行简单显示方面的改造设计。1.1 任务设计要求和设计原理首先我们先设计篮球控制系统中24秒进攻数码显示模块

2、,本模块主要包括24秒进攻开始按键、暂停案健以及数码显示电路,数码管我们用二位一体的共阳极数码管,为便于后续电路的扩展,还使用了锁存芯片74HC573,以及译码芯片74HC154。24秒进攻数码显示电路主要用于显示在篮球比赛时实时显示场上进攻对剩余时间。该电路主要由单片机最小系统和数码管显示模块组成。系统的框图如下图所示:8051 单片机时钟电路 复位电路按键输入电路数码管显示电路电源电路图1-1 系统方框图1.2 硬件电路设计 硬件电路除单片机最小系统电路之外,电路主要由按键电路和数码显示电路组成。按键电路由2个独立按键组成,分别承担比赛进攻和暂停功能。数码管用来显示当前所剩的进攻时间。当P

3、0口用来作为输出口时,要接上拉电阻。具体电路如下图所示:图1-2 24秒进攻数码显示电路 芯片介绍1、74HC15474HC154是一款高速CMOS器件,74HC154引脚兼容低功耗肖特基TTL(LSTTL)系列。该译码器可接受4位高有效二进制地址输入,并提供16个互斥的低有效输出。它的两个输入使能门电路可用于译码器选通,以消除输出端上的通常译码“假信号”,也可用于译码器扩展。该使能门电路包含两个“逻辑与”输入,必须置为低以便使能输出端。任选一个使能输入端作为数据输入,74HC154可充当一个1-16的多路分配器。当其余的使能输入端置低时,地址输出将会跟随应用的状态。  7

4、4154这种单片4 线16 线译码器非常适合用于高性能存储器的译码器。当两个选通输入G1 和G2 为低时, 它可将4 个二进制编码的输入译成16 个互相独立的输出之一。实现解调功能的办法是:用4 个输入线写出输出线的地址,使得在一个选通输入为低时数据通过另一个选通输入。当任何一个选通输入是高时,所有输出都为高。只要控制端G1、G2任意一个为高电平,A、B、C、D任意电平输入都无效。G1、G2必须都为低电平才能操作芯片。引脚说明:1-11 13-17 :输出端。(outputs (active LOW)) 12:Gnd电源地 (ground (0 V)) 18-19:使能输入端、低电平有效 (e

5、nable inputs (active LOW) 20-23地址输入端 (address inputs) 24:VCC电源正 (positive supply voltage)74LS154 基本特性,其,输出高电平电流: -0.4mA,输出低电平电流: 8mA图1-3 74HC154芯片真值表: 表 1-1 74HC154真值表INPUTS 输入选定输出(L)G1G2DCBALLLLLLY0LLLLLHY1LLLLHLY2LLLLHHY3LLLHLLY4LLLHLHY5LLLHHLY6LLLHHHY7LLHLLLY8LLHLLHY9LLHLHLY10LLHLHHY11LLHHLLY12LL

6、HHLHY13LLHHHLY14LLHHHHY15XHXXXXNONEHXXXXXNONE2、74HC57374HC573是八进制3态非反转透明锁存器。其特点:(1)三态总线驱动输出(2)置数全并行存取(3)缓冲控制(4)输入使能输入有改善抗扰度的滞后作用。输入是和标准 CMOS 输出兼容的;加上拉电阻,他们能和 LS/ALSTTL 输出兼容。 当锁存使能端LE为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。特别适用于缓冲寄存器,I/O 通道

7、,双向总线驱动器和工作寄存器。HC573引脚功能表: 表1-2 HC573引脚功能表引脚号符号名称及功能1OE3态输出使能输入(低电平)2, 3, 4, 5, 6, 7, 8, 9D0 to D7数据输入12,13,14,15,16,17,18,19Q0 to Q73态锁存输出11LE锁存使能输入10GND接地(0V)20VCC电源电压真值表: 表1-3 HC573真值表输入输出OELEDQ (HC573)HXXZLLXNO CHANGELHLLLHHH1.3 软件设计 在软件设计方面,我们主要把功夫放在了24秒进攻开始按键处理子程序的设计和数码显示模块的设计,以及产生50毫秒时间的T0中断程

8、序的设计。而其中的关键就是按键处理子程序的设计,其具体设计思想为:判断进攻按键是否按下 延时消抖 再次判断进攻按键是否按下 设置进攻按键按下标志(k1=1),并且打开定时器T0,如果暂停键没有按下,则立即设置进攻时间变量初值(Attack_time=24)。 判断时间是否达到了1秒,若是,则进攻时间变量Attack_time自减1(Attack_time-),且清除1秒时间标志变量flag=0;并设置新的标志位OR_ZERO=1,(OR_ZERO为判断24秒进攻时间是否完毕的标志位)。 如果进攻时间完毕,则重新设置进攻时间变量的值,同时关掉定时器T0(TR0=0)。具体设计如下:/*-进攻24

9、秒子程序-*/ void Attack_key_event() if(attack_begin=0) /判断进攻按键是否按下 delay(15); /按键消抖 if(attack_begin=0) /再次判断暂停健是否按下。 k1=1; /k1为进攻按键按下标志 TR0=1; / 开T0计时 if(k2=0) Attack_time=24; if(k1=1&&flag=1) flag=0; Attack_time-; OR_ZERO=1; if(OR_ZERO=1&&Attack_time=0) OR_ZERO=0; if(flag=1) flag=0;Atta

10、ck_time=24; TR0=0; 数码显示模块的设计相对较简单。设计时采用了动态显示技术,编程时主要注意字形码的输入和位选码的输入。需要考虑硬件电路的连接情况。具体程序如下所示: /*-显示子程序-*/void Display() int j; Temp_attack_time=Attack_time; attack_sec_shi=Temp_attack_time/10; attack_sec_ge=Temp_attack_time%10; for(j=0;j<20;j+) P2=0x0c; /位选,选中个位数对应的那个数码管 P0=shumaattack_sec_ge; /段选,

11、把个位数的字形码送到上面选通的数码管中 delay(1); P2=0x0d; /位选,选中十位数对应的那个数码管 P0=shumaattack_sec_shi;/段选,把十位数的字形码送到上面选通的数码管中 delay(1); 本设计的时间由定时器T0产生,我们先制造出50ms的脉冲,对其进行计数,计20次,刚好时间就是1秒。具体程序设计如下: /*-T0中断服务程序-*/void T0_int()interrupt 1 / 使用定时器T0,方式1,定时1s TH0 = -50000/256; / 设置定时器初值(定时50ms) TL0 = -50000%256; count1+; if(co

12、unt1=20) / 循环20次 count1=0; flag=1; 有篮球比赛,就会有暂停,暂停时,比赛时的比分和24秒进攻时间,以及单节比赛剩余时间,都应当保持下来,所以就有专门的按键来实现这些功能。一般情况下,我们只要把定时器关掉了,时间也就不会低见了。程序设计时还要考虑到,暂停后还要继续进行比赛,时间应当从暂停的时间开始递减。具体程序设计如下:/*-暂停子程序-*/ void Pause_key_event() if(attack_pause=0) delay(30); /按键消抖 if(attack_pause=0) /再次判断暂停健是否按下。 k2=1; /k2为暂停按键按下标志位

13、。 TR0=0; 除此之外,还有延时子程序,可用于按键消抖,动态显示等,为使主程序结构简单,我们把定时器的初始化,以及一些变量的初值赋予工作全部放在初始化程序里。这两个程序的具体设计如下所示:/*-延时子程序-*/void delay(uint K) uint i,j; for(i=K;i>0;i-) for(j=120;j>0;j-);/*-初始化子程序-*/ void Initialization() TMOD=0x01; / 中断初始化 TH0 = -50000/256; / 设置定时器初值(定时50ms) TL0 = -50000%256; EA=1; / 开总中断 ET0

14、=1; / T0允许 小贴士:常量我们已经学习了 KEIL C51 编译器所支持的数据类型。而这些数据类型又是怎么用在常量和变量的定义中的呢?又有什么要注意的吗?常量就是在程序运行过程中不能改变值的量,而变量是可以在程序运行过程中不断变化的量。 变量的定义可以使用所有 C51 编译器支持的数据类型,而常量的数据类型只有整型、浮点型、字符型、字符串型和位标量。下面我们来学习常量的定义和用法, 常量的数据类型说明是这样的 1 整型常量可以表示为十进制如 123,0,89 等。 十六进制则以 0x 开头如0x34,-0x3B等。长整型就在数字后面加字母 L,如 104L,034L,0xF340 等。

15、 2 浮点型常量可分为十进制和指数表示形式。十进制由数字和小数点组成,如0.888,3345.345,0.0 等,整数或小数部分为 0,可以省略但必须有小数点。指数表示形式为±数字.数字e±数字,中的内容为可选项,其中内容根据具体情况可有可无,但其余部分必须有,如125e3,7e9,-3.0e-3。 3 字符型常量是单引号内的字符,如a,d等,不可以显示的控制字符,可以在该字符前面加一个反斜杠“”组成专用转义字符。常用转义字符表请看表1。 4 字符串型常量由双引号内的字符组成,如“test”,“OK”等。当引号内的没有字符时,为空字符串。在使用特殊字符时同样要使用转义字符如

16、双引号。在 C 中字符串常量是做为字符类型数组来处理的,在存储字符串时系统会在字符串尾部加上o转义字符以作为该字符串的结束符。字符串常量“A”和字符常量A是不同的,前者在存储时多占用一个字节的字间。 5 位标量,它的值是一个二进制。表1-4 常用转义字符表转义字符含义o空字符(NULL)00H/0n换行符(LF)0AH/10r回车符(CR)0DH/13t水平制表符(HT)09H/9b退格符(BS)08H/8f换页符(FF)0CH/12单引号27H/39”双引号22H/34反斜5CH/92常量可用在不必改变值的场合,如固定的数据表,字库等。常量的定义方式有几种,下面来加以说明。 #difine

17、False 0x0; /用预定义语句可以定义常量 #difine True 0x1; /这里定义False 为0,True为1 /在程序中用到 False 编译时自动用 0 替换,同理 True 替换为1 unsigned int code a=100; /这一句用 code 把a定义在程序存储器中并赋值 const unsigned int c=100; /用const 定义 c 为无符号 int常量并赋值 以上两句它们的值都保存在程序存储器中,而程序存储器在运行中是不允许被修改的,所以如果在这两句后面用了类似 a=110,a+这样的赋值语句,编译时将会出错。1.4 软件硬件的仿真调试1、首

18、先利用ISIS-Professional软件设计好硬件电路图。2、其次,利用KEIL软件建立工程项目,把用C语言编好的程序通过该软件平台进行编译,直至把C程序修改无错误为止,并生成HEX文件。3、在ISIS-Professional软件平台下导入由KEIL软件生成的HEX文件,进行仿真,仔细观察产生的现象和效果,根据仿真的效果,边修改边调试,直到仿真效果与我们对项目的要求一致为止。 1.5 相关知识-MCS-51单片机的中断系统与定时/计数器MCS-51单片机在内部集成了两个可编程的定时器/计数器:T0和T1。它们既可以工作于定时模式,也可以工作于外部事件计数模式。所以人们称之为定时器/计数器

19、。可编程是指其功能,如工作方式、计数长度、定时时间、启动/停止等均可由指令来改变和设定,从而满足单片机控制中的准确定时、精确延时、实时检测以及计数等需要。 定时/计数器0、1 的结构及工作原理定时/计数器的核心是一个加1计数器。当它对外部事件计数时,由于频率不固定,称之为计数器;当它对内部固定频率的机器周期进行计数时,称为定时器。MCS-51单片机内有2个16位可编程的定时器/计数器,分别为T0和T1。 定时器/计数器结构图如下图所示: 图1-4 MCS-51单片机的定时器/计数器结构图MCS-51单片机的定时器/计数器实质上是计数长度最长为16位的加1计数器,从图1-3中可以看出,T0由一个

20、定时器/计数器低8位特殊功能寄存器TL0和一个定时器/计数器高8位特殊功能寄存器TH0组成,T1由TL1和TH1组成。TMOD是定时器/计数器的工作方式寄存器,用于设定定时器/计数器的工作方式和功能;TCON是定时器/计数器的控制寄存器,用于控制T0、T1的启动/停止以及设置溢出标志。定时器/计数器的加1计数器输入的计数脉冲有两个来源,一个是由系统内部的时钟振荡器输出脉冲经12分频后送来,另一个是由T0或T1引脚输入的外部脉冲源。每来一个脉冲,计数器加1。当加到计数器为全1时,再输入一个脉冲,就会使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求。1设置为定时器模

21、式时定时器/计数器设量为定时器模式时,用于对内部机器周期计数(1个机器周期等于12个时钟周期,即计数频率为晶振频率的1/12)。计数值乘以机器周期就是定时时间。 2设置为计数器模式时定时器/计数器设置为计数器模式时,外部事件计数脉冲由T0(P3.4)或T1(P3.5)引脚输入到计数器。要求被取样的电平至少要维持一个机器周期,也就是说计数脉冲的周期不能小于两个机器周期。1.5.2 定时器/计数器的控制1、定时器/计数器控制寄存器TCONTCON的高4 位用于控制定时器/计数器的启动/停止和作为溢出中断请求标志。TCON各位的定义如表1-5所示。 表1-5 特殊功能寄存器TCON(1)TR0(TC

22、ON.4):定时器/计数器T0启/停控制位。 TR0置1时,定时器/计数器T0开始计数,直到计满溢出为止它都独立工作,不占用CPU的时间;TR0置0时,T0停止计数。TR0可通过指令进行置1或清0。所以可通过软件来控制定时器/计数器的启动与停止。(2)TF0(TCON.5):定时器/计数器T0溢出中断请求标志位。 定时器/计数器T0计数溢出时,由硬件自动置TF0为1。向CPU发出溢出中断请求,若CPU响应中断,则TF0由硬件自动清0。T0工作时,CPU可随时查询TF0的状态。所以TF0可用作查询测试的标志。TF0也可以用软件置1或清0,与硬件置1或清0的效果相同。(3)TR1(TCON.6):

23、定时器/计数器T1启/停控制位,其功能与TR0类同。(4)TF1(TCON.7):定时器/计数器T1溢出中断请求标志位,其功能与TF0类同。2、定时器/计数器方式寄存器TMODTMOD用于设置定时器/计数器的工作方式,其低4位用于控制T0,高4位用于控制T1。TMOD各位的定义如表1-6所示。表1-6 特殊功能寄存器TMOD(1)GATE:门控位。GATE0时,只要用软件使TCON中的TR0或TR1置1,就可以启动定时器/计数器;GATA1时,要用软件使TR0或TR1置1,同时外部中断引脚或也为高电平时,才能启动定时器/计数器。即此时定时器的启动需要加上或引脚为高电平这一条件。(2)C/:定时

24、器/计数器模式选择位。 C/ 0为定时器模式;C/ =1为计数器模式。(3)M1M0:工作方式设置位。定时器/计数器有4种工作方式,由M1M0进行设置: 表1-7 定时器/计数器4种工作方式M1M0工作方式功 能 说 明00方式013位定时器/计数器01方式116位定时器/计数器10方式28位自动重装定时器/计数器11方式3T0分成两个独立的8位定时器/计数器;T1在该方式下停止计数,在其他方式下可工作,但不能产生溢出中断请求标志应注意的是,计数器启动前,应先为它装入方式控制字以设定其工作方式。由于TMOD只能按字节寻址,不能进行位寻址,所以只能用字节操作指令设置定时器/计数器的工作方式。CP

25、U 复位时,TMOD所有位被清0。 定时器/计数器的工作方式1 方式0当TMOD的D1、D0位M1M0为00时,定时器/计数器工作于方式0,其在该工作方式下的逻辑结构图如图1-5所示。图1-5 定时器/计数器T0工作于方式0时的逻辑结构图方式0为13位加1计数,由TL0低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时,向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。 (1)当C/= 0时,为定时模式从图1-4可知,C/ = 0时,选择开关接通的计数脉冲是机器周期脉冲,T0对内部机器周期计数。定时时间由如下公式确定。定时时间 

26、;= 计数值 × 机器周期 = (213计数初值) × 机器周期其中,机器周期 = 时钟周期 × 12 213是T0在方式0时的最大计数值(计数模值)。在定时器/计数器的应用中,只要根据需要定时的时间值计算出计数初值,送入TH0、TL0 中,便可以实现精确定时,计数初值按如下公式计算。计数初值 = 213  定时时间/机器周期如果晶振频率为12MHz,则时钟周期为(1/12)ms,机器周期为1ms,当初值为0时,方式

27、0的最长定时时间为8.192ms。【例1】若单片机使用的晶振频率为12MHz。请计算采用T0方式0定时2ms所需的定时器初值。解:根据公式,计算如下。计数初值 = 213  定时时间/机器周期 = 213  2ms/1m即TH0应装入计数初值的高8位为C1H,TL0应装入计数初值的低5位为10H。(2)当 C/ = 1时,为计数模式从图1-4可知,C/ = 1时,选择开关接通的计数脉冲是T0引脚上的外部脉冲,T0对来自外部的输入脉冲进行计数。当然,如果外部输入脉冲是规则脉冲,则也可以实现定时。

28、(3)门控位GATE的作用当GATE = 0时,经反相使或门输出为1,此时仅由TR0控制与门的开启。当TR0 = 1,与门输出1时,控制开关接通,计数开始。 当GATE = 1时,由控制或门的输出,此时与门的开启由和TR0共同控制。当TR0 = 1且引脚为高电平时,启动计数功能,TR0 = 0或引脚为低电平时,停止计数。2方式1当M1M0的D1、D0位为01时,定时器/计数器工作于方式1。其电路结构和操作方法与方式0基本相同,它们的差别仅在于计数的位数不同,如图1-6所示。 图1-6 定时器/计

29、数器工作于方式1时逻辑结构图方式1的计数位数是16位,由TL0作为低8位,TH0作为高8位,组成了16位加1计数器。计数模值为216。计数初值的计算公式如下。计数初值 = 216  定时时间/机器周期如果晶振频率为12MHz,则时钟周期为1/12ms,机器周期为1ms,方式1的最长定时时间为65.536ms。【例2】若单片机使用的晶振频率为12MHz。请计算采用T0方式1定时2ms所需的定时器初值。解:根据公式,计算如下。计数初值 = 216  定时时间/机器周期 = 216 

30、0;2ms/1s = 63536 = F830H 即TH0应装入计数初值的高8位为F8H,TL0应装入计数初值的低8位为30H。 采用上述两种方式定时时,在计数器启动工作前,就应装入计数器初值,并通过指令启动其工作,当定时器/计数器计满至溢出,回到全0时,自动向CPU发出溢出中断请求。但若需要定时器/计数器再次定时,就必须在其中断服务程序中重装初值。3 方式2当 M1M0为10时,定时器/计数器工作于方式2,其逻辑结构如图1-7所示。图1-7 定时器/计数器工作于方式2时的逻辑结构图方式2为自动重装初值的8位计数方式。TH0为8位初值寄存器,当TL0计满

31、溢出时,由硬件电路使TF0置1,向CPU发出中断请求,并将TH0中的计数初值自动送入TL0。TL0从初值重新进行加1计数。周而复始,直至TR0=0才会停止。计数初值 = 28  定时时间/机器周期 如果晶振频率为12MHz,则时钟周期为(1/12)ms,机器周期为1ms,方式2的最长定时时间为0.256ms。 由于工作方式2时,无须在中断服务程序中重装初值,所以特别适用于较精确的脉冲信号发生器。但在定时器初始化时,必须将计数初值同时送入TL0和TH0。4 方式3当M1M0为11时,T0被设置为方式3,其逻辑结构如图1-7所示。定时器T1不能工作在方式3,

32、一旦设定T1为方式3,则T1自动停止工作。从图1-8可以看出,设置为方式3时,T0分为两个独立的8位计数器TL0和TH0。TL0使用T0的所有控制位:C/、GATE、TR0、TF0。当TL0计数溢出时,由硬件电路使TF0置1,向CPU发出中断请求。TH0则固定为定时方式(不能进行外部脉冲计数),并且借用了T1的控制位TR1、TF1。因此,TH0的启/停受TR1控制,TH0的溢出将置位TF1。图1-8 定时器/计数器工作方式3逻辑结构图编程说明MCS-51单片机的定时器是可编程的,但在进行定时或计数之前要对程序进行初始化,具体步骤如下:(1)确定工作方式字:对TMOD寄存器正确赋值;(2)确定定

33、时初值:计算初值,直接将初值写入寄存器的TH0、TL0或TH1、TL1;初值计算: 设计数器的最大值为M,则置入的初值X为: 计数方式:X=M-计数值 定时方式:由(M-X)T=定时值,得X=M-定时值/T T为计数周期,是单片机的机器周期。(模式0 M为213,模式1 M为216,模式2和3 M为28)(3)根据需要,对IE置初值,开放定时器中断;(4)启动定时/计数器,对TCON寄存器中的TR0或TR1置位,置位以后,计数器即按规定的工作模式和初值进行计数或开始定时。 附录:完整程序代码#include<reg51.h>#define uchar unsigned char#d

34、efine uint unsigned int/*-数码管显示代码-*/uchar code shuma=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x00;uchar Attack_time,Temp; uint count1; / 时间全局变量sbit attack_begin=P30; / 24秒进攻开始按键K1sbit attack_pause=P31; / 24秒进攻暂停按键K2bit flag ,OR_ZERO,k1,k2; /定义一些标志位 int Temp_attack_time; uint attack_sec_shi

35、,attack_sec_ge; / 进攻 秒 十位,进攻 秒 个位 /*-子程序声明-*/ void delay(uint K); /延时子程序 void Display(); / 显示子程序 void Attack_key_event();/进攻24秒子程序 void Pause_key_event(); / 暂停子程序 void Initialization(); /初始化子程序/*-主程序-*/void main(void) Initialization(); while(1) Display(); / 显示子程序 Attack_key_event(); / 24秒控制 Pause_key_event(); /*-T0中断服务程序-*/void T0_int()interrupt 1 / 使用定时器T0,方式1,定时1s TH0 = -50000/256; / 设置定时器初值(定时50ms) TL0 = -50000%256; count1+; if(count1=10) / 循环20次 count1=0; flag=1; /*-延

温馨提示

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

评论

0/150

提交评论