单片机课程设计报告多路抢答器的设计_第1页
单片机课程设计报告多路抢答器的设计_第2页
单片机课程设计报告多路抢答器的设计_第3页
单片机课程设计报告多路抢答器的设计_第4页
单片机课程设计报告多路抢答器的设计_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机课程设计报告 题目: 多路抢答器的设计 专业: 电气工程及其自动化 班级: 电气 081 学号: 学生姓名: 指导教师: 2010 年 秋季 学期起止时间:2010年12月27日至2011年1月7日平时(10%)任务完成(30%)答辩(30%)课设报告(30%)总评成绩目 录一、设计目的32、 设计的主要内容要求3三、整体设计33.1设计思路3.2总体方框图3.3模块介绍四、硬件电路的设计54.1硬件总体电路图4.2硬件分块电路介绍五、软件设计105.1主程序系统流程图5.2系统程序5.3定时分析6、 系统仿真及使用说明247、 设计心得25八、致谢26 九、参考文献26 多路抢答器的设

2、计一·设计目的1.熟悉单片机控制系统,并了解系统设计的一般规律。2.掌握proteus软件的使用,学会仿真。3.熟悉模拟用于娱乐或比赛抢答器的实现方法。二·设计的主要内容和要求1·设计一款八路抢答器;2·设计一个抢答器控制开关(开始抢答后才允许答题者抢答),供主持人用;3·数码管显示当前答题者号数;4·答题开始后,数码管显示倒计时时间;5·附加功能:(1)抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在led数码管上显示,同时扬声器发出报警声响提示。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统

3、清除为止。(2)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如10秒)。当主持人启动"开始"键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间0.5秒左右。主持人可以控制抢答的开始和结束,若主持人没有按开始按钮选手抢答,则会显示犯规选手号,在时间显示数码管中显示ff,并报警,直到主持人选择停止。如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示f ff (3)参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。(4)主持人可以调整抢答倒计时时间和答题倒

4、计时时间,以停止按钮为确定。三·整体设计3·1 设计思路 设计一个智力竞赛抢答器,可同时供8名选手或者8个代表队参加比赛,他们的编号分别为1,2,3,4,5,6,7,8,各用一个抢答器按钮,按钮的编号与选手的编号相对应,分别设为1,2,3,4,5,6,7,8。节目主持人设置一个开始控制开关,用来控制系统的清零和抢答器的开始。并且抢答器具有数据锁存和显示的功能,抢答开始手,若有选手按动抢答按钮,编号立即锁存,并在led数码管上显示出选手的编号,同时蜂鸣器给出音响提示,此外,要封锁输入电路,禁止其他选手抢答,优先抢答选手的编号一直保持到主持人将系统清零为止。主持人按控制开始,开

5、始抢答倒计时,在此期间选手可以抢答,抢答成功后开始答题倒计时,若在抢答倒计时期间无人抢答,则表示弃权,此题作废,主持人开始下一道题目。若在主持人没有按下开始按钮时有选手抢答,则显示选手号,在时间显示栏显示ff,报警,表示该选手犯规。由主持人停止报警,开始下一题。抢答倒计时以及答题倒计时都可以由主持人控制和调节,当按下停止按钮时,表示确定设置。3.2 总体方框图 显示 电路 外部复 位电路at89c51控制电路at主持人控制电路及发声电路 抢答 电路3.3 模块介绍 由于是软件仿真的多路抢答器,故在原理上比较简单。主要由外部复位控制电路,抢答电路,at89c51控制电路,显示电路以及主持人控制电

