《数字电路实验-打地鼠游戏的设计与搭建.docx》由会员分享,可在线阅读,更多相关《数字电路实验-打地鼠游戏的设计与搭建.docx(32页珍藏版)》请在第一文库网上搜索。
1、信息与通信工程学院数字电路试验汇报题目:打地鼠游戏日勺设计与实现姓名:班级:学号:班内序号;指导教师:试验日期:目录一、设计课题的任务与规定3二、系统设计32. 1设计思绪33. 2总体框图34. 3分块设计3三、仿真波形和波形分析45. 1分频器45.2 随机数产生模块45.3 防抖模块53. 4点阵显示模块53.5 键盘控制模块63.6 计分模块63.7 计时模块63.8 译码器模块7四、源程序73.9 分频器73.10 机数产生模块83.11 抖模块103.12 阵显示模块103.13 盘控制模块123.14 分模块133.15 时模块143.16 码器模块15五、功能阐明和资源运用状况
2、16六、故障和问题分析16七、总结与结论17一、设计任务与规定1、设计一种挑战反应速度的“打地鼠”游戏,采用用8X8双色点阵显示游戏界面,其中游戏边界采用绿色1ED显示,随机出现欧J地鼠采用红色1ED显示,游戏有16个洞穴。2、游戏洞穴每次随机出现种地鼠,每个地鼠的最长保持时间为2秒,2秒后随机出现下种地鼠。以4X4键盘时按键代表锤子,16个洞穴与16个按键一一对应,一旦锤子在2秒内击中地鼠,地鼠消失,数码管计分器分数加1分;若锤子一直没有击中地鼠,2秒后该地鼠消失。用两个数码管显示游戏成绩,当游戏成绩到达10分时游戏结束,点阵显示字符“V”。3、用两个数码管对整个游戏进行倒计时,当游戏时间超
3、过59秒而成绩未到达10分时,游戏失败,点阵显示字符“X”。4、按复位键重新开始游戏,并开始倒计时。二、系统设计2.1设计思绪地鼠显示:4*4时红色点阵边界显示:6*6的绿色点阵结束画面:绿色的I“V”形胜利画面,红色的“X”形失败画面计时和计分显示:各用2个数码管,共4个数码管锤子控制:4*4的键盘开关控制:1个拨码开关用拨码开关开始游戏,6*6绿色点阵常亮,红色点阵亮的位置表达地鼠出现,按下对应的键盘即算打中,计1分,记到10分游戏结束显示绿色“V”。游戏时间合计60秒,时间为0,分数未到10分,游戏结束显示红色X”。50MHz作为基本信号源,分频得到500HZ和1Hz。2.2 总体框图2
4、.32.4 分块设计A.游戏准备模块:1.随机数产生模块:将一种4位的二进制数的第一位与最终一位进行异或运算后,作为随机数种子,并且每次运算完将前三位与种子进行合并,产生周期为21日勺伪随机数,通过计数控制地鼠持续2秒,通过返回的得分信号变化得分后地鼠的位置。B.游戏关键模块:1 .点阵显示模块:用于显示地鼠和边界,以和结束时胜利或失败的画面。2 .键盘控制模块:通过对地鼠对应位置的列进行扫描,比较返回的键盘行信号,打到地鼠即输出得分脉冲信号。C.进程显示模块:1计分模块:通过接受得分脉冲信号,进行计分,每次开始预制值为0。3 .计时模块:使用IHZ的时钟信号进行倒计时,每次减1,开始时预制值
5、为60。D.辅助模块:1 .分频器模块:将50MHZ的信号分频成IHZ用于计时和500HZ用于其他功能。2 .防抖模块:用500HZ的信号进行计数,只有持续6个时钟周期以上的按键信号才会进入按键控制模块,从而到达防抖的作用。3 .译码器模块:将计分和计时模块传来的信号进行译码,输出到数码管,实现计分和计时的显示。三、仿真波形和波形分析3.1 分频器模块CIk11mjjmuj1jmujifuuJUic1k-1HzI1C1K500HZIIIIIIIIIIresetCIk:50MHZH勺时钟信号c1kHz:IHZ的时钟信号e1k500Hz:500HZ的时钟信号reset:复位信号波形分析:为便于仿真
6、,这里CIk使用的是周期为IUS的信号,c1k_500HZ为CIk的10分频信号,e1kHZ为e1kHZ的6分频信号。实际中的分频器是先将50MHZ信号进行IOOOOO分频,得到500HZ信号,再对500HZ信号进行500分频得到IHZ信号。3.2 随机数产生模块num:4位二进制随机数SCOre:得分信号波形分析:1 .通过12个自制D触发器H勺连接和其中4位的异或,产生12位的二进制随机数,从中取出4位作为地鼠位置的随机数。2 .通过计50OHZ信号IOOO次,从而控制地鼠持续2秒。3 .只要打中地鼠,即接受到得分的脉冲信号,立即产生新的随机数。3.3 防抖模块e1k:500HZ时钟信号k
7、eyin:键盘输入信号keyout:键盘输出信号reset:复位信号波形分析:当输入信号持续时间不大于6个时钟周期(即12ms)时,视为抖动不输出。当信号持续时间多于6个时钟周期时,视为正常按键,输出。3.4 点阵显示模块e1kIIIIIIIIIIIIIIIaco100。CIeIt)tT1111twy-IoO(XHc1OOo-IOOOO1TUYT110000XT111110000fai1ed田num:OOcI国X1cuoooomokmoXIII1O1I1XI1IomiXIIOI1Tn)iUImXI11mO1resetwin图一c1k:5OOHZ时钟信号co1:点阵的列fai1ed:失败信号nu
8、m:地鼠位置raw:点阵的行reset:复位信号Win:胜利信号波形分析:1 .游戏正常进行时,点阵根据num显示地鼠位置,如图一,IWm为Ooo1,点阵在第0行,第1列显示地鼠,显示6*6时游戏边界。2 .游戏胜利时,如图二,点阵根据Win信号显示绿色V。3 .游戏失败时,如图三,点阵根据fai1ed信号显示红色X。3.5 键盘控制模块scoree1k:500HZ时钟信号co1:键盘时列num:地鼠位置raw:键盘的行SCore:得分信号波形分析:为便于仿真,将第3行的按键所有按下。当地鼠位置为12时,地鼠处在第3行和第0行的位置,此时扫描键盘第。列,得到匹配行信号,证明打到地鼠,输出Seo
9、re信号。以此类推,同行的14,13,15也输出SCOre信号。计分模块gewei:计分模块的个位reset:复位信号SCOre:得分信号scoreover:得到10分H勺信号shiwei:计分模块的十位波形分析:每接受一种得分信号,个位加一分,直到记到10分,进位,十位变1,个位变0,。同步输出SCOreoVer信号,代表计到到分。计时模块resetMshiwe唇I5X4!”2X-X11neovere1k:IHZ的时钟信号gewei:计时H勺个位reset:复位信号ShiWei:计时0十位IinIeOVer:游戏时间结束信号波形分析:复位后,十位的预制值为6,个位的预制值为0,每过一秒个位减
10、一。当个位十位都为0时,输出timeover信号,表达游戏时间结束。3.8译码器模块cat:数码管扫描信号e1k:500HZ的时钟信号inscoreO:得分的个位inscorc:得分的十位intime0:计时及J个位intime1:计时0十位OUtPUt:数码管七段显示信号reset:复位信号波形分析:Cat从II1IIo到IIOII1循环,4个数码管被循环点亮,如图所示,这4个数码管分别对应得分的J个位,得分的十位,时间的个位,时间的十位。四、源程序4.1分频器模块1ibraryieee;useieee.std_1ogic_1164.a11;entityfenpinqiisport(一时钟输
11、入一复位信号一IHZ输出50OHZ输出e1k:instd1ogic;reset:instd1ogic;c1k_1Hz:outstd_1ogic;c1k_500Hz:outstd_1ogic);endfenpinqi;architectureaoffenpinqiissigna1c1k_500Hz_tmp:std_1ogic;signa1c1k_1Hz_tmp:std_1ogic;signa1count1:integerrange0to49999;signa1count2:integerrange0to249;beginprocess(e1k)beginifreset=*0,thenc1k_50
12、0Hz_tmp=,O;count1=0;e1seif(c1k,eventANDc1k=*)thenifcount1=49999thenc1k_500Hz_tmp=notc1k_500Hz_tmp;count1=0;e1secount1=count1+1;endif;endif;endif;endprocess;c1k_500Hz=c1k_500Hz_tmp;一将50M做1Ooooo分频得到500HZprocess(e1k500Hz_Imp)beginifreset=*0*thenc1k_1Hz_tmp=,0,;count2=0;e1seif(c1k-500Hz-tmp,eventANDc1k_
13、500Hz_tmp=,1,)thenc1k_1Hz_tmp=notc1k1Hztmp;count2=0;e1secount2=count2+1;endif;endif;endif;endprocess;一将500HZ做500分频得到IHZc1k1Hz=c1k1Hztmp;enda;4.2随机数产生模块1ibraryieee;useieee.std_1ogic_1164.a11;useieee.std_1ogic_arith.a11;ENTITYsjssISPORT(c1k_500Hz:INSTD_1OGIC;一时钟输入reset:INSTD_1OGTC;一复位信号nowscore:INinte
14、gerrange0to9;一目前分数D:OUTstd_1ogic_vector(4DOWNTO0);一数据输出score:INSTD_1OGIC一加分信号);ENDsjss;ARCHITECTUREaOFsjssISSIGNA1feedbackO:STD_1OGIC;SIGNA1c1k_5OOHzO:STD_1OGIC;SIGNA1randomregO:Std1ogicvector(4DOWNTOO);SIGNA1count2_0:std_1ogic_vector(4DOWNTOO);SIGNA1score_o1dO:STD_1OGIC;BEGINfeedbackO=randomregO(4)xorrandom_rcgO(O);一将randomregO第4位与第1为异或赋给种子feedbackc1k_500Hz0=c1k_500Hz;p1:PROCESS(c1k500Hz0,reset,nowscore)variab1ecount1:integerrangeOto999;一计数I