数字电路综合实验.doc

上传人:da****u 文档编号:1195147 上传时间:2018-12-18 格式:DOC 页数:13 大小:183KB
下载 相关 举报
数字电路综合实验.doc_第1页
第1页 / 共13页
数字电路综合实验.doc_第2页
第2页 / 共13页
数字电路综合实验.doc_第3页
第3页 / 共13页
数字电路综合实验.doc_第4页
第4页 / 共13页
数字电路综合实验.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

1、数字电路综合实验简易贪吃蛇游戏机05104 班050114 号班内序号 14王皓一、摘要:本实验是使用 VHDL 编程配合实验电路板实现简易贪吃蛇游戏机。用一个88 点阵作为基本显示屏,在显示屏上显示蛇和蛋,利用实验板上的按键进行操控的游戏机。下文对此游戏机的设计和实现做了具体介绍,总结了一些问题并写了一些个人的感受。二、设计课题的任务要求:实现功能要求:1、在 88 点阵显示屏上显示移动的一条蛇,和一个蛋。2、用四个按键控制蛇的运动方向。3、蛇吃到蛋时得一分,并用数码管显示得分4、蛇撞墙则游戏结束。5、蛋是随机出现的。自拟功能:1、蛇可根据吃蛋数(得分)进行增长。2、实现游戏暂停和恢复功能。

2、3、通过旋钮实现游戏速度的调节。4、reset 键重新开始游戏。三、设计思路、总体框图:设计思想:显示: 要实现点阵(88)上的每个点在需要时被点亮,可以设置64 个状态,每个状态对应一个点,这样的好处是只要记录蛇和蛋的几个状态点,然后经过译码电路就可以显示了。但是每一个时刻只能显示一个点,所以利用循环在每一个时钟沿到来时显示一个记录的状态点,由于时钟频率足够大,从而可以同时看到蛇和蛋在点阵上显示。当蛇吃到蛋时记录得分,通过译码电路控制数码管显示。随机蛋的产生: 定义一个信号整数范围 0 到 63,每来一个时钟上升沿信号加 11,在需要时将其赋值给标记蛋的信号。蛇的移动和死亡: 在当前方向时判

3、断蛇头所在位置,符合死亡条件则游戏结束、重新开始,否则标记蛇的几个信号进行值的传递,蛇头需要通过方向确定新的值。例如:方向标记为上,当蛇头在点阵的第一行时蛇死亡,否则蛇进行移动。总体框图:clk 分频为 clk1方向输入 direction 判断后存入标志位 direct产生随机蛋 ieggclkdirectionclk1directieggclk1directieggclk1 分频:iegg 赋值给蛋的标记位 eggdirect 四个方向进行判断 蛇的死亡和移动移动时蛇标记为 snk0,snk1,snk2,snk3 赋值吃到蛋 mark1 加 1pause(判断暂停)snk0snk1snk2

4、snk3eggmark1mark1snk0,snk1,snk2,snk3,egg 经译码循环显示在点阵上mark1 经译码显示在数码管上spotrowspotcolctn1cat输出端口输入端口四、分块电路设计:本程序大致分为暂停、分频和随机蛋、方向判断、蛇的移动与死亡判断、得分判断、点阵显示、数码管显示等几个部分。虽然本程序没有使用双层设计,但结构、功能都很清晰,而且许多功能较之双层设计实现起来更加简便。1、暂停: 加一个 if 判断语句,当 pause=1 时,即拨码开关 2 置“1”时,跳过以初始时钟 clk 上升沿触发的程序,当pause=0 时,即拨码开关 2 置“0”时,正常执行其

5、他程序。2、分频和随机蛋: 此程序共用两个分频,第一个为 127 分频 clk1,此分频足够大使点阵显示不会出现闪烁现象,分频后的时钟为蛇每移动一次的标准。第二次分频是在第一次分频 clk1的基础上再进行 13 分频,分频后的时钟用来控制随机蛋的出现,即蛇每移动 13 步,换一个蛋出现。两个分频都用奇数是防止随机蛋的产生只出现偶数点。snk0snk1snk2snk3egg3、方向判断: 此部分主要取决于输入 direction,另外还由蛇当前移动方向影响,最终方向由 direct 标记。由于逻辑单元的限制,方向判断较为简单,当输入上行键时,蛇身向上移动。并同时可以出现反方向运动。4、蛇的移动和