6、路和报警电路五大模块构成。 由于系统内部有时钟控制,所以可以省去外部振荡源电路,时钟由内部控制发生。 外部复位控制电路,可以手动操作,来从硬件上实现对整个电路的复位控制,实现系统的初始化。 通过抢答电路,八位选手可以进行对题目的抢答,先抢答的选手获得答题权,此时其他选手没有抢答权。 at89c51控制电路是整个电路的核心,它控制着整个电路的工作,内部时钟提供整个工作的时钟,内部定时器实现对抢答倒计时和答题倒计时的控制,通过管脚的选择,选择不同的功能来控制其他模块电路的工作。 显示电路用的是共阴极的多位数码管,第一位用来显示选手的号码,后两位来显示倒计时时间的变化。主持人控制电路,可以通过手动来

7、控制抢答的开始及结束,还可以实现对抢答倒计时时间和答题倒计时时间的调整。当发生错误或者抢答成功以及倒计时时间在五秒之内的时候,报警电路会工作,发出蜂鸣声。四· 硬件电路的设计4.1 硬件总体电路图 在整个电路中,用到了以下元器件:开关按钮button:15个:电阻10k:8个;四位共阴极数码显示管:1个;扬声器sreaker:1个;at89c51单片机:1个。 其工作原理为:接通电源后,主持人将开关拨到“清除”状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;主持人将开关置,“开始”状态,宣布“开始”抢答器工作,倒计时开始。扬声器给出声响提示。抢答器完成:优先判断、编号锁

8、存、编号显示、扬声器提示。当一轮抢答之后,定时器停止、禁止二次抢答。如果再次抢答必须由主持人再次操作“开始、停止”状态开关。若有选手在主持人没有按下开始按钮时进行了抢答,则会出现犯规提示。而且主持可以灵活调节抢答倒计时时间和答题倒计时时间。 4.2 硬件分块电路介绍4.2.1 复位电路 单片机的第9脚rst为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图 值得注意的是,在设计当中使用到了硬件复位和软件复位两种功能,由上面的硬件复位后的各状态可知寄存器及存储器的值都恢复到了初始值,而前面的功能介绍中提到了倒计时时间的记忆功能,该功

9、能的实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能。软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。4.2.2 显示电路显示功能与硬件关系极大,当硬件固定后,如何在不引起操作者误解的前提下提供尽可能丰富的信息,全靠软件来解决。 复位时,数码管显示f ff,数码管的第一位显示的是抢答选手的号数,数码管的最后两位显示的是倒计时的时间。当出现犯规操作的时候,数码管闪烁。4.2.3 键盘扫描电路键盘扫描电路主要有八个按钮来实现,每一个按钮对应着相应的选手,号码对应。选手按下按钮,实现抢答。键盘扫描电路可以实现优先抢答和锁存,锁存第一个按下抢

10、答按钮的选手号,这样,其他选手在有选手抢答成功的情况下没有抢答权利。键盘是人与微机系统打交道的主要设备。关于键盘硬件电路的设计方法也可以在文献和书籍中找到,配合各种不同的硬件电路,这些书籍中一般也提供了相应的键盘扫描程序。站在系统监控软件设计的立场上来看,仅仅完成键盘扫描,读取当前时刻的键盘状态是不够的,还有不少问题需要妥善解决,否则,人们在操作键盘就容易引起误操作和操作失控现象。 在单片机应用中键盘用得最多的形式是独立键盘及矩阵键盘。它们各有自己的特点,其中独立键盘硬件电路简单,而且在程序设计上也不复杂,一般用在对硬件电路要求不高的简单电路中;矩阵键盘与独立键盘有很大区别,首先在硬件电路上它

11、要比独立键盘复杂得多,而且在程序算法上比它要烦琐,但它在节省端口资源上有优势得多,因此它更适合于多按键电路。其次就是消除在按键过程中产生的“毛刺”现象。4.2.4 发声电路我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使喇叭发出不同的声音。发声电路在抢答成功的时候,选手非法抢答的时候,倒计时时间在五秒之内的时候,都会发出声音来提示主持人和选手。 4.2.5 系统复位使cpu进入初始状态,从000

