北邮数字电路综合实验-打地鼠_第1页
北邮数字电路综合实验-打地鼠_第2页
北邮数字电路综合实验-打地鼠_第3页
北邮数字电路综合实验-打地鼠_第4页
北邮数字电路综合实验-打地鼠_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业数字电路与逻辑设计实验报告打地鼠游戏的设计与实现 学院:信息与通信工程学院班级: 姓名:李昊然 学号: 序号:02 课题:打地鼠 一课题的任务要求基本要求:1、 设计一个挑战反应速度的“打地鼠”游戏,采用用88 双色点阵显示游戏界面,其中游戏边界采用绿色LED 显示,随机出现的地鼠采用红色LED 显示,游戏有16 个洞穴,如图1 所示。图1 打地鼠游戏示意图2、 游戏洞穴每次随机出现一个地鼠,每个地鼠的最长保持时间为2 秒,2 秒后随机出现下一个地鼠。以44 键盘的按键

2、代表锤子,16 个洞穴与16 个按键一一对应,一旦锤子在2 秒内击中地鼠,地鼠消失,数码管计分器分数加1 分;若锤子一直没有击中地鼠,2 秒后该地鼠消失。用两个数码管显示游戏成绩,当游戏成绩达到10 分时游戏结束,点阵显示字符“V”。3、 用两个数码管对整个游戏进行倒计时,当游戏时间超过59 秒而成绩未达到10 分时,游戏失败,点阵显示字符“X”。4、 按复位键重新开始游戏,并开始倒计时。提高要求:1、 增加游戏难关,在边界内每次随机出现两个地鼠,两个地鼠的最长保持时间均为2秒,2 秒后随机出现下两个地鼠,锤子击中一个地鼠加1 分,当游戏成绩达到20 分而且游戏时间未超过59 秒时,游戏结束,

3、显示字符“V”,否则显示字符“X”。2、 自拟其他功能。二系统设计(一)设计思路程序采用自顶向下设计的思路,先将主程序启动,然后依次进行多级分频,并逐个执行子程序,主程序为点阵中显示边框背景及随机出现地鼠,子程序包括数码管计分和计时部分、时钟部分、键盘部分以及逻辑判断部分等。(二)总体框图开始 生成边框60s是否到时否是生成随机位置地鼠打地鼠是2s内击中地鼠否加1分输积分是否达到10分赢结束(三)分块设计1. 输入部分:外部时钟信号CLK频率为25MHz,为程序提供初始的有效时钟边沿。复位信号输入CLEAR为高电平有效,当CLEAR为1时,数码管、点阵、计数器等都返回到初始状态。键盘输入值由两

4、个四位二进制数分别表示行和列的状态。2. 逻辑判断模块:通过检测键盘返回值是否与点阵上出现地鼠的位置相对应,判断“打”是否有效。通过60s倒计时的计数器是否为0判断游戏是否到时。通过一个模为10的计数器判断得分是否达到游戏要求。3输出部分:由译码电路,根据SEG_SELECT信号的扫描、对SEG_SHOW赋予不同的值,实现在四个数码管上分别显示两位60s倒计时和两位计分。点阵根据LED_ROW的扫描、和LED_COL_G、LED_COL_R的值显示游戏的边框、地鼠出现的位置以及结束画面,利用人眼的视觉延缓效应,当行扫描时钟信号clk的频率50Hz,可以达到六行点阵同时显示的效果。 4.键盘输入

5、部分:以1k Hz的频率进行列扫描,将键盘检测到的行和列的二进制数KEY_COL和KEY_ROW组合起来,赋值给一个四位二进制数CODE,记录按键的位置,方便与地鼠在点阵上的位置相比较。三仿真波形及波形分析1.分频由波形可知,对输入时钟信号clk进行了4倍分频2.绿色灯示边框在行数为1和6时,每列都亮,在行数为2、3、4、5时,亮第1和第6列,从而形成一个6*6的边框。3.随机出现地鼠地鼠可能出现在随机的行和列当lose信号为1时,点阵显示4. 数码管会在第一个到第四个之间来回扫描5.给键盘行值赋予一个随机值,程序进行列扫描,当键盘输入值与点阵值相对应时,积分信号score会+1,由于是随机赋

6、值,所以恰好碰上的概率较小,加分的时间较长四源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY dds IS PORT( CLK:IN STD_LOGIC; -输入时钟 LED_ROW:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -点阵行 LED_COL_G:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -点阵列 绿色 LED_COL_R:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -点阵列 红色 SEG_SEL

7、ECT:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);-数码管位置扫描 SEG_SHOW:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); -数码管显示 KEY_COL:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -键盘列 KEY_ROW:IN STD_LOGIC_VECTOR(3 DOWNTO 0); -键盘行 CLEAR:IN STD_LOGIC; -复位信号 LIGHT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) -输出 灯 );END dds;ARCHITECTURE a OF dds IS SIGNA

