ImageVerifierCode 换一换
格式:DOC , 页数:13 ,大小:183KB ,
资源ID:1195147      下载积分:10 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-1195147.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数字电路综合实验.doc)为本站会员(da****u)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

数字电路综合实验.doc

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个工作日内予以改正。