12、0h地址开始执行程序的过程叫系统复位。从实现系统复位的方法来看,系统复位可分为硬件复位和软件复位。硬件复位必须通过cpu外部的硬件电路给cpu的reset端加上足够时间的高电位才能实现。上电复位,人工按钮复位和硬件看门狗复位均为硬件复位。硬件复位后,各专用寄存器的状态均被初始化,且对片内通用寄存器的内容没有影响。但是,硬件复位还能自动清除中断激活标志,使中断系统能够正常工作,这样一个事实却容易为不少编码人员所忽视。软件复位就是用一系列指令来模拟硬件复位功能,最后通过转移指令使程序从0000h地址开始执行。对各专用寄存器的复位操作是容易的,也没有必要完全模拟,可根据实际需要去主程序初始化过程中完

13、成。而对中断激活标志的清除工作常被遗忘,因为它没有明确的位地址可供编程。有的编程人员用020000(ljmp 0000h)作为软件陷阱,认为直接转向0000h地址就完成了软件复位,就是这类错误的典型代表。软件复位是使用软件陷阱和软件看门狗后必须进行的工作,这时程序出错完全有可能发生在中断子程序中,中断激活标志已置位,它将阻止同级中断响应。由于软件看门是高级中断,它将阻止说要中断响应,由此可见清除中断激活标志的重要性。在所有的指令中,只有reti指令能够清除中断激活标志。前文各处提案到的出错处理程序err主要完成这一功能,其他的善后工作交由复位后的系统去完成。这部分程序如下: power dat

14、a 67h ;上电标志存放单元 err: clr ea ;关中断 mov dptr,#err1 ;准备返回地址 push dpl push dph reti ;清除高级中断激活标志err1: mov power,#0aah ;重建上电标志 clr a ;准备复位地址 push acc ;压入复位地址0000h reti ;清除低级中断激活标志,从程序0000h开始执行。这段程序先关中断,以便后续处理能顺利进行,然后用两个reti指令代替两个ljmp指令,从而清除了两级中断激活标志。有相应软件陷阱捕捉来的程序可能没有全部激活两个标志,这也无妨。五·软件设计5.1 主程序系统流程图 开始

15、 初始化 显示fff开始n y加一抢答成功非法抢答调节抢答倒计时 y n显示抢答显示犯规调节答题倒计时 减一n y n5.2 系统程序;=;=单片机八路抢答器程序 =;= ok equ 20h ;抢答开始标志位 ring equ 22h ;响铃标志位 org 0000h ajmp main org 0003h ajmp int0sub org 000bh ajmp t0int org 0013h ajmp int1sub org 001bh ajmp t1int org 0040hmain: mov r1,#0ah ;初设抢答时间为10s mov r2,#1eh ;初设答题时间为30s mov

16、 tmod,#11h ;设置未定时器/模式1 mov th0,#0f0h mov tl0,#0ffh ;越高发声频率越高,越尖;0.3841s mov th1,#3ch mov tl1,#0b0h ;50ms为一次溢出中断 setb ea ;cpu中断允许 setb et0 ;t0中断允许 setb et1 setb ex0 ;外部中断允许 setb ex1 ;允许四个中断,t0/t1/int0/int1 clr ok clr ring setb tr1 setb tr0 ;一开始就运行定时器,以开始显示fff.如果想重新计数,重置th1/tl1就可以了;=查询程序=start: mov r5

17、,#0bh mov r4,#0bh mov r3,#0bh acall display ;未开始抢答时候显示fff jb p3.0,next ;p3.0=1时跳转 acall delay jb p3.0,next ;去抖动,如果"开始键"按下就向下执行,否者跳到非法抢答查询 acall bark ;按键发声 mov a,r1 mov r6,a ;送r1->r6,因为r1中保存了抢答时间 setb ok ;抢答标志位,用于count只程序中判断是否查询抢答 mov r7,#01h ;读抢答键数据信号标志,这里表示只读一次有用信号 mov r3,#0ah ;抢答只显示计时

