华中科技大学电子技术课程设计报告——交通灯控制器设计.doc
课程设计报告——交通信号灯控制器

目录一、设计背景 (2)二、任务和要求 (2)三、总体设计方案 (3)1.状态设置 (3)2.系统框图 (3)a.系统总框图 (3)b.系统状态转换框图 (4)四、单元电路设计 (4)1.倒计时电路(定时电路) (4)2.状态控制器(主控电路) (5)3.交通灯显示电路、 (5)4.数码管显示 (6)5.置数变换电路 (6)6.流量控制电路 (7)五、总电路原理图 (8)六、总电路图 (9)七、原件清单 (10)八、电路连接与调试 (10)九、设计总结 (10)十、参考文献 (11)一、 设计背景在现代城市中,人口和汽车日益增长,市区交通也日益拥挤,人们的安全问题也日益重要。
因此,红绿交通信号灯成为交管部门管理交通的重要工具之一。
交通信号灯常用与交叉路口,用来控制车的流量,提高交叉口车辆的通行能力,减少交通事故。
有了交通灯人们的安全出行有了很大的保障。
二、任务和要求红绿灯交通信号系统外观示意图如图1所示。
1.在十字路口的两个方向上各设一组红黄绿灯,显示顺序为其中一方向是绿灯、黄灯、红灯;另一方向是红灯、绿灯、黄灯。
2.设置一组数码管,以倒计时的方式显示允许通行或禁止通行时间,其中一个方向上(主干道)绿灯亮的时间是45s ,另一个方向上(支干到)绿灯亮的时间是25s ,黄灯亮的的时间都是5s 。
3.要求加装一流量控制电路,使电路拥有流量控制功能,既:当一条路上无车,另一条路上有车时,这条路上的绿灯长亮,另一条路上红灯长亮。
三、总体设计方案1.状态设置状态1(00):主车道的绿灯亮,车道,人行道通行;南北方向车道的红灯亮,车道,人行道禁止通行。
状态2(01):主车道的黄灯亮,车道,人行道缓行;南北方向车道的红灯亮,车道,人行道禁止通行;状态3(10):支车道的红灯亮,车道,人行道禁止通行;南北方向车道的绿灯亮,车道,人行道通行;状态4(11):支车道的红灯亮,车道,人行道禁止通行;南北方向车的黄灯亮,车道,人行道缓行;2.系统框图a.系统总框图流量控制电路b.系统状态转换框图图2 工作流程图四、单元电路设计1.倒计时电路(定时电路)倒计时器由两位4位十进制可逆同步计数器(双时钟)74LS192、一个非门和一或门构成。
课程设计报告书---交通灯控制电路设计

课程设计报告书---交通灯控制电路设计课程设计任务书一、目的任务交通信号灯常用于交叉路口,用来控制车辆的流量,提高交叉路口车辆的通行能力,减少交通事故。
交通灯的颜色有红、黄、绿三种,当红灯亮时,表示该方向道路上的车辆或行人禁止通行;黄灯亮时,表示该方向道路上的行人禁止通行以及未过停车线的车辆停止通行,已过停车线的车辆继续通行;绿灯亮时,表示该方向道路上的车辆或行人允许通行;交通灯控制电路自动控制十字交叉路口两组红、黄、绿交通灯的状态转换,有序的指挥各种车辆和行人安全通行。
1、主要内容(1)熟悉设计任务书,分析设计要求,借阅参考资料。
(2)在计算机上设计硬件原理图。
(3)设计软件框图、流程图编写软件程序、调试程序(4)用仿真器对所做的系统进行仿真,修改调试程序等;(5)加载程序到实验箱,调试、检查编程效果(6)撰写设计报告,绘图等。
三、设计要求1、理解设计任务书,原始设计要求。
2、掌握以下设计内容及方法:画出硬件电路原理图,确定各元件参数,确定软件流程,编写程序,调试程序,最后撰写设计报告,验收考核。
4、有勤于思考、刻苦钻研的学习精神和严肃认真、一丝不苟、精益求精的学习态度。
对有抄袭他人设计图纸(课程设计报告书)或找他人代编设计程序、等行为的弄虚作假者一律按不及格记成绩,并根据学校有关规定给予处理。
5、敢于创新,勇于实践,注意培养创新意识和工程意识。
6、扎实掌握课程的基本理论和基本知识,概念清楚,设计计算正确实验数据可靠,绘图符合标准,课程设计报告书撰写规范。
7、在设计周内完成所规定的设计任务,提交《课程设计报告书》一份。
报告书装订顺序:1)模板封皮2)任务书3)本课程设计要求4)设计报告a.系统总框图及系统工作原理。
b.系统的硬件电路连接图,电路的原理。
c.软件设计流程及其说明。
d.电路设计,软件编程、调试中遇到的问题及分析解决方法。
e.实验结果及其分析。
f.体会。
设计题目四:交通灯控制电路设计1.主要教学内容用单片机系统设计十字路口交通灯控制电路,要求东西方向的红、黄、绿灯和南北方向的红、黄、绿灯按照下面的工作时序进行工作,黄灯亮时应为闪烁状态:(1)南北和东西车辆交替进行,各通行时间 24 秒(2)每次绿灯变红灯时,黄灯先闪烁 4 秒,才可以变换运行方向。
电子技术课程设计报告--交通灯控制系统

