数字电路实验打地鼠游戏设计与实现复习课程Word格式文档下载.docx

上传人:b****3 文档编号:14145460 上传时间:2022-10-19 格式:DOCX 页数:23 大小:128.23KB
下载 相关 举报
数字电路实验打地鼠游戏设计与实现复习课程Word格式文档下载.docx_第1页
第1页 / 共23页
数字电路实验打地鼠游戏设计与实现复习课程Word格式文档下载.docx_第2页
第2页 / 共23页
数字电路实验打地鼠游戏设计与实现复习课程Word格式文档下载.docx_第3页
第3页 / 共23页
数字电路实验打地鼠游戏设计与实现复习课程Word格式文档下载.docx_第4页
第4页 / 共23页
数字电路实验打地鼠游戏设计与实现复习课程Word格式文档下载.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

数字电路实验打地鼠游戏设计与实现复习课程Word格式文档下载.docx

《数字电路实验打地鼠游戏设计与实现复习课程Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数字电路实验打地鼠游戏设计与实现复习课程Word格式文档下载.docx(23页珍藏版)》请在冰豆网上搜索。

数字电路实验打地鼠游戏设计与实现复习课程Word格式文档下载.docx

3.4点阵显示模块…………………………………………………………05

3.5键盘控制模块…………………………………………………………06

3.6计分模块………………………………………………………………06

3.7计时模块………………………………………………………………06

3.8译码器模块……………………………………………………………07

4、源程序…………………………………………………………………………07

4.1分频器…………………………………………………………………07

4.2随机数产生模块………………………………………………………08

4.3防抖模块………………………………………………………………10

4.4点阵显示模块…………………………………………………………10

4.5键盘控制模块…………………………………………………………12

4.6计分模块………………………………………………………………13

4.7计时模块………………………………………………………………14

4.8译码器模块……………………………………………………………15

五、功能说明及资源利用情况…………………………………………………016

六、故障及问题分析……………………………………………………………016

七、总结与结论……………………………………………………………………17

一、设计任务与要求

1、设计一个挑战反应速度的“打地鼠”游戏,采用用8×

8双色点阵显示游戏界面,其中游戏边界采用绿色LED显示,随机出现的地鼠采用红色LED显示,游戏有16个洞穴。

2、游戏洞穴每次随机出现一个地鼠,每个地鼠的最长保持时间为2秒,2秒后随机出现下一个地鼠。

以4×

4键盘的按键代表锤子,16个洞穴与16个按键一一对应,一旦锤子在2秒内击中地鼠,地鼠消失,数码管计分器分数加1分;

若锤子一直没有击中地鼠,2秒后该地鼠消失。

用两个数码管显示游戏成绩,当游戏成绩达到10分时游戏结束,点阵显示字符“V”。

3、用两个数码管对整个游戏进行倒计时,当游戏时间超过59秒而成绩未达到10分时,游戏失败,点阵显示字符“X”。

4、按复位键重新开始游戏,并开始倒计时。

二、系统设计

2.1设计思路

地鼠显示:

4*4的红色点阵

边界显示:

6*6的绿色点阵

结束画面:

绿色的“V”形胜利画面,红色的“X”形失败画面

计时和计分显示:

各用2个数码管,共4个数码管

锤子控制:

4*4的键盘

开关控制:

1个拨码开关

用拨码开关开始游戏,6*6绿色点阵常亮,红色点阵亮的位置表示地鼠出现,按下相应的键盘即算打中,计1分,记到10分游戏结束显示绿色“V”。

游戏时间共计60秒,时间为0,分数未到10分,游戏结束显示红色“X”。

用50MHz作为基本信号源,分频得到500Hz和1Hz。

2.2总体框图

2.3分块设计

A.游戏准备模块:

1.随机数产生模块:

将一个4位的二进制数的第一位与最后一位进行异或运算后,作为随机数种子,并且每次运算完将前三位与种子进行合并,产生周期为21的伪随机数,通过计数控制地鼠持续2秒,通过返回的得分信号改变得分后地鼠的位置。

B.游戏核心模块:

1.点阵显示模块:

用于显示地鼠和边界,以及结束时胜利或失败的画面。

2.键盘控制模块:

通过对地鼠对应位置的列进行扫描,比较返回的键盘行信号,打到地鼠即输出得分脉冲信号。

C.进程显示模块:

1.计分模块:

通过接收得分脉冲信号,进行计分,每次开始预制值为‘0’。

2.计时模块:

使用1Hz的时钟信号进行倒计时,每次减1,开始时预制值为‘60’。

D.辅助模块:

1.分频器模块:

将50MHz的信号分频成1Hz用于计时和500Hz用于其他功能。

2.防抖模块:

用500Hz的信号进行计数,只有持续6个时钟周期以上的按键信号才会进入按键控制模块,从而达到防抖的作用。

3.译码器模块:

将计分和计时模块传来的信号进行译码,输出到数码管,实现计分和计时的显示。

三、仿真波形及波形分析

3.1分频器模块

clk:

50MHz的时钟信号

clk_1Hz:

1Hz的时钟信号

clk_500Hz:

500Hz的时钟信号

reset:

复位信号

波形分析:

为便于仿真,这里clk使用的是周期为1us的信号,clk_500Hz为clk的10分频信号,clk_1Hz为clk_1Hz的6分频信号。

实际中的分频器是先将50MHz信号进行100000分频,得到500Hz信号,再对500Hz信号进行500分频得到1Hz信号。

3.2随机数产生模块

500Hz时钟信号

num:

4位二进制随机数

score:

得分信号

1.通过12个自制D触发器的连接及其中4位的异或,产生12位的二进制随机数,从中取出4位作为地鼠位置的随机数。

2.通过计500Hz信号1000次,从而控制地鼠持续2秒。

3.只要打中地鼠,即接收到得分的脉冲信号,立即产生新的随机数。

3.3防抖模块

keyin:

键盘输入信号

keyout:

键盘输出信号

当输入信号持续时间小于6个时钟周期(即12ms)时,视为抖动不输出。

当信号持续时间多于6个时钟周期时,视为正常按键,输出。

3.4点阵显示模块

图一

图二

图三

col:

点阵的列

failed:

失败信号

地鼠位置

raw:

点阵的行

win:

胜利信号

1.游戏正常进行时,点阵根据num显示地鼠位置,如图一,num为0001,点阵在第0行,第1列显示地鼠,显示6*6的游戏边界。

2.游戏胜利时,如图二,点阵根据win信号显示绿色‘V’。

3.游戏失败时,如图三,点阵根据failed信号显示红色‘X’。

3.5键盘控制模块

键盘的列

键盘的行

为便于仿真,将第3行的按键全部按下。

当地鼠位置为12时,地鼠处在第3行和第0行的位置,此时扫描键盘第0列,得到匹配行信号,证明打到地鼠,输出score信号。

以此类推,同行的14,13,15也输出score信号。

3.6计分模块

gewei:

计分模块的个位

scoreover:

得到10分的信号

shiwei:

计分模块的十位

每接收一个得分信号,个位加一分,直到记到10分,进位,十位变1,个位变0,。

同时输出scoreover信号,代表计到10分。

3.7计时模块

计时的个位

计时的十位

timeover:

游戏时间结束信号

复位后,十位的预制值为6,个位的预制值为0,每过一秒个位减一。

当个位十位都为0时,输出timeover信号,表示游戏时间结束。

3.8译码器模块

cat:

数码管扫描信号

in_score_0:

得分的个位

in_score_1:

得分的十位

in_time_0:

in_time_1:

output:

数码管七段显示信号

Cat从111110到110111循环,4个数码管被循环点亮,如图所示,这4个数码管分别对应得分的个位,得分的十位,时间的个位,时间的十位。

四、源程序

4.1分频器模块

libraryieee;

useieee.std_logic_1164.all;

entityfenpinqiis

port(

clk:

instd_logic;

--时钟输入

reset:

--复位信号

clk_1Hz:

outstd_logic;

--1Hz输出

clk_500Hz:

outstd_logic--500Hz输出

);

endfenpinqi;

architectureaoffenpinqiis

signalclk_500Hz_tmp:

std_logic;

signalclk_1Hz_tmp:

std_logic;

signalcount1:

integerrange0to49999;

signalcount2:

integerrange0to249;

begin

process(clk)

begin

ifreset='

0'

then

clk_500Hz_tmp<

='

;

count1<

=0;

else

if(clk'

eventANDclk='

1'

)then

ifcount1=49999then

=notclk_500Hz_tmp;

else

=count1+1;

endif;

endprocess;

clk_500Hz<

=clk_500Hz_tmp;

--将50M做100000分频得到500Hz

process(clk_500Hz_tmp)

clk_1Hz_tmp<

count2<

if(clk_500Hz_tmp'

eventANDclk_500Hz_tmp='

ifcount2=249then

=notclk_1Hz_tmp;

=count2+1;

clk_1Hz<

=clk_1Hz_tmp;

--将500Hz做500分频得到1Hz

enda;

4.2随机数产生模块

useieee.std_logic_arith.all;

ENTITYsjssIS

PORT(

INSTD_LOG

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1