18、,灭号数 ajmp count ;进入倒计时程序,"查询有效抢答的程序"在count里面next: jnb p1.0,false1 jnb p1.1,false2 jnb p1.2,false3 jnb p1.3,false4 jnb p1.4,false5 jnb p1.5,false6 jnb p1.6,false7 jnb p1.7,false8 ajmp start ;绝对转移;=非法抢答处理程序=false1: mov r3,#01h ajmp errorfalse2: mov r3,#02h ajmp errorfalse3: mov r3,#03h ajmp

19、errorfalse4: mov r3,#04h ajmp errorfalse5: mov r3,#05h ajmp errorfalse6: mov r3,#06h ajmp errorfalse7: mov r3,#07h ajmp errorfalse8: mov r3,#08h ajmp error;=int0(抢答时间r1调整程序)=int0sub:mov a,r1 mov b,#0ah div ab mov r5,a mov r4,b mov r3,#0ah acall display ;先在两个时间led上显示r1 jnb p3.4,inc0 ;p3.4为+1s键,如按下跳到i

20、nco jnb p3.5,dec0 ;p3.5为-1s键,如按下跳到deco jnb p3.1,back0 ;p3.1为确定键,如按下跳到backo ajmp int0subinc0: mov a,r1 cjne a,#63h,add0 ;如果不是99,r2加1,如果加到99,r1就置0,重新加起。 mov r1,#00h acall delay1 ajmp int0subadd0: inc r1 acall delay1 ajmp int0subdec0: mov a,r1 jz setr1 ;如果r1为0, r1就置99, dec r1 acall delay1 ajmp int0subs

21、etr1: mov r1,#63h acall delay1 ajmp int0subback0: reti ;=int1(回答时间r2调整程序)=int1sub:mov a,r2 mov b,#0ah div ab mov r5,a mov r4,b mov r3,#0ah acall display jnb p3.4,inc1 jnb p3.5,dec1 jnb p3.1,back1 ajmp int1subinc1: mov a,r2 cjne a,#63h,add1 mov r2,#00h acall delay1 ajmp int1subadd1: inc r2 acall dela

22、y1 ajmp int1subdec1: mov a,r2 jz setr2 dec r2 acall delay1 ajmp int1subsetr2: mov r2,#63h acall delay1 ajmp int1subback1: reti ;=倒计时程序(抢答倒计时和回答倒计时都跳到改程序)=repeat: mov a,r2 ;使用锦囊时重新计时 mov r6,a clr ring count: mov r0,#00h ;重置定时器中断次数 mov th1,#3ch mov tl1,#0b0h ;重置定时器recount:mov a,r6 ;r6保存了倒计时的时间,之前先将抢答时

23、间或回答时间给r6 mov b,#0ah div ab ;除十分出个位/十位 mov 30h,a ;十位存于(30h) mov 31h,b ;个位存于(31h) mov r5,30h ;取十位 mov r4,31h ;取个位 mov a,r6 subb a,#07h ; jnc larger ;c=0跳转,大于5s跳到larger,小于等于5s会提醒 mov a,r0 cjne a,#0ah,full ;1s中0.5s向下运行 clr ring ajmp checkfull: cjne a,#14h,check ;下面是1s的情况,响并显示号数并清r0,重新计 setb ring mov a,

24、r6 jz quit ;计时完毕 mov r0,#00h dec r6 ;一秒标志减1 ajmp checklarger: mov a,r0 cjne a,#14h,check ;如果1s向下运行,否者跳到查"停/显示" dec r6 ;计时一秒r6自动减1 mov r0,#00hcheck: jnb p3.1,quit ;如按下停止键退出 jnb ok,checkk ;只在回答倒计时才有效 ajmp nexttcheckk: jnb p3.0,repeat ;判断是否使用锦囊nextt: acall display jb ok,accout ;如果是抢答倒计时,如是则查询