交通信号灯控制系统设计报告一.实验目的1.掌握综合应用数电理论知识和中规模集成电路设计方法2.掌握调试及电路主要技术指标的测试方法。
3 了解交通灯管理的基本工作原理。
二、交通灯控制器任务及要求1、能显示十字路口东西、南北两个方向的红、黄、绿的指示状态用两组红、黄、绿三色灯作为两个方向的红、黄、绿灯。
2、能实现正常的到计时功能用两组数码管作为东西和南北方向的到计时显示,主干道每次放行(绿灯)60秒,支干道每次放行(绿灯)45秒,在每次由绿灯变成红灯的转换过程中,要亮黄灯5秒作为过渡。
3、能实现特殊状态的功能(选做)(1〉按sl键后,能实现特殊状态功能:(2)显示到计时的两组数码管闪烁;(3)计数器停止计数并保持在原来的状态:(4)东西、南北、路口均显示红灯状态:(5)特殊状态解除后能继续计数。
4、能实现总体清零功能:按下该键后,系统实现总清零,计数器由初始状态计数,对应状态的指示灯亮。
5、完成电路全部设计后,通过实验箱验证设计课题的正确性。
三.比较和优选设计方案1.方案1:利用单片机来设计1)显示界面该系统要求完成倒计时、状态灯等功能。
完全采用数码管显示。
这种方案虽只显示有限的符号和数码字苻,但是完全胜任题目要求。
2)输入:题目要求系统能手动设灯亮时间、紧急情况处理。
直接在IO口线上接上按键开关。
因为设计时精简和优化了电路,所以剩余的口资源还比较多,我们使用四个按键,分别是K1、K2、K3、K4。
由于该系统对于交通灯及数码管的控制,只用单片机本身的I/O 口就可实现,且本身的计数器及RAM已经够用。
3)输出:控制发光二极管,来表示红绿灯的亮灭,及山烁。
系统由单片机系统、键盘、LED 显示、交通灯演示系统组成。
方案2:利用中规模集成芯片来实现。
其中信号灯的亮灭有三种可选方案:1)利用74LS161:2)利用存储器:3)利用扭环循环控制。
方案选择:由于这次实验是电工电子实验。
利用方案1不太满足要求。
方案2中利用扭环循环控制信号灯的亮灭,不容易实现特殊功能状态;利用存储器需要对芯片编码,有时会出现编码混乱的情况,这样会造成电路检测的不便。
交通信号灯控制器实验报告Word版

交通信号灯控制器一、设计任务及要求 (2)二、总体方案设计以及系统原理框图 (2)2.1、设计思路 (2)2.2、各模块相应的功能 (2)2.3、系统原理图 (3)三、单元电路设计 (3)3.1、车辆检测电路 (3)3.2、主控电路 (4)3.3、灯控电路 (5)3.4、计时控制电路 (6)3.5、计时显示电路 (6)3.6、反馈控制电路 (7)3.7、置数电路 (7)3.8、时基电路 (7)四、工作原理 (8)五、电路的软件仿真及结果分析 (8)5.1、时基电路(555接成的多谐振荡器)的电路图以及波形的显示 (8)5.2、结果分析 (10)六、电路的组装调试 (10)6.1、使用的主要仪器和仪表 (10)6.2、调试电路的方法和技巧 (10)6.3、调试中出现的问题、原因和排除方法 (11)七、收获、存在的问题和进一步的改进意见 (11)7.1、存在的问题和进一步的改进意见 (11)7.2、收获以及心得体会 (12)附录一:电路所用元器件 (14)附录二:电路全图 (15)附录三:实际电路图 (16)一、设计任务及要求在一个主干道和支干道汇交叉的十字路口,为了确保车辆行车安全,迅速通行,设计一个交通信号灯控制电路,要求如下:1、用两组红、绿、黄发光二极管作信号灯,分别指示主道和支道的通行状态。
2、通行状态自动交替转换,主道每次通行30秒,支道每次通行20秒,通行交替间隔时为5秒。
3、通行状态转换依照“主道优先”的原则,即:当主道通行30秒后,若支道无车则继续通行;当支道通行20秒后,只有当支道有车且主道无车时才允许继续通行。
(用按键模拟路口是否有车)4、设计计时显示电路,计时方式尽量采用倒计时。
二、总体方案设计以及系统原理框图2.1、设计思路本次设计采用模块划分的方法,每个模块完成一项功能,最后将各个模块连接起来,设计完成后,用Multisim进行仿真,仿真成功后,再去实验室焊接调试。
2.2、各模块相应的功能(1)车辆检测电路:用来显示主路支路车辆的四种情况。
交通灯控制器+数字电路课程设计报告