8、L TEMP_LED_ROW: STD_LOGIC_VECTOR(7 DOWNTO 0); -DIAN ZHEN SIGNAL TEMP_LED_COLG: STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL TEMP_LED_COLR: STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL TEMP_SEG_SELECT: STD_LOGIC_VECTOR(5 DOWNTO 0):=; -SHU MA GUAN SIGNAL TEMP_SEG1: STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL TEMP_SEG2: STD_

9、LOGIC_VECTOR(6 DOWNTO 0); SIGNAL TEMP_SEG3: STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL TEMP_SEG4: STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL RANDOM: STD_LOGIC_VECTOR(3 DOWNTO 0); -SUIJISHU SIGNAL TEMP_RANDOM: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL DIV_1K: INTEGER RANGE 0 TO 12499; -FEN PIN 0.001S SIGNAL DIV_1S: I

10、NTEGER RANGE 0 TO 499; -FEN PIN 1S SIGNAL DIV_2S: INTEGER RANGE 0 TO 999; -FEN PIN 2S SIGNAL DIV_R: INTEGER RANGE 0 TO 998; -FEN PIN SUI JI SIGNAL TEMP_10: INTEGER RANGE 0 TO 9; -DAO JI SHI SHI WEI SIGNAL CLK_1K: STD_LOGIC; -SHI ZHONG SIGNAL CLK_1S: STD_LOGIC; SIGNAL CLK_2S: STD_LOGIC; SIGNAL CLK_R:

11、 STD_LOGIC; -SIGNAL CLKTEMP: STD_LOGIC; SIGNAL TEMP_KEY_COL:STD_LOGIC_VECTOR(3 DOWNTO 0); -JIAN PAN SIGNAL TEMP_KEY_ROW:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL CODE: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL TEMP_LIGHT:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL POKE:INTEGER RANGE 0 TO 1; -DA DI SHU SIGNAL POKE_FL

12、AG:INTEGER RANGE 0 TO 1:=0; -DA BIAO ZHI WEI SIGNAL SCORE :INTEGER RANGE 0 TO 10; -DE FEN SIGNAL SCORE_FLAG: INTEGER RANGE 0 TO 1; -DE FEN BIAO ZHI WEI SIGNAL COUNTDOWN_60:INTEGER RANGE 0 TO 60; -60S DAO JI SHI SIGNAL WIN :INTEGER RANGE 0 TO 1; -YING SIGNAL LOSE :INTEGER RANGE 0 TO 1; -SHU SIGNAL CL

13、EAR_TEMP: STD_LOGIC; -FU WEI BEGIN P1:PROCESS (CLK) -DIV 0.001 S BEGIN IF CLKEVENT AND CLK = 1 THEN IF DIV_1K =12499 THEN -计数12500次 DIV_1K = 0; CLK_1K = NOT CLK_1K;-clk_1k翻转两次 ELSE DIV_1K = DIV_1K + 1; END IF;END IF; END PROCESS P1; P2:PROCESS (CLK_1K) -DIV 1 s BEGIN IF CLK_1KEVENT AND CLK_1K = 1 TH

14、EN IF DIV_1S =499 THEN DIV_1S = 0; CLK_1S = NOT CLK_1S; ELSE DIV_1S = DIV_1S + 1; END IF;END IF; END PROCESS P2; P3:PROCESS (CLK_1K) -DIV 2 S BEGIN IF CLK_1KEVENT AND CLK_1K = 1 THEN IF DIV_2S =999 THEN DIV_2S = 0; CLK_2S = NOT CLK_2S; ELSE DIV_2S = DIV_2S + 1; END IF; -比较键盘输入值和地鼠位置是否相同,判断有没有打到 IF (

15、 (CODE = 0000 AND TEMP_RANDOM = 1100) OR (CODE = 0001 AND TEMP_RANDOM = 0000) OR (CODE = 0010 AND TEMP_RANDOM = 0100) OR (CODE = 0011 AND TEMP_RANDOM = 1000) OR (CODE = 0100 AND TEMP_RANDOM = 1101) OR (CODE = 0101 AND TEMP_RANDOM = 0001) OR (CODE = 0110 AND TEMP_RANDOM = 0101) OR (CODE = 0111 AND TE

16、MP_RANDOM = 1001) OR (CODE = 1000 AND TEMP_RANDOM = 1110) OR (CODE = 1001 AND TEMP_RANDOM = 0010) OR (CODE = 1010 AND TEMP_RANDOM = 0110) OR (CODE = 1011 AND TEMP_RANDOM = 1010) OR (CODE = 1100 AND TEMP_RANDOM = 1111) OR (CODE = 1101 AND TEMP_RANDOM = 0011) OR (CODE = 1110 AND TEMP_RANDOM = 0111) OR

17、 (CODE = 1111 AND TEMP_RANDOM = 1011) ) THEN POKE=1; ELSE POKE=0;SCORE_FLAG=0; -标志位,防止按一次计分多次 END IF; IF (POKE = 1 AND SCORE_FLAG=0 AND POKE_FLAG=1) THEN若打到则计一分 CLK_2S = NOT CLK_2S; -DIV_2S = 0; SCORE_FLAG=1; -计分后标志位变1 SCORE =SCORE +1; END IF; IF CLEAR_TEMP=1 THEN -若复位信号为高电平,恢复初始值 SCORE = 0; END IF

