Verilog实验报告交通灯
- 格式:docx
- 大小:53.79 KB
- 文档页数:5
交通信号灯控制器实验报告交通信号灯控制器⼀、设计任务及要求 (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进⾏仿真,仿真成功后,再去实验室焊接调试。
verilog实验报告Verilog实验报告引言:Verilog是一种硬件描述语言(HDL),用于设计和模拟数字电路。
它是一种高级语言,能够描述电路的行为和结构,方便工程师进行数字电路设计和验证。
本实验报告将介绍我在学习Verilog过程中进行的实验内容和所获得的结果。
实验一:基本门电路设计在这个实验中,我使用Verilog设计了基本的逻辑门电路,包括与门、或门和非门。
通过使用Verilog的模块化设计,我能够轻松地创建和组合这些门电路,以实现更复杂的功能。
我首先创建了一个与门电路的模块,定义了输入和输出端口,并使用逻辑运算符和条件语句实现了与门的功能。
然后,我创建了一个测试模块,用于验证与门的正确性。
通过输入不同的组合,我能够验证与门的输出是否符合预期。
接下来,我按照同样的方法设计了或门和非门电路,并进行了相应的测试。
通过这个实验,我不仅学会了使用Verilog进行基本门电路的设计,还加深了对逻辑电路的理解。
实验二:时序电路设计在这个实验中,我学习了如何使用Verilog设计时序电路,例如寄存器和计数器。
时序电路是一种具有状态和时钟输入的电路,能够根据时钟信号的变化来改变其输出。
我首先设计了一个简单的寄存器模块,使用触发器和组合逻辑电路实现了数据的存储和传输功能。
然后,我创建了一个测试模块,用于验证寄存器的正确性。
通过输入不同的数据和时钟信号,我能够观察到寄存器的输出是否正确。
接下来,我设计了一个计数器模块,使用寄存器和加法电路实现了计数功能。
我还添加了一个复位输入,用于将计数器的值重置为初始状态。
通过测试模块,我能够验证计数器在不同的时钟周期内是否正确地进行计数。
通过这个实验,我不仅学会了使用Verilog设计时序电路,还加深了对触发器、寄存器和计数器的理解。
实验三:组合电路设计在这个实验中,我学习了如何使用Verilog设计组合电路,例如多路选择器和加法器。
组合电路是一种没有状态和时钟输入的电路,其输出只取决于当前的输入。
十字路口交通信号灯控制系统设计专业:应用电子技术班级:09应电五班*名:**0906020129*名:***0906020115指导教师:***2011.6.11目录摘要…………………………………………………….……….3.一、绪论 (4)二、PLC 的概述 (5)2.1、概述 (5)2.2、PLC的特点 (5)2.3、PLC的功能 (5)三、交通灯控制系统设计 (6)3.1、控制要求 (6)3.2、交通灯示意图 (6)3.3、交通灯时序图 (7)3.4、交通灯流程图 (7)3.5、I/0口分配 (8)3.6、定时器在1个循环中的明细表 (8)3.7、程序梯形图 (10)四、设计总结 (12)参考文献 (12)摘要PLC可编程控制器是以微处理器为基础,综合了计算机技术、自动控制技术和通讯技术发展而来的一种新型工业控制装置。
它具有结构简单、编程方便、可靠性高等优点,已广泛用于工业过程和位置的自动控制中。
据统计,可编程控制器是工业自动化装置中应用最多的一种设备。
专家认为,可编程控制器将成为今后工业控制的主要手段之一,PLC、机器人、CAD/CAM将成为工业生产的三大支柱。
由于PLC具有对使用环境适应性强的特性,同时具内部定时器资源十分丰富,可对目前普通的使用的“渐进式”信号灯进行精确的控制,特别对多岔路口的控制可方便的实现。
因此现在越来越多的将PLC应用于交通灯系统中。
同时,PLC本身还具有通讯联网的功能,将同一条道路上的信号灯组成一局域网进行统一调度管理,可缩短车辆通行等候时间,实现科学化管理。
一、绪论当今,红绿灯安装在各个道口上,已经成为疏导交通车俩最常见和最有效的手段。
但这一技术在19世纪就已经出现。
1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。
这是世界上最早的交通信号灯。
1868年英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前得广场上,安装了世界上最早的煤气红绿灯。
交通信号灯控制系统设计实验报告设计目的:本设计旨在创建一个交通信号灯控制系统,该系统可以掌控红、绿、黄三种交通信号灯的工作,使其形成一种规律的交替、循环、节奏,使车辆和行人得以安全通行。
设计原理:在实际的交通灯系统中,通过交通灯控制器控制交通灯的工作。
一般采用计时器或微电脑控制器来完成,其中微电脑控制器可以方便地集成多种控制模式,并且灵活易于升级。
在本设计中,我们采用了基于Atmega16微控制器的交通信号灯控制系统。
该系统通过定时器中断、串口通信等技术来实现。
由于控制的是三个信号灯的交替,流程如下:绿灯亮:红灯和黄灯熄灭绿灯由亮到灭的时间为10秒黄灯亮:红灯和绿灯熄灭黄灯由亮到灭的时间为3秒红灯亮:绿灯和黄灯熄灭红灯由亮到灭的时间为7秒重复以上过程硬件设计:整个系统硬件设计包含ATmega16控制器、射频芯片、电源模块和4个灯组件。
ATmega16控制器采用DIP封装,作为主要的控制模块。
由于需要串口通信和遥控器控制,因此添加了RF24L01射频芯片。
该射频芯片可以很方便地实现无线通信和小型无线网络。
4个灯组件采用红、绿、黄三色LED灯与对应300Ω电阻并连。
电源模块采用5V稳压电源芯片和电容滤波,确保整个系统稳定可靠。
软件设计:通过ATmega16控制器来实现交通信号灯控制系统的功能。
控制器开始执行时进行初始化,然后进入主循环。
在主循环中,首先进行红灯亮的操作,接着在计时时间到达后执行黄灯亮的过程,然后执行绿灯亮的过程,再到计时时间到的时候执行红灯亮的过程。
每个灯持续时间的计时采用了定时器的方式实现,在亮灯过程中,每秒钟进行一次计数,到达相应的计数值后,切换到下一步灯的操作。
在RF24L01射频芯片的支持下,可以使用无线遥控器来对交通信号灯的控制进行远程控制。
在系统初始化完成后,通过串口通信对RF24L01进行初始化,然后进入控制循环。
在这个控制循环中,接收到遥控器的指令后,进行相应的控制操作,如开、关灯等。
实习报告题目: PLC+网络通讯实验一:交通灯程序设计一、实验要求1.信号灯收一个启动开关控制,当启动开关接通时,信号灯系统开始正常工作,且先南北红绿灯亮,东西绿灯亮。
当启动开关断开时,所有信号灯熄灭。
2.南北红绿灯维持25秒。
在南北红绿灯亮的同时东西绿灯也亮,并维持20秒。
到20秒时,东西绿灯闪亮,闪亮3秒后熄灭。
在东西绿灯熄灭时,东西黄灯亮,并维持2秒,到2秒钟时,东西黄灯熄灭,东西红灯亮;同时,南北红灯熄灭,南北绿灯亮。
3.东西红灯亮维持30秒,南北绿灯维持25秒,善后闪烁3秒钟熄灭;同时南北黄灯亮,维持2秒后熄灭,这时南北红灯亮,东西绿灯亮。
4.上述信号灯状态周而复始。
二、实验内容编程步骤:①组态DFI网络实现上位机与Micrologi 1500的通信。
②新建程序文件运行RSLOGIX50软件,单击FIEL→NEW,弹出Select Processor Type对话框,选择该实验应用的MicroLogix1500。
单击OK按钮,进入RSLOGIX500的编程界面。
1.定义控制器Controller。
2.编写程序文件Program Files。
文件0用来存放系统信息及用户的编程信息;文件1一般予以保留;LAD2为梯形图主程序;文件3-255为用户自行创造的梯形图子程序。
三、编写程序交通灯的梯形图程序如下所示:实验三:红绿灯程序的监控一、实验要求用A-B公司的RSView32软件实现对红绿灯的监控。
二、实验内容①利用RSLinx进行DF1网络组态。
②利用RSLogix500对MicroLogix1500进行红绿灯程序的编程。
③利用RSView32进行界面设计。
对第3步过程的介绍:步骤一:进入RSView32软件。
步骤二:进行通道(Channel)设置。
步骤三:进行结点(Node)设置。
步骤四:开始进行界面设计1)首先利用Ellipse按照图1所示绘制12按钮,现在以方向“北”中的红色按钮为例,来设置它的动画属性,其余的11个与此基本相同。
微电子课程设计实验报告一、设计要求应用VHDL或Verilog硬件描述语言进行设计,在ISE5.2开发工具上选择Xinlix 公司的FPGA芯片完成整个电路的设计工作,包括文件输入、编译、功能仿真、综合、时序仿真和下载实现等。
3道题必须在实验箱上进行下载后验证。
二、设计报告内容要求要有实验题目、设计思路、设计流程、硬件描述语言代码、电路图、时序仿真图和结果分析等。
用专用的报告纸手写报告,正文页必须在10页以上,仿真图打印出来粘贴在报告上,编程代码写在附页上。
若有报告雷同,报告成绩为零分。
三、设计实验内容1、某晚会用红绿黄3组彩灯采光,3组灯亮的顺序是:红灯亮—绿灯亮—黄灯亮—红绿灯亮—绿黄灯亮—黄红灯亮—全亮—全暗。
重复以上过程,试设计这三组灯的控制电路。
输入时钟频率为512Hz,灯亮的时间在1—4秒之间,可以自由控制。
电路中以“1”代表灯亮,以“0”代表灯灭。
2、奇偶校验器系统的功能是对八位二进制数据及其奇偶校验位的输入进行校验,输出正确的奇、偶校验位。
ODD_IN与EVEN_IN是控制奇校验和偶校验功能输入,IN0到IN7是七位数据及一位校验位数据输入,IN_READY表示输入数据已经准备好,可以处理,当OUT_REQ输入表示要求输出数据,CLK端口用于接收时钟信号,支持系统的时钟上升沿同步。
当输出端口OUT_READY输出信号有效时,表示输出数据已经准备好,可以为下级电路使用,ODD_OUT与EVEN_OUT 用来输出正确的奇偶校验位。
上述控制端口均为高电平有效。
3、设计一个交通灯管理系统。
其功能如下:(1)公路上无车时,主干道绿灯亮,公路红灯亮(2)公路上有车时,传感器输出C=1,且主干道通车时间超过最短时间主干道交通灯由绿→黄→红,公路交通灯由红→绿;(3)公路上无车,或有车且公路通车时间超过最长时间,则主干道交通灯由红→绿,公路交通灯由绿→→红;(4)假设公路绿灯亮的最长时间等于主干道绿灯亮的最短时间,都为16秒,若计时到E=1;黄灯亮的时间设为4秒,若计时到F=1。
竭诚为您提供优质文档/双击可除plc交通信号灯控制实验报告篇一:交通灯pLc控制实验报告交通灯的pLc控制实验报告学院:自动化学院班级:0811103姓名:张乃心学号:20XX213307实验目的1.熟悉pLc编程软件的使用和程序的调试方法。
2.加深对pLc循环顺序扫描的工作过程的理解。
3.掌握pLc的硬件接线方法。
4.通过pLc对红绿灯的变时控制,加深对pLc按时间控制功能的理解。
5.熟悉掌握pLc的基本指令以及定时器指令的正确使用方法。
实验设备1.含可编程序控制器microLogix1500系列pLc的Demo 实验箱一个2.可编程序控制器的编程器一个(装有编程软件的pc 电脑)及编程电缆。
3.导线若干实验原理交通指挥信号灯图I/o端子分配如下表注:pLc的24VDc端接Demo模块的24V+;pLc的com端接Demo模块的com。
系统硬件连线与控制要求采用1764-L32Lsp型号的microLogix1500可编程控制器,进行I/o端子的连线。
它由220VAc供电,输入回路中要串入24V直流电源。
1764系列可编程控制器的产品目录号的各位含义如下示。
1764:产品系列的代号L:基本单元24:32个I/o点(12个输入点,12个输出点)b:24V 直流输入w:继电器输出A:100/240V交流供电下图为可编程控制器控制交通信号灯的I/o端子的连线图。
本实验中模拟交通信号灯的指示灯由24V直流电源供电。
o/2-o/4为南北交通信号灯,o/5-o/7为东西交通信号灯。
实现交通指挥信号灯的控制,交通指挥信号灯的布置,控制要求如下:(1)信号灯受一个启动开关控制,当启动开关接通时,信号灯系统开始正常工作,且先南北红灯亮,东西绿灯亮。
当启动开关断开时,所有信号灯熄灭。
(2)南北红灯维持25秒。
在南北红灯亮的同时东西绿灯也亮,并维持20秒。
到20秒时,东西绿灯闪亮,闪亮3秒后熄灭。
在东西绿灯熄灭时,东西黄灯亮,并维持2秒。
交通灯控制器数字电路的设计及仿真随着城市化进程的加快,交通量越来越大,如何科学有效地管理交通成为一个重要的问题。
其中,交通灯控制器是一个涉及电子电路技术的重要设备。
基于数字电路的设计和仿真,进一步提高交通灯控制器的精度和稳定性,对于保障交通安全、提高城市交通效率至关重要。
一、设计方案1.计算时序交通灯控制器的每个阶段均有确定的时间,因此需要计算时序以确定各个信号时序是否正确,以及控制灯的开关时间是否正确。
2.设计状态机根据计算好的时序,可以通过 ISE 设计工具绘制状态图,然后再利用 Verilog HDL 语言编写出状态机。
交通灯控制器的每个阶段都有一个对应的状态,状态机会根据输入信号的状态来判断当前处于何种状态,并根据状态判断应该输出什么信号。
3.确定数字电路结构利用 ISE 设计工具,可以采用 Combinational Logic Circuit 来设计灯的开关逻辑电路,时序电路中以时钟触发器为主。
可以通过该工具绘制仿真波形来检测电路的正确性,检查信号间是否存在错误。
二、仿真过程1.绘制输入信号波形首先,需要绘制出输入信号的波形,并且在仿真时要按照相应的频率和占空比输出。
2.对仿真波形进行仿真分析仿真过程中,可以通过 Xilinx 仿真工具,对仿真波形进行分析,检测电路的正确性和稳定性。
同时,可以通过仿真过程中的输出信号波形,判断各阶段信号的状态。
3.检验仿真结果与设计方案借助仿真工具,可以非常直观地验证数字电路的设计方案是否合理、可靠。
此外,还可以通过不同的应用场景,不断优化和调整设计方案,以实现更高的效率与精度。
三、总结数字电路的设计和仿真,可以有效地提高交通灯控制器的精度和稳定性,在城市交通管理中起到关键的作用。
当前数字电路技术的不断推进,为实现更加高效安全的交通管理提供了强有力的支持。
单片机综合实验报告题目: 模拟真实交通灯班级:姓名:学号:指导老师:时间:一、实验内容:用8255芯片的PA、PB口低四位做输出口,控制十二个发光二极管燃灭,模拟十字路口交通灯管理,并利用数码显示器进行倒计时显示(采用单片机内部定时器定时)。
通过外部中断能使交通灯暂停运行,并点亮4个红灯。
通过16*16点阵中的图形模拟控制行人过马路的人形“走”、“停”指示灯,可参考下图所示。
选做增加项目:在交通灯开始之前可通过开关对红绿灯亮灭时间的初始值进行增、减设定或者交通灯暂停时加上乐曲报警。
二、实验电路及功能说明电路:74LS138译码器电路8255与发光二极管连线图数码LED显示器电路(不需接线)16×16LED点阵显示电要求:交通灯亮灭过程同“8255控制交通灯实验”,倒计时显示只需两位数(0~99),用定时器定时进行倒计时,每秒钟减1。
在16*16点阵中显示的人形“走”、“停”标志可自定义,由专门软件可转换为相应显示代码,不需自己推理。
三、实验程序流程图:主程序:子程序:详细程序请参考程序清单。
四、实验结果分析对程序进行仿真可以观察到:点阵中交替显示如图(a)、(b)所示图像,且交替显示时间为30秒。
当显示图像为(a)时,表示可以容行人通过,限时30秒;当显示图像为(b)时,表示不容行人通过,也限时30秒。
如此,在十字路口各置一对点阵即可模拟实景。
五、心得体会通过此次实验,对单片机的I/O口的使用的条件有了更深的理解,对单片机的各个管脚功能的理解也加深了,以及在常用编程设计思路技巧的掌握方面也向前迈了一大步。
这次的课程设计让我把单片机的理论知识应用在实践中,实现了理论和实践相结合,从中更懂得理论是实践的基础,实践有助于检验理论的正确性的道理,对我以后参加工作或者继续学习深造将产生巨大的帮助和影响。
六、程序清单#include <reg51.h>#include <absacc.h>#define uchar unsigned char#define uint unsigned int#define ROW1 XBYTE[0XFFE3]#define ROW2 XBYTE[0XFFE0]#define COL1 XBYTE[0XFFE2]#define COL2 XBYTE[0XFFE1]#define PA XBYTE[0xffd8]#define PB XBYTE[0xffd9]#define CTL XBYTE[0xffdb]#define SEG XBYTE[0xffdc]#define BIT XBYTE[0xffdd]#define allredend 10#define ewredend 2*ewstarter+allredend#define snyellowend ewredend+10#define snredend snyellowend+2*snstarter#define ewyellowend snredend+10sbit KEY1=P1^0;sbit KEY2=P1^1;sbit KEY3=P1^2;sbit P32=P3^2;uchar tongBu;uchar code ewTable[]={0xb6,0x75,0xf3,0xf7,0xae,0x9e,0xbe};uchar code nsTable[]={0xd,0xd,0xc,0xd,0xb,0x7,0xf};//uchar tempa,tempb;int time=1,cnt,change,intflag,inttime=1,ewstarter=10,snstarter=15;int tempseg;uchar key1=0;uchar buffer[]={0,0,0,0,0,0};uchar table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};/*-- 行走--*//*-- 宽度x高度=16x16 --*/uchar code led1[]={0x01,0x80,0x02,0x40,0x02,0x40,0x01,0x80,0x03,0xC0,0x06,0x60,0x0A,0x50,0x0A,0x5 0,0x0B,0xD0,0x12,0x48,0x02,0x40,0x02,0x60,0x04,0x20,0x04,0x20,0x08,0x20,0x18,0x60};/*-- 停止--*//*-- 宽度x高度=16x16 --*/uchar code led2[]={0x01,0x80,0x02,0x40,0x02,0x40,0x01,0x80,0x07,0xE0,0x7E,0x7E,0x02,0x40,0x02,0x40 ,0x03,0xC0,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x03,0xC0};/*-- 文字: 高--*//*-- Fixedsys12; 此字体下对应的点阵为:宽x高=16x16 --uchar code led2[]={0x02,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,0x0F,0xE0,0x08,0x20,0x0F,0xE0,0x00,0x0 0,0x7F,0xFC,0x40,0x04,0x4F,0xE4,0x48,0x24,0x48,0x24,0x4F,0xE4,0x40,0x14,0x40,0x08};*/ void delayshort(){char n;for(n=50;n>0;n--);}uchar changeleft(uchar led){uchar temp;temp=0;temp|=(led<<7)&0x80;temp|=(led<<5)&0x40;temp|=(led<<3)&0x20;temp|=(led<<1)&0x10;temp|=(led>>1)&0x08;temp|=(led>>3)&0x04;temp|=(led>>5)&0x02;temp|=(led>>7)&0x01;return(temp);}void led16_16display(uchar *table,uchar length){uchar i=length/2,scan1=0x1,scan2=0x1;for(i=0;i<16;i++){if(i<8){ROW1=0;ROW2=0;COL1=scan1;COL2=0;ROW1=changeleft(table[2*i]);ROW2=table[2*i+1];COL1=scan1;COL2=0;delayshort();scan1<<=1;}else{ROW1=0;ROW2=0;COL1=0;COL2=scan2;ROW1=changeleft(table[2*i]);ROW2=table[2*i+1];COL1=0;COL2=scan2;delayshort();scan2<<=1;}}}void changeseg(){if(key1==0){buffer[3]=10;buffer[0]=10;buffer[5]=tempseg%10;buffer[4]=tempseg/10;buffer[2]=tempseg%10;buffer[1]=tempseg/10;}else if(key1==1){buffer[3]=10;buffer[0]=10;buffer[5]=ewstarter%10;buffer[4]=ewstarter/10;buffer[2]=ewstarter%10;buffer[1]=ewstarter/10;}else{buffer[3]=10;buffer[0]=10;buffer[5]=snstarter%10;buffer[4]=snstarter/10;buffer[2]=snstarter%10;buffer[1]=snstarter/10;}}void timer1()interrupt 3{static uchar temp=0x20,cnt1;TH1=(65536-1000)/256;TL1=(65536-1000)%256;changeseg();SEG=0xff;SEG=table[buffer[cnt1]];cnt1++;if(cnt1==6)cnt1=0;BIT=temp;temp>>=1;if(temp==0)temp=0x20;}void int_0()interrupt 0{delayshort();if(P32==0){PA=0xB6;PB=0xd;PT0=1;PT1=1;intflag=1;while(inttime<=20)led16_16display(led2,32);inttime=1;intflag=0;PT0=0;PT1=0;PA=ewTable[tongBu];PB=nsTable[tongBu];}}void timer0()interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;cnt++;if(cnt==5){cnt=0;if(intflag==1){inttime++;tempseg=10-inttime/2;}else{time++;if(time<=allredend){tongBu=0;PA=ewTable[tongBu];PB=nsTable[tongBu];tempseg=allredend/2-(time+1)/2;}else if((time>allredend)&&(time<=ewredend)){tongBu=1;PA=ewTable[tongBu];PB=nsTable[tongBu];tempseg=ewstarter+allredend/2-(time+1)/2;}else if((time>ewredend)&&(time<=snyellowend)){if(change==0){tongBu=2;PA=ewTable[tongBu];PB=nsTable[tongBu];change=1;}else{tongBu=3;PA=ewTable[tongBu];PB=nsTable[tongBu];change=0;}tempseg=ewstarter+allredend/2+5-(time+1)/2;}else if((time>snyellowend)&&(time<=snredend)){tongBu=4;PA=ewTable[tongBu];PB=nsTable[tongBu];tempseg=ewstarter+allredend/2+5+snstarter-(time+1)/2;}else if((time>snredend)&&(time<=ewyellowend)){if(change==0){tongBu=5;PA=ewTable[tongBu];PB=nsTable[tongBu];change=1;}else{tongBu=6;PA=ewTable[tongBu];PB=nsTable[tongBu];change=0;}tempseg=ewstarter+10+allredend/2+snstarter-(time+1)/2;}else{tongBu=1;time=allredend+1;PA=ewTable[tongBu];PB=nsTable[tongBu];tempseg=ewstarter+allredend/2-(time+1)/2;}}}}void key(){uchar keynum;keynum=~(P1|0XF8);switch(keynum){case 0x1:while(KEY1==0)led16_16display(led2,32);key1++;TR0=0;if(key1==3){key1=0;TR0=1;}break;case 0x2:while(KEY2==0)led16_16display(led2,32);if(key1==1){ewstarter++;if(ewstarter==100)ewstarter=0;}if(key1==2){snstarter++;if(snstarter==100)snstarter=0;}break;case 0x4:while(KEY3==0)led16_16display(led2,32);if(key1==1){ewstarter--;if(ewstarter==-1)ewstarter=99;}if(key1==2){snstarter--;if(snstarter==-1)snstarter=99;}break;default:break;}}void main(){IE=0x8b;IT0=1;TMOD=0x11;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-1000)/256;TL1=(65536-1000)%256;CTL=0x80;tongBu=0;TR1=1;PA=ewTable[tongBu];PB=nsTable[tongBu];tempseg=allredend/2-(time+1)/2;TR0=1;while(1){key();if(intflag==0){if(key1==0){if(time<=allredend)led16_16display(led2,32);else if(time>allredend&&time<=snyellowend)led16_16display(led1,32);else if(time>snyellowend&&time<=ewyellowend)led16_16display(led2,32);}elseled16_16display(led2,32);}}}。
Verilog实验报告交通
灯
集团标准化工作小组 [Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN]
Verilog实验报告
---第四次 交通灯
班级:集电0802班
姓名: 张鹏
学号: 04086057
序号: 16
一、规范
(1) 具有开关功能:当reset=0时 红绿灯关闭,使主支干道六个灯全灭;
(2) 具有四个功能:当reset=1且func=2’b00时,主干道和支路正常计数;
且func=2’b01时,支干道一直绿灯,主干道一
直红灯;
且func=2’b10时,主干道一直绿灯,支干道一
直红灯;
且func=2’b11时,主干道和支干道一直黄灯
闪;
(3) 计数器频率:运行频率2Hz计数器;
(4) 信号灯种类:红、黄、绿;
(5) 信号灯计执行时间关系:主干道:绿灯常亮+绿灯闪+黄灯=支干道:红灯常
亮;
此设计中:
主干道:绿灯常亮=57s,T绿灯闪=3s,T黄灯亮=3s
支干道:绿灯常亮=15s,T绿灯闪=3s,T黄灯亮=3s
(6) 信号灯到计时功能:信号灯预置后,开始执行2Hz计数器;
(7) 信号灯跳转功能:当各信号灯计时至T时在下一个时钟信号上升沿到来时
自动转为下一状态;
(8) 信号灯各状态跳转关系:绿-黄-红-绿;
二、输入输出定义
reset,clk, func[1:0] ,green[1:0],red[1:0],yellow[1:0]
信号名 宽度 输入/输出 管脚 描述
reset 1 input L13 红绿灯总开关
clk 1 input C9 freq:50MHz
func 2 input N17/H18 控制红绿灯功能
green[1] 1 output D11 主绿
green[0] 1 output E11 支绿
red[1] 1 output F11 主红
red[0] 1 output F12 支红
yellow[1] 1 output C11 主黄
yellow[0] 1 output E12 支黄
三、模块设计
状态转移图:
四、测试代码
module frequency_divider_small(reset,clk,out);
eset(reset),.clk(clk),.func(func),.green(green),.red(red),.yellow(yellow));
always #10 clk=~clk;
initial
begin
reset=0;
clk=1;
func=2'b00;
#20 reset=1;
#21000 func=2'b01;
#10000 func=2'b10;
#10000 func=2'b11;
end
endmodule
波形:
五、源代码
module frequency_divider(reset,clk,out);eset(reset),.clk(clk),.out(in));//
调用分频模块
always @ (posedge clk or negedge reset)
if(!reset)
begin
cnt<=7'd0;
state<=3'd1;
green<=2'b00;
red<=2'b00;
yellow<=2'b00;
end
else
if(in)//分频器结果当主模块始能
if(func==2'b00)//选择不同功能控制开关
if(cnt==7'd0)
case(state)//选择不同状态
3'd1:begin
cnt<=greentime1<<1;
state<=3'd2;
green<=2'b10;
red<=2'b01;
yellow<=2'b00;
end
3'd2:begin
cnt<=yellowtime<<1;
state<=3'd3;
end
3'd3:begin
cnt<=yellowtime<<1;
state<=3'd4;
green<=2'b00;
red<=2'b01;
yellow<=2'b10;
end
3'd4:begin
cnt<=greentime1<<1;
state<=3'd5;
green<=2'b01;
red<=2'b10;
yellow<=2'b00;
end
3'd5:begin
cnt<=yellowtime<<1;
state<=3'd6;
end
3'd6:begin
cnt<=yellowtime<<1;
state<=3'd1;
green<=2'b00;
red<=2'b10;
yellow<=2'b01;
end
endcase
else
begin
cnt<=cnt-7'd1;//倒计数,计数结束进入下一状态
case(state)
3'd3:green[1]<=cnt[0];//主干道绿灯闪
3'd6:green[0]<=cnt[0];//支干道绿灯闪
endcase
end
else if(func==2'b10)//主干道常绿,支干道常红
begin
cnt<=0;
state<=3'd1;
green<=2'b10;
red<=2'b01;
yellow<=2'b00;
end
else if(func==2'b01)//主干道常红,支干道常绿
begin
cnt<=0;
state<=3'd1;
green<=2'b01;
red<=2'b10;
yellow<=2'b00;
end
else if(func==2'b11)//主干道,支干道黄灯一直闪
begin
cnt<=0;
state<=3'd1;
green<=2'b00;
red<=2'b00;
yellow[1]<=~yellow[1];
yellow[0]<=~yellow[1];
end
endmodule