25、抢答,否者跳过查询继续倒数(这里起到锁抢答作用) ajmp recountaccout: mov a,36h jnb acc.0,true1 jnb acc.1,true2 jnb acc.2,true3 jnb acc.3,true4 jnb acc.4,true5 jnb acc.5,true6 jnb acc.6,tz1 jnb acc.7,tz2 ajmp recount tz1: jmp true7 tz2: jmp true8 quit: clr ok ;如果按下了"停止键"执行的程序 clr ring ajmp start;=正常抢答处理程序=true1: a

26、call bark mov a,r2 mov r6,a ;抢答时间r2送r6 mov r3,#01h clr ok ;因为答题的计时不再查询抢答,所以就锁了抢答 ajmp counttrue2: acall bark mov a,r2 mov r6,a mov r3,#02h clr ok ajmp counttrue3: acall bark mov a,r2 mov r6,a mov r3,#03h clr ok ajmp counttrue4: acall bark mov a,r2 mov r6,a mov r3,#04h clr ok ajmp counttrue5: acall b

27、ark mov a,r2 mov r6,a mov r3,#05h clr ok ajmp counttrue6: acall bark mov a,r2 mov r6,a mov r3,#06h clr ok ajmp counttrue7: acall bark mov a,r2 mov r6,a mov r3,#07h clr ok ajmp counttrue8: acall bark mov a,r2 mov r6,a mov r3,#08h clr ok ajmp count;=犯规抢答程序=error: mov r0,#00h mov th1,#3ch mov tl1,#0b0h

28、 mov 34h,r3 ;犯规号数暂存与(34h)here: mov a,r0 cjne a,#06h,flash ;累加器内容和立即数不等时跳转,0.5s向下运行->灭并停响 clr ring mov r3,#0ah mov r4,#0ah mov r5,#0ah ;三灯全灭 ajmp check1flash: cjne a,#0ch,check1 ;下面是0.8s的情况,响并显示号数并清r0,重新计 setb ring ;报警 mov r0,#00h mov r3,34h ;取回号数 mov r5,#0bh mov r4,#0bh ;显示ff和号数 ajmp check1check1

29、: jnb p3.1,quit1 ;停止未按下时跳转 acall display ajmp herequit1: clr ring clr ok ajmp start;=显示程序=display:mov dptr,#dat1 ;查表显示程序,利用p0口做段选码口输出/p2低三位做位选码输出, mov a,r3 movc a,a+dptr mov p2,#0feh mov p0,a acall delay2 mov dptr,#dat2 mov a,r5 movc a,a+dptr mov p2,#0fdh mov p0,a acall delay2 mov a,r4 movc a,a+dptr

30、 mov p2,#0fbh mov p0,a acall delay2 retdat1: db 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00h,71h ;"灭","1","2","3","4","5","6","7","8","9","灭","f"dat2: db 3fh,06h,5bh,4fh,66h,6dh,7dh

31、,07h,7fh,6fh,00h,71h ;第一个为零,其他与上相同,因为十位如果为零显示熄灭;=加减时间延时(起到不会按下就加n个数)=delay1: mov 35h,#08hloop0: acall display djnz 35h,loop0 ret;=延时4236个机器周期(去抖动用到)=delay: mov 32h,#12hloop: mov 33h,#0afhloop1: djnz 33h,loop1 djnz 32h,loop ret;=延时4236个机器周期(显示用到)=delay2: mov 32h,#43h ;67loop3: mov 33h,#1eh ;30 mov a,

