基于Nios_II_的贪吃蛇游戏设计(电子设计).doc
《基于Nios_II_的贪吃蛇游戏设计(电子设计).doc》由会员分享,可在线阅读,更多相关《基于Nios_II_的贪吃蛇游戏设计(电子设计).doc(67页珍藏版)》请在沃文网上搜索。
1、 目录、摘要.3、设计目的.3、设计内容.3 1、基本功能.3 2、提高功能.3、技术指标.4、方案整体设计.4、硬件系统的设计及实现. 4 1、硬件整体框架. 4 2、Nios II片上系统的设计. 5 3、外设驱动电路的设计. 7 4、LED点阵扫描电路的设计. 9、软件系统的设计及实现. 11 1、系统主程序设计. 11 2、汉字、开机画面、等待画面设计. 15 3、VHDL显示模块设计. 18 4、音乐模块设计. 21 5、源程序. 21、设计总结. 22、软件使用. 22 、附录. 23I、参考文献.67、摘要基于NiosII软核处理器和LED点阵显示屏的贪吃蛇游戏内容是:一条蛇在封
2、闭的围墙里,围墙里随机出现一个食物。玩家通过4个按键控制蛇上下左右移动,且蛇只能沿着头运动的轨迹移动。蛇头撞到食物,则食物被吃掉,蛇身体增长一节,同时记1分,又出现食物,等待蛇来吃,如果蛇头在移动中出界或咬到自己的身体则游戏结束。硬件通过4个8*8LED点阵作为显示屏,用4个 74LS595作为列信号,实现红绿色灯亮灭。通过8个APM4953实现行扫描显示,从实现游戏的硬件模块。实验板LB1-Cyclone II -EP2C8Q208C8作为核心模块实现。关键字: 贪吃蛇Nios II LED点阵SOPC、设计目的1、掌握按键扫描电路的设计2、掌握用VHDL语言设计按键扫描电路的方法3、掌握1
3、6*16 LED点阵的控制原理和用VHDL语言设计LED点阵扫描电路的方法;4、掌握SOPC Builder的设计流程;5、掌握在Nios II中进行编程的方法;、设计内容1、 基本功能(1)、完成按键扫描电路的设计;(2)、完成 16*16 LED 点阵的扫描电路设计;(3)、完成SOPC Builder 中的系统设计;(4)、完成单色贪吃蛇游戏的基本设计(蛇移动方向的改变,吃到果子后蛇身变长,咬到自己或者出界时的失败处理等);(5)、完成游戏图形信息提示(游戏目前所处的等级等)。2、提高功能(1)、能进行汉字动态显示(显示内容自动更新,形式自定,如百叶窗等);(2)、蛇头颜色与蛇身区别显示
4、,并与果实颜色区别显示;(3)、游戏过程中加入声音提示和表情提示;(4)、所得分数在数码管上显示;(5)、能进行游戏难度的切换(不同难度下,蛇吃到相应数量的果子后升级)。、技术指标1、游戏显示屏采用16*16LED点阵;2、显示屏应具有明显的可视效果;3、按键和LED点阵显示都采用动态扫描显示;4、显示无闪烁(扫描频率应大于50Hz);5、贪吃蛇应具有转方向,失败后重新开始等功能;6、游戏过程中要能适当的显示出相应的字符提示;7、游戏开始前有汉字动态显示部分,显示内容自动更新,显示形式自定;8、蛇头与蛇身颜色以及两者与果实的颜色都不相同;9、贪吃蛇每次吃到果实或者游戏进入下一关,以及游戏失败等
5、有相应的音频提示;10、每个等级所获得的分数能实时的显示在数码管上;11、游戏的难度能够选择。、方案整体设计 为了实现游戏的控制、显示、设置等功能,系统需要具有控制模块,动态扫描显示模块,按键识别模块。本设计中采用Nios II软核CPU作为游戏的主控制单元,按键识别模块中的每个按键通过产生中断的方式,在中断处理函数中完成按键的标识,并在在软件程序的主体部分完成按键的识别。动态扫描显示模块又分为LED点阵屏动态扫描显示和LED数码管显示扫描两部分,两部分均采用VHDL语言设计相应的硬件扫描模块来实现。、硬件系统的设计及实现整个硬件系统的设计包括Nios II片上系统的设计和外设驱动电路的设计。
6、1、硬件整体框架2、Nios II片上系统的设计片上系统的设计核心是Nios II嵌入式CPU软核的定制。根据游戏的功能要求和实现的方案,片上系统应当包括:Nios II嵌入式CPU软核、一组PIO输入输出口、定时器、SRAM、JTAG UART、EPCS_FLASH_CONTROLLER。Nios II系统的结构如下:SOPC架构:(1)、Nios II嵌入式CPU软核Nios II嵌入式CPU软核作为整个系统的主控制单元,完成对按键信息的接收、识别、处理;此外还要输出相关的控制信息,实现对外设的控制。(2)、PIO输入输出口在定制的一组PIO输入输出口中,PIO输入口用于接收按键信号,PI
7、O输出口用于输出对DPRAM写数据操作的控制和数据信号以及LED数码管的数据信号;(3)、SRAM和EPCS_FLASH_CONTROLLERSRAM在系统中起到了相当于计算机中内存的作用,主要用于存放正在运行的软件程序。它的特点主要是速度快。 EPCS_FLASH_CONTROLLER 作为EPCS_FLASH的控制器。整个系统的硬件设计都下载固化在EPCS_FLASH上,当程序烧写到了EPCS_FLASH上的时候,就可以实现脱机运行了。3、 外设驱动电路的设计外设驱动电路的设计包括:双口DPRAM的定制、DPRAM读数据控制电路的设计、LED点阵屏扫描电路的设计、七段数码管动态扫描电路的设
8、计以及整个系统中所用到的时钟信号产生电路等。(1)、双口DPRAM定制双口DPRAM在系统中作为LED点阵显示屏的显示数据缓存,其中存储了256个LED灯的颜色控制数据。存放在其中的数据只有四个值有效,分别为0、1、2、3。送这四个数去控制一个LED灯,分别对应LED灯的颜色为:黄色、绿色、红色、黑色。双口DPRAM可以定制成一个输入口和一个输出口的形式。其中,输入口用于接收Nios II嵌入式软核CPU的数据,输出口在DPRAM读数据控制电路的控制下输出数据用于驱动LED点阵屏扫描显示电路。 该模块的仿真波形如下图:(2)、DPRAM读数据控制电路DPRAM读数据控制电路在外部时钟信号的作用
9、下,产生0 到255共256个数作为DPRAM的地址,在DPRAM读数据时钟到来的时候使得DPRAM输出对应地址的数据。此外,DPRAM读数据控制电路还要产生像素同步信号和行同步信号,实现LED点阵屏扫描电路的时序。产生的时序要求是:在外部时钟的作用下产生DPRAMD的地址,接着像素同步时钟出现一个上升沿,16个像素同步时钟后,产生一个行同步信号,在该行同步信号作用下行扫描信号从第一行顺序扫到最后一行,这样就完成了一个周期的扫描。该模块的仿真波形如下图:(3)、七段数码管七段数码管动态扫描电路,接收外部送来的显示数据,通过动态扫描的方式在两个数码管上显示出来。该模块的仿真波形如下图:(4)、按
10、键去抖用的是软件去抖,见后面的程序部分。(5)、时钟信号产生电路整个系统中使用到了几个不同频率的时钟信号,通过时钟信号产生电路进行不同频率的分频产生所需的时钟信号。该模块的仿真波形如下图:4、LED点阵扫描电路的设计LED显示系统有两种基本的显示控制方式,即静态显示和动态显示。对于静态显示方式,每一个像素都需要一套驱动电路,因而这种方式没有扫描过程,显示控制简单,亮度很好。但是,采用静态显示方式将大大增加驱动电路的复杂程度,这不仅使系统成本很高,而且增加了生产、安装、调试以及日常维护工作的难度,故障率也较高。对于动态扫描显示,由于采用多路复用显示方式,每路显示的时间大为减少,这不仅使LED显示
11、亮度受到一定程度的影响,而且增加了显示控制的复杂性和现实的稳定性。本系统采用动态扫描控制显示方式。(1)、显示屏的列驱动列驱动采用带输出锁存的8 Bit 移位寄存器 74LS595。本系统采的LED点阵是RG 双色的,所以送入点阵的列驱动信号是 RG两组。 以红灯为例,两片74LS595 级联用作红灯列驱动。每16 个时钟控制器传送的两个字节的数据移位到两片 595 中,16个列驱动信号都移位到两片 595 中后,控制器给出一个STB 信号的上升沿,使一行数据锁存输出到LED屏。LED对应的列驱动数据为1时,被其驱动的LED不能被点亮;对应的列驱动数据为0时,被其驱动的点被点亮。绿灯的点亮控制
12、和红灯一样,需要用到另外一套相同的595级联电路。但具体点亮哪一个点,则由行驱动来指定。因此行驱动用来进行扫描控制,任一瞬时16行中只有1行被选通,换句话说一行中每一个点被点亮的时间只有不到1/16的时间,因为传送数据和控制也需要时间。本系统采用的LED点阵是RG双色灯,具体哪个灯则由FPGA传递的参数决定。需要注意的是,红灯数据在送入LED点阵前要加电阻限流。(2)、 显示屏的行驱动为方便控制,行信号采用四位控制16行,行扫描信号的最高位用于选择要译码的三八译码器。行扫描信号最高位为0时,三八译码器U7工作,译码后的信号作为前八行的行选择信号;行扫描信号的最高位为1时,三八译码器U14工作,
13、译码后的信号作为后八行的行选择信号。行选择信号在送入LED点阵前,要先送入专用的电源控制芯片APM4953,APM4953的输出作为点阵的行驱动信号。更大的屏由多套这样的电路拼接而成,每一部分的工作原理是一致的。这里仅以此电路来讨论其工作的原理。(3)、具体扫描过程扫描过程:首先是FPGA通过接口送来第一行要显示的2个字节的红色灯信号R和2个字节的绿灯信号G,两个字节的红灯数据分别锁存于U1和U6中,两个字节的绿灯数据分别锁存于U10和U15中。随后送出行扫描信号,行扫描信号经三八译码器译码后为IH0-IH15,IH0-IH15经过专用的电源控制芯片APM4953,成为LED点阵的行驱动信号T
14、H0-TH15。第一次送来的扫描信号应使TH0为1,其余为0。这意味着只有第1行被选通,第1行的16个点,32个LED灯按4片595的输出数据点亮或熄灭相应的LED灯,而其余15列由于不被选通将全部不发光。为防止数据串显,经过一段时间的延时后,要再送出一组绿灯均为1的数据,即熄灭所有的灯,至此第1行扫描显示完毕。随后依次进行第2行的扫描显示。同样,先送第2行的16个红色LED灯的显示数据分别锁存于595(1)和595(2)中,第2行的16个绿色LED灯的显示数据分别锁存于595(3)和595(4)中,再送扫描信号SEL,且只使TH1为1,并延时显示,最后熄灭所有的灯。这样逐列进行扫描显示,当最
15、后一列扫描完后,FPGA可进行适当的数据加工处理,接着又进行下一扫描周期的工作。必须指出,扫描周期应小于或等于20ms以克服图像的闪烁现象,但也不能太高,要考虑595工作的频率范围。电路如下图:、软件系统的设计及实现1、系统的主程序设计(1)、算法描述 运动:根据用户输入按键进行蛇体传动。吃到食物:置没有食物的标志,蛇身加长一个点。放新食物:判断食物标志,如果没有食物,就要放食物,判断 放的食物是否和蛇身重叠,重叠了要重放。死亡处理:判断是否撞中自己或撞墙。 游戏具体的流程是:蛇向一个固定方向进行蛇体传动,每个运动时钟到达要做的工作有: a、判断食物标志,没有食物了就放一个,放的时候判断,不能
16、和蛇身重叠。 b、得到用户按键值,根据键值设置方向标识,并判断是否撞死了,没撞死和是否吃到自己,再判断是否吃到东西了,没有吃到,就等下一个运动时钟;吃了,就增长一点。置一个没有食物的标志。然后等待下一个时刻的来临。(2) 具体实现方案阐述:游戏模式1(简单模式):游戏玩法: 模式1为最简单,最平常的模式,控制蛇的身体,去吃屏幕上随机出现的食物。每吃掉一个食物,蛇体就增加一节,得分就增加一分,每吃掉6个食物蛇移动的速度增加一个等级。当蛇头碰到墙壁,或者碰到蛇体是就游戏结束。游戏算法:算法1:蛇的移动For(蛇的后一节身体由前一节身体代替)检测方向确定蛇头的移动原来蛇末尾位置变为黑点显示蛇身 算法
17、2:水果的产生使用结构表示水果,当水果被蛇吃掉后,随机产生一个水果伪代码:if 蛇头位置与水果位置重合 for 随机产生水果的坐标If 坐标在框图内If 水果坐标不与蛇每一个坐标重合 跳出循环算法3:判断蛇的死亡For 取遍蛇身每一个元素 If (蛇头出了框图或蛇头与蛇身重合) Snake.life=0(a=0则循环停止) 算法4:由中断来改变蛇的方向 Case“键值”:改变蛇的方向为相应方向;break;游戏模式2:(障碍模式) 本程序实现的主要功能:贪吃蛇吃够一定的果实后实现加速,在经过一次加速后产生障碍物,在障碍物产生后,贪吃蛇恢复初始长度,但速度承接原来速度; 然后每吃够一定的果实,速
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Nios_II_ 贪吃 游戏 设计 电子设计
