您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 北京邮电大学数电实验打地鼠
2015-2016学年第一学期数字电路实验报告实验名称:打地鼠实验学院:信息与通信工程学院专业:电子信息工程班级:班内序号:学号:姓名:北京邮电大学时间:2015年11月8日一、设计课题的任务要求1、设计一个挑战反应速度的“打地鼠”游戏,采用用8×8双色点阵显示游戏界面,其中游戏边界采用绿色LED显示,随机出现的地鼠采用红色LED显示,游戏有16个洞穴,如图1所示。2、游戏洞穴每次随机出现一个地鼠,每个地鼠的最长保持时间为2秒,2秒后随机出现下一个地鼠。以4×4键盘的按键代表锤子,16个洞穴与16个按键一一对应,一旦锤子在2秒内击中地鼠,地鼠消失,数码管计分器分数加1分;若锤子一直没有击中地鼠,2秒后该地鼠消失。用两个数码管显示游戏成绩,当游戏成绩达到10分时游戏结束,点阵显示字符“V”。3、用两个数码管对整个游戏进行倒计时,当游戏时间超过59秒而成绩未达到10分时,游戏失败,点阵显示字符“X”。4、按复位键重新开始游戏,并开始倒计时。二、系统设计1.设计思路用8*8双色点阵显示游戏界面,其中游戏边界使用6*6,红色LED灯表示地鼠出现,4*4键盘对应锤子,两个数码管显示游戏倒计时,两个数码管显示分数,当游戏成绩达到十分时游戏结束,点阵显示“V”,当游戏时间超过59秒而成绩未达到10分时,游戏失败,点阵实现“X”。2.总体框图是是否否是3.分块设计开始地鼠出现锤子打中记分加一地鼠保持2秒记分达到十分开始倒计时倒计时结束游戏成功游戏失败复位三、仿真波形及波形分析因按照原程序仿真时间过长,所以将原程序所有分频统一调小1000倍,从而实现仿真中60ms等于实际过程中60s的效果,并在过程中人为设置按键,复位和暂停观察仿真结果。3.1数码管扫描如图为键盘扫描波形。因为6个数码管的管脚连接在一起,无法使其同时显示不同的数字,所以需要对数码管进行扫描,使不同的数码管在不同的时间亮起,显示不同的数字,并通过人眼的视觉暂留效应实现数字的清晰显示。3.2键盘扫描如图为键盘扫描波形。tempclk3(1000Hz)每发生一次,kbrow的一位变为低电平,其余三位为高电平,表示扫描该行,并记录此时数值。当kbrow的高位到低位依次变为低电平,表示进行了一次完整的扫描。分频模块键盘模块分数模块到计时模块地鼠模块控制模块判断模块3.3点阵扫描如图为点阵扫描波形。Tempclk4(500Hz)每发生一次,row的一位变为低电平,其余七位为高电平,表示扫描该行,。当row的高位到低位依次变为低电平,表示进行了一次完整的扫描。3.4田地边界如图为田地边界的显示(绿色LED灯)。此处稍作说明的是,此程序中的边界与课题要求中稍有不同,占据点阵正中央的6*6边界,完全对称。3.5地鼠出现如图为地鼠出现模块波形。可以看到,当未按下或正确按下按键时,colr(红色LED灯)波形2s变化一次,即地鼠2s变化出现。当正确按下按键,波形立刻变化,即地鼠立刻变换位置。3.6暂停如图为按下暂停键之后的波形。可以看到,点阵(colg和colr)不再亮起。程序暂停。3.7复位如图为按下复位键之后波形。可以看到,colr的波形按照初始时刻波形重新变化,表示游戏重新开始。四、源程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;-----------------------------------------------------entitydadishuisport(clk:instd_logic;rst:instd_logic;-------------------------------------------------------------kbrow:instd_logic_vector(3downto0);kbcol:outstd_logic_vector(3downto0);---键盘---------------------------------------------------------row:outstd_logic_vector(7downto0);colg:outstd_logic_vector(7downto0);colr:outstd_logic_vector(7downto0);--------------------------------------------------------shumaguan:outstd_logic_vector(6downto0);catout:outstd_logic_vector(5downto0);----数码管--------------------------------------------------------------------clear:instd_logic;--BTN0---复位-------------------------------------------------------------------mode:instd_logic);endentity;architectureaofdadishuis---------------------------------------------------------------------------------------------------------TYPEmatrix_indexisarray(29downto0)ofstd_logic_vector(15downto0);constantdishu:matrix_index:=(x4000,x0800,x0001,x8000,x0020,x0010,x0100,x0010,x8000,x0002,x4000,x0080,x0010,x0002,x0800,x4000,x0001,x0400,x0020,x8000,x0002,x0800,x0001,x1000,x0200,x0008,x4000,x0001,x0008,x0010);signalcnt:integerrange0to10000;signalcnt2:integerrange0to50000000;signalclk_tmp:std_logic;signalst1:std_logic_vector(7downto0);--点阵--signaldata:std_logic_vector(7downto0);signalling:std_logic_vector(1downto0);signalchange:integerrange0to29;signalk:std_logic_vector(15downto0):=x0000;signalred:std_logic_vector(7downto0);signallocation:std_logic_vector(7downto0);-----------------------------------------------------------------------------------------------------------signalscanand:std_logic_vector(7downto0);signalcol:std_logic_vector(3downto0);signalcntscan:integerrange0to3;signalclk_tmp1:std_logic;signalkey:std_logic_vector(15downto0):=x1111;--jianpan--signalcounter1:integerrange0to3;signalcounter2:integerrange0to50000;signaln:std_logic_vector(15downto0);-----------------------------------------------------------------------------------signalco:std_logic_vector(6downto0);signalco1:std_logic_vector(6downto0);signalco2:std_logic_vector(6downto0);signalco3:std_logic_vector(6downto0);--记分signalco4:std_logic_vector(6downto0);signalcat:std_logic_vector(5downto0);signalup:integerrange0to1:=0;signalcounter3:integerrange0to25000000;----------------------------------------------------------------------------signali:integerrange0to20;signalj:integerrange0to60;signalvx:integerrange0to2;signalstop:integerrange0to1:=0;--gameover-------------------------------------------------------------------------------signalfuwei:integerrange0to1:=0;--复位beginling=00;---------------------------------------------------dianzhenprocess(clk,rst)beginifrising_edge(clk)andrst='0'thenifcnt=10000thencnt=0;clk_tmp=notclk_tmp;elsecnt=cnt+1;endif;endif;endprocess;process(clk_tmp1,up,rst,fuwei)variablecount9:integerrange0to1000:=0;beginiffalling_edge(clk_tmp1)andfuwei=1thenchange=29;elsiffalling_edge(clk_tmp1)andfuwei=0thenifup=1thencount9:=0;ifchange=0thenchange=29;elsechange=change-1;endif;elsifup=0thenifcount9=1000thencount9:=0;ifchange=0thenchange=29;elsechange=change-1;endif;elsecount9:=count9+1;endif;endif;casechangeiswhen29=k=dishu(29);when28=k=dishu(28);when27=k=dishu(27);when26=k=dishu(26);--随机when25=k=dishu(25);when24=k=dishu(24);when23=k=dishu(23);when22=k=dishu(22);when21=k=dishu(21);when20=k=dishu(20);when19=k=dishu(19);when18=k=dishu(18);when17=k=dishu(17);when16=k=dishu(16);when15=k=dishu(15);when14=k=dishu(14);when13=k=dishu(13);when12=k=dishu(12);when11=k=dishu(11);when10=k=dishu(10);when9=
本文标题:北京邮电大学数电实验打地鼠
链接地址:https://www.777doc.com/doc-2623755 .html