module traffic(clk,sm_bit,key,sm_seg,en,rst,hold,light1,light2);
input clk;//定義時鐘引腳
input rst,en; //定義復位和使能引腳
output [7:0]sm_bit;//定義數碼管位選引腳
output [7:0]sm_seg;//定義數碼管段選引腳
output[2:0]light1,light2;//定義兩個方向交通燈
reg [7:0]sm_bit_r;
reg [7:0]sm_seg_r;
reg [3:0]disp_dat;;//定義數碼管顯示資料暫存器
reg[24:0]count;//定義計數器暫存器
reg sec;//定義秒訊號暫存器
reg tim1,tim2,st1,st2;//定義
tim1
位倒計時是否到達的位標識
reg[1:0]state1,state2,ste;//定義一些狀態
reg[2:0]light1,light2;
reg[3:0]num;
reg[7:0]num1,num2;//num1和
num2
的值為倒計時的值
reg[7:0]red1,red2,green1,green2,yellow1,yellow2;//定義紅黃藍燈的一些狀態
assign sm_bit=sm_bit_r;
assign sm_seg=sm_seg_r;
always@(posedge clk)
begin
count=count+1'b1;
if(count==25'd25000000)//時間達到一秒
begin
count=25'd0;
sec=~sec;
end
endalways@(posedge clk)
begin
case (count[17:15])
3'd0:disp_dat = num1[3:0];//秒個位
3'd1:disp_dat = num1[7:4]; //秒十位
3'd2:disp_dat = 4'ha; //顯示
"-"
3'd3:disp_dat = num2[3:0]; //分個位
3'd4:disp_dat = num2[7:4]; //分十位
3'd5:disp_dat = 4'ha; //顯示
"-"
endcase
case(count[17:15]) //選擇數碼管顯示位
3'd0:sm_bit_r = 8'b11111110; //選擇第乙個數碼管顯示
3'd1:sm_bit_r = 8'b11111101; //選擇第二個數碼管顯示
3'd2:sm_bit_r = 8'b11111011; //選擇第三個數碼管顯示
3'd3:sm_bit_r = 8'b11110111; //選擇第四個數碼管顯示
3'd4:sm_bit_r = 8'b11101111; //選擇第五個數碼管顯示
3'd5:sm_bit_r = 8'b11011111; //選擇第六個數碼管顯示
3'd6:sm_bit_r = 8'b10111111; //選擇第七個數碼管顯示
3'd7:sm_bit_r = 8'b01111111; //選擇第八個數碼管顯示
endcase
end
always @(posedge clk)
begin
case(disp_dat)
4'h0:sm_seg_r = 8'hc0; //顯示0
4'h1:sm_seg_r = 8'hf9; //顯示1
4'h2:sm_seg_r = 8'ha4; //顯示2
4'h3:sm_seg_r = 8'hb0; //顯示3
4'h4:sm_seg_r = 8'h99; //顯示4
4'h5:sm_seg_r = 8'h92; //顯示5
4'h6:sm_seg_r = 8'h82; //顯示6
4'h7:sm_seg_r = 8'hf8; //顯示7
4'h8:sm_seg_r = 8'h80; //顯示8
4'h9:sm_seg_r = 8'h90; //顯示9
4'ha:sm_seg_r = 8'hbf; //顯示-
default:sm_seg_r = 8'hff; //不顯示
endcase
endalways@(en)
if(!en)
begin
green1<=8'b00110101;
red1<=8'b00100101;
yellow1<=8'b00000101;
green2<=8'b00100101;
red2<=8'b00110101;
yellow2<=8'b00000101;
endalways@(posedge sec)//南北方向
begin
if(!rst)//復位模組
begin
light1<=3'b001;
num1<=green1;
endif(!tim1)
begin
tim1<=1;
case(state1)
2'b00:begin num1<=green1;light1<=3'b110;state1<=2'b01;end
2'b01:begin num1<=yellow1;light1<=3'b101;state1<=2'b11;end
2'b11:begin num1<=red1;light1<=3'b011;state1<=2'b10;end
2'b10:begin num1<=yellow1;light1<=3'b101;state1<=2'b00;end//狀態機使三個狀態一直迴圈
default:light1<=3'b011;
endcase
end
else
begin
if(num1==1)tim1<=0;
else if(num1>0)
if(num1[3:0]==0)
begin
num1[3:0]<=4'b1001;//倒計時模組
num1[7:4]<=num1[7:4]-1;
endelse num1[3:0]<=num1[3:0]-1;
endend
always@(posedge sec)//東西方向
begin
if(!rst)//復位模組
begin
light2<=3'b100;
num2<=red2;
endif(!tim2)
begin
tim2<=1;
case(state2)
2'b00:begin num2<=red2;light2<=3'b011;state2<=2'b01;end
2'b01:begin num2<=yellow1;light2<=3'b101;state2<=2'b11;end
2'b11:begin num2<=green2;light2<=3'b110;state2<=2'b10;end
2'b10:begin num2<=yellow2;light2<=3'b101;state2<=2'b00;end
default:light2<=3'b011;
endcase
end
else
begin
if(num2==1)tim2<=0;
else if(num2>0)
if(num2[3:0]==0)
begin
num2[3:0]<=4'b1001;
num2[7:4]<=num2[7:4]-1;
endelse num2[3:0]<=num2[3:0]-1;
endend
endmodule
基於verilog的交通燈
狀態說明 1,初始化 東西南北的燈全亮 2,東西綠燈亮,南北紅燈亮 20秒 3,東西黃燈亮,南北紅燈亮 5秒 4,東西紅燈亮,南北綠燈亮 20秒 5,東西紅燈亮,南北黃燈亮 5秒 6,迴圈 2,3,4,5,如下 timescale 1ns 1ps company author gong create...
ewb交通燈報告和檔案 基於EWB的交通燈設計
本文著眼於目前普遍應用在城市道路上的交通燈控制系統,從課程設計的題目要求出發,設計了乙個十字路口主次街道的交通燈控制電路。首先進行交通燈狀態變換的分析和交通燈總體框架的設計,接著提出了2種電路設計方案,通過優劣比較後選定了方案2。電源電路由555定時器產生1hz的脈衝訊號 根據交通燈的四種執行狀態依...
交通燈控制
問題描述,十字路,東西方向和南北方向燈,綠20s黃5s紅25s,倒計時顯示時間,另外,警車救護車等特殊狀態,都顯紅燈,且時間顯示不斷閃爍,通過之後,恢復原狀態。以下是我編寫的源 library ieee use ieee.std logic 1164.all use ieee.std logic u...