EnFlat=1'b0;
Led2=3'd0;//为低电平时,选手前的灯点亮 Buzzer=1'b1;//为高电平不响 end end
endmodule
测试程序
`timescale 1s/1s
module qiangdaqi_test();
reg clk,clr,inputEn,inputL1,inputL2,inputL3,inputL4,inputL5,inputL6;//输入口 wire [0:7]Led2;//Led2显示选手号
wire Buzzer;//低电平时蜂鸣器发出声音 QiangDaQi
u1(clk,clr,inputEn,inputL1,inputL2,inputL3,inputL4,inputL5,inputL6,Led2,Buzzer);
initial begin #0
clk=1;clr=0;inputEn=1;inputL1=1;inputL2=1;inputL3=1;inputL4=1;inputL5=1;inputL6=1;
#2 inputL2=0;//二号选手超前抢答 #4 clr=1;inputL2=1;//复位 #2 clr=0;
#4 inputEn=0;inputL4=0;//四号选手先抢答显示4 #2 inputL3=0;//三号选手后抢答不显示3 #4 clr=1;inputEn=1;inputL3=1;inputL4=1; #2 clr=0; end
always #1 clk=~clk; endmodule
程序二
module QiangDaQi
(clk,clr,add,stu,inputEn,inputL1,inputL2,inputL3,inputL4,inputL5,inputL6,Led1,Led2,Led3,Buzzer);
//一开始声明有哪些端口 input
clk,clr,inputEn,inputL1,inputL2,inputL3,inputL4,inputL5,inputL6,add,stu;//输入口
output [0:5]Led1;//对应参赛选手前的灯
output [0:7]Led2,Led3;//Led2显示选手号Led3显示选手分数 output Buzzer;//低电平时蜂鸣器发出声音
reg EnFlat=1'b1;//EnFlat为高电平时开始抢答
reg BuClk=1'b0;//为高电平时进入蜂鸣器处理程序
//reg add,stu;//add答题正确加一分stu答题错误减一分 //reg clr=0;//重置键 reg [0:5]Led1=6'b111111; reg [0:2] answer=3'd0;
reg[0:3] score=4'd0,score1=4'd0,score2=4'd0;
reg[0:3] score3=4'd0,score4=4'd0,score5=4'd0,score6=4'd0;//各选手分数计算 reg Buzzer=1;
reg [0:4] daojishi=5'd20;//用于产生20s倒计时 reg [0:7]Led2=8'b11111111,Led3=8'b11111111; always @ (posedge clk)//时钟上升沿 begin
if(inputEn==1)//如果主持人没按按钮就有人抢答 begin
if(inputL1==0)
begin Led1=6'b111110;answer=3'd1;BuClk=1'b1;end if(inputL2==0)
begin Led2=6'b111101;answer=3'd2;BuClk=1'b1;end if(inputL3==0)
begin Led2=6'b111011;answer=3'd3;BuClk=1'b1;end if(inputL4==0)
begin Led2=6'b110111;answer=3'd4;BuClk=1'b1;end if(inputL5==0)
begin Led2=6'b101111;answer=3'd5;BuClk=1'b1;end if(inputL6==0)
begin Led2=6'b011111;answer=3'd6;BuClk=1'b1;end end
if(inputEn==1'b0)//为低电平时表示主持人按下抢答按钮开始抢答 begin
Led1=6'b111111;//为低电平时,选手前的灯点亮 BuClk=1'b0;
Buzzer=1'b1;//为高电平不响 end
if(EnFlat==1'b1) begin begin
if(inputL1==1'b0)//一号选手抢答 begin
EnFlat=1'b0;//为低电平禁止其他选手抢答
answer=3'd1;//为高电平时转到对应选手加减分程序中去 BuClk=1'b1;//转到蜂鸣器程序 end
if(inputL2==1'b0)//二号选手抢答 begin
EnFlat=1'b0; answer=3'd2; BuClk=1'b1; end
if(inputL3==1'b0)//三号选手抢答 begin
EnFlat=1'b0; answer=3'd3; BuClk=1'b1; end
if(inputL4==1'b0)//四号选手抢答 begin
EnFlat=1'b0; answer=3'd4; BuClk=1'b1; end
if(inputL5==1'b0)//五号选手抢答 begin
EnFlat=1'b0; answer=3'd5; BuClk=1'b1; end
if(inputL6==1'b0)//六号选手抢答 begin
EnFlat=1'b0; answer=3'd6; BuClk=1'b1; end end begin
if(daojishi!=5'd0)//用于1Hz信号 daojishi=daojishi-1;
else//倒计时结束抢答器还没按下则抢答停止且蜂鸣器响 begin
daojishi=5'd20; EnFlat=1'b0; BuClk=1'b1; end end begin
if(BuClk==1'b1)//当蜂鸣器标志为1时 Buzzer=1'b0;//蜂鸣器发声 end begin
if(answer ==3'd1)//第一组加减分 begin
Led1=6'b111110;//点亮该选手前的LED灯 Led2=8'hf9;//选手号数码管显示1 if(add)
score1=score1+1;//当主持人判定选手的回答正确时,按下add键进行加分操作 else
if((stu||inputEn)&&(score1!=0))
score1=score1-1;//当主持人判定选手的回答错误时,按下stu键进行加分操作
else score1=0;
score=score1;//把第一组的分数赋值给分数寄存器 end
if(answer ==3'd2)//第二组加减分 begin
Led1=6'b111101;Led2=8'ha4; if(add)
score2=score2+1;//当主持人判定选手的回答正确时,按下add键进行加分操作 else
if((stu||inputEn)&&(score2!=0))
score2=score2-1;//当主持人判定选手的回答错误时,按下stu键进行加分操作
else score2=0;
score=score2;//把第一组的分数赋值给分数寄存器 end
if(answer ==3'd3)//第三组加减分 begin
Led1=6'b111011;Led2=8'hb0; if(add)
score3=score3+1;//当主持人判定选手的回答正确时,按下add键进行加分操作 else
if((stu||inputEn)&&(score3!=0))
score3=score3-1;//当主持人判定选手的回答错误时,按下stu键进行加分操作
else score3=0;
score=score3;//把第一组的分数赋值给分数寄存器 end
if(answer ==3'd4)//第四组加减分 begin
Led1=6'b110111;Led2=8'h99; if(add)
score4=score4+1;//当主持人判定选手的回答正确时,按下add键进行加分操作 else
if((stu||inputEn)&&(score4!=0))
相关推荐: