扫码加入

  • 方案介绍
  • 相关推荐
申请入驻 产业图谱

基于8位LED灯的打地鼠游戏设计VHDL代码Basys2开发板

2025/05/12
892
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

名称:基于8位LED灯的打地鼠游戏设计VHDL代码Basys2开发板(代码在文末下载)

软件:ISE

语言:VHDL

代码功能:

两种地鼠的产生方式:

①用8位LED灯对应8个地洞,用4×4矩阵键盘中的1~8键对应打的动作。

②用4位LED灯指示0001至111对应15个地洞,用4×4矩阵键盘中的15个按键对应打的动作。

功能:

①按“开始”键进入游戏状态,每轮游戏计时20秒。每隔一定时间随机出现一只地鼠,此时如果没有及时按下按键或者虽然有键按下但是与地鼠出现的位置不致,表示没有打中。

如果按键值与地鼠出现的位置一致,表示打中了,打中一只加1分。数码管显示得分。

②游戏结束后再按“开始”键,得分清零,开始新游戏。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

本代码已在Basys2开发板验证,开发板如下,其他开发板可以修改管脚适配:

basys2.png

工程文件:

81416478-f45c-4bc4-b313-9ccf68731daf.png

程序文件:

e400541c-e63d-4f08-a151-ba5f69dc0fd8.png

程序编译:

63a19cfe-b522-4d3b-bfc3-c4ce05d5a781.png

管脚分配:

3658132c-21f1-45d4-9241-8ad9467d3a73.png

RTL图:

7057be87-6b7c-4108-84e6-2d8293ce16be.png

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
ENTITY dadishu IS
   PORT (
      clk_50M     : IN STD_LOGIC;
      reset       : IN STD_LOGIC;
      L_row       : IN STD_LOGIC_VECTOR(3 DOWNTO 0);--矩阵键盘列
      H_col       : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--矩阵键盘行
      start       : IN STD_LOGIC;--开始
      LED         : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--led
      bit_select  : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--数码管位选
      seg_select  : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--数码管段选
   );
END dadishu;
ARCHITECTURE behave OF dadishu IS
--分频模块
COMPONENT fengping IS
   PORT (
      clk_50M  : IN STD_LOGIC;
      clk_div  : OUT STD_LOGIC--50M分频为100KHz
   );
END COMPONENT;
--控制模块
   COMPONENT control IS
      PORT (
         clk_div     : IN STD_LOGIC;
         start       : IN STD_LOGIC;
         LED         : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
         key_num     : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
         random_num  : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
         score       : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
      );
   END COMPONENT;
--随机数产生模块
COMPONENT LFSR IS
   PORT (
      clk         : IN STD_LOGIC;
      reset_p     : IN STD_LOGIC;
      random_num  : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
   );
END COMPONENT;   
--按键模块
COMPONENT keyboard IS
   PORT (
      clk_div  : IN STD_LOGIC;--100KHZ 
      reset       : IN STD_LOGIC;--复位
      L_row       : IN STD_LOGIC_VECTOR(3 DOWNTO 0);--行 
      H_col       : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--列 
      key_number  : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)--按键键值
   );
END COMPONENT;
--显示模块
COMPONENT display IS
   PORT (
      clk            : IN STD_LOGIC; 
      score          : IN STD_LOGIC_VECTOR(7 DOWNTO 0);--分数      
      bit_select     : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--数码管位选
      seg_select     : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--数码管段选
   );
END COMPONENT;
   SIGNAL clk_div          : STD_LOGIC;
   SIGNAL random_num       : STD_LOGIC_VECTOR(3 DOWNTO 0);
   SIGNAL key_num          : STD_LOGIC_VECTOR(3 DOWNTO 0);
   SIGNAL score            : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
--调用分频模块
   i_fengping : fengping
      PORT MAP (
         clk_50m  => clk_50M,
         clk_div  => clk_div
      );
   
   
   --调用随机数模块
   i_LFSR : LFSR
      PORT MAP (
         clk         => clk_div,
         reset_p     => reset,
         random_num  => random_num
      );
   
   
   --调用控制模块
   i_control : control
      PORT MAP (
         clk_div     => clk_div,
         start       => start,
         LED         => LED,
         key_num     => key_num,
         random_num  => random_num,
         score       => score
      );
   
   
   --调用按键模块
   i_keyboard : keyboard
      PORT MAP (
         clk_div     => clk_div,
         reset       => reset,
         l_row       => L_row,
         h_col       => H_col,
         key_number  => key_num
      );
   
   
   --调用显示模块
   i_display : display
      PORT MAP (
         clk         => clk_div,
         score       => score,
         bit_select  => bit_select,
         seg_select  => seg_select
      );
   
END behave;

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=282

相关推荐