e几个灯同时亮灭两次verilog_基于verilog的十字路口交通灯设计

该博客介绍了一个基于Verilog的十字路口交通灯设计,包括4个状态的转换和倒计时功能。设计中使用了时钟分频、状态转换、译码和数码管显示等模块,实现了红绿黄灯的定时切换,并通过仿真验证了设计的正确性。
摘要由CSDN通过智能技术生成

要求:模拟一个简单的十字路口交通灯(各个只有红绿黄灯,没有转弯灯)。交通灯一共有4 个状态,一是倒计时60 秒,同时亮南北方向绿灯、东西方向红灯;二是倒计时5 秒,同时数码管闪烁显示‘0’,同时亮南北方向红灯、东西方向黄灯;三是倒计时30 秒,东西方向亮红灯、南北方向绿灯;四是倒计时5 秒,数码管闪烁显示‘0’,东西方向亮黄、南北方向红灯。四个状态循环就构成了一个简单的交通灯(未了降低难度,我们设计简化交通灯,与真实情况不太一样)。

1.假定系统输入时钟为10KHz。

2.设计出以上要求的交通灯,每个方向有一个倒计时指示(两个8 段数码

管)和红黄绿三种颜色的灯。

3.给出仿真波形。

设计思路

首先根据设计要求,交通灯在四个状态间相互转换,为交通灯分配状态:

A-00:倒计时60 秒,同时亮南北方向绿灯、东西方向红灯;

B-01:倒计时5 秒,同时数码管闪烁显示‘0’,同时亮南北方向红灯、东西方向黄灯;

C-10: 倒计时30 秒,东西方向亮红灯、南北方向绿灯;

D-11: 倒计时5 秒,数码管闪烁显示‘0’,东西方向亮黄、南北方向红灯。

其次,把设计分为几大模块-----时钟输入,时钟分频,状态转换,译码,数码管显示输出。其中状态转换包括了A,B,C,D四种状态的转换以及倒计时五秒时数码管闪烁所需的状态转换,把这几个模块连接起来就完成了交通灯的设计。

(1)时钟从外部输入。

(2)时钟分频用计数器来实现,首先对系统输入时钟10KHz进行100分频,得到数码管动态扫描时钟信号,再对扫描信号进行100分频得到数码管显示时间所需的1Hz时钟信号。

(3)状态转换用case(state)语句,在满足状态转换条件时对状态进行转换。

(4)译码原理:二进制转BCD码采用左移加3的方法,具体描述如下(此处以8-bit 二进制码为例):

a.左移要转换的二进制码1位

b.左移之后,BCD码分别置于百位、十位、个位

c.如果移位后所在的BCD码列大于或等于5,则对该值加3

d.继续左移的过程直至全部移位完成

二进制转化为BCD码后,就可以来驱动数码管显示十进制数字了。

(5).8段共阴极数码管的编码:

0x3f,0x06,0x5b,0x4f,

//0~3

0x66,0x6d,0x7d,0x07,

//4~7

0x7f,0x6f,0x77,0x7c,

//8~b

0x39,0x5e,0x79,0x71

//c~f

verilog程序及仿真结果(仿真平台:Quartus II)。

变量说明:

CLK:系统的输入时钟。

CLK_A:数码管动态扫描时钟信号。

CLK_B:1Hz计数时钟信号。

Lamp_SN:南北方向的红绿灯的状态,00--green,01--yellow,10—red。

Lamp_EW:东西方向的红绿灯的状态,00--green,01--yellow,10—red。

ten_SN1:实际显示时(如倒计时5秒闪烁)南北方向驱动数码管十位的8位数据。

one_SN1:南北方向驱动数码管个位的8位数据。

ten_EW1:东西方向驱动数码管十位的8位数据。

one_EW1:东西方向驱动数码管个位的8位数据。

state:表示ABCD四种状态。

state1:表示倒计时5秒时数码管闪烁显示0,1的两种状态,在状态A或C时该状态才对数码管有效。

counter:倒计时计数器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值