数字电路设计交通灯控制器,
我们看到,这是显示的要求是40进制,4进制,20进制。且轮换进行。
很容易想到的就是使用16进制计数器。
设计方法是:
第一个40进制选取两个16进制计数器,第一个计数器的进位输出接入第二个计数器的ENT端,然后再在第二个计数器的输出端接入3-8译码器,我们知道1对应的二进制是00001,40对应二进制是101000。于是在3-8译码器输入端接入前三位,将3-8译码器的第5个输出端接到第一个计数器的LOAD端,然后第一个计数器置数端输入是0001。然后我们就可以发现这两个计数器构成了由1~40的二进制计数器。
同理我们对黄灯用一个16进制计数器设计成1~4的二进制计数器。
同理对南北绿灯用两个16进制计数器设计成1~20的二进制计数器。
然后我们理下思路,要产生你提出的效果,我们接下来要将这些计数器形成循环显示。
具体就是:
1~40二进制计数器(即东西绿灯)当到达40时,进位信号触发后一个1~4二进制计数器(即黄灯),同时这个信号阻断1~40二进制计数器继续计数。
之后,当1~4二进制计数器达到4时,进位信号触发1~20二进制计数器(即南北绿灯),同时这个信号阻断1~4二进制计数器继续计数。
之后同理,1~20到达20后,触发后一个1~4,1~4到达4后,再触发1~40。
于是我们很清晰的看到了这样一个循环,当东西绿灯40秒到后自动停止转到黄灯,到达4秒后自动停止转到南北绿灯。20秒后自动停止转到黄灯。4秒后自动停止并转到东西绿灯....然后一直这么循环,完成所要效果。
好,那我们接下来要做的就是怎么联系前后两个计数器。在此仅列举1~40如何转到1~4,之后的1~4转到1~20转到1~4再转到1~40都是一个道理,不再赘述。
如前所述,第一个1~40计数器最终是在3-8译码器的5号输出端返回到第一级的LOAD形成重新的置1从而达到1~40计数的要求的。那么我们如果将这个端口5输出的信号同时接入第一级的ENP端口,那么就行成了一旦达到40,1~40置位回到1,并且由于ENP端口出现0信号,使得整个1~40计数器达到40时重新置1并停止计数。
然后5输出的信号取非后可以用于触发后一级的ENT,触发后一级1~4计数器。然后一样的做法,当1~4达到4时,阻断自己继续计数并将信号触发再后一级的1~20计数器...一次类推就达到了你要的结果。
至于显示可以用7段显示器,这个较为简单,列个表画一个卡诺圈就出来了。
简易交通灯控制器
本设计中选用目前应用较广泛的VHDL硬件电路描述语言,实现对路口交通灯系统的控制器的硬件电路描述,在Altera公司的EDA软件平台MAX+PLUSⅡ环境下通过了编译、仿真,并下载到CPLD器件上进行编程制作,实现了交通灯系统的控制过程。 关键词:EDA;VHDL;控制器;CPLD
引言
EDA技术是用于电子产品设计中比较先进的技术,可以代替设计者完成电子系统设计中的大部分工作,而且可以直接从程序中修改错误及系统功能而不需要硬件电路的支持,既缩短了研发周期,又大大节约了成本,受到了电子工程师的青睐。
实现路口交通灯系统的控制方法很多,可以用标准逻辑器件、可编程序控制器PLC、单片机等方案来实现。但是这些控制方法的功能修改及调试都需要硬件电路的支持,在一定程度上增加了功能修改及系统调试的困难。因此,在设计中采用EDA技术,应用目前广泛应用的VHDL硬件电路描述语言,实现交通灯系统控制器的设计,利用MAXPLUSⅡ集成开发环境进行综合、仿真,并下载到CPLD可编程逻辑器件中,完成系统的控制作用。
交通灯系统控制器设计要求
路口交通灯控制系统与其他控制系统一样,划分为控制器和受控电路两部分。控制器使整个系统按设定的工作方式交替指挥车辆及行人的通行,并接收受控部分的反馈信号,决定其状态转换方向及输出信号,控制整个系统的工作过程。
按照路口交通运行的实际情况,在本系统中,设定系统的工作情况如下。
路口交通灯控制系统的东西路有交通灯R(红)、Y(黄)、G(绿);东西人行安全通道灯:RXR(红)、RXG(绿)。南北路有交通灯:r1(红)、y1(黄)、g1(绿);南北人行安全通道灯:rxr1(红)、rxg1(绿),所有灯均为高电平点亮。设置15s的通行时间和5s转换时间的变模定时电路,由预置输入整数cnt决定是模15还是模5,输入逻辑cx是用来决定计数到4时清零还是到14时清零。Clk是外部提供的基准秒脉冲信号。x0、x1、x2、x3是由控制器输出的表示计数时间的四位二进制数。图1是该系统控制器的符号框图。
控制器的程序设计
* 控制器的ASM图
根据系统设计要求,得到控制器的ASM图,如图2所示。在这里,所有输入信号均为高电平有效。该ASM图反映了交通灯系统的不同状态的转换过程及持续时间。
* 控制器的VHDL程序设计
根据所分析的系统的ASM图,结合系统的设计要求,用VHDL语言对各个模块进行编程,最后形成顶层文件,在MAX+PLUSⅡ环境下进行编译与仿真,检查所编程序是否运行正确。如果出现错误,需要进行修改,直到完全通过为止。需要说明的是,在进行程序编译时,要先从底层程序开始,所有底层程序都正确后,才能开始顶层程序的编译。这是因为顶层程序是对底层程序的概括,它是把底层程序各个模块连接起来,就相当于把每个模块的功能汇聚到一起,实现整个系统的控制功能,所以底层程序的正确与否,关系到顶层程序的运行结果。
在控制器的程序设计中,在定义结构体时,有两种程序设计方法均可以通过编译及仿真,但在进行时序分析时结果却不同。
(1)如果这样定义:
...
ARCHITECTURE con1_arc of con1 IS
SIGNAL current_state:state;
BEGIN
...
在进行程序调试时,均通过了编译及仿真,但在进行时序分析中,却出现了不按设定的计数顺序工作的结果:14, 13, 2,1, 0...。经过反复修改调试,对程序进行了修改,如(2)所定义的。
(2)
ARCHITECYTURE con1_arc OF con1 IS
SIGNAL current_state:state;
SIGNAL TEMP_STATE:state;
...
TEMP STATE<=current_state;
BEGIN
...
在这种设计方法中,多定义了一个信号变量,从而使得程序能按设定的状态14,13,12...进行转换。通过这个实例,可以看出EDA技术作为电子设计工具的功能修改及调试的方便快捷,即不需要硬件电路的支持就可以找到问题所在并进行修改,体现了它的优越性。
硬件电路实现
根据交通灯系统的控制要求,图3所示为本系统的硬件电路图。该电路包含了1个CPLD芯片,2个七段LED数码显示器,20个分别表示各个方向上的红、黄、绿灯,以及相应的限流电阻。这个电路与其他控制方法相比,所用器件可以说是比较简单经济的。经过实验,实现了预定的交通灯系统的控制功能。
或单片机,PLC教材上有实例.
数字电路verilog HDL语言设计交通灯控制器
module LIGHT_CTRL(
clk , //sys clk 24mhz
rst_n , //n_reset
road_a_grn , //Road A Green
road_a_red , //Road A Red
road_b_grn , //Road B Green
road_b_red //Road B Red
);
//Input PIN
input clk ; //sys clk 24mhz
input rst_n ; //n_reset
//Output PIN
output road_a_grn ; //Road A Green
output road_a_red ; //Road A Red
output road_b_grn ; //Road B Green
output road_b_red ; //Road B Red
//Register And Wire
//1sec pulse
wire n_1s_cnt_end ;
wire n_500ms_pls ;
reg [31:0] r_cnt ;
//light ctrl state(1sec pls transition)
reg [2:0] r_state ;
//second cnt
reg [4:0] r_sec_cnt ;
//second cnt
reg r_blk_flg ;
//light output
wire n_road_a_grn ;
wire n_road_a_red ;
wire n_road_b_grn ;
wire n_road_b_red ;
reg road_a_grn ;
reg road_a_red ;
reg road_b_grn ;
reg road_b_red ;
//***RTL***
//1sec pulse and 500ms pulse
assign n_1s_cnt_end = (r_cnt == 32'h016E_35FF)? 1'b1 : 1'b0; //when cnt=23999999,1s pulse
assign n_500ms_pls = (r_cnt == 32'h00B7_1AFF)? 1'b1 : 1'b0; //when cnt=11999999,500ms pulse
always @(posedge clk or negedge rst_n) begin
if (~rst) begin
r_cnt <= 32'h0000_0000;
end
else begin
if(n_1s_cnt_end == 1'b1)
r_cnt <= 32'h0000_0000;
else
r_cnt <= r_cnt + 1'b1;
end
end
//light ctrl state(1sec pls transition)
//1st 24sec:00
//1st 3sec :10
//2nd 3sec :11
//others :goto 00
always @(posedge clk or negedge rst_n) begin
if (~rst) begin
r_state <= 3'b000;
end
else begin
if(n_1s_cnt_end == 1'b1)
if((r_state[1:0] == 2'b00) && (r_sec_cnt == 5'b1_0111)
r_state <= {r_state[2],2'b10};
else if((r_state[1:0] == 2'b10) && (r_sec_cnt == 5'b0_0010)
r_state <= {r_state[2],2'b11};
else if((r_state[1:0] == 2'b11) && (r_sec_cnt == 5'b0_0010)
r_state <= {~r_state[2],2'b00};
else if(r_state[1:0] == 2'b01)
r_state <= 3'b000;
else
r_state <= r_state;
else
r_state <= r_state;
end
end
................................
做完了 你确认了 我把程序发给你qq
用数字电路知识设计一交通灯控制器
这个比较麻烦。在电子技术一书里有讲到。
数字电路实现交通信号灯控制的的设计与实现
数字电路实现。交通信号灯。
控制的的设计与实现
我们就,可以给,
帮的,