FPGA设计实现四人抢答器

本文介绍了使用FPGA设计实现一个四人抢答器系统,包括答题计时、数码管显示、蜂鸣器发声、抢答逻辑等模块。通过Verilog程序设计,详细阐述了各个模块的工作原理和核心代码,如计时器、蜂鸣器发声、数码管显示以及抢答选择模块。最终实现了系统在FPGA上的硬件配置和工程烧录,具备抢答、计时、声音提示等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

  设计实现一个可容纳四组选手参赛的抢答器系统,每组设一个抢答按钮。答题开始后,由主持人按下“复位”键(开始键)后进入抢答环节,当某个小组抢答成功时,抢答器系统发出半秒的低频音(DO),显示该组别序号并点亮该组“选手指示灯”直至系统复位。此时进入答题计时环节,若超过 30 秒仍未答出,抢答器系统发出 1 秒的高频音(SI)示警。由裁判员按下“复位”键,开始新一轮答题。


一. 模块设计  

  本实验设计实现一个抢答器系统,主要由答题计时模块timer,数码管显示模块display_595,蜂鸣器发声模块buzzer,抢答模块sel,按键消抖模块key_filter和顶层模块responder。

  其中display_595模块中包含对display模块以及hc595_ctrl模块的例化。

  整体模块框图输入输出信号如下图所示:

  输入信号:系统时钟sys_clk, 复位信号sys_rst_n,四路抢答器按键信号key_in[3:0],蜂鸣器驱动信号beepout,数码管显示驱动信号stcp,shcp,ds,oe,以及选手指示灯信号 led_out[3:0]。

二. FPGA硬件电路原理图

1. 六位八段数码管

  其具体使用方法见文章:Altera EP4CE10 征途Pro开发板数码管显示原理(以实现模60计数器为例)-优快云博客

2. 无源蜂鸣器buzzer

  相对于有源蜂鸣器,无源蜂鸣器的成本更低,声音频率可控。而有源蜂鸣器因其内部自带振荡源,只要加上适当的直流电源即可发声,程序控制较为方便。无源蜂鸣器与有源蜂鸣器不同,因其内部不带震荡源,所以其无法向有缘蜂鸣器那样直接用直流信号驱动,这里需要使用PWM方波才能驱动其发声。

  其具体使用方法见文章:无源蜂鸣器的驱动实验-优快云博客

3. 按键key

  开发板上使用的机械按键也是按键的一种,特点是:接触电阻小 ,手感好,按键按下或弹起时有“滴答”清脆声;但由于其构造和原理,在按键闭合及断开的瞬间均伴随有一连串的抖动。

       具体按键消抖方法的设计请参阅文章:按键消抖模块设计实现-优快云博客

三. Verilog程序设计

1. 答题计时模块timer

  当有人抢答时,计时器进入三十秒的倒计时,从30计到00。sel_flag表示抢答信号。

模块内包含一个分频器,产生一秒的标准脉冲clk1。

核心代码如下:

always@( posedge clk1 or negedge sys_rst_n )
	if( sys_rst_n == 1'b0 )
		begin
			timer[7:4] <= 4'd3;
			timer[3:0] <= 4'd0;
		end
	else if( sel_flag != 4'b1111 )
		begin 	
			if( timer[7:4] == 4'd0  &&  timer[3:0] == 4'd0 )
					timer[7:0] <= timer[7:0] ;
			else if( timer[3:0] == 4'd0 )
				begin
					timer[7:4] <= timer[7:4] - 1'b1 ;
					timer[3:0] <= 4'd9;
				end
			else 
				timer[3:0] <= timer[3:0] - 1'b1 ;
		end
	else
		timer[7:0] <= timer[7:0];
	
		
always @(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n == 1'b0)
		begin 
			en <= 1'b1 ;
			data <= 4'd0;
		end 
	else if( en )
		begin	
			case(sel_flag)
				4'b1110: 
					begin
						data <= 4'd1;
						en   <= 1'b0;
					end
				4'b1101:
					begin
						data <= 4'd2;
						en 	 <= 1'b0;
					end
				4'b1011: 
					begin
						data <= 4'd3;
						en   <= 1'b0;
					end
				4'b0111: 
					begin
						data <= 4'd4;
						en   <= 1'b0;
					end
				default: data <= 4'd11;
			endcase
		end

2. 蜂鸣器发声模块buzzer

  当有人抢答时,发出半秒的低频音;答题时间超时时,发出一秒的高频音。

核心代码如下:

module buzzer
(

		input 	wire 		sys_clk		,
		input 	wire 		sys_rst_n 	,
		input 	wire [7:0] 	timer		,
		input 	wire [3:0]  sel_flag	,
		
		output 	reg 		beepout 	

);

parameter 	DO 		 = 18'd190840	;
pa
智力竞赛抢答计时器的设计 一、 课题说明在许多比赛活动中,为了准确、公正、直观地判断出第一抢答者,通常设置一台抢答器,通过数显、灯光及音响等多种手段指示出第一抢答者。同时,还可以设置计时、计分、犯规奖惩计录等多种功能。 二、 设计要求 1、设计一个4组参加的智力竞赛抢答计时器。每组设置一个抢答按钮供抢答者使用。 2、电路具有第一抢答信号的鉴别和锁存功能。在主持将系统复位并发出抢答指令后,当有某一组参赛者首先按下抢答开关时,数码管显示相应组别并伴有声响。此时,电路应具备自锁功能,使别组的抢答开关不起作用。 3、电路具有回答问题时间控制功能。要求回答问题时间小于等于100s(显示为0~99),时间显示采用倒计时方式。当达到限定时间时,发出声响以示报警。 三、设计思路根据设计要求可知,系统的输入信号有:各组的抢答按钮d1、d2、d3、d4,主持按钮host,系统时钟信号clk,数码管的片选信号;系统的输出信号有:首先按下按钮的组别信号sel, 声音信号sound,倒计时显示信号q[6..0]。为实现设计要求,电路由抢答鉴别模块、锁存器模块、转换模块、倒计时模块、片选信号产生模块、3选1模块、显示译码模块和一些门电路组成。总体框图如图16-1所示。 设计文件 1、顶层原理图智力竞赛抢答计时器的顶层原理图如图16-1所示图16-1 智力抢答器的原理图 2、底层源程序 (1)抢答鉴别模块FENG的VHDL源程序抢答鉴别模块FENG如图16-2所示,该模块在第一个选手按下按键后,输出高电平给锁存器,锁存当时的按键状态。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个坚定的ICer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值