数字式竞赛抢答器设计
数字式竞赛抢答器设计
题目:数字式竞赛抢答器设计(4人抢答器)
一、需求分析
1、问题描述:
设计一个可容纳不低于四组参赛者同时抢答的数字抢答器,可判断第一抢答者并报警指示抢答成功,其他组抢答均无效。用数码管显示成功抢答者的组号,若提前抢答则对相应的抢答组发出警报。
2、基本要求:
a 裁判按下开始按钮之后方可开始抢答,当裁判按下开始之后抢答开始且提示灯变亮。1、2、3、4,4名选手开始抢答并按下自己对应的按钮,当第一选手成功抢答后蜂鸣器报警提示、对应选手指示灯变量且数码管显示成功抢答者的编号,之后其他选手操作均无效。
b 裁判未按下开始按钮之前若有人抢答视为犯规,犯规提示灯变亮、蜂鸣器报警提示、对应选手指示灯变量且数码管显示犯规者的编号。
c 每完成一轮抢答后,需要裁判按重置按钮才可以进行下一轮抢答。否则任何操作均无效。
(1) 输入形式
裁判:开始按钮
重置按钮
选手;1号抢答按钮
2号抢答按钮
3号抢答按钮
4号抢答按钮
(2) 输出形式
开始提示灯
4位选手对应的指示灯
蜂鸣器
犯规报警提示灯
数码管
(3) 程序所能达到的功能
可判断第一抢答者并报警指示抢答成功,其他组抢答均无效。用数码管显示成功抢答者的组号,若提前抢答则犯规且犯规警告灯发亮、蜂鸣器报警且数码管会显示抢答者编号。
二、设计概要
N
Y
Y
N
在实际实验中,用k0,k1,k2,k3代表四位选手,k5,k6分别代表裁判和重置复位,d0,d1,d2,d3为四名选手抢答成功的指示,此外,数码管会显示具体选手,有人抢答蜂鸣器(d6)就会报警,d9亮则证明选手是违规抢答。
三、程序设计
module qdq(clk,k1,k2,k3,k4,o1,o2,o3,o4,out,start,reset,sign,qout);
input clk,k1,k2,k3,k4,start,reset;
output o1,o2,o3,o4,out,sign;
output [6:0]qout;
reg o1,o2,o3,o4,out,sign;
reg [6:0]qout; //七段数码管显示
always@(posedge clk)
if(reset)//复位
begin
{o1,o2,o3,o4,sign,out}<=6’b000000;
qout=7’b0000000;
end
else
begin
//违规抢答抢答
if((start0)&&(k1||k2||k3||k4))
begin
//一号违规抢答
if(k1&&!o2&&!o3&&!o4)
begin
qout=7’b0000110;
o1<=1;
out<=1;
sign<=1;
end
//二号违规抢答
if(k2&&!o1&&!o3&&!o4)
begin
qout=7’b1011011;
o2<=1;
out<=1;
sign<=1;
end
//三号违规抢答
if(k3&&!o1&&!o2&&!o4)
begin
qout=7’b1001111;
o3<=1;
out<=1;
sign<=1;
end
if(k4&&!o1&&!o2&&!o3)
begin
qout=7’b1100110;
o4<=1;
out<=1;
sign<=1;
end
end
//正常抢答,分别是1、2、3、4号抢答对应情况
if((start1)&&(k1||k2||k3||k4))
begin
if(k1&&!o2&&!o3&&!o4)
begin
qout=7’b0000110;
o1<=1;
out<=1;
sign<=0;
end
if(k2&&!o1&&!o3&&!o4)
begin
qout=7’b1011011;
o2<=1;
out<=1;
sign<=0;
end
if(k3&&!o1&&!o2&&!o4)
begin
qout=7’b1001111;
o3<=1;
out<=1;
sign<=0;
end
if(k4&&!o1&&!o2&&!o3)
begin
qout=7’b1100110;
o4<=1;
out<=1;
sign<=0;
end
end
end
endmodule
四 、测试与分析
1、测试图如下:
仿真图
引脚图
实际操作
2、结果分析:
通过多次测试(结果如上图),实验结果与预期一致,1,4号选手分别为抢答犯规操作,故D9犯规警示灯发亮,2,3号选手分别为抢答成功。
。
本文地址:https://blog.csdn.net/weixin_47312141/article/details/107340994