基于FPGA的交通灯电路设计(含程序)

8 篇文章 0 订阅
1 篇文章 0 订阅

目录

题目要求

设计方法

部分程序设计


题目要求

(1) 以车为主体,绿灯、黄灯、红灯、绿灯依次点亮;

(2)十字路口,具有两组红绿灯;

(3)采用倒计时显示剩余时间,数码管动态显示;

(4)红绿灯时间按键可调。

设计方法

用六位数码管显示,靠左和靠右两位数码管分别显示东西和南北方向的倒计时显示,我开发板刚好6个LED灯,但是是竖着的,上面三位表示南北方向的红黄绿灯,下面三位表示东西方向的红黄绿灯。平面图如下:

c63920811c514ee6956f5eb648d0214b.png

首先需要一个1hz频率进行倒计时计数,然后对倒计时在不同时间段做出不同的判断即可,为了方便理解,我画出流程图如下:(需要注意的是红灯亮的时间应该是黄灯和绿灯时间之和)

45ed9f4691414c05a56b398db7abebcd.png

部分程序设计

module traffic(
    input clk,
    input rstn,
    input [6:0]d2,//绿灯点亮时间
    output reg [3:0] data1,
    output reg [3:0] data2,
    output reg [3:0] data5,
    output reg [3:0] data6,
    output reg [5:0] led
    );

	wire [6:0]d3;	//红灯点亮时间
	assign d3=d2+5;
//1hz生成
	reg [26:0]cn1;
	reg clk1hz;
	always@(posedge clk or negedge rstn)
		begin
			if(!rstn)
				begin
					cn1<=0;
					clk1hz<=0;
				end
			else if(cn1>=24_999_999)//1hz频率生成
				begin
					clk1hz<=!clk1hz;
					cn1<=0;
				end
			else 
				cn1<=cn1+1;
		end
//计数	
	reg [6:0]count;
	always@(posedge clk1hz or negedge rstn)
		begin
			if(!rstn)
				count<=0;
			else if(count>=(d3+d3))//红灯时间d3,加上黄灯和绿灯时间d3
				count<=0;
			else
				count<=count+1;
		end
//南北方向显示
	reg [6:0]north_red,north_green,north_yellow;
	always@(posedge clk1hz or negedge rstn)
		begin
			if(!rstn)
				begin
					north_red<=0;
					north_green<=0;
					north_yellow<=0;
					led[2:0]<=0;
					data1<=0;
					data2<=0;
				end
			else if(count<=d3)//南北方向红灯点亮
				begin
					north_red<=d3-count;
					led[2:0]<=3'b110;
					data1<=north_red%10;//取时间低位
					data2<=north_red/10;//取时间高位
				end
			else if((count>d3)&&(count<=(d3+d3-5)))//南北方向绿灯点亮
				begin
					north_green<=d3+d3-5-count;
					led[2:0]<=3'b011;
					data1<=north_green%10;
					data2<=north_green/10;
				end
			else
				begin
					north_yellow<=d3+d3-count;//南北方向黄灯点亮
					led[2:0]<=3'b101;
					data1<=north_yellow%10;
					data2<=north_yellow/10;
				end
		end
//东西方向显示		
	reg [6:0]east_red,east_green,east_yellow;
	always@(posedge clk1hz or negedge rstn)
		begin
			if(!rstn)
				begin
					east_red<=0;
					east_green<=0;
					east_yellow<=0;
					led[5:3]<=0;
					data5<=0;
					data6<=0;
				end
			else if(count<=d3-5)
				begin
					east_green<=d3-5-count;
					led[5:3]<=3'b011;
					data5<=east_green%10;
					data6<=east_green/10;
				end
			else if((count>=(d3-5))&&(count<=d3))
				begin
					east_yellow<=d3-count;
					led[5:3]<=3'b101;
					data5<=east_yellow%10;
					data6<=east_yellow/10;
				end
			else
				begin
					east_red<=d3+d3-count;
					led[5:3]<=3'b110;
					data5<=east_red%10;
					data6<=east_red/10;
				end
		end
endmodule

   

工程.v文件https://download.csdn.net/download/m0_59487432/85684464?spm=1001.2014.3001.5503

92461e074321436fbc0761e978f79c08.png

  • 13
    点赞
  • 181
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绯红姜梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值