32、r7 ;每隔6070个机器周期读一次p1口,全为1时为无效数据,继续读,有一个不为1时,转到正常抢答处理 jnz aaaa1 ;没读到有效数据时继续转到aaaa1loop2: djnz 33h,loop2 djnz 32h,loop3 ret;=读抢答按键数据口程序=;由于在读抢答数据口的时候,单片机首先进入倒计时程序,再调用显示程序,最后才检测按键口;然而在检测按键口时动态扫描要调用三次(4ms)延时程序.这样就会导致读数据口出现滞后,造成1号优先最高.8号最低.;故采用在延时子程序中加了读数据口程序.保证了灵敏度和可靠性aaaa1: mov a,p1 cjne a,#0ffh,aa1 ;当

33、不全为1时的数据为有效数据aa0: mov 36h,a ;将有效数据送到36h暂存 ajmp loop2aa1: dec r7 ajmp aa0 ;=发声程序=bark: setb ring acall delay1 acall delay1 clr ring ;按键发声 ret;=to溢出中断(响铃程序)=t0int: mov th0,#0ech mov tl0,#0ffh jnb ring,out; cpl p3.6 ;ring标志位为1时候p3.6口不短取反使喇叭发出一定频率的声音out: reti;=t1溢出中断(计时程序)=t1int: mov th1,#3ch mov tl1,#0

34、b0h inc r0 retiend5.3. 定时分析主持人按下“开始”按钮后10 秒内,若无人抢答,单片机会控制让显示器显示fff,主持人可按下“开始”按钮进行下一题的抢答。为了实现这个10 秒的时间限制,当主持人按下“开始”按钮后应进行10秒定时。由于定时间隔太长,可使定时器t0工作在方式一,得到50 ms的定时间隔,再进行软件计数200次,便可实现10秒的定时。若单片机晶振频率为12 mhz,则机器周期为1us,则要实现50ms的定时,定时器t0在50 ms内需要计数n次:n=50ms/1us=50 000次定时器t0工作在方式一 下的计数初值x为:x=最大计数值m-计数次数n=6553

35、6-50000=15536=3cb0h即向th0写入计数初值3ch,向tl0写入计数初值0b0h。方式寄存器tmod初始化,tmod=00000001b=01h,to为方式一定时。用于设置t1用于设置t0gatec/tm1m0gatec/tm1m0000 1000 1 tcon初始化:tr0=1,启动t0。tf1tr1tf0tr0ie1it1ie1ie001010000ie初始化:开放中断ea=1,中断et0=1,允许定时器t0中断。ea-et2eset1exet0ex010001111六·系统仿真及使用说明1、 具有清零装置和抢答控制,可由主持人操纵避免有人在主持人说“开始”前提前

36、抢答违反规则,若有选手在未开始之前抢答,会出现犯规警告。2、 具有定时功能,在10秒内无人抢答表示所有参赛选手获参赛队对本题弃权,由主持人开始下一题。选手回答题目的时间也有限制,选手答题时间为30秒。抢答时间和答题时间剩下5秒的时候,都会出现蜂鸣提示。3、10秒时仍无人抢答其报警电路工作表示抢答时间耗尽并禁止抢答。4、如果想调节抢答时间或答题时间,按"抢答时间调节"键或"答题时间调节" 键进入调节状态,此时会显示现在设定的抢答时间或回答时间值,如想加一秒按一下"加1s"键,如果想减一秒按一下"-1s"键,时间数码管

37、上会显示改变后的时间,调整范围为0s99s, 0s时再减1s会跳到99,99s时再加1s会变到0s。 5、主持人按"抢答开始"键,会有提示音,并立刻进入抢答倒计时(预设10s抢答时间),如有选手抢答,会有提示音,并会显示其号数并立刻进入回答倒计时(预设30s抢答时间),不进行抢答查询,所以只有第一个按抢答的选手有效。倒数时间到小于5s会每秒响一下提示音。 6、如倒计时期间,主持人想停止倒计时可以随时按"停止"按键,系统会自动进入准备状态,等待主持人按"抢答开始"进入下次抢答计时。 7、如果主持人未按"抢答开始"键,而有人

温馨提示

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

评论

0/150

提交评论