找回密码
 立即注册
搜索
查看: 2494|回复: 0

基于FPGA的多人抢答器设计(附源码工程)

[复制链接]

346

主题

14

回帖

3万

积分

版主

Rank: 7Rank: 7Rank: 7

积分
36982
发表于 2024-8-20 18:24:37 | 显示全部楼层 |阅读模式
本帖最后由 眼镜一米二 于 2024-8-20 18:27 编辑




叁芯智能科技FPGA就业班08月开班中




      欢迎各位朋友关注“郝旭帅电子设计团队”公众号,本公众号会定时更新相关技术类资料、软件等等,感兴趣的朋友可以浏览一下本公众号的其他“模块”,希望各位朋友都能在本公众号获得一些自己想要的“东西”。

      本篇为各位朋友介绍基于FPGA的多人抢答器设计--第一版--郝旭帅电子设计团队。

      功能说明:

      1. 抢答器为四人抢答器。
      2. 利用六位数码管进行显示抢答器相关信息。
      3. 第一个数码管显示抢答器的状态,第二个数码管显示抢到的编号,没有抢答成功前显示数字0;第三至六显示抢答用的时间(以百分秒进行显示)。
                                 
      4. 板卡默认空闲状态(第一个数码管显示字母A(空闲状态),第二个数码管显示数字0),当主持人按下抢答按钮后,进入抢答状态(第一个数码管显示字母C(抢答状态),第二个数码管显示0,第三至六数码管开始记录时间)
                                
      5. 在空闲状态期间,选手按下按键没有作用,当进入抢答状态后,选手谁先按下按键,第二个数码管显示对应的编号(1、2、3、4)。
                                
      6. 当选手抢答成功后,进入抢答成功状态(第一个数码管显示F),但是第二个数码管一直显示上一次抢答成功的编号,第三至六显示上一次抢答运行的时间。
                                
      7. 主持人按下复位按钮后,再次进入空闲状态,第二个数码显示0,时间清除。
                                
      8. 每次主持人按下抢答按钮或者其他四人抢答成功时,蜂鸣器“叮”一声。
  
      使用平台:本次设计应用Altera的平台设计(芯片:EP4CE10F17C8N)。
      仿真平台:Modelsim。
      作者QQ:746833924

      说明:本篇设计中不涉及到IP和原语,代码在其他平台依然可以适用;当其他板卡电路不同时,会导致不同的现象出现,如有需要修改代码请联系作者;如需作者使用的板卡,请联系作者;

设计思想如下:




      key_ctrl模块负责将外部的按键信号进行消抖,并且产生对应边沿变化时的脉冲;responder_ctrl模块负责根据脉冲信号和设计逻辑产生对应数字逻辑;seven_tube_drive(七段数码管驱动)模块负责将responder_ctrl模块产生的数字逻辑显示到数码管上;beep_ctrl模块负责根据一个脉冲驱动蜂鸣器“叮”一声。


key_ctrl模块设计思想为:按键信号是由外部机械式按键产生,每次按下或者抬起时,会产生一定的抖动。如果直接对其进行边沿检测就会导致多次触发。故而需要设计按键消抖,进而对消抖之后的波形进行边沿检测。消抖原理为:外部按键信号发生改变后,如果能够持续20ms,没有新的改变,就认为此次改变不是抖动,而是真正的按下,然后进行采样即可。






responder_ctrl模块的设计思想:首先根据主持人复位、起始脉冲和四组抢答脉冲,确定运行的模式。





根据运行的模式,以及显示的规则。




根据状态和外部按键,记录抢到的组号 ;


在空闲状态,显示组号为0;在抢答状态,那个脉冲有效,显示对应的组号;在抢答成功状态,保持抢答成功的组号即可。





在空闲状态中,10ms计时器清零,10ms的记录次数也清零;在抢答状态中,循环计时10ms,并且记录10ms的次数;在抢答成功状态,保持记录10ms的次数。





将记录的10ms的次数,转变为BCD码,输出给数码管的驱动模块。






每次主持人按下抢答按钮(在空闲状态)或者其他四人抢答成功(在抢答状态)时,产生一个蜂鸣器“叮”一声的脉冲。




    beep_ctrl模块的设计原理为:蜂鸣器为无源蜂鸣器,需要给一定频率的方波才可以出声音。

      // 设计原理:外部输入脉冲,蜂鸣器出声音200ms(正好是“叮”一声)。
      // 蜂鸣器出声音准备采用500hz的方波来驱动无源蜂鸣器。

   首先设计一个脉冲有效后,记录200ms的时间。



      在200ms期间,驱动蜂鸣器产生500hz的方波。




以上即为beep_ctrl模块的设计思想;


七段数码管为普通六位一体的共阳极数码,采用动态驱动的方式,在此不再赘述。


    下板后,我们也可以使用按键进行主持人复位、主持人抢答开始、四组抢答,观测运行情况。



    空闲状态如下:




      抢答状态中,百分秒开始运行。





      当有抢答按键按下后,进入抢答成功状态,锁定组号和抢答运行的时间。





      主持人再次按下复位按键,回到空闲状态,就可以重复以上过程。

  下板后,演示视频(链接)如下:


https://www.bilibili.com/video/BV1vnYFeNEfK/?vd_source=b5405faeab8632f02533bcbfc5e52e55

        本设计所有内容(设计代码、设计工程)链接为:



      链接:https://pan.baidu.com/s/1PAv-4N10u7K3EZQLdayxlA
      提取码:m3xw







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|冀ICP备20011060号-2|叁芯智能

GMT+8, 2024-12-22 02:38 , Processed in 0.076715 second(s), 20 queries .

Powered by Discuz! X3.4

© 2017-2018

快速回复 返回顶部 返回列表