18、; END IF; END PROCESS P3; P4:PROCESS (CLK) -random time -通过与2s时钟不同频率的时钟产生随机数 BEGIN IF CLKEVENT AND CLK = 1 THEN IF DIV_R = 233 THEN DIV_R = 0; CLK_R = NOT CLK_R; ELSE DIV_R RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM = 0000; END CAS

19、E; END IF; END PROCESS P5; P6:PROCESS (CLK_2S) -把中间变量赋值给地鼠 BEGIN IF(CLK_2SEVENT AND CLK_2S = 1) THEN TEMP_RANDOM = RANDOM; END IF; END PROCESS P6; P7:PROCESS(TEMP_RANDOM,CLK_1K) - SUI JI CHU XIAN DI SHU BEGIN -按照随机数随机生成地鼠 IF CLEAR_TEMP =1 THEN -若复位信号为高电平就不亮灯 TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP

20、_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR=

21、 ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEM

22、P_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR

23、= ;END IF; END CASE; END IF; ELSIF LOSE = 1 THEN -若失败则显示 IF TEMP_LED_ROW= THEN TEMP_LED_COLR= ;END IF; IF TEMP_LED_ROW= THEN TEMP_LED_COLR= ;END IF; IF TEMP_LED_ROW= THEN TEMP_LED_COLR= ;END IF; IF TEMP_LED_ROW= THEN TEMP_LED_COLR= ;END IF; IF TEMP_LED_ROW= THEN TEMP_LED_COLR= ;END IF; IF TEMP_LED_R

24、OW= THEN TEMP_LED_COLR= ;END IF; IF TEMP_LED_ROW= THEN TEMP_LED_COLR= ;END IF; IF TEMP_LED_ROW= THEN TEMP_LED_COLR= ;END IF; ELSIF WIN = 1 THEN -若成功则显示笑脸 IF TEMP_LED_ROW= THEN TEMP_LED_COLR= ;END IF; IF TEMP_LED_ROW= THEN TEMP_LED_COLR= ;END IF; IF TEMP_LED_ROW= THEN TEMP_LED_COLR= ;END IF; IF TEMP_

25、LED_ROW= THEN TEMP_LED_COLR TEMP_LED_ROW = ;TEMP_LED_COLG TEMP_LED_ROW = ;TEMP_LED_COLG TEMP_LED_ROW = ;TEMP_LED_COLG TEMP_LED_ROW = ;TEMP_LED_COLG TEMP_LED_ROW = ;TEMP_LED_COLG TEMP_LED_ROW = ;TEMP_LED_COLG TEMP_LED_ROW TEMP_SEG_SELECT = ; SEG_SHOW TEMP_SEG_SELECT = ; SEG_SHOW TEMP_SEG_SELECT = ; S

26、EG_SHOW TEMP_SEG_SELECT = ; SEG_SHOW TEMP_SEG_SELECT = ;SEG_SHOW = TEMP_SEG1; END CASE; END IF; END PROCESS P9; P10:PROCESS(CLK_1S) -COUNTDOWN_1 BEGIN -60秒倒计时的个位 IF (CLK_1SEVENT AND CLK_1S = 1)THEN IF CLEAR_TEMP = 1 THEN TEMP_SEG1 =;-复位有效显示0 ELSIF WIN = 1 THEN TEMP_SEG1 =;-输或赢后显示0 ELSIF LOSE =1 THEN

27、 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 = ;-0 END CASE; END IF; END IF;END PROCESS P10;P11:PROCESS(CLK_1S) -COUNTDOWN_10 BEGIN -60秒倒计时的十位 IF CLEAR_TEMP= 1 THEN -复位有效显示0 TEMP_SEG2 =; TEMP_10= 0; COUNTDOWN_60 = 0; ELSIF W

