




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数字电路与逻辑设计实验报告打地鼠游戏的设计与实现 学院:信息与通信工程学院班级:2013211117 姓名:李昊然 学号:2013210486 序号:02 课题:打地鼠 一课题的任务要求基本要求:1、 设计一个挑战反应速度的“打地鼠”游戏,采用用88 双色点阵显示游戏界面,其中游戏边界采用绿色LED 显示,随机出现的地鼠采用红色LED 显示,游戏有16 个洞穴,如图1 所示。图1 打地鼠游戏示意图2、 游戏洞穴每次随机出现一个地鼠,每个地鼠的最长保持时间为2 秒,2 秒后随机出现下一个地鼠。以44 键盘的按键代表锤子,16 个洞穴与16 个按键一一对应,一旦锤子在2 秒内击中地鼠,地鼠消失,数码管计分器分数加1 分;若锤子一直没有击中地鼠,2 秒后该地鼠消失。用两个数码管显示游戏成绩,当游戏成绩达到10 分时游戏结束,点阵显示字符“V”。3、 用两个数码管对整个游戏进行倒计时,当游戏时间超过59 秒而成绩未达到10 分时,游戏失败,点阵显示字符“X”。4、 按复位键重新开始游戏,并开始倒计时。提高要求:1、 增加游戏难关,在边界内每次随机出现两个地鼠,两个地鼠的最长保持时间均为2秒,2 秒后随机出现下两个地鼠,锤子击中一个地鼠加1 分,当游戏成绩达到20 分而且游戏时间未超过59 秒时,游戏结束,显示字符“V”,否则显示字符“X”。2、 自拟其他功能。二系统设计(一)设计思路程序采用自顶向下设计的思路,先将主程序启动,然后依次进行多级分频,并逐个执行子程序,主程序为点阵中显示边框背景及随机出现地鼠,子程序包括数码管计分和计时部分、时钟部分、键盘部分以及逻辑判断部分等。(二)总体框图开始 生成边框60s是否到时否是生成随机位置地鼠打地鼠是2s内击中地鼠否加1分输积分是否达到10分赢结束(三)分块设计1. 输入部分:外部时钟信号CLK频率为25MHz,为程序提供初始的有效时钟边沿。复位信号输入CLEAR为高电平有效,当CLEAR为1时,数码管、点阵、计数器等都返回到初始状态。键盘输入值由两个四位二进制数分别表示行和列的状态。2. 逻辑判断模块:通过检测键盘返回值是否与点阵上出现地鼠的位置相对应,判断“打”是否有效。通过60s倒计时的计数器是否为0判断游戏是否到时。通过一个模为10的计数器判断得分是否达到游戏要求。3输出部分:由译码电路,根据SEG_SELECT信号的扫描、对SEG_SHOW赋予不同的值,实现在四个数码管上分别显示两位60s倒计时和两位计分。点阵根据LED_ROW的扫描、和LED_COL_G、LED_COL_R的值显示游戏的边框、地鼠出现的位置以及结束画面,利用人眼的视觉延缓效应,当行扫描时钟信号clk的频率50Hz,可以达到六行点阵同时显示的效果。 4.键盘输入部分:以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,由于是随机赋值,所以恰好碰上的概率较小,加分的时间较长四源程序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_SELECT: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 SIGNAL 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):=011111; -SHU MA GUAN SIGNAL TEMP_SEG1: STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL TEMP_SEG2: STD_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: INTEGER 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: 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_FLAG: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 CLEAR_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 THEN 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 ( (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 TEMP_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 (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 ; 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 CASE; 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 = 10111111 THEN TEMP_LED_COLR= 01000000;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = 10111111 THEN TEMP_LED_COLR= 00100000;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = 10111111 THEN TEMP_LED_COLR= 00010000;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = 10111111 THEN TEMP_LED_COLR= 00001000;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = 11011111 THEN TEMP_LED_COLR= 01000000;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = 11011111 THEN TEMP_LED_COLR= 00100000;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = 11011111 THEN TEMP_LED_COLR= 00010000;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = 11011111 THEN TEMP_LED_COLR= 00001000;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = 11101111 THEN TEMP_LED_COLR= 01000000;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = 11101111 THEN TEMP_LED_COLR= 00100000;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = 11101111 THEN TEMP_LED_COLR= 00010000;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = 11101111 THEN TEMP_LED_COLR= 00001000;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = 01111111 THEN TEMP_LED_COLR= 01000000;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = 01111111 THEN TEMP_LED_COLR= 00100000;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = 01111111 THEN TEMP_LED_COLR= 00010000;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = 01111111 THEN TEMP_LED_COLR= 00001000;ELSE TEMP_LED_COLR= 00000000;END IF; END CASE; END IF; ELSIF LOSE = 1 THEN -若失败则显示 IF TEMP_LED_ROW= 10111111 THEN TEMP_LED_COLR= 01001000;END IF; IF TEMP_LED_ROW= 11011111 THEN TEMP_LED_COLR= 00110000;END IF; IF TEMP_LED_ROW= 11101111 THEN TEMP_LED_COLR= 00110000;END IF; IF TEMP_LED_ROW= 11110111 THEN TEMP_LED_COLR= 01001000;END IF; IF TEMP_LED_ROW= 01111111 THEN TEMP_LED_COLR= 00000000;END IF; IF TEMP_LED_ROW= 11111011 THEN TEMP_LED_COLR= 00000000;END IF; IF TEMP_LED_ROW= 11111101 THEN TEMP_LED_COLR= 00000000;END IF; IF TEMP_LED_ROW= 11111110 THEN TEMP_LED_COLR= 00000000;END IF; ELSIF WIN = 1 THEN -若成功则显示笑脸 IF TEMP_LED_ROW= 10111111 THEN TEMP_LED_COLR= 01001000;END IF; IF TEMP_LED_ROW= 11011111 THEN TEMP_LED_COLR= 00000000;END IF; IF TEMP_LED_ROW= 11101111 THEN TEMP_LED_COLR= 01001000;END IF; IF TEMP_LED_ROW= 11110111 THEN TEMP_LED_COLR TEMP_LED_ROW = 10111111 ;TEMP_LED_COLG TEMP_LED_ROW = 11011111 ;TEMP_LED_COLG TEMP_LED_ROW = 11101111 ;TEMP_LED_COLG TEMP_LED_ROW = 11110111 ;TEMP_LED_COLG TEMP_LED_ROW = 11111011 ;TEMP_LED_COLG TEMP_LED_ROW = 01111111 ;TEMP_LED_COLG TEMP_LED_ROW TEMP_SEG_SELECT = 101111; SEG_SHOW TEMP_SEG_SELECT = 110111; SEG_SHOW TEMP_SEG_SELECT = 111011; SEG_SHOW TEMP_SEG_SELECT = 011111; SEG_SHOW TEMP_SEG_SELECT = 101111;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 =1111110;-复位有效显示0 ELSIF WIN = 1 THEN TEMP_SEG1 =1111110;-输或赢后显示0 ELSIF LOSE =1 THEN TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 = 1111011;-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 =1011111; TEMP_10= 0; COUNTDOWN_60 = 0; ELSIF WIN = 1 THEN TEMP_SEG2 =1111110; -输或赢后显示0 ELSIF LOSE = 1 THEN TEMP_SEG2 =1111110; 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 TEMP_KE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB61T 509.1~6-2011 秦岭猪苓标准综合体
- 幼儿园老师考试试题及答案
- DB61T 503-2010 农村中小型畜禽养殖场沼气工程建设规范
- 全国大联考2025年数学高三第一学期期末教学质量检测模拟试题
- 重庆市开州区开州中学2025-2026学年高三数学第一学期期末质量跟踪监视模拟试题
- 膜系统的结构和功能2讲课文档
- 急救知识竞赛试题及答案
- 2025年全国安全生产月《安全知识》必刷题库及参考答案
- 2025上海同济大学后勤管理与保障处节能保障管理岗招聘1人考试参考试题及答案解析
- 幼儿简笔画教学
- 2025年高考真题-英语(全国一卷) 含答案
- RocketMQ分布式消息中间件:核心原理与最佳实践
- 2025公基题库(附答案解析)
- JG/T 153-2012上滑道车库门
- 绿色矿山服务合同协议书
- T/CIE 170-2023企业级固态硬盘测试规范第6部分:环境适应性测试
- T/CACEM 22.1-2022校车运营服务管理第1部分:基本要求
- 院感各类应急预案培训
- 虚拟货币挖矿项目投资管理合作协议
- 2025届河北省石家庄市桥西区数学八下期末检测试题含解析
- 2025年云南省事业单位考试c类真题及答案
评论
0/150
提交评论