基于VerilogHDL的交通灯控制器_第1页
基于VerilogHDL的交通灯控制器_第2页
基于VerilogHDL的交通灯控制器_第3页
基于VerilogHDL的交通灯控制器_第4页
基于VerilogHDL的交通灯控制器_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、交通灯控制器专 业: 电子信息科学与技术_班 级: 学 号: 学生姓名: 指导教师: 黄双林 _ 摘要交通灯是城市交通监管系统的重要组成部分,对于保证机动车辆的安全运行,维持城市道路的顺畅起到了重要作用。目前很多城市交叉路口的交通灯实行的是定时控制,灯亮的时间是预先设定好的,在时间和空间方面的应变性能较差,一定程度上造成了交通资源的浪费,加重了道路交通压力。本文在EDA技术的基础上,利用FPGA的相关知识设计了交通灯控制系统,可以根据实际情况对灯亮时间进行自由调整,通过数码管显示等待时间,点阵显示运行状态,蜂鸣器提示紧急状况,很好地维护了道路的交通规则。整个设计系统通过Quartus 软件中的

2、Verilog HDL语言进行代码编写,并下载到FPGA器件中进行硬件调试,验证了设计的交通信号灯控制电路完全可以实现预定的功能,具有一定的实用性。关键字:交通灯、定时控制、FPGA、Verilog HDL一、设计原理根据交通灯循环顺序表可以得到如表1的循环状态表,遇到紧急状况的时候,这时候有东西通行、南北通行和全部禁行三种情况,紧急状态结束后条件满足的情况下状态依次往后跳转。状态东西方向南北方向时间0 红灯亮绿灯亮20s1黄灯亮绿灯亮10s2绿灯亮红灯亮20s3绿灯亮黄灯亮10s表1 交通灯循环状态表1. 方案比较方案一: 直接用GPIO口驱动双色点阵;方案二:用两块3-8译码器控制双色点阵

3、,一个控制红色,另一个控制绿色;方案三:用一块4-16选择器控制双色点阵;通过比较方案一需要24个GPIO,方案二需要14个GPIO口,而方案三只需要12个GPIO口,考虑到IO口的数量限制和资源的优化,故选择方案三,硬件部分还包括Led灯和蜂鸣器,用洞洞板搭建好了硬件电路。2.系统框架图1 状态机状态转换图随着现代生活节奏的加快,人们出门便更多地选择自家的交通工具,这无疑加大了交通流量,如何控制十字路口的红绿灯,便显得相当的重要。简单的,有效地控制红绿灯,是减小客流量,甚至减少交通事故的重要保障。而此次课题,我选择了交通灯控制电路,能熟悉 Verilog HDL 硬件描述语言在现实生活中的重

4、要意义,为以后的学习和工作打好基础。二、总体设计1. 主体结构根据确定的系统设计方案,运用模块化的设计思路,我们在Quartus II13.0软件系统中设计了整个交通灯控制器的逻辑结构。交通灯控制器包括分频模块、交通灯模块、蜂鸣器控制模块、数码管显示模块、点阵显示模块和时间调整模块。50M的系统时钟分频到1Hz、2Hz和1KHz用于计时,点阵显示当前处于哪种状态,数码管显示模块提示等待的时间,按键调整时间用于调整时间减少客流量,紧急开关用于发生突发事故是禁止车辆通行。特殊运行状态结束后,控制器恢复原来的状态,继续运行。通过各个模块程序之间的端口合理连接和协调,成功设计出交通灯控制器的电路。图2