28、IN = 1 THEN TEMP_SEG2 =; -输或赢后显示0 ELSIF LOSE = 1 THEN TEMP_SEG2 =; ELSIF (CLK_1SEVENT AND CLK_1S = 1)THEN -计数器,相当于1Hz时钟进行10分频 COUNTDOWN_60 = COUNTDOWN_60+1; IF TEMP_10 =9 THEN TEMP_10=0; ELSE TEMP_10 TEMP_SEG2 TEMP_SEG2 TEMP_SEG2 TEMP_SEG2 TEMP_SEG2 TEMP_SEG2 TEMP_KEY_COL TEMP_KEY_COL TEMP_KEY_COL T

29、EMP_KEY_COL TEMP_KEY_COL -在列确定情况下,根据行值对CODE进行赋值 CASE TEMP_KEY_ROW IS WHEN 0111 = CODE = 0000;POKE_FLAG CODE = 0001;POKE_FLAG CODE = 0010;POKE_FLAG CODE = 0011;POKE_FLAG POKE_FLAG CASE TEMP_KEY_ROW IS WHEN 0111 = CODE = 0100;POKE_FLAG CODE = 0101;POKE_FLAG CODE = 0110;POKE_FLAG CODE = 0111;POKE_FLAG

30、POKE_FLAG CASE TEMP_KEY_ROW IS WHEN 0111 = CODE = 1000;POKE_FLAG CODE = 1001;POKE_FLAG CODE = 1010;POKE_FLAG CODE = 1011;POKE_FLAG POKE_FLAG CASE TEMP_KEY_ROW IS WHEN 0111 = CODE = 1100;POKE_FLAG CODE = 1101;POKE_FLAG CODE = 1110;POKE_FLAG CODE = 1111;POKE_FLAG POKE_FLAGNULL; END CASE; IF CLEAR_TEMP

31、 = 1 THEN POKE_FLAG TEMP_LIGHT TEMP_LIGHT TEMP_LIGHT TEMP_LIGHT TEMP_LIGHT=; END CASE; END IF;END PROCESS P14;P15:PROCESS (CLK_1K) -FEN SHU BEGIN IF (CLK_1KEVENT AND CLK_1K = 1)THEN在数码管显示分数 IF WIN = 1 THEN TEMP_SEG3 =;TEMP_SEG4 = ; ELSIF LOSE = 1 THEN TEMP_SEG3 =;TEMP_SEG4 TEMP_SEG3=;TEMP_SEG4 TEMP_

32、SEG3 =;TEMP_SEG4 TEMP_SEG3 = ;TEMP_SEG4 TEMP_SEG3 = ;TEMP_SEG4 TEMP_SEG3 = ;TEMP_SEG4 TEMP_SEG3 = ;TEMP_SEG4 TEMP_SEG3 = ;TEMP_SEG4 TEMP_SEG3 = ;TEMP_SEG4 TEMP_SEG3 = ;TEMP_SEG4 TEMP_SEG3 = ;TEMP_SEG4 TEMP_SEG3 = ;TEMP_SEG4 TEMP_SEG3 = ;TEMP_SEG4;-0 END CASE; END IF; END IF; END PROCESS P15;P16: PRO

33、CESS(CLK_1K,CLEAR) BEGIN IF CLEAR_TEMP = 1 THEN WIN = 0;LOSE 59 AND SCORE 10) THEN -若60s到时且分数小于10则输 LOSE = 1; END IF; IF (COUNTDOWN_60 9 ) THEN 若60秒未到且分数达到10则赢 WIN = 1; END IF; END IF; END PROCESS P16; LED_ROW=TEMP_LED_ROW; LED_COL_G=TEMP_LED_COLG;LED_COL_R=TEMP_LED_COLR;SEG_SELECT=TEMP_SEG_SELECT;TEMP_KEY_ROW=KEY_ROW;KEY_COL=TEMP_KEY_COL;-LIGHT=TEMP_LIGHT;CLEAR_TEMP=CLEAR;END a;五功能说明及资源利用情况1.画面:通电后,在点阵上会一直显示5*5的绿色边框,当判定输或赢后,边框中间会相应地显示或笑脸,开始游戏后,在边框中4*4范围内会每隔两秒随机出现一个亮点代表地鼠,两秒到时或地鼠被击中,地鼠会消失。2.计时:游戏中由两个计数器分别完成60s和2s的计时功能,其中60s计时结果会显示在数码管上。3.计分:当地鼠出现在点阵上,在2秒内按下相应的按键,则计1分,位置

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论