交通灯控制器+数字电路课程设计报告交通灯控制器是交通管理系统中的重要组成部分,其主要作用是控制道路上的交通信号灯。
随着数字电路技术的发展,交通灯控制器也逐渐向数字化、智能化方向发展。
本文将详细介绍一种基于数字电路的交通灯控制器设计,以及该设计方案的实现和效果。
一、设计方案1.硬件设计硬件设计方案主要包括数字电路的选择、交通灯的控制模块、传感器等。
本方案选用FPGA芯片作为控制芯片,该芯片具有先进的数字信号处理能力和可编程性,便于开发和定制。
交通灯的控制模块包括红灯、黄灯、绿灯三个信号灯的控制器,以及车辆、行人传感器等。
其中车辆传感器主要用来检测车流量,行人传感器主要用来检测行人通行情况。
2.软件设计软件设计方案主要包括程序的设计和调试,以及人机界面的设计和开发。
程序设计方案采用Verilog HDL语言进行实现,采用时序逻辑设计的思路来编写程序,实现红绿灯的控制和状态转移。
人机界面采用C语言进行编写,通过串口通信与控制芯片进行数据传输和控制。
二、实现过程在设计方案确定后,我们进一步开始实现。
首先是电路的焊接和测试,在确定电路正常无误后,再完成程序的编写和调试。
最后是人机接口的开发和完善。
具体实现流程如下:1.电路焊接首先进行电路布线和焊接,将FPGA芯片、光耦隔离器、电位器等元器件焊接到电路板上,以及信号灯、传感器等元器件的接入。
2.程序编写利用Verilog HDL语言编写程序,主要包括红绿灯状态的转移逻辑和相应的信号输出控制。
程序设计过程中,需要注意时序和状态的转移。
3.调试测试完成程序编写后,需要进行相应的调试测试。
通过仿真测试,检查程序逻辑是否正确,排除潜在问题。
在硬件实验平台上进行测试,确定系统能够正常工作。
4.人机界面开发利用C语言编写人机界面,实现与交通灯控制器的交互控制。
实现车辆、行人传感器的数据采集和显示,以及人手动控制交通灯的功能。
三、实现效果通过测试和实验验证,本文的交通灯控制器设计方案具有以下优势:1.使用FPGA芯片作为控制芯片,具有较强的可编程性和数字信号处理能力。
华中科技大学电子技术课程设计报告——交通灯控制器设计doc

LED灯:main_green,main_red,main_left
branch_left,branch_green,branch_red
四、系统仿真
1、各模块仿真波形
1)分频模块
2)时间设置模块
这里给s_set_button和l_set_button分别设置持续的脉冲信号,可以看到,当main_or_branch为低时为主干道时间置数,为高时支干道时间置数,当add_or_decent为低时加计数,为高时减计数,仿真结果符合预期效果。
而此程序设计刚好要求,主干道绿灯计时的置数,主干道左转计时的置数,支干道绿灯计时的置数,支干道左转计时的置数并行进行,所以选用always 语句很合适。
3)状态转换模块
本设计将交通灯的整个过程划分为四个基本状态:主干道绿灯、主干道左转、支干道绿灯、支干道左转,用state、s_or_l为00、01、10、11来代表。每当一个状态的计数器为00时,state、s_or_l发生改变,以实现状态间的转换。
branch_green,branch_red的不同值,来控制主干道,支干道红绿左转灯的亮灭。
其中 1表示亮,0表示灭。如表3-1 所示。
由上表可得到:
main_green=~state&~s_or_l&(~(flash&clk));
main_left=~state&s_or_l&(~(flash&clk));
2、状态转换图…………………………………...5
3、输入输出设计………………………………...6
四、系统仿真……………………………………………6
1、各模块仿真波形……………………………...6
(完整word版)交通灯控制器课程设计

河南科技学院新科学院电子课程设计报告题目:交通灯控制器设计专业班级:电气工程及其自动化094姓名:胡金友时间:2011.6.8 ~2011.6.18指导教师:孔晓红苗青林完成日期:2011年6月15日交通灯控制器设计任务书1设计目的与要求设计一个交通灯控制器,要认真并准确地理解有关要求,独立完成系统设计,在双干线的路口上,交通信号灯的变化按照下面假定进行计时:(1)放行线,绿灯亮放行25秒,黄灯亮警告5秒,然后红灯亮禁止。
(2)禁止线,红灯亮禁止30秒,然后绿灯亮放行。
使两条路线交替的成为放行线和禁止线,便可实现交通控制。
(3)特殊情况下能实现手动操作。
2.设计内容(1)画出电路原理图,正确使用逻辑关系;(2)确定元器件及元件参数;(3)进行电路模拟仿真;(4)SCH文件生成与打印输出;(5)PCB文件生成与打印输出。
3.编写设计报告写出设计的全过程,附上有关资料和图纸,有总结体会。
4.答辩在规定时间内,完成叙述并回答问题。
目录1设计任务 (2)1.1交通灯控制器设计任务书 (2)1.2引言 (3)2设计方案 (3)2.1总体设计方案说明 (4)2.2模块结构与电路图 (5)3整体电路 (10)4设计总结 (11)5参考文献 (11)交通灯控制器设计摘要:为确保车辆安全,行人安全有序地通过城市交通叉路口,本设计介绍一种线路简单、成本低、体积小、可靠性高的全电子指挥信号灯控制器。
利用74LS190、74LS139、NE555等芯片简易的实现交通指挥信号灯的全自动化控制。
关键词:交通灯、计时器、控制器、秒脉冲1引言生活中跟大家关系最为密切的交通是道路,因为每个人都要走路,所以交通灯就尤其重要.交通灯是控制陆地交通的枢纽,如果没有交通灯的出现,那么现在社会人类恐怕连路都不好走了.特别是上下班高峰时候,交通就是非常拥挤,这个时候交通灯就起了关键作用.它起了分流交通作用,不会造成交通堵塞.它按照上下班高峰期、顺畅期等交通流量的不同而设置各车道的通行时间,那样以后车辆就会各就各位,不会有什么抢道和车辆碰撞啦,还有车与人争过街的事情发生啦,交通就会井然有序了,人们走路就安心多了,汽车就会更快的到达。
交通灯控制器课程设计

