双向交通灯控制与数码管倒计时 Verilog Quartus

名称:双向交通灯控制与数码管倒计时 Verilog Quartus

软件:Quartus

语言:Verilog

功能介绍

这是一个基于Verilog和Quartus的双向交通灯控制设计,面向主路(东西方向)与支路(南北方向)进行红、黄、绿灯时序管理。系统提供六路交通灯输出,并为两条道路分别配置两位数码管显示当前阶段剩余时间,能够直观呈现信号灯状态和倒计时变化。 设计包含50MHz时钟分频、交通灯状态控制、倒计时BCD数据生成和数码管扫描显示等功能模块。正常运行时,主路绿灯、黄灯与支路红灯配合切换,随后支路绿灯、黄灯与主路红灯配合切换;lock_key紧急输入可将两路灯同时置为红灯。工程适合学习时序状态机、分频计时、BCD倒计时以及多位数码管显示的综合实现。

运行环境

Verilog HDL,Quartus工程环境。顶层模块为traffic_light,输入时钟接口标注为50MHz,工程包含traffic_light.qpf/qsf项目文件以及led.v、shumaguan.v、display.v、div.v、traffic_light.v等源文件。

设计思路

系统以50MHz输入时钟为基础,通过分频模块产生1Hz节拍,便于按照秒级周期控制交通灯状态。主路与支路采用交替放行策略,主路绿灯时间设置为30秒、黄灯5秒,支路绿灯时间设置为25秒、黄灯5秒;对应方向的红灯时间由状态机协同计算,使两路信号在切换过程中保持明确的通行关系。 交通灯控制模块输出六路灯信号及各阶段倒计时BCD数据,显示数据生成模块根据当前灯态选择主路和支路应显示的倒计时内容,再由数码管显示模块完成段码输出。lock_key作为紧急控制输入,按下后系统进入两路全红状态,释放后恢复正常时序,适合用于路口故障或特殊通行场景的控制验证。

模块结构

顶层模块traffic_light负责连接时钟、复位、紧急按键、六路灯信号和HEX0至HEX3数码管端口,并完成各子模块之间的信号分配。div模块将输入时钟分频为1Hz控制节拍;led模块实现主路、支路交通灯状态机及各阶段倒计时数据输出;shumaguan_data模块依据当前灯态和倒计时数据生成主路、支路显示数据;display模块负责数码管段码及扫描输出。工程还包含对应的Quartus项目文件和编译输出文件,可直接在Quartus环境中查看层次结构。

演示视频

演示视频展示交通灯控制系统的运行过程,包括上电初始阶段两路全红、正常红绿灯交替及倒计时显示,并演示紧急按键触发后两路同时保持红灯的状态。视频可用于快速了解主路与支路信号灯、数码管倒计时和应急控制的联动效果。

仿真图/仿真说明/设计文档图片

设计文档包含工程文件与程序结构说明、程序编译记录、RTL结构图、Testbench说明、整体仿真图以及分频模块、红绿灯控制模块、倒计时控制模块和数码管显示模块的相关图示。仿真内容覆盖起始阶段两路全红、紧急按键按下后的两路全红状态,以及正常红绿灯交替和倒计时变化,可用于理解状态切换与显示数据的对应关系。

双向交通灯控制与数码管倒计时 Verilog Quartus 设计文档图片 image1.png

双向交通灯控制与数码管倒计时 Verilog Quartus 设计文档图片 image10.png

双向交通灯控制与数码管倒计时 Verilog Quartus 设计文档图片 image11.png

双向交通灯控制与数码管倒计时 Verilog Quartus 设计文档图片 image12.png

双向交通灯控制与数码管倒计时 Verilog Quartus 设计文档图片 image13.png

双向交通灯控制与数码管倒计时 Verilog Quartus 设计文档图片 image14.png

双向交通灯控制与数码管倒计时 Verilog Quartus 设计文档图片 image15.png

双向交通灯控制与数码管倒计时 Verilog Quartus 设计文档图片 image16.png

双向交通灯控制与数码管倒计时 Verilog Quartus 设计文档图片 image2.png

双向交通灯控制与数码管倒计时 Verilog Quartus 设计文档图片 image3.png

双向交通灯控制与数码管倒计时 Verilog Quartus 设计文档图片 image4.png

双向交通灯控制与数码管倒计时 Verilog Quartus 设计文档图片 image5.png

双向交通灯控制与数码管倒计时 Verilog Quartus 设计文档图片 image6.png

双向交通灯控制与数码管倒计时 Verilog Quartus 设计文档图片 image7.png

双向交通灯控制与数码管倒计时 Verilog Quartus 设计文档图片 image8.png

双向交通灯控制与数码管倒计时 Verilog Quartus 设计文档图片 image9.png

