您的当前位置:首页FPGA交通灯控制器设计程序代码

FPGA交通灯控制器设计程序代码

2021-09-02 来源:爱问旅游网
1. 文件头的中文注释

程序清单 1 中文文件头

/*****************************文件信息************************************ **文件名字: **创建日期: **版本号:

**功能描述:

traffic.v 2009-11-27 v1.0

连接底层七个模块,形成一个交通灯控制系统

************************************************************************/

2. 模块的注释

程序清单 2 模块注释

//traffic.v

//****************************文件信息************************************ //模块名称: //功能描述:

参数定义 定义各个参数

//*********************************************************************** module traffic(

CLK_48M, //48MHZ时钟

EN, //使能信号,为1,控制器开始工作 emergencya, //A方向紧急情况信号 emergencyb, //B方向紧急情况信号

controla, //控制A方向四盏灯的亮灭,分别为绿、左拐、黄和红灯 controlb, //控制B方向四盏灯的亮灭,分别为绿、左拐、黄和红灯 buzzera, //控制A方向紧急情况下的响铃,为1,响 buzzerb, //控制B方向紧急情况下的响铃,为1,响 dispdat1, //用于A方向的时间个位共阴数码管显示 dispdat2, //用于A方向的时间十位共阴数码管显示 dispdat3, //用于B方向的时间个位共阴数码管显示 dispdat4 //用于B方向的时间十位共阴数码管显示 );

output [3:0] controla,controlb; output buzzera,buzzerb;

output [6:0] dispdat1,dispdat2,dispdat3,dispdat4; input CLK_48M,EN;

input emergencya,emergencyb; reg CLK1;

reg [24:0] count; //计数器,用于分频

reg [7:0] numa,numb; //numa,numb分别表示A,B方向的时间变量 reg [7:0] ared,ayellow,agreen,aleft,bred,byellow,bgreen,bleft; reg [6:0] dispdat1,dispdat2,dispdat3,dispdat4; reg [3:0] controla,controlb;

reg [2:0] counta; //counta表示A方向灯的状态 reg [2:0] countb; //countb表示B方向灯的状态

reg tempa; //tempa用于控制A方向的倒计时 reg tempb; //tempb用于控制B方向的倒计时 reg buzzera,buzzerb;

//****************************文件信息************************************ //模块名称: //功能描述:

分频模块

把48MHZ时钟CLK_48M分频成1HZ时钟CLK1

//*********************************************************************** always @(posedge CLK_48M) begin

count=count+1;