交通灯控制器 课程设计一、课程目标知识目标:1. 理解交通灯控制器的基本原理,掌握其电路组成及功能。
2. 学习并掌握交通灯控制器中的基础电子元件及其工作原理。
3. 了解交通灯控制器的实际应用,理解其在交通安全中的作用。
技能目标:1. 能够运用所学知识设计简单的交通灯控制器电路。
2. 学会使用相关工具和仪器进行电路搭建和调试。
3. 提高分析问题和解决问题的能力,通过实践操作培养动手能力。
情感态度价值观目标:1. 培养学生对电子技术的兴趣,激发他们探索科学的精神。
2. 增强学生的团队合作意识,培养沟通与协作能力。
3. 培养学生的安全意识,让他们明白遵守交通规则的重要性。
课程性质:本课程为电子技术实践课程,结合理论教学,注重培养学生的动手实践能力和创新思维。
学生特点:考虑到学生所在年级,已有一定的基础知识,具备初步的分析和解决问题的能力,对电子技术有一定的好奇心。
教学要求:在教学过程中,注重理论与实践相结合,鼓励学生积极参与讨论和实践活动,培养他们的自主学习能力和创新意识。
通过课程学习,使学生能够达到上述设定的具体学习成果。
二、教学内容1. 交通灯控制器原理- 红绿灯工作原理及切换逻辑- 时序控制器的基本概念- 电路图解读及元件功能分析2. 基础电子元件- 电阻、电容、二极管、三极管等元件的特性与应用- 传感器及其在交通灯控制器中的作用3. 交通灯控制器电路设计- 电路图的绘制与解读- 元件的选型与连接- 电路搭建及调试方法4. 实践操作- 搭建简单交通灯控制器电路- 编写控制程序,实现交通灯自动切换- 故障排查与电路优化5. 交通灯控制器应用案例- 实际交通场景中的交通灯控制器应用- 交通安全与节能减排的意义教学内容安排与进度:第一课时:交通灯控制器原理,红绿灯工作原理及切换逻辑第二课时:基础电子元件,电路图解读及元件功能分析第三课时:交通灯控制器电路设计,电路图的绘制与解读第四课时:实践操作,搭建简单交通灯控制器电路第五课时:编写控制程序,实现交通灯自动切换,故障排查与电路优化第六课时:交通灯控制器应用案例,讨论交通安全与节能减排的意义教材章节关联:本教学内容与教材中关于数字电路、电子元件、电路设计等相关章节紧密关联,通过本课程的学习,使学生能够将理论知识与实践相结合,提高综合运用能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2013-2014学年度第二学期电子技术基础课程设计--交通灯控制器设计院系:自动化学院专业:班级:姓名:学号:指导教师:目录一、课程设计名称 (3)二、课程设计要求 (3)三、系统设计 (3)1、系统框图与说明 (3)2、状态转换图 (5)3、输入输出设计 (6)四、系统仿真 (6)1、各模块仿真波形 (6)2、实测 (8)五、实验总结 (8)1、心得体会 (8)2、待改进的问题 (10)3、功能扩展 (10)附录 (11)一、课程设计名称交通灯控制器的设计二、设计内容及要求1、设计一个十字路口交通信号灯的控制电路。
要求红、绿灯按一定的规律亮和灭,并在亮灯期间进行倒计时,且将运行时间用数码管显示出来。
2、绿灯亮时,为该车道允许通行信号,红灯亮时,为该车道禁止通行信号。
要求主干道每次通行时间为Tx 秒,支干道每次通行时间为Ty 秒。
每次变换运行车道前绿灯闪烁,持续时间为5秒。
即车道要由X 转换为Y 时,X 在通行时间只剩下5秒钟时,绿灯闪烁显示,Y 仍为红灯。
3、可以对X,Y 车道上交通灯运行的时间进行重新设置,20≦Tx≦99,10≦Ty≦394、对器件进行在系统编程和实验验证。
5、写出设计性实验报告,并打印各层次的源文件和仿真波形,然后作简要说明。
三、系统设计1、系统框图与说明系统时钟分频模块置数模块时间计算状态转换译码模块数码管显示由上图,我们可以清楚地将系统分为六个模块:分频模块,时间设置模块,状态转换模块,时间计算模块,数码管译码模块,LED显示模块。
下面设计者将对每个模块进行详细的说明。
1)分频模块分频模块其作用为:由于DE2板上能够提供的时钟信号为50MHz,而设计所需时钟信号为1Hz,故使用分频模块将50MHz信号分频为1Hz信号。
2)时间设置模块由于系统设计要求可以对主干道,支干道上左转、绿灯运行的时间进行重新设置调整,所以要对系统进行参数化设计。
首先引入一组参数,main_gh,main_gl,main_lh,main_ll,branch_gh,branch_gl,branch_lh,branch_ll(下划线后面的字母分别取green,left,high,low首字母).需要置数时,首先选择对主干道还是支干道时间置数,这里设置一个main_or_branch参数,当main_or_branch为高时设置支干道时间,为低时设置主干道时间。
置数时,通过s_set_button,l_set_button对时间进行设置,具体方法参见代码。
为了置数方便,引入一个add_or_decent参数,低电平时按下button可以增计数,高电平时按下可以减计数。
而在程序设计上,可以运用always语句进行设计,来判断置数键的变化。
因为在Verilog HDL语言中always块中begin end在概念上顺序执行,实质上是并行的,因为每条语句的执行不占用具体时间,所有语句都是在一瞬间执行的,没有时间的先后,但有先后执行之分。
仿真时是逐条执行的。
但要弄清楚阻塞赋值和非阻塞赋值的区别。
如果全部都是非阻塞的赋值的话,才相当于并行的。
而此程序设计刚好要求,主干道绿灯计时的置数,主干道左转计时的置数,支干道绿灯计时的置数,支干道左转计时的置数并行进行,所以选用always语句很合适。
3)状态转换模块本设计将交通灯的整个过程划分为四个基本状态:主干道绿灯、主干道左转、支干道绿灯、支干道左转,用state、s_or_l为00、01、10、11来代表。
每当一个状态的计数器为00时,state、s_or_l发生改变,以实现状态间的转换。
4)时间计算模块由于本设计中加入了左转的时间,因此红灯时间不仅仅是另一干道的直行时间,而是直行时间和左转时间之和,由于在状态转换模块中需要用到大量的时间判断,因此将此模块单独划分。
5)数码管译码模块由于DE2板上无数码管译码电路,所以需要将4位的数码管控制信号译成7位控制信号。
6)LED显示模块由输入信号state、s_or_l、flash,分别取000,001,010,011,100,101,110,111所得到的main_green,main_left,main_red,branch_left,branch_green,branch_red的不同值,来控制主干道,支干道红绿左转灯的亮灭。
其中1表示亮,0表示灭。
如表3-1所示。
由上表可得到:main_green=~state&~s_or_l&(~(flash&clk));main_left=~state&s_or_l&(~(flash&clk));main_red=state;branch_green=state&~s_or_l&(~(flash&clk));branch_left=state&s_or_l&(~(flash&clk));branch_red=~state;2、状态转换图S0状态:主干道绿灯、支干道红灯S1状态:主干道左转、支干道红灯S2状态:支干道绿灯、主干道红灯S3状态:支干道左转、主干道红灯3、输入输出设计本设计硬件基于DE0板,具体输入输出如下:1)输入:开关:main_or_branch,EN,run_or_set,add_or_decent按键:s_set_button,l_set_button时钟:clk2)输出:数码管:OUT1L,OUT1H,OUT2L,OUT2HLED灯:main_green,main_red,main_leftbranch_left,branch_green,branch_red四、系统仿真1、各模块仿真波形1)分频模块2)时间设置模块这里给s_set_button和l_set_button分别设置持续的脉冲信号,可以看到,当main_or_branch为低时为主干道时间置数,为高时支干道时间置数,当add_or_decent为低时加计数,为高时减计数,仿真结果符合预期效果。
3)状态转换模块首先仿真EN为高时的运行状态,给主干道直行左转分别赋值25,15,支干道直行左转分别赋值15,10,主干道红灯时间26,支干道红灯时间41,从输出的state和s_or_l可以清楚的看出状态转换和时间的关系,flash的仿真结果也符合预期。
该图为run_or_set为低时的仿真图,可以看到,就算EN为高,此时数码管显示的也是赋值在counter_play3和counter_play4上的值,即置数值,符合仿真预期。
4)时间计算模块给输入的两个变量分别置数12,34,得到输出47,红灯时间应该等于直行加左转时间再加1,符合预期。
5)LED显示模块该模块即为状态转换仿真,将state,s_or_l,flash赋予相应的波形,可以看出,当state为00时,主干道直行灯亮,支干道红灯亮;01时,主干道左转灯亮,支干道红灯亮;10时,主干道红灯亮,支干道直行灯亮;11时,主干道红灯亮,支干道左转灯亮。
并且flash为高时LED灯出现闪烁,符合仿真结果。
2、实测已经现场验收通过。
五、实验总结1、心得体会看着手边不断变换的交通信号灯以及倒计时显示的数码管,回顾这5周以来为课设所做的所有努力,感慨良多。
只有亲身去努力尝试,才回收获真正的知识和能力。
为了找到切合实际的解决方案,我采用实地调查和网络搜集;为了寻找可能存在的BUG,我反复测试下载后的DE0板子,尽量穷尽各种可能出现的特殊情况,发现问题及时修改。
值得欣慰的是,所有的努力没有白费,到目前为止所做出的成果还是比较令我满意的。
在这里,要感谢龚军老师的教诲,感谢学校开设这门课程设计,给我们了一次充分锻炼,将理论知识付诸实践的机会。
书上的知识再多,都是死的,即使你完全记住,也无法在实际使用中游刃有余地去利用它们,不能让知识为我所用。
同时,在解决问题的时候,会发现自己依旧欠缺的知识,需要我们耐心地去查阅资料,不断补充新的领域的知识。
这样的一种锻炼,可以帮助我们形成一种习惯,在今后工作学习中,自然地去运用相同的方法解决不同的问题。
很多同学说,本科期间做项目找实习的机会太少,其实他们忽略了像课程设计这样的宝贵机会。
大学三年,我们学习了很多工程技术的知识,但却经常性的忽视在这些课程中的课程设计这个关键环节,认为它们只不过是走过场,抄抄代码,写写报告就够了。
其实不然,课程设计本身就是一次做项目的经历,它要求你严格按照项目规程操作,在时间和进度上,都要有项目意识。
虽然我学习过信息系统等软件开发的流程和方法,但是与实际运用严重脱节,没有那种清晰而强烈的工程思想,而是沿用做一步看一步的原始想法。
这次课程设计虽然系统架构不是很复杂,但还是需要一定的规划和思考才能做得快做得好,我们班拿到题目之后,只有很少部分人做了详细的开题报告,事实证明他们确实完成的质量也很高,所以说不能眼高手低,到最后却碌碌无为。
在调试的过程中,我也遇到了很多问题,比如计数器工作不正常,LED灯非正常闪烁,也废了很大的功夫才把BUG解决。
这里我要感谢班上和我做一个题目的同学们,在我绞尽脑汁无法找出BUG的时候,是他们帮助我解决了问题。
这个事情也充分说明了团队合作的重要性,每个人的想法都是极其宝贵的,汲取他人之所长会对自己的工作产生事倍功半的效果。
但是借鉴要有限度,要讲究方式方法。
很多同学容易走两个极端,一种是埋头编程,中途遇到很多困难其实前人也都遇到并且很好地解决了,但是他们还要继续重复地探寻解决途径;另一种是照单全收,完全不明白作者的用意和初衷,只知道看结果对就拿来用,没弄明白其所以然,显然是荒废了学习的机会。
课程设计给了我们把知识转化为能力的机会,这次电子技术课程设计更是让我受益良多,相信在我以后的求学过程中,这次课设给我带来的收获一定会指引我前进。
2、待改进的问题由于技术手段有限,未能加入人行道红绿灯提醒功能。
并且由于对题目理解不是很深刻,在红绿灯时间计算的时候出了一些问题,这些都是以后学弟学妹们做课设时候需要注意的。
3、功能扩展加入了左转功能,更加符合实际十字路口的情况,如果是DE2板,还可以用LCD屏显示状态,但遗憾未能实现。
附录:源代码module jiaotongdeng(clk,main_or_branch,EN,run_or_set,add_or_decent,s_set_button,l_set_button,main_green,main_red,branch_green,branch_red, main_left,branch_left,OUT1L,OUT1H,OUT2L,OUT2H);input clk,main_or_branch,EN,run_or_set,add_or_decent;input s_set_button,l_set_button;outputmain_green,main_red,main_left,branch_left,branch_green,branch_red; output[7:0]OUT1L,OUT1H,OUT2L,OUT2H;wire clk1;wire flash,state,s_or_l;wire[3:0]counter_play1h,counter_play1l;wire[3:0]counter_play2h,counter_play2l;wire[7:0]counter_play3,counter_play4;wire[3:0]branch_rl,branch_rh,main_rh,main_rl;wire[3:0]main_gh,main_gl,main_lh,main_ll,branch_gh,branch_gl,branch_lh,branch_ ll;fenpin f1(clk,clk1);//调用分频模块获得1hz脉冲Rtime f2(main_rh,main_rl,branch_gh,branch_gl,branch_lh,branch_ll);//计算主干道红灯时间Rtime f3(branch_rh,branch_rl,main_gh,main_gl,main_lh,main_ll);//计算支干道红灯时间state_transformer f4(clk1,EN,flash,state,s_or_l,run_or_set,main_gh,main_gl,main_lh,main_ll,branch_gh,branch_gl,branch_lh,bra nch_ll,main_rh,main_rl,branch_rh,branch_rl,counter_play3,counter_play4,counter_play1h,counter_play1l,counter_play2h,counter_play2l);//调用状态转换模块timeset f5(clk,main_or_branch,add_or_decent,s_set_button,l_set_button,main_gh,main_gl,main_lh,main_ll,branch_gh,branch_gl,branch_lh,branch_ ll,counter_play3,counter_play4);//调用时间设置模块LED_displayf6(clk1,flash,state,s_or_l,main_green,main_left,main_red,branch_green, branch_left,branch_red);//调用LED显示模块yima f7(counter_play1h,counter_play1l,OUT1H,OUT1L);//译码显示时间至数码管yima f8(counter_play2h,counter_play2l,OUT2H,OUT2L);endmodulemodule fenpin(clk,clk1);input clk;output clk1;reg clk1;reg[24:0]counter;//定义计数器initialbeginclk1=0;counter=0;endalways@(posedge clk)beginif(counter==25'd2*******)//每25m个时钟周期clk1反向,同时计数器清零beginclk1<=~clk1;counter<=0;endelsecounter<=counter+1'b1;end//end alwaysendmodulemodule yima(Inh,Inl,Out_H,Out_L);input[3:0]Inh,Inl;output[7:0]Out_H,Out_L;reg[7:0]Out_H,Out_L;always@(Inh)begincase(Inh)0:Out_H=8'b11000000;//共阴极数码管译码1:Out_H=8'b11111001;2:Out_H=8'b10100100;3:Out_H=8'b10110000;4:Out_H=8'b10011001;5:Out_H=8'b10010010;6:Out_H=8'b10000010;7:Out_H=8'b11111000;8:Out_H=8'b10000000;9:Out_H=8'b10010000;default Out_H=8'bxxxxxxxx;endcaseendalways@(Inl)begincase(Inl)0:Out_L=8'b11000000;1:Out_L=8'b11111001;2:Out_L=8'b10100100;3:Out_L=8'b10110000;4:Out_L=8'b10011001;5:Out_L=8'b10010010;6:Out_L=8'b10000010;7:Out_L=8'b11111000;8:Out_L=8'b10000000;9:Out_L=8'b10010000;default Out_L=8'bxxxxxxxx;endcaseendendmodulemodule timeset(clk,main_or_branch,add_or_decent,s_set_button,l_set_button,main_gh,main_gl,main_lh,main_ll,branch_gh,b ranch_gl,branch_lh,branch_ll,counter_play3,counter_play4);input s_set_button;input l_set_button;input clk;input main_or_branch;//用来控制counter_play3,counter_play4显示主干道还是支干道设置的时间,0主1支input add_or_decent;//用于控制按钮增减置数值,为0加,为1减output[7:0]counter_play3,counter_play4;//分别显示绿灯、左转设置时间output[3:0]main_gh,main_gl,main_lh,main_ll;output[3:0]branch_gh,branch_gl,branch_lh,branch_ll;reg[7:0]counter_play3,counter_play4;reg[3:0]main_gh,main_gl,main_lh,main_ll;reg[3:0]branch_gh,branch_gl,branch_lh,branch_ll;always@(posedge s_set_button)//直行时间设置if(add_or_decent==0)//增加时间beginif(main_or_branch==0)//设置主干道beginbeginif(main_gl==9)beginmain_gl<=0;if(main_gh==9)main_gh<=0;else main_gh<=main_gh+1;endelse main_gl<=main_gl+1;endendelse//设置支干道beginif(branch_gl==9)beginbranch_gl<=0;if(branch_gh==9)branch_gh<=0;else branch_gh<=branch_gh+1;endelse branch_gl<=branch_gl+1;endend//end add setelse//减少时间beginif(main_or_branch==0)beginif(main_gl==0)beginmain_gl<=9;if(main_gh==0)main_gh<=9;else main_gh<=main_gh-1;endelse main_gl<=main_gl-1;endendelse//设置支干道beginif(branch_gl==0)beginbranch_gl<=9;if(branch_gh==0)branch_gh<=9;else branch_gh<=branch_gh-1;endelse branch_gl<=branch_gl-1;endendalways@(posedge l_set_button)//左转时间设置if(add_or_decent==0)beginif(main_or_branch==0)beginbeginif(main_ll==9)beginmain_ll<=0;if(main_lh==9)main_lh<=0;else main_lh<=main_lh+1;endelse main_ll<=main_ll+1;endendelsebeginif(branch_ll==9)beginbranch_ll<=0;if(branch_lh==9)branch_lh<=0;else branch_lh<=branch_lh+1;else branch_ll<=branch_ll+1;endendelsebeginif(main_or_branch==0)beginbeginif(main_ll==0)beginmain_ll<=9;if(main_lh==0)main_lh<=9;else main_lh<=main_lh-1;endelse main_ll<=main_ll-1;endendelsebeginif(branch_ll==0)beginbranch_ll<=9;if(branch_lh==0)branch_lh<=9;else branch_lh<=branch_lh-1;endelse branch_ll<=branch_ll-1;endendalways@(posedge clk)beginif(main_or_branch==0)//显示主干道设置的时间begincounter_play3<={main_gh,main_gl};counter_play4<={main_lh,main_ll};endelse if(main_or_branch==1)//显示支干道设置的时间begincounter_play3<={branch_gh,branch_gl};counter_play4<={branch_lh,branch_ll};endendendmodulemodule state_transformer(clk,EN,flash,state,s_or_l,run_or_set,main_gh,main_gl,main_lh,main_ll,baranch_gh,baranch_gl,baranch_lh, baranch_ll,main_rh,main_rl,branch_rh,branch_rl,counter_play3,counter_play4,counter_play1h,counter_play1l,counter_play2h,counter_play2l);input clk;input EN,run_or_set;//run_or_set为1时显示运行时的时间,为0显示设置时间input[3:0]main_gh,main_gl,main_lh,main_ll;input[3:0]baranch_gh,baranch_gl,baranch_lh,baranch_ll;input[3:0]main_rh,main_rl,branch_rh,branch_rl;input[7:0]counter_play3,counter_play4;output[3:0]counter_play1h,counter_play1l;output[3:0]counter_play2h,counter_play2l;output flash,state,s_or_l;//输出状态变量reg flash;reg state;reg s_or_l;reg[3:0]main_rhtemp,main_rltemp,branch_rhtemp,branch_rltemp;reg[3:0]main_ghtemp,main_gltemp,main_lhtemp,main_lltemp;reg[3:0]baranch_ghtemp,baranch_gltemp,baranch_lhtemp,baranch_lltemp; reg[3:0]counter_play1h,counter_play1l,counter_play2h,counter_play2l;always@(posedge clk)beginif(EN==0)//EN每置一次0对计数中间变量进行一次初始化beginmain_ghtemp<=main_gh;main_gltemp<=main_gl;baranch_ghtemp<=baranch_gh;baranch_gltemp<=baranch_gl;main_rhtemp<=main_rh;branch_rhtemp<=branch_rh;main_lhtemp<=main_lh;main_lltemp<=main_ll;baranch_lhtemp<=baranch_lh;baranch_lltemp<=baranch_ll;main_rltemp<=main_rl;branch_rltemp<=branch_rl;state<=0;s_or_l<=0;endelse if(EN==1)beginif(state==1)//主干道红灯begincounter_play1h<=main_rhtemp;//主干道显示红灯计数counter_play1l<=main_rltemp;if((main_rltemp==0)&&(main_rhtemp>=1))beginmain_rhtemp<=main_rhtemp-1;main_rltemp<=9;endelse if((main_rltemp>=1)&&(main_rltemp<=9))beginmain_rltemp<=main_rltemp-1;endelse if((main_rhtemp==0)&&(main_rltemp==0))beginmain_rhtemp<=main_rh;main_rltemp<=main_rl;endendif(state==0)//支干道红灯begincounter_play2h<=branch_rhtemp;//支干道显示红灯计数counter_play2l<=branch_rltemp;if((branch_rltemp==0)&&(branch_rhtemp>=1))beginbranch_rhtemp<=branch_rhtemp-1;branch_rltemp<=9;endelse if((branch_rltemp>=1)&&(branch_rltemp<=9))beginbranch_rltemp<=branch_rltemp-1;endelse if((branch_rhtemp==0)&&(branch_rltemp==0))beginbranch_rhtemp<=branch_rh;branch_rltemp<=branch_rl;endendif(state==0&&s_or_l==0)//主干道直行begincounter_play1h<=main_ghtemp;//主干道显示直行时间counter_play1l<=main_gltemp;if((main_gltemp==0)&&(main_ghtemp>=1))beginmain_ghtemp<=main_ghtemp-1;main_gltemp<=9;endif((main_gltemp>=1)&&(main_gltemp<=9))beginif((main_ghtemp==0)&&(main_gltemp==5))beginflash<=1;//绿灯剩余五秒闪烁main_gltemp<=main_gltemp-1;endelsemain_gltemp<=main_gltemp-1;endelse if((main_ghtemp==0)&&(main_gltemp==0))beginstate<=0;s_or_l<=1;//状态转换为主干道左转flash<=0;main_ghtemp<=main_gh;main_gltemp<=main_gl;endendif(state==0&&s_or_l==1)//主干道左转灯begincounter_play1h<=main_lhtemp;//主干道显示左转灯时间counter_play1l<=main_lltemp;if((main_lltemp==0)&&(main_lhtemp>=1))beginmain_lhtemp<=main_lhtemp-1;main_lltemp<=9;endif((main_lltemp>=1)&&(main_lltemp<=9))beginif((main_lhtemp==0)&&(main_lltemp==5))beginflash<=1;main_lltemp<=main_lltemp-1;endelsemain_lltemp<=main_lltemp-1;endelse if((main_lhtemp==0)&&(main_lltemp==0))beginstate<=1;//状态转换为主干道红灯s_or_l<=0;//支干道直行flash<=0;main_lhtemp<=main_lh;main_lltemp<=main_ll;endendif(state==1&&s_or_l==0)//支干道直行begincounter_play2h<=baranch_ghtemp;//支干道显示直行时间counter_play2l<=baranch_gltemp;if((baranch_gltemp==0)&&(baranch_ghtemp>=1))beginbaranch_ghtemp<=baranch_ghtemp-1;baranch_gltemp<=9;endif((baranch_gltemp>=1)&&(baranch_gltemp<=9))beginif((baranch_ghtemp==0)&&(baranch_gltemp==5))beginflash<=1;baranch_gltemp<=baranch_gltemp-1;endelsebaranch_gltemp<=baranch_gltemp-1;endelse if((baranch_ghtemp==0)&&(baranch_gltemp==0)) beginstate<=1;s_or_l<=1;//状态转换为支干道左转flash<=0;baranch_ghtemp<=baranch_gh;baranch_gltemp<=baranch_gl;endendif(state==1&&s_or_l==1)//支干道左转灯begincounter_play2h<=baranch_lhtemp;//支干道显示左转灯时间counter_play2l<=baranch_lltemp;if((baranch_lltemp==0)&&(baranch_lhtemp>=1))beginbaranch_lhtemp<=baranch_lhtemp-1;baranch_lltemp<=9;endif((baranch_lltemp>=1)&&(baranch_lltemp<=9))beginif((baranch_lhtemp==0)&&(baranch_lltemp==5))beginflash<=1;baranch_lltemp<=baranch_lltemp-1;endelsebaranch_lltemp<=baranch_lltemp-1;endelse if((baranch_lhtemp==0)&&(baranch_lltemp==0))beginstate<=0;s_or_l<=0;//状态转换为主干道直行flash<=0;baranch_lltemp<=baranch_ll;baranch_lhtemp<=baranch_lh;endendend//if endif(run_or_set==0)//显示设置时间begincounter_play1h<=counter_play3[7:4];counter_play1l<=counter_play3[3:0];counter_play2h<=counter_play4[7:4];counter_play2l<=counter_play4[3:0];endend//end alwaysendmodulemodule Rtime(OutH,OutL,In1H,In1L,In2H,In2L);//红灯时间计算input[3:0]In1H,In1L,In2H,In2L;output[3:0]OutH,OutL;reg[3:0]OutH,OutL;reg[3:0]outh1,outl1;//定义一组中间变量always@(In1H or In1L or In2H or In2L)//被加数先加1,在加加数beginif((In1L+1)>=4'b1010)//低位大于等于9时的情况beginoutl1<=In1L+1-4'b1010;outh1<=In1H+1'b1;endelsebeginoutl1<=In1L+1;outh1<=In1H;endif((outl1+In2L)>=4'b1010)beginOutL<=outl1+In2L-4'b1010;OutH<=outh1+In2H+1'b1;endelsebeginOutL<=outl1+In2L;OutH<=outh1+In2H;endif((((outl1+In2L)>=4'b1010)&&((outh1+In2H)==4'b1001))||(((outh1+In2H) >4'b1001)))//若直行和左转绿灯时间相加大于99则默认为99beginOutL<=4'b1001;OutH<=4'b1001;endendendmodulemoduleLED_display(clk,flash,state,s_or_l,main_green,main_left,main_red,bran ch_green,branch_left,branch_red);input clk,state,s_or_l,flash;outputmain_green,main_left,main_red,branch_green,branch_left,branch_red;//两个干道各三盏灯,分别代表直行、左转、红灯assign main_green=~state&~s_or_l&(~(flash&clk));//利用真值表获得表达式,闪烁利用flash和clk相与可实现assign main_left=~state&s_or_l&(~(flash&clk));assign main_red=state;assign branch_green=state&~s_or_l&(~(flash&clk));assign branch_left=state&s_or_l&(~(flash&clk));assign branch_red=~state;endmodule。