部分代码

以下展示顶层模块 traffic_light 的部分代码,完整源码请下载压缩包查看。

module traffic_light(
input clk,//50Mhz
input rst_n,//复位
input lock_key,//紧急按键--按下均为红灯,为1紧急状态,为0正常状态

output main_red,//主路灯(东西方向)
output main_green,//主路灯
output main_yellow,//主路灯

output branch_red,//支路灯(南北方向)
output branch_green,//支路灯
output branch_yellow,//支路灯

output [7:0] HEX0,//(主干道)数码管0--个位
output [7:0] HEX1,//(主干道)数码管1--十位

output [7:0] HEX2,//(支干道)数码管2--个位
output [7:0] HEX3//(支干道)数码管3--十位
);

 wire clk_1Hz;
 wire [7:0] main_green_BCD;
 wire [7:0] main_yellow_BCD;
 wire [7:0] main_red_BCD;
 wire [7:0] branch_green_BCD;
 wire [7:0] branch_yellow_BCD;
 wire [7:0] branch_red_BCD;
 wire [7:0] main_data_out;
 wire [7:0] branch_data_out;
 
wire main_red_led;//主路灯
wire main_green_led;//主路灯
wire main_yellow_led;//主路灯

wire branch_red_led;//支路灯
wire branch_green_led;//支路灯
wire branch_yellow_led;//支路灯

assign main_red=main_red_led;//主路灯
assign main_green=main_green_led;//主路灯
assign main_yellow=main_yellow_led ;//主路灯

assign branch_red=branch_red_led;//支路灯
assign branch_green=branch_green_led;//支路灯
assign branch_yellow=branch_yellow_led ;//支路灯 

//分频模块
div div100
(
. clk(clk),
. rst_n(rst_n),
. clk_out(clk_1Hz)
);

//调整时间
wire [7:0]main_green_time;//由外部控制
wire [7:0]main_yellow_time;
wire [7:0]branch_green_time;//由外部控制
wire [7:0]branch_yellow_time;

assign main_yellow_time=8'd5;//主路黄灯时间设置为5秒
assign branch_yellow_time=8'd5;//支路黄灯时间设置为5秒
assign main_green_time=8'd30;//主路绿灯30秒,东西方向通车,时间30s
assign branch_green_time=8'd25;//支路绿灯20秒,南北方向通车,时间20s


////////////////////////////////
//交通灯控制模块
led led(
. clk_1Hz(clk_1Hz),
. rst_n(rst_n),
. lock_key(lock_key),//紧急按键,为1紧急状态,为0正常状态

. main_red(main_red_led),//主路灯
. main_green(main_green_led),//主路灯
. main_yellow(main_yellow_led),//主路灯

. branch_red(branch_red_led),//支路灯
. branch_green(branch_green_led),//支路灯
. branch_yellow(branch_yellow_led),//支路灯

. main_green_time(main_green_time),
. main_yellow_time(main_yellow_time),
. branch_green_time(branch_green_time),
. branch_yellow_time(branch_yellow_time),

. main_green_BCD(main_green_BCD),//绿灯时间计数
. main_yellow_BCD(main_yellow_BCD),//黄灯时间计数
. main_red_BCD(main_red_BCD),//红灯时间计数
. branch_green_BCD(branch_green_BCD),//绿灯时间计数
. branch_yellow_BCD(branch_yellow_BCD),//黄灯时间计数
. branch_red_BCD(branch_red_BCD)//红灯时间计数
);

//显示数据生成模块
shumaguan_data shumaguan_data(
. clk(clk),

. main_red(main_red_led),//主路灯
. main_green(main_green_led),//主路灯
. main_yellow(main_yellow_led),//主路灯

. branch_red(branch_red_led),//支路灯
. branch_green(branch_green_led),//支路灯
. branch_yellow(branch_yellow_led),//支路灯

. main_green_BCD(main_green_BCD),//绿灯时间计数
. main_yellow_BCD(main_yellow_BCD),//黄灯时间计数
. main_red_BCD(main_red_BCD),//红灯时间计数
. branch_green_BCD(branch_green_BCD),//绿灯时间计数
. branch_yellow_BCD(branch_yellow_BCD),//黄灯时间计数
. branch_red_BCD(branch_red_BCD),//红灯时间计数

. main_green_time(main_green_time),
. main_yellow_time(main_yellow_time),
. branch_green_time(branch_green_time),
. branch_yellow_time(branch_yellow_time),

. main_data_out(main_data_out),//主路数码管数据显示
. branch_data_out(branch_data_out)//支路数码管数据显示
// ... 以下代码略,完整源码请下载压缩包查看

代码文件(付费下载)

📥 付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 双向交通灯控制与数码管倒计时 Verilog Quartus

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员