6、死亡: 根据 direct 记录的方向用 case 语句分情况判断,当蛇头所在位置符合死亡条件则游戏结束、重新开始,否则标记蛇的几个信号进行值的传递,蛇头需要通过方向确定新的值。例如:方向标记为上或左时,当蛇头在点阵的第一行时蛇死亡,而方向标记为下或右时,蛇身可以穿墙而过,循环运动。5、得分判断: 当蛇头 snk0 的值与蛋 egg 的值相等时,得分 mark 加1,并产生新的蛋。6、点阵显示: 先定义一个信号 pointsnake,用于标记要显示的状态点,另定义一个循环变量 count1 在不同值时给信号赋不同的值,即将 egg、snk0、snk1 、snk2 ,snk3 循环赋给point

7、snake,然后通过译码(case 判断) ,将 pointsnake 表示的点点亮。7、数码管显示: 将得分 mark1 通过译码(case 判断)用一个数码管显示。五、仿真波形:仿真源文件:蛇吃到第一个蛋,数码管显示得分由 0(cat11111100)变为 1(cat01100000):吃到第一个蛋后,蛇长变为二(spotrow10000000 spotcol01111111 和 10111111) ,产生新的蛋(spotrow00000001 spotcol11111101)处于暂停时刻(pause=“1” )蛇和蛋的位置保持不变:蛇撞墙(spotrow00000001 spotcol1

8、1011111 下面点阵以外)死亡,游戏重新开始,蛇头位置为初值(spotrow00010000 spotcol11101111) ,蛋位置不变(spotrow00000001 spotcol11111101) ,分数重置为 0(cat11111100 ):六、源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity snake isport (clk: in std_logic;resetkey : in std_logic;pause : in std_logic;ctn1 : o

9、ut std_logic;spotrow,spotcol: out std_logic_vector(7 downto 0);cat: out std_logic_vector(7 downto 0);seg: out std_logic_vector(5 downto 0);direction: in std_logic_vector(3 downto 0);end snake;architecture behavior of snake issignal snk0,snk1,snk2,snk3,pointsnake,egg,iegg : integer range 0 to 63;sign

10、al reset : std_logic;signal mark : integer range 0 to 10;signal clk1 : bit;signal direct : std_logic_vector(1 downto 0);beginprocess(clk,pause,direction)variable count : integer range 0 to 126;beginif (pause=1) then -暂停null;elseif(clkevent and clk=1)then if(count=126)then -分频count:=0;clk1if snk0-snk

11、1/=-8 thendirectif snk0-snk1/=8 thendirectif snk0-snk1/=-1 thendirectif snk0-snk1/=1 thendirect null;end case;end if;end if;end process;process(clk1,direct) -重启variable cont: integer range 0 to 12;beginif (clk1event and clk1=1) thenif (cont=12) thencont:=0;eggresetresetresetresetresetresetresetreset

12、snk3resetresetresetresetresetresetresetresetsnk3snk3snk3snk3snk3snk3snk3snk3resetsnk3snk3snk3snk3snk3snk3snk3snk3resetsnk3mark null;end case;end if;end if;end process;process(clk) -显示蛋、蛇、得分的进程variable count1 : std_logic_vector(2 downto 0); beginif (clkevent and clk=1) thencase count1 iswhen “000“ =p

13、ointsnakepointsnakeif (mark0) then -是否吃到第一个蛋pointsnakeif (mark1) then -是否吃到第二个蛋pointsnakeif (mark2) then -是否吃到第三个蛋pointsnakecount1:=“000“;end case;case pointsnake is -点阵显示译码when 0 = spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotro

14、w spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow spotrow =“00000001“; spotcol =“01111111“;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 课件讲义

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。