基于FPGA的交通灯控制器设计1.doc_第1页
基于FPGA的交通灯控制器设计1.doc_第2页
基于FPGA的交通灯控制器设计1.doc_第3页
基于FPGA的交通灯控制器设计1.doc_第4页
基于FPGA的交通灯控制器设计1.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

综合课程设计报告综合课程设计报告 基于基于 fpgafpga 的交通灯控制器设计的交通灯控制器设计 学学 院院 :通信与电子学院通信与电子学院 专业班级专业班级 :电子科学与技术班电子科学与技术班 姓姓 名名 : 学学 号号 : 指导老师指导老师 : 摘摘 要要 近年来,随着科技的飞速发展,fpga 的应用正在不断深入,同 时带动传统控制检测技术日益更新。在实时检测和自动控制的单片 机应用系统中,fpga 往往作为一个核心部件来使用,正在不断的应 用到实际生活中,并且根据具体硬件结构软硬件结合,加以完善。 交通灯控制器在城市交通监管中起着极其重要的作用。传统的 交通灯控制器基本是通过单片机或者 plc 实现。本文介绍基于 fpga 技术和 quartus ii 开发平台实现十字路口交通灯控制器的的一种方 案,实现了通过信号灯对路面状况的智能控制。从一定程度上解决 了交通路口堵塞、车辆停车等待时间不合理、急车强通等问题。 。利 用 vhdl 硬件描述语言描述各模块程序,并在 quartus ii 环下进行 编译、仿真,生成顶层文件后下载在 fpga 器件 flex epf10k10lc84 上进行验证。验证结果表明,设计基本实现了交通灯控制器所要求 的控制过程,包括倒计时时间显示功能、特殊状态控制功能和主、 支干道的红、黄、绿灯交替显示功能,表明本文所述的的设计方案 正确。 本文结合交通灯控制器的设计过程,简单介绍了硬件描述语 言 vhdl 的结构模型和设计流程、 vhdl 设计的优点及该语言在数字 系统设计 中的美好前景和重要地位。 关键词:关键词:fpgafpga,交通灯控制器,交通灯控制器,quartusquartus,verilogverilog hdlhdl 目目 录录 摘要 1 fpga/cpld 概述.1 2 系统分析与总体方案3 2.1 系统分析.3 2.2 设计的总体方案3 3 硬件电路设计4 3.1 分频器设计.4 3.2 状态控制电路设计4 3.3 计数器设计.5 3.4 译码显示电路设计.5 4 robei 软件程序设计6 4.1 扫描显示模块.6 4.2 状态转换模块.7 4.3 总体设计.11 4.4 测试文件.12 5 程序仿真与分析12 5.1 仿真结果12 5.2 仿真结果分析14 6 心得体会16 参考文献17 附录18 1 1 1 fpga/cpldfpga/cpld 概述概述 随着世界范围内城市化和机动化进程的加快,城市交通越来越成为一个全 球化的问题。城市交通基础设施供给滞后于高速机动化增长需求,道路堵塞日 趋加重,交通事故频繁,环境污染加剧等问题普遍存在。目前,全国大中城市 普遍存在着道路拥挤、车辆堵塞、交通秩序混乱的现象,交通事故频发,这给 人民的生命财产安全带来了极大的损失。如何解决城市交通问题已成为全社会 关注的焦点和大众的迫切呼声。探究城市交通发展中存在问题的原因,无论是 从宏观上还是从微观上分析,其根本原因在于城市交通系统的管理机制不适应。 城市交通控制系(utc ,urban traffic control system)是现代城市智能交 通系统(idj ,intelligent transport system)的组成之一,主要用于城市 道路交通的控制与管理。城市平交路口实现交通信号控制是城市交通管理现代 化的基本标志之一,是提高交通管理效能的重要技术手段。路口信号控制器是 控制交叉路口交通信号的设备,它是交通信号控制的重要组成部分。各种交通 控制方案,最终都要由路口信号控制器来实现。为了确保十字路口的行人和车 辆顺利、畅通地通过,往往采用电子控制的交通信号来进行指挥。伴随着社会的 发展以及人类生活水平的提高,汽车的数量在不断增加,eda 技术的发展和应用 领域也在不断的扩大与深入,机械、电子、通信、航空航天、化工、矿产、生 物、医学、军事等各个领域的重要性日益突出。利用 eda 技术设计交通灯来完 成这个需求就显的更加迫切,同样也是非常的实用和合理。 fpga(现场可编程门阵列)和 cpld(复杂可编程逻辑器件)都是可编程逻辑 器件,他们是在 pal,gal 等逻辑器件的基础上发展起来的。同以往的 pal,gal 相比较 fpga/cpld 的规模比较大,它可以替代几十甚至几千块通用 ic 芯片。这 样的 fpga/cpld 上就是一个子系统部件。这种芯片收到世界范围内电子工程设 计人员的广泛关注和普遍欢迎。比较典型的就是 altera 公司和 xilinx 公司的 cpld 器件系列和 fpga 器件系列,他们开发较早,占用了较大的 pld 市场。 fpga/cpld 芯片都是特殊的 asic 芯片,除了具有 asic 的特点外,还具有 以下几个优点: 随着 vlsi(超大集成电路)工艺的不断提高单一芯片内部可以容纳上百万个 晶体管,fpga/cpld 芯片的规模也越来越大,其单片逻辑门数已达上百万门, 2 它所实现的功能也越来越强,同时也可以实现系统集成,即片上系统 soc。 fpga/cpld 芯片在出厂之前都做过百分之百的测试,不需要设计人员承担 芯片风险和费用,设计人员只需在自己的实验室就可以通过相关的软硬件环境 来完成芯片的最终功能设计。所以,fpga/cpld 的资金投入就少,减少了潜在 的花费。 用户可以反复的编程,擦除,使用或者在外围电路不动的情况下用不同软 件就可实现不同的功能。fpga/cpld 软件包中有各种输入工具和仿真工具,及 版图设计工具和编程器等全线产品,电路设计人员在很短的时间内就可完成电 路的输入,编译,优化,仿真,直至最后芯片的制作。当电路有少量的改动, 更能显示 fpga/cpld 的优势。 在线可编程技术(isp)使得使用 fpga/cpld 的产品可以做到远程升级。 3 2 2 课程设计总体方案课程设计总体方案 2.1 系统分析 通过分析可以知道,所要设计的十字路口交通灯控制电路要能够使南北、 东西各四个灯(红、黄、绿),三个灯能够按顺序依次亮灭。而且要求绿灯亮 转红灯亮之前要先转黄灯亮 5 秒,还要求三种灯的点亮时间能够以倒计时的形 式显示出来。可以用 verilog hdl 语言合理设计系统功能,使红黄绿灯的转换 有一个准确的时间间隔和转换顺序。 使用基于 fpga 的方法具有周期短、使用灵活、易于修改等明显的优点。而 且,随着 fpga 器件,设计语言和电子设计自动化工具的发展和改进,越来越多 的电子系统采用 fpga 来设计。未来使用 fpga 器件设计的产品将出现在各个领 域。因此此次的交通灯控制器将基于 fpga 的设计方案来实现所需要的功能。 2.2 设计的总体方案 根据设计要求和系统所具有功能,并参考相关的文献资料经行方案设 计画出如下所示的十字路口交通灯控制器系统框图,及为设计的总体方案,框 图如下图 3.1 所示: clk 时钟分频模块 交通灯控制及计时模块 扫描显示模块 led 显示数码管位码数码管段码 图 2.2 系统的框图 4 3 3 硬件电路设计硬件电路设计 3.1 分频器设计 分频器实现的是将高频时钟信号转换成低频时钟信号,用于触发控制器、计数器和扫描显示电 路。具体实物模块如图: 图 3.1 分频器模块 3.2 状态控制电路设计 状态控制器的作用是根据计数器的计数值控制各方向上发光二极管的亮、灭, 当计时时间到达,状态控制器就响应,自动跳转到下一个状态。此外,当检测 到特殊情况(emi =1)发生时,无条件点亮红灯的二极管(急救灯按下 emi=1,则东西南北都亮红灯,在这种状态下原来的状态必须保持,即东西南 北方向定时时间保持不变。急救灯未按下或者按下后恢复,则继续计时(计时 通过计数器 ct),同时恢复东西南北原来灯的状态)。具体实物模块如图: 图 3.2 控制电路模块 5 3.3 计数器设计 这里需要的计数器的计数范围为 0-80。计到 80 后,下一个时钟沿回复到 0,开始下一轮计数。此外,当检测到特殊情况(emi =1)发生是,计数器 暂停计数,而系统复位信号 reset 则使计数器异步清零。 图 3.3 计数器模块 3.4 译码显示电路设计 根据状态控制器所控制的状态和计数器的计时时间,选择当前状态下的显 示器,使显示器输出当前状态下的数码管亮、灭指令,其中数码管的显示采用 动态扫描显示。具体实物模块如图: 图 3.4 译码显示电路模块 6 4 4 robeirobei 软件程序设计软件程序设计 4.1 扫描显示模块: /*扫描显示*/ parameter _0 = 7b1000000, _1 = 7b1111001, _2 = 7b0100100, _3 = 7b0110000, _4 = 7b0011001, _5 = 7b0010010, _6 = 7b0000010, _7 = 7b1111000, _8 = 7b0000000, _9 = 7b0011000; reg 6:0rten_smg_data; initial begin rten_smg_data = 7b0000000; end always ( posedge clk or negedge nrst ) if( !nrst ) begin rten_smg_data = 7b1111111; end else case( ten_data ) 4d0 : rten_smg_data = _0; 4d1 : rten_smg_data = _1; 4d2 : rten_smg_data = _2; 4d3 : rten_smg_data = _3; 4d4 : rten_smg_data = _4; 4d5 : rten_smg_data = _5; 4d6 : rten_smg_data = _6; 4d7 : rten_smg_data = _7; 4d8 : rten_smg_data = _8; 4d9 : rten_smg_data = _9; endcase /*/ reg 6:0rone_smg_data; initial begin rone_smg_data = 7b0000000; end 2 always ( posedge clk or negedge nrst ) if( !nrst ) begin rone_smg_data = 7b1111111; end else case( one_data ) 4d0 : rone_smg_data = _0; 4d1 : rone_smg_data = _1; 4d2 : rone_smg_data = _2; 4d3 : rone_smg_data = _3; 4d4 : rone_smg_data = _4; 4d5 : rone_smg_data = _5; 4d6 : rone_smg_data = _6; 4d7 : rone_smg_data = _7; 4d8 : rone_smg_data = _8; 4d9 : rone_smg_data = _9; endcase /*/ assign ten_smg_data = rten_smg_data; assign one_smg_data = rone_smg_data; /*/ 4.2 状态转换模块: /*状态转换*/ parameter state_0 = 2b00, state_1 = 2b01, state_2 = 2b10, state_3 = 2b11; reg 1:0cs; reg 1:0flag; reg 3:0count_h , count_l; reg 3:0count_h1 , count_l1; reg ecs; reg2:0light_zhu; /light_zhu0 ?light_zhu1 ?light_zhu2 ? reg2:0light_zhi; /light_zhi0 ?light_zhi1 ?light_zhi2 ? initial begin cs = 2b00; flag = 2b00; ecs = 1; count_h = 4b0000; count_l = 4b0000; count_h1 = 4b0000; 3 count_l1 = 4b0000; light_zhu = 3b000; light_zhi = 3b000; end always ( posedge clk_1hz or negedge nrst ) if(!ecs) begin ecs = 1; end else begin if( !nrst ) begin cs = state_0; flag = 2b00; state_0_init; end else case( cs ) state_0: if( flag = 2b00 ) /状态0, 35s begin if( !count_h cs = state_1; state_1_init; /state_1 end else if( !count_l ) begin count_l = 4b1001; count_h = count_h-1; end else begin count_l = count_l-1; end if( !count_l1 ) begin count_l1 = 4b1001; count_h1 = count_h1-1; end else begin count_l1 = count_l1-1; 4 end end state_1: if( flag = 2b01 ) /状态1,5s begin if( !count_l ) begin flag = 2b10; cs = state_2; state_2_init; /状态2 end else begin count_l = count_l-1; count_l1=count_l; ecs = 0; end end state_2: if( flag = 2b10 ) /状态2,25s begin if( !count_h cs = state_3; state_3_init; /state_3 end else if( !count_l ) begin count_l = 4b1001; count_h = count_h-1; end else begin count_l = count_l-1; end if( !count_l1 ) begin count_l1 = 4b1001; count_h1 = count_h1-1; end else begin count_l1 = count_l1-1; end end 5 state_3: if( flag = 2b11 ) /状态3,5s begin if( !count_l ) begin flag = 2b00; cs = state_0; state_0_init; /状态0 end else begin count_l = count_l-1; count_l1 = count_l; ecs = 0; end end default: begin flag =2b00; cs = state_0; end endcase end /*/ task state_0_init; begin/主干道绿灯45秒只干道 count_h = 4b0100; /高位为4 count_l = 4b0101; /低位为5 count_h1 = 4b0101; /高位5 count_l1 = 4b0000; /低位0 light_zhu = 3b100; /light_zhu0:0 , light_zhu1:0 , light_zhu2:1 light_zhi = 3b001; /light_zhi0:0 , light_zhi1:0 , light_zhi2:1 end endtask /*/ /*/ task state_1_init; begin/黄灯5秒 count_h = 4b0000; /高位为0 count_l = 4b0101; /低位为5 count_h1 = 4b0000; count_l1 = 4b0101; light_zhu = 3b010; light_zhi = 3b001; end endtask 6 /*/ task state_2_init; begin/主干道红灯25秒 count_h = 4b0010; /高位为2 count_l = 4b0101; /低位为5 count_h1= 4b0010; /高位为3 count_l1 = 4b0000; /低位为0 light_zhu = 3b001; light_zhi = 3b100; end endtask /*/ task state_3_init; begin/5秒黄灯 count_h = 4b0000; /高位为0 count_l = 4b0101; /地位为5 count_h1 = 4b0000; count_l1 = 4b0101; light_zhu = 3b001; light_zhi = 3b010; end endtask /*/ assign one_data = count_l; assign ten_data = count_h; assign one_data1 = count_l1; assign ten_data1 = count_h1; assign led_zhu = light_zhu; assign led_zhi = light_zhi; /*/ 1 4.3 总体设计: 4.4 测试文件: reg clk_signal; initial begin clk_signal=0; clk=0; nrst=0; #1 nrst=1; #500 $finish; end always begin #1 clk_signal=clk_signal; clk=clk_signal; end 5 程序仿真与分析 5.1 仿真结果 2 利用 robei 软件对本程序进行编译,生成了可以进行仿真定时分析以及下 载到可编程器件的相关文件。仿真结果如下图所示: 总体: 主干道: 支干道: 3 5.2 仿真结果分析 通过写测试文件设置仿真时间,就可以得到如上所示的仿真波形图。由仿 真波形图可以看出波形是由 clk 信号触发而显示出各个状态的。nrst 低电平信 号输入时,所有交通灯都变为红灯状态。由仿真波形图还可以清楚的看出各时 间段每个交通灯的状态。 要得到正确的仿真波形图就不许设定合适的时间信号 clk 值。如果 clk 值 设置的太小则交通灯状态变化得太快无法分辨,如果 clk 值设置得太大则交通 灯状态转换缓慢,效果不明显。其次,要设定 clk 高低电平的时间,如果没有 设定 clk 脉宽就不可能触发而得到仿真图。最后,就是要设置 nrst 高电平信号。 心得体会 首先在这里,要感谢詹华群老师的授课和小强同学的指导,感谢学院开设基 于 fpga 的交通灯控制器设计这门课程设计,给了我们一次充分锻炼,将理论 知识付诸实践的机会。刚开始对 fpga 都不怎么熟悉对 robei 软件也不怎么熟悉, 还以为这次交通灯控制器的设计是跟我们做的 eda 用 quartusii 做的交通灯实 验差不多,但经过一番了解还是发现有许多不同,只能说是相互关联。 大学三年,我们学习了很多工程技术的知识,做过一些专业实训和实验, 但却经常性的忽视在这些课程中的课程设计这个关键环节,认为它们只不过是 走过场,抄抄代码,写写报告就够了。其实不然,课程设计本身就是一次做项 目的经历,它要求你严格按照项目规程操作,在时间和进度上,都要有项目意 通过这段时间老师对本次课程设计的讲解和自己对 robei 的熟悉和学习, 发现了自己 eda 上的很多不足,发现了很多知识上的漏洞。同时也看到了自己 的实践经验还是比较缺乏,理论联系实际的能力还急需提高。 4 这次课程设计让我学到了很多,不仅是巩固了先前学的 quartus 的使用, 而且也学会了新的 robei 软件的使用,通过两个软件的对比更进一步加强了对 fpga 工作原理的理解、提升的自己对 verilog 的编程能力。 还有一点是我们做任何事情都无法缺少的,那就是细心认真、耐心调试。 很多知名的程序在正式发布之前都会有 、 等测试版本,为的就是在反复的 试验中发现那些程序员无法发现的小 bug。此次设计我们就深深地体会到了, 由于编程的时候没有做到足够的细心,导致一串代码弄混了。但是密密麻麻的 英文字母混在一起,我始终没有发现。最终在调试的时候,就出现了问题。只 知道出现了问题,就是不知道到问题的根源在哪里,好长时间都没有找出问题 的所在。这也让我真正的明白了,科学的严谨性,它不允许出半点去对待差错, 否则后果会是比较麻烦的。 通过分析将交通灯控制系统分为四个模块:分频模块、计时模块、控制 模块和显示译码模块。信号灯在计数器的计数信号的控制下各个工作状态之间 的转换非常明确,所以可利用状态机来对控制模块进行设计。计数器采用倒计 时的方式,由于使用 7 段数码显示器来模拟时间显示,所以需要将计时模块的 输出信号转化为数码显示器的驱动信号,中间涉及到十进制和二进制之间的转 换。 在设计中采用 verilog hdl 语言设计交通灯控制系统, 借助其功能强大的语言 结构, 简明的代码描述复杂控制逻辑设计, 与工艺无关特性, 在提高工作效率 的同时达到求解目的, 并可以通过 verilog hdl 语言的综合工具进行相应硬件 电路生成, 具有传统逻辑设计方法所无法比拟的优越性。 在设计过程中,觉得最难的部分是波形仿真部分,虽然程序编译通过但仿真却 比较难实现正确的波形,不是计数器无法正常计数,就是控制输出无法进入到 下一个状态,每次出现问题就必须返回重新修改程序。实践证明,在编写一个 较复杂的程序时,一开始一定要先把各个模块分析透彻,弄清楚各个功能及实 现它们的逻辑算法,做到心中有数后在开始下笔写编写程序。 从理论到实践都使我学到了很多东西,它不仅可以巩固了以前所学过的知 识,而且学到了很多在书本上所没有学到过的知识。同时也明白了理论与实践 相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践 5 相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际 动手能力和独立思考的能力。 参考文献 1康华光 主编, 电子技术基础-数字部分 ,高等教育出版社, 1998。 2谭会生等 主编, eda 技术及应用 ,西安电子科技大学出版社, 2001 3彭介华, 电子技术课程设计指导高等教育出版社.2000 4雷伏容 主编, vhdl 电路设计 ,清华大学出版社,2006 5潘松等 主编, eda 技术实用教程 ,科学出版社,2006 6. 潘松 主编, eda 技术与 verilog hdl ,清华大学出版社, 2010 7. 冯涛等主编, 可编程逻辑器件开发技术:max+plus入门与提 高 ,人民邮电出版社,2012 8.杨捷,蒋炜华,马临超.基于 vhdl 语言的交通灯控制器设计河 南机电高等专科学校学报, 2008, 16(3): 102-105. 9.文畅. 基于 fpga/cpld 和 vhdl 语言的交通灯控制系统设计j. 电脑知识与术, 10.张淑骅. 基于 fpga 的交通灯的 vhdl 设计j. 电力与能源, 2007(19): 478-479. 8张红润. fpga/cpld 应用设计m. 北京: 北京 航空航天大学出版社, 2009. 6 11.吴慎将, 李党娟. 智能交通灯控制器的设计j. 中国科技核心期刊, 2010, 29(11): 51-53. 12.邱磊, 肖兵. 基于 vhdl 语言的立通灯控制器设计j. 福建电脑: 2004(12): 76-77. 附录 4.1 扫描显示模块: /*扫描显示*/ parameter _0 = 7b1000000, _1 = 7b1111001, _2 = 7b0100100, _3 = 7b0110000, _4 = 7b0011001, _5 = 7b0010010, _6 = 7b0000010, _7 = 7b1111000, _8 = 7b0000000, _9 = 7b0011000; reg 6:0rten_smg_data; initial begin rten_smg_data = 7b0000000; end always ( posedge clk or negedge nrst ) if( !nrst ) begin rten_smg_data = 7b1111111; end else case( ten_data ) 4d0 : rten_smg_data = _0; 4d1 : rten_smg_data = _1; 4d2 : rten_smg_data = _2; 4d3 : rten_smg_data = _3; 4d4 : rten_smg_data = _4; 4d5 : rten_smg_data = _5; 4d6 : rten_smg_data = _6; 4d7 : rten_smg_data = _7; 4d8 : rten_smg_data = _8; 4d9 : rten_smg_data = _9; 7 endcase /*/ reg 6:0rone_smg_data; initial begin rone_smg_data = 7b0000000; end always ( posedge clk or negedge nrst ) if( !nrst ) begin rone_smg_data = 7b1111111; end else case( one_data ) 4d0 : rone_smg_data = _0; 4d1 : rone_smg_data = _1; 4d2 : rone_smg_data = _2; 4d3 : rone_smg_data = _3; 4d4 : rone_smg_data = _4; 4d5 : rone_smg_data = _5; 4d6 : rone_smg_data = _6; 4d7 : rone_smg_data = _7; 4d8 : rone_smg_data = _8; 4d9 : rone_smg_data = _9; endcase /*/ assign ten_smg_data = rten_smg_data; assign one_smg_data = rone_smg_data; /*/ 4.2 状态转换模块: /*状态转换*/ parameter state_0 = 2b00, state_1 = 2b01, state_2 = 2b10, state_3 = 2b11; reg 1:0cs; reg 1:0flag; reg 3:0count_h , count_l; reg 3:0count_h1 , count_l1; reg ecs; reg2:0light_zhu; /light_zhu0 ?light_zhu1 ?light_zhu2 ? reg2:0light_zhi; /light_zhi0 ?light_zhi1 ?light_zhi2 ? initial begin 8 cs = 2b00; flag = 2b00; ecs = 1; count_h = 4b0000; count_l = 4b0000; count_h1 = 4b0000; count_l1 = 4b0000; light_zhu = 3b000; light_zhi = 3b000; end always ( posedge clk_1hz or negedge nrst ) if(!ecs) begin ecs = 1; end else begin if( !nrst ) begin cs = state_0; flag = 2b00; state_0_init; end else case( cs ) state_0: if( flag = 2b00 ) /状态0, 35s begin if( !count_h cs = state_1; state_1_init; /state_1 end else if( !count_l ) begin count_l = 4b1001; count_h = count_h-1; end else begin count_l = count_l-1; end if( !count_l1 ) begin 9 count_l1 = 4b1001; count_h1 = count_h1-1; end else begin count_l1 = count_l1-1; end end state_1: if( flag = 2b01 ) /状态1,5s begin if( !count_l ) begin flag = 2b10; cs = state_2; state_2_init; /状态2 end else begin count_l = count_l-1; count_l1=count_l; ecs = 0; end end state_2: if( flag = 2b10 ) /状态2,25s begin if( !count_h cs = state_3; state_3_init; /state_3 end else if( !count_l ) begin count_l = 4b1001; count_h = count

温馨提示

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

评论

0/150

提交评论