5、 交通灯控制原理图2. 分模块的设计(1) 分频模块分频模块的功能是将50MHz的时钟频率分频到1Hz、2Hz和1KHz,输出给其他模块调用。在红绿灯交通信号系统中,大多数的情况是通过自动控制的方式指挥交通的。因此,为了避免意外事件的发生,电路必须给出一个稳定的时钟才能让系统正常的工作。因此时钟发生模块最主要的功能就是产生一些稳定的输出信号,并将其用做后面几个电路的使能控制与同步信号。always (posedge Clk)begin if(cnt1=26'd25_000_000) /分频产生1Hz时钟 begin cnt1 <= 26'd0; Clk_1Hz <=

6、 Clk_1Hz; end elsecnt1 <= cnt1+1;if(cnt2 = 15'd25000) /分频产生1KHz时钟begincnt2 <= 15'd0;Clk_1k <= Clk_1k;endelsecnt2 <= cnt2+1'b1;if(cnt3 = 23'd12_499_999) /分频产生2Hz时钟begincnt3 <= 23'd0;Clk_2Hz <= Clk_2Hz;endelsecnt3 <= cnt3+1'b1;end(2) 数码管显示模块数码管显示模块的功能是将当前倒计

7、时的数值输出显示,控制数码管显示,提示车辆应该等待的时间。always (posedge Clk_1k)begincase(Mode) /模式切换2'd0 : Time <= Time1;2'd1 : Time <= Time2;default : Time <= Time3;endcaseDel <= Del; /选择十位和个位if(Key > 3'd0)Seg <= 8'd0;elseSeg <= (Del = 2'b01) ? (segTime/10) : (segTime%10);End(3) 蜂鸣器模块

8、如果实现发生紧急事件,如救护车、警车、抢险车通过,蜂鸣器响5声关闭,特别地,全部禁行的优先级比东西禁行和南北禁行的优先级要高,可以覆盖掉这两种方式,同时蜂鸣器也会响5声关闭,可以提醒其他车辆禁止通行。always (posedge Clk_1Hz)beginif(Key >3'd0)beginif(Key0=1'b0 && Key>1'b1)Flag3 <= 1'b0;if(Flag2 < 4'd10)beginBeep <= Beep;Flag2 <= Flag2+1'b1;endelseif

9、(Key0=1'b1 && Flag3 = 1'b0)beginFlag3 <= 1'b1;Flag2 <= 4'd0;endelseFlag2 <= 4'd10;endelsebeginBeep <= 1'b0;Flag2 <= 4'd0;endend(4) 点阵模块点阵可以显示当前状态,使用的时双色点阵,正常运行时显示绿色的“PASS笑脸”字样,刹车时显示红色的“STOP哭脸”字样,模式切换时显示红色“MODE爱心”字样。always (posedge Clk_1k)beginCol &l

10、t;= Num;if(Key>3'd0 | Mode>2'd0)beginif(Key=3'd0 && Mode>2'd0)Row <= data2Num+count; /"MODE爱心" elseRow <= data1Num+count; /" STOP哭脸" if(Num >= 4'd7)Num <= 4'd0;elseNum <= Num+1'b1; endelse beginRow <= dataNum+count-8;

11、 /" PASS笑脸" if(Num = 4'd15 | Num<8)Num <= 4'd8;elseNum <= Num+1'b1; endif(cnt = 10'd200) /计数,控制点阵移屏速度begincnt <= 10'd0;if(count = 6'd47)count <= 6'd0;else count <= count+1'b1;endelsecnt <= cnt+1'b1;end(5) 按键模块第一个按键是模式切换按键,同时Led1、Led2

12、会点亮,提示时选择的是长时间,第二下是短时间,第三下恢复到正常状态。第二、三个按键分别是控制数码管显示的等待时间增加、减少。always (posedge Clk_2Hz)beginif(key2 = 1'b0) /模式切换Mode <= Mode+1'b1;if(Mode = 2'd3)Mode <= 3'd0;if(key1 = 1'b0) /时间增加if(Mode = 2'd1) /长、短时间选择if(Time2 = 8'd99)Time2 <= 8'd0;elseTime2 <= Time2+1&#

13、39;b1;elseif(Mode = 2'd2)if(Time3 = 8'd99)Time3 <= 8'd0;elseTime3 <= Time3+1'b1;if(key0 = 1'b0) / 时间减少if(Mode = 2'd1) /长、短时间选择if(Time2 = 8'd0)Time2 <= 8'd99;elseTime2 <= Time2-1'b1;elseif(Mode = 2'd2)if(Time3 = 8'd0)Time3 <= 8'd99;elseTi

14、me3 <= Time3-1'b1;end(6) 交通灯模块四个方向的Led显示运行状态,东西方向的灯对应相同,南北方向的灯对应相同。正常运行是按照交通灯规则执行,刹车开关按下时东西禁行时,东西方向红灯,南北方向绿灯;东西南北禁行时,东西方向绿灯,南北方向红灯;全禁行时,东西和南北方向都是红灯;模式切换时,Led灯熄灭。always (posedge Clk_1Hz)beginif(Key2 = 1'b1) /东西通行beginLed <= 6'b110000; /东西方向绿灯亮Led1 <= 6'b000011; /南北方向红灯亮endif(

15、Key1 = 1'b1) /南北通行beginLed <= 6'b000011; /东西方向红灯亮Led1 <= 6'b110000; /南北方向绿灯亮endif(Key0 = 1'b1) /全部禁行beginLed <= 6'b000011; /东西方向红灯亮Led1 <= 6'b000011; /南北方向红灯亮endif(Key > 3'd0) Flag <= 1'b1; /标志,用于恢复初始状态elseif(Flag = 1'b1)/恢复初始状态beginFlag <= 1&

16、#39;b0;Time1 <= Time2;Led <= 6'b110000; Led1 <= 6'b000011; endelsebeginif(Status = 2'd0) /状态0 if(Time1 = 8'd0) begin Led <= 6'b001100; /黄灯亮 Led1 <= 6'b000011; /红灯亮 Status <= 2'd1; /转到状态1 Time1 <= Time3; /短时间 end else Time1 <= Time1-1'b1;if(Stat

17、us = 2'd1) /状态1 if(Time1 = 8'd0) begin Led <= 6'b000011; /红灯亮 Led1 <= 6'b110000; /绿灯亮 Status <= 2'd2;/转到状态2 Time1 <= Time2; /长时间 end else Time1 <= Time1-1'b1;if(Status = 2'd2) /状态2 if(Time1 = 8'd0)begin Led <= 6'b000011; /红灯亮 Led1 <= 6'b00

18、1100; /黄灯亮 Status <= 2'd3;/转到状态3 Time1 <= Time3; /短时间end else Time1 <= Time1-1;if(Status=2'd3) /状态3 if(Time1 = 8'd0)beginLed <= 6'b110000; /绿灯亮Led1 <= 6'b000011; /红灯亮Status <= 2'd0; /返回状态0Time1 <= Time2;/长时间end else Time1 <= Time1-1'b1;case(Mode)2&

19、#39;d0 : Led2 <= 3'b000; /正常模式2'd1 : Led2 <= 3'b110; /长时间模式default : Led2 <= 3'b101; /短时间模式endcaseif(Mode >2'd0)beginFlag1 <= 1'b1;Led <= 6'd0;Led1 <= 6'd0;endelseif(Flag1 = 1'b1)beginFlag1 <= 1'b0;Time1 <= Time2;Led <= 6'b110

20、000; /绿灯亮Led1 <= 6'b000011; /红灯亮endendend3工程总体结构所设计的交通信号灯控制电路,主要适用于在两条干道汇合点形成的十字交叉路口,路口设计两组红绿灯分别对两个方向上的交通运行状态进行管理。所设计的这个系统的主要逻辑设计由一片型号为EP4CE115F29C7芯片完成,编写的Verilog HDL源程序在经过编译和功能仿真测试后,针对下载芯片进行管脚配置,下载到芯片中,进行相应的硬件调试,调试结果与软件仿真的结果相吻合,验证了设计完成了预定功能。基于Verilog HDL设的交通灯控制器,外围电路少、功耗低、可靠性高,便于系统功能的修改,设计效

21、率高。图3 总的电路图结构三、问题和解决方案1. 在 QuartusII 软件上进行仿真时,发现不能得到预期的效果,分析得知由于分频过大的原因,导致时序出现问题。经过同学的讨论决定在软件更改时钟信号的分频操作,问题得以解决。2. 对于 Verilog 语言的编程方面,特别在对变量给予初值时,完全不同于 C 语言编程,我们在对许多变量进行了初值设置,此后编译每每都不通过,在认真思考后,查阅了课本,发现在 Verilog HDL 编程中,不能对变量初值。我恍然大悟,在以后的编程中我们牢记住了这一点。3. 在添加数码管显示过程中现实出现混论,经过检查后发现错误是由于高位和低位由于是对引脚配置的错误导

22、致的。改正后发现显示正常。4. 因为代码的不严谨,出现了各种逻辑错误,导致实际硬件调试的时候,灯、数码管、蜂鸣器不按程序对应的要求执行,经过代码认真分析和同学讨论,解决了问题。四、总结通过本设计,我对FPGA的设计的基本流程与相关概念有了进一步的理解。我学会了用Verilog语言写分频器、按键控制、点亮LED、控制数码管和点阵的显示等。在写设计代码时,我对always块的书写有了进一步的理解和掌握。在下载到板子上的时候出现了各种问题,一边解决问题一边进步。有时候许多的错误就来源于一个小小的错误。因此,编写程序必须的十分的细心,尤其当程序比较长的时候,编程水平的高低可以在体现程序的简洁程度。多花

23、点时间是值得的,如果时间充足应该可以做的更好。这次运用专业知识做一个生活中可以用到的东西,加强了理论与实践的联系。培养了我独立思考、动手操作的能力,在做设计的时候,学会了很多学习的方法,这是日后最实用的。这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。参考文献1 全国大学生电子设计获奖作品汇编J.北京理工大学出版社,20052 康华光.电子技术基础-数字部分M.高等教育出版社,19983 谭会生等.EDA技术及应用M.西安电子科技大学出版社,200

24、14 潘松等.EDA技术实用教程M.科学出版社,2006附录:图4 实物1图5 实物2图6 实物3程序清单:/031341205 谢亮/交通灯设计module traffic (Led, Led1, Led2, Key, key, Clk, Beep, Del, Seg, Col, Row);input Clk; / 系统时钟50MHz input 2:0 Key; /紧急开关,分为东西通行,南北通行,全部禁行input 2:0 key; /调整时间,分别为模式选择,长时间,短时间output reg 2:0 Led2; /调整时间的显示模式output reg Beep; /911报警,响5

25、声后关闭output reg 7:0 Row; /点阵行控制output reg 3:0 Col; /4-16器进行列控制output reg 5:0 Led; /东西方向指示灯output reg 5:0 Led1; /南北方向指示灯output reg 1:0 Del; /共阴数码管位选output reg 7:0 Seg; /数码管段选reg 1:0 Status; /指示灯的4种状态reg 3:0 Num; /点阵计数中间变量reg 7:0 seg 9:0; /数码管初值09reg 9:0 cnt; /计数,用于控制点阵移动速度reg 26:0 cnt1; /计数,用于产生1Hz时钟r

26、eg 14:0 cnt2; /计数,用于产生1KHz时钟reg 22:0 cnt3; /计数,用于产生2Hz时钟reg 5:0 count; /计数,用于点阵移屏显示reg 3:0 Flag2; /标志状态,控制蜂鸣器reg Flag, Flag1, Flag3; /标志状态,调节或紧急刹车后恢复初始状态reg Clk_1k, Clk_1Hz, Clk_2Hz; /1KHz, 1Hz, 2Hz时钟信号reg 1:0 Mode; /正常显示、长时间、短时间三种模式切换reg 7:0 data 47:0, data1 47:0, data2 47:0; /储存字模数据reg 7:0 Time, T

27、ime1, Time2, Time3; /计数,用于数码管显示,1计数,2长时间,3短时间/初始化赋值initial begin Led = 6'b110000; /绿灯亮 Led1 = 6'b000011; /红灯亮 Time1 = 8'd20; /数码管初值Time2 = 8'd20; /长时间初值Time3 = 8'd10; /短时间初值 Del = 2'b01; /数码管位选初值seg0 = 8'b00111111; /数码管"09"seg1 = 8'b00000110; seg2 = 8'b0

28、1011011; seg3 = 8'b01001111; seg4 = 8'b01100110; seg5 = 8'b01101101; seg6 = 8'b01111101; seg7 = 8'b00000111; seg8 = 8'b01111111; seg9 = 8'b01101111; data0 = 8'h00;/点阵" PASS笑脸"data1 = 8'h00;data2 = 8'h00;data3 = 8'h00;data4 = 8'h00;data5 = 8&#

29、39;h00;data6 = 8'h00;data7 = 8'h00; /* */data8 = 8'h44;data9 = 8'h7C;data10 = 8'h54;data11 = 8'h14;data12 = 8'h14;data13 = 8'h14;data14 = 8'h08;data15 = 8'h00;/*P*/data16 = 8'h40;data17 = 8'h60;data18 = 8'h78;data19 = 8'h2C;data20 = 8'h28;d

30、ata21 = 8'h70;data22 = 8'h60;data23 = 8'h40;/*A*/data24 = 8'h00;data25 = 8'h48;data26 = 8'h54;data27 = 8'h54;data28 = 8'h54;data29 = 8'h54;data30 = 8'h24;data31 = 8'h00;/*S*/data32 = 8'h00;data33 = 8'h48;data34 = 8'h54;data35 = 8'h54;data36

31、 = 8'h54;data37 = 8'h54;data38 = 8'h24;data39 = 8'h00;/*S*/data40 = 8'h7E;data41 = 8'h91;data42 = 8'hA5;data43 = 8'hA1;data44 = 8'hA1;data45 = 8'hA5;data46 = 8'h91;data47 = 8'h7E;/*笑脸*/data10 = 8'h00;/点阵" STOP哭脸" data11 = 8'h00;data12

32、 = 8'h00;data13 = 8'h00;data14 = 8'h00;data15 = 8'h00;data16 = 8'h00;data17 = 8'h00; /* */data18 = 8'h00;data19 = 8'h48;data110 = 8'h54;data111 = 8'h54;data112 = 8'h54;data113 = 8'h54;data114 = 8'h24;data115 = 8'h00;/*S*/data116 = 8'h04;dat

33、a117 = 8'h04;data118 = 8'h44;data119 = 8'h7C;data120 = 8'h44;data121 = 8'h04;data122 = 8'h04;data123 = 8'h00; /*T*/data124 = 8'h38;data125 = 8'h44;data126 = 8'h44;data127 = 8'h44;data128 = 8'h44;data129 = 8'h44;data130 = 8'h38;data131 = 8'h

34、00; /*O*/data132 = 8'h44;data133 = 8'h7C;data134 = 8'h54;data135 = 8'h14;data136 = 8'h14;data137 = 8'h14;data138 = 8'h08;data139 = 8'h00; /*P*/data140 = 8'h7E;data141 = 8'hA1;data142 = 8'h95;data143 = 8'h91;data144 = 8'h91;data145 = 8'h95;data1

35、46 = 8'hA1;data147 = 8'h7E; /*哭脸*/data20 = 8'h00;/点阵"MODE爱心"data21 = 8'h00;data22 = 8'h00;data23 = 8'h00;data24 = 8'h00;data25 = 8'h00;data26 = 8'h00;data27 = 8'h00; /* */data28 = 8'h44;data29 = 8'h7C;data210 = 8'h0C;data211 = 8'h70;d

36、ata212 = 8'h0C;data213 = 8'h7C;data214 = 8'h44;data215 = 8'h00;/*M*/data216 = 8'h38;data217 = 8'h44;data218 = 8'h44;data219 = 8'h44;data220 = 8'h44;data221 = 8'h44;data222 = 8'h38;data223 = 8'h00;/*O*/data224 = 8'h44;data225 = 8'h7C;data226 = 8

37、'h44;data227 = 8'h44;data228 = 8'h44;data229 = 8'h44;data230 = 8'h38;data231 = 8'h00;/*D*/data232 = 8'h44;data233 = 8'h7C;data234 = 8'h54;data235 = 8'h54;data236 = 8'h54;data237 = 8'h54;data238 = 8'h44;data239 = 8'h00;/*E*/data240 = 8'h1C;d

38、ata241 = 8'h22;data242 = 8'h42;data243 = 8'h84;data244 = 8'h84;data245 = 8'h42;data246 = 8'h22;data247 = 8'h1C;/*爱心*/ end/50M系统时钟分频always (posedge Clk)begin if(cnt1=26'd25_000_000) /分频产生1Hz时钟 begin cnt1 <= 26'd0; Clk_1Hz <= Clk_1Hz; end elsecnt1 <= cnt1+1

39、;if(cnt2 = 15'd25000) /分频产生1KHz时钟begincnt2 <= 15'd0;Clk_1k <= Clk_1k;endelsecnt2 <= cnt2+1'b1;if(cnt3 = 23'd12_499_999) /分频产生2Hz时钟begincnt3 <= 23'd0;Clk_2Hz <= Clk_2Hz;endelsecnt3 <= cnt3+1'b1;end/指示灯的4种状态always (posedge Clk_1Hz)beginif(Key2 = 1'b1) /东西通

40、行beginLed <= 6'b110000; /东西方向绿灯亮Led1 <= 6'b000011; /南北方向红灯亮endif(Key1 = 1'b1) /南北通行beginLed <= 6'b000011; /东西方向红灯亮Led1 <= 6'b110000; /南北方向绿灯亮endif(Key0 = 1'b1) /全部禁行beginLed <= 6'b000011; /东西方向红灯亮Led1 <= 6'b000011; /南北方向红灯亮endif(Key > 3'd0) Fl

41、ag <= 1'b1; /标志,用于恢复初始状态elseif(Flag = 1'b1)/恢复初始状态beginFlag <= 1'b0;Time1 <= Time2;Led <= 6'b110000; Led1 <= 6'b000011; endelsebeginif(Status = 2'd0) /状态0 if(Time1 = 8'd0) begin Led <= 6'b001100; /黄灯亮 Led1 <= 6'b000011; /红灯亮 Status <= 2'

42、;d1; /转到状态1 Time1 <= Time3; /短时间 end else Time1 <= Time1-1'b1;if(Status = 2'd1) /状态1 if(Time1 = 8'd0) begin Led <= 6'b000011; /红灯亮 Led1 <= 6'b110000; /绿灯亮 Status <= 2'd2;/转到状态2 Time1 <= Time2; /长时间 end else Time1 <= Time1-1'b1;if(Status = 2'd2) /状

43、态2 if(Time1 = 8'd0)begin Led <= 6'b000011; /红灯亮 Led1 <= 6'b001100; /黄灯亮 Status <= 2'd3;/转到状态3 Time1 <= Time3; /短时间end else Time1 <= Time1-1;if(Status=2'd3) /状态3 if(Time1 = 8'd0)beginLed <= 6'b110000; /绿灯亮Led1 <= 6'b000011; /红灯亮Status <= 2'd

44、0; /返回状态0Time1 <= Time2;/长时间end else Time1 <= Time1-1'b1;case(Mode)2'd0 : Led2 <= 3'b000; /正常模式2'd1 : Led2 <= 3'b110; /长时间模式default : Led2 <= 3'b101; /短时间模式endcaseif(Mode >2'd0)beginFlag1 <= 1'b1;Led <= 6'd0;Led1 <= 6'd0;endelse if(F

45、lag1 = 1'b1) begin Flag1 <= 1'b0; Time1 <= Time2; Led <= 6'b110000; /绿灯亮 Led1 <= 6'b000011; /红灯亮 endendend/时间调整always (posedge Clk_2Hz)beginif(key2 = 1'b0) /模式切换Mode <= Mode+1'b1;if(Mode = 2'd3)Mode <= 3'd0;if(key1 = 1'b0) /时间增加if(Mode = 2'd1) /长、短时间选择if(Time2 = 8'd99)Time2 <= 8'd0;elseTime2 <= Time2+1'b1;elseif(Mode = 2'd2)if(Time3 = 8'd99)Time3 <= 8'd0;elseTime3 <=

温馨提示

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

最新文档

评论

0/150

提交评论