程序清单 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
//************************文件结束****************************************
因篇幅问题不能全部显示,请点此查看更多更全内容