if(count==25'd24000000) begin

count=25'b0000000000000000000000000; CLK1=~CLK1; end end

//****************************文件信息************************************ //模块名称: //功能描述: always @(EN) begin if(!EN) begin

ared <=8'd50; //A方向红灯50秒 ayellow <=8'd5; //A方向黄灯5秒 agreen <=8'd30; //A方向绿灯30秒 aleft <=8'd10; //A方向左拐灯10秒 bred <=8'd50; //B方向红灯50秒 byellow <=8'd5; //B方向黄灯5秒 bgreen <=8'd30; //B方向绿灯30秒 bleft <=8'd10; //B方向左拐灯10秒 end end

//*****************************文件信息*********************************** //模块名称: //功能描述:

A方向控制模块

控制A方向紧急情况处理,四盏灯的亮灭及倒计时 置数模块

设置各种灯的计数器的预置数

//***********************************************************************

//*********************************************************************** always @(posedge CLK1) begin

if(EN) //使能信号为1,A方向的控制器开始工作 begin

if(emergencya==1&&emergencyb==0) //A方向出现紧急情况时,A方向的处理 begin

controla<=1; buzzera<=1; numa<=0; tempa<=0;

counta<=0; end

if(emergencya==0&&emergencyb==1) //B方向出现紧急情况时,A方向的处理 begin

controla<=8; buzzera<=0; numa<=0; tempa<=0; counta<=0; end

if(emergencya==0&&emergencyb==0) //正常情况时,A方向的处理 begin

buzzera<=0;

if(!tempa) //tempa=0,A方向灯的状态转换开始 begin

tempa<=1; case(counta)

0: begin numa<=agreen; controla<=1; counta<=1; end 1: begin numa<=ayellow; controla<=4; counta<=2; end 2: begin numa<=aleft; controla<=2; counta<=3; end 3: begin numa<=ayellow; controla<=4; counta<=4; end 4: begin numa<=ared; controla<=8; counta<=0; end default: controla<=8; endcase

end

else //tempa=1,A方向的倒计时开始 begin if(numa>1) numa<=numa-1; if(numa==2) tempa<=0; end end end

else //使能信号为0,A方向的控制器停止工作 begin

controla<=4'b1000; counta<=0; tempa<=0; end

end

//****************************文件信息************************************ //模块名称: //功能描述:

B方向控制模块

控制B方向紧急情况处理,四盏灯的亮灭及倒计时

//*********************************************************************** always @(posedge CLK1) begin

if(EN) //使能信号为1,B方向的控制器开始工作 begin

if(emergencya==1&&emergencyb==0) //A方向出现紧急情况时,B方向的处理 begin

controlb<=8; buzzerb<=0; numb<=0; tempb<=0;

countb<=0; end

if(emergencya==0&&emergencyb==1) //B方向出现紧急情况时,B方向的处理 begin

controlb<=1; buzzerb<=1; numb<=0; tempb<=0;

countb<=0; end

if(emergencya==0&&emergencyb==0) //正常情况时,B方向的处理 begin

buzzerb<=0;

if(!tempb) //tempa=0,B方向灯的状态转换开始 begin tempb<=1; case (countb)

0: begin numb<=bred; controlb<=8; countb<=1; end 1: begin numb<=bgreen; controlb<=1; countb<=2; end 2: begin numb<=byellow; controlb<=4; countb<=3; end 3: begin numb<=bleft; controlb<=2; countb<=4; end 4: begin numb<=byellow; controlb<=4; countb<=0; end default: controlb<=8; endcase end

else //tempb=1,B方向的倒计时开始 begin if(numb>1) numb<=numb-1;

if(numb==2) tempb<=0; end end end

else //使能信号为0,B方向的控制器停止工作 begin

controlb<=4'b1000; tempb<=0; countb<=0; end end

//*********************************************************************** //模块名称:A方向灯的时间显示模块

//功能描述:控制A方向时间的译码及数码管显示

//*********************************************************************** always@(numa[0]or numa[1]or numa[2]or numa[3]or numa[4]or numa[5]or numa[6]) begin case(numa)

8'd0:begin dispdat1<=7'b0111111;dispdat2<=7'b0111111;end 8'd1:begin dispdat1<=7'b0000110;dispdat2<=7'b0111111;end 8'd2:begin dispdat1<=7'b1011011;dispdat2<=7'b0111111;end 8'd3:begin dispdat1<=7'b1001111;dispdat2<=7'b0111111;end 8'd4:begin dispdat1<=7'b1100110;dispdat2<=7'b0111111;end 8'd5:begin dispdat1<=7'b1101101;dispdat2<=7'b0111111;end 8'd6:begin dispdat1<=7'b1111101;dispdat2<=7'b0111111;end 8'd7:begin dispdat1<=7'b0000111;dispdat2<=7'b0111111;end 8'd8:begin dispdat1<=7'b1111111;dispdat2<=7'b0111111;end 8'd9:begin dispdat1<=7'b1101111;dispdat2<=7'b0111111;end 8'd10:begin dispdat1<=7'b0111111;dispdat2<=7'b0000110;end 8'd11:begin dispdat1<=7'b0000110;dispdat2<=7'b0000110;end 8'd12:begin dispdat1<=7'b1011011;dispdat2<=7'b0000110;end 8'd13:begin dispdat1<=7'b1001111;dispdat2<=7'b0000110;end 8'd14:begin dispdat1<=7'b1100110;dispdat2<=7'b0000110;end 8'd15:begin dispdat1<=7'b1101101;dispdat2<=7'b0000110;end 8'd16:begin dispdat1<=7'b1111101;dispdat2<=7'b0000110;end 8'd17:begin dispdat1<=7'b0000111;dispdat2<=7'b0000110;end 8'd18:begin dispdat1<=7'b1111111;dispdat2<=7'b0000110;end 8'd19:begin dispdat1<=7'b1101111;dispdat2<=7'b0000110;end 8'd20:begin dispdat1<=7'b0111111;dispdat2<=7'b1011011;end 8'd21:begin dispdat1<=7'b0000110;dispdat2<=7'b1011011;end 8'd22:begin dispdat1<=7'b1011011;dispdat2<=7'b1011011;end 8'd23:begin dispdat1<=7'b1001111;dispdat2<=7'b1011011;end 8'd24:begin dispdat1<=7'b1100110;dispdat2<=7'b1011011;end

8'd25:begin dispdat1<=7'b1101101;dispdat2<=7'b1011011;end 8'd26:begin dispdat1<=7'b1111101;dispdat2<=7'b1011011;end 8'd27:begin dispdat1<=7'b0000111;dispdat2<=7'b1011011;end 8'd28:begin dispdat1<=7'b1111111;dispdat2<=7'b1011011;end 8'd29:begin dispdat1<=7'b1101111;dispdat2<=7'b1011011;end 8'd30:begin dispdat1<=7'b0111111;dispdat2<=7'b1001111;end 8'd31:begin dispdat1<=7'b0000110;dispdat2<=7'b1001111;end 8'd32:begin dispdat1<=7'b1011011;dispdat2<=7'b1001111;end 8'd33:begin dispdat1<=7'b1001111;dispdat2<=7'b1001111;end 8'd34:begin dispdat1<=7'b1100110;dispdat2<=7'b1001111;end 8'd35:begin dispdat1<=7'b1101101;dispdat2<=7'b1001111;end 8'd36:begin dispdat1<=7'b1111101;dispdat2<=7'b1001111;end 8'd37:begin dispdat1<=7'b0000111;dispdat2<=7'b1001111;end 8'd38:begin dispdat1<=7'b1111111;dispdat2<=7'b1001111;end 8'd39:begin dispdat1<=7'b1101111;dispdat2<=7'b1001111;end 8'd40:begin dispdat1<=7'b0111111;dispdat2<=7'b1100110;end 8'd41:begin dispdat1<=7'b0000110;dispdat2<=7'b1100110;end 8'd42:begin dispdat1<=7'b1011011;dispdat2<=7'b1100110;end 8'd43:begin dispdat1<=7'b1001111;dispdat2<=7'b1100110;end 8'd44:begin dispdat1<=7'b1100110;dispdat2<=7'b1100110;end 8'd45:begin dispdat1<=7'b1101101;dispdat2<=7'b1100110;end 8'd46:begin dispdat1<=7'b1111101;dispdat2<=7'b1100110;end 8'd47:begin dispdat1<=7'b0000111;dispdat2<=7'b1100110;end 8'd48:begin dispdat1<=7'b1111111;dispdat2<=7'b1100110;end 8'd49:begin dispdat1<=7'b1101111;dispdat2<=7'b1100110;end 8'd50:begin dispdat1<=7'b0111111;dispdat2<=7'b1101101;end default:begin dispdat1<=7'b0111111;dispdat2<=7'b0111111;end endcase end

//*********************************************************************** //模块名称:B方向灯的时间显示模块

//功能描述:控制B方向时间的译码及数码管显示

//*********************************************************************** always@(numb[0]or numb[1]or numb[2]or numb[3]or numb[4]or numb[5]or numb[6]) begin case(numb)

8'd0:begin dispdat3<=7'b0111111;dispdat4<=7'b0111111;end 8'd1:begin dispdat3<=7'b0000110;dispdat4<=7'b0111111;end 8'd2:begin dispdat3<=7'b1011011;dispdat4<=7'b0111111;end 8'd3:begin dispdat3<=7'b1001111;dispdat4<=7'b0111111;end 8'd4:begin dispdat3<=7'b1100110;dispdat4<=7'b0111111;end 8'd5:begin dispdat3<=7'b1101101;dispdat4<=7'b0111111;end 8'd6:begin dispdat3<=7'b1111101;dispdat4<=7'b0111111;end 8'd7:begin dispdat3<=7'b0000111;dispdat4<=7'b0111111;end

8'd8:begin dispdat3<=7'b1111111;dispdat4<=7'b0111111;end 8'd9:begin dispdat3<=7'b1101111;dispdat4<=7'b0111111;end 8'd10:begin dispdat3<=7'b0111111;dispdat4<=7'b0000110;end 8'd11:begin dispdat3<=7'b0000110;dispdat4<=7'b0000110;end 8'd12:begin dispdat3<=7'b1011011;dispdat4<=7'b0000110;end 8'd13:begin dispdat3<=7'b1001111;dispdat4<=7'b0000110;end 8'd14:begin dispdat3<=7'b1100110;dispdat4<=7'b0000110;end 8'd15:begin dispdat3<=7'b1101101;dispdat4<=7'b0000110;end 8'd16:begin dispdat3<=7'b1111101;dispdat4<=7'b0000110;end 8'd17:begin dispdat3<=7'b0000111;dispdat4<=7'b0000110;end 8'd18:begin dispdat3<=7'b1111111;dispdat4<=7'b0000110;end 8'd19:begin dispdat3<=7'b1101111;dispdat4<=7'b0000110;end 8'd20:begin dispdat3<=7'b0111111;dispdat4<=7'b1011011;end 8'd21:begin dispdat3<=7'b0000110;dispdat4<=7'b1011011;end 8'd22:begin dispdat3<=7'b1011011;dispdat4<=7'b1011011;end 8'd23:begin dispdat3<=7'b1001111;dispdat4<=7'b1011011;end 8'd24:begin dispdat3<=7'b1100110;dispdat4<=7'b1011011;end 8'd25:begin dispdat3<=7'b1101101;dispdat4<=7'b1011011;end 8'd26:begin dispdat3<=7'b1111101;dispdat4<=7'b1011011;end 8'd27:begin dispdat3<=7'b0000111;dispdat4<=7'b1011011;end 8'd28:begin dispdat3<=7'b1111111;dispdat4<=7'b1011011;end 8'd29:begin dispdat3<=7'b1101111;dispdat4<=7'b1011011;end 8'd30:begin dispdat3<=7'b0111111;dispdat4<=7'b1001111;end 8'd31:begin dispdat3<=7'b0000110;dispdat4<=7'b1001111;end 8'd32:begin dispdat3<=7'b1011011;dispdat4<=7'b1001111;end 8'd33:begin dispdat3<=7'b1001111;dispdat4<=7'b1001111;end 8'd34:begin dispdat3<=7'b1100110;dispdat4<=7'b1001111;end 8'd35:begin dispdat3<=7'b1101101;dispdat4<=7'b1001111;end 8'd36:begin dispdat3<=7'b1111101;dispdat4<=7'b1001111;end 8'd37:begin dispdat3<=7'b0000111;dispdat4<=7'b1001111;end 8'd38:begin dispdat3<=7'b1111111;dispdat4<=7'b1001111;end 8'd39:begin dispdat3<=7'b1101111;dispdat4<=7'b1001111;end 8'd40:begin dispdat3<=7'b0111111;dispdat4<=7'b1100110;end 8'd41:begin dispdat3<=7'b0000110;dispdat4<=7'b1100110;end 8'd42:begin dispdat3<=7'b1011011;dispdat4<=7'b1100110;end 8'd43:begin dispdat3<=7'b1001111;dispdat4<=7'b1100110;end 8'd44:begin dispdat3<=7'b1100110;dispdat4<=7'b1100110;end 8'd45:begin dispdat3<=7'b1101101;dispdat4<=7'b1100110;end 8'd46:begin dispdat3<=7'b1111101;dispdat4<=7'b1100110;end 8'd47:begin dispdat3<=7'b0000111;dispdat4<=7'b1100110;end 8'd48:begin dispdat3<=7'b1111111;dispdat4<=7'b1100110;end 8'd49:begin dispdat3<=7'b1101111;dispdat4<=7'b1100110;end 8'd50:begin dispdat3<=7'b0111111;dispdat4<=7'b1101101;end default:begin dispdat3<=7'b0111111;dispdat4<=7'b0111111;end

endcase end endmodule

//************************文件结束****************************************

因篇幅问题不能全部显示,请点此查看更多更全内容