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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(基于51单片机的俄罗斯方块游戏毕业设计论文文档格式.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于51单片机的俄罗斯方块游戏毕业设计论文文档格式.docx

1、综上,国内外的研究多着重于游戏数学原理的讨论,也有部分文献涉及游戏的具体实现,但多是在Windows操作系统下实现的,在单片机平台下的开发俄罗斯方块游戏鲜少有文献刊载。而单片机由于具有体积小、性能突出、价格低廉等特点,应用领域不断扩大,除了工业控制、智能化仪表、家用电器外,在智能化高档电子玩具产品也大量采用单片机芯片作为核心控制部件。曾经80年代非常流行的掌上游戏机便是单片机在电子玩具中的应用之一,其中的俄罗斯方块游戏现已被我们所熟知。本文探讨基于8051单片机硬件平台和RTX51 Tiny多任务实时操作系统的俄罗斯方块游戏的设计与实现,将理论与实践相结合。其主要目标是再现经典的俄罗斯方块游戏

2、,并在此基础上实现双人单机对战游戏模式,以丰富产品功能,增强游戏的趣味性。2 系统硬件平台设计2.1 STC12C5A60S2单片机概述STC12C5A60S2系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速、低功耗、超强抗干扰的新一代8051系列单片机,指令代码完全兼容传统8051,但速度快812倍。用户程序空间为60KB,片上集成1280字节RAM,具有EEPROM功能,能够额外储蓄1KB的数据。该单片机共有4个16位定时器,两个与传统8051兼容的定时器/计数器,即16位定时器T0和T1,没有定时器2,但有独立波特率发生器做串行通讯的波特率发生器,再加上2路PCA模块可

3、由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟,此两路可编程计数器阵列(PCA)可用来再实现2个定时器。此外,STC12C5A60S2内部还集成MAX810专用复位电路,2路PWM,8路高速度10位A/D转换(250K/S),针对电机控制,强干扰场地合。综上所述,STC12C5A605S2单片机具有许多强大的功能,能够满足大多数用户对8位单片机的要求。2.2 STC12C5A60S2最小系统单片机最小系统主要由电源、振荡、复位电路以及扩展电路等部分组成。在本设计中,扩展了液晶显示接口。因此,本设计的最小系统如图2-1所示。图 2-1 STC12C5A60S2最小系

4、统Fig 2-1 STC12C5A60S2 Minimum System2.3 电源系统本设计的电源系统比较简单,直接由LM7805稳压芯片输出的+5V电源供电。具体电路如图2-2所示。图片2-2 电源系统Fig 2-2 Power System2.4 振荡电路单片机系统里都有振荡电路,在单片机系统里晶振作用非常大,全称叫晶体振荡器,它结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟频率趆高,那么单片机运行速度就趆快,单片机的一切指令执行都是依靠单片机晶振提供的时钟频率。4晶振通常与锁相环电路配合使用,以提供系统所需的时钟频率。本设计中STC12C5A60S2使用12MHz的晶

5、体振荡器作为振荡源,由于单片机内部带有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容容量一般在15pF至50pF之间。如图2-3所示即为本设计的振荡电路。图 2-3 振荡电路Fig 2-3 oscillatory circuit2.5 复位系统 MCS51单片机通常采用上电自动复位和按钮复位两种方式。通常因为系统运行等需要,常常需要人工复位,本设计采用按钮复位的方式,即按下开关一定时间就能使RTS引脚端为高电平,从而使单片机复位。同时,简单复位电路中,干扰信号易串入复位端,由此可能会引起内部某些寄存器错误复位,这时可在RST引脚上接去耦电容。在STC12C5A60S2单片机中有两个复位

6、端口,即RST/P4.7、RST2/P4.6,当晶振频率小于或等于12MHz时,使用RST端口。由于本设计使用外接12MHz的晶振作为振荡时钟,所以采用如图2-4所示的复位系统。图 2-4 复位系统Fig 2-4 Rest System2.6 程序下载系统单片机系统的传统编程方式是先将单片机从电路板上取下,放入专用的编程器进行编程,再放入电路板进行调试。其缺点是频繁拔插器件容易损坏器件的引脚;如果频繁的调试程序,必须重复拔插,大降低了开发效率。ISP(在线系统编程)技术是一种无需将存储芯片从嵌入式设备上取出就能对其进行编程的过程。其优点是,即使器件焊接在电路板上,仍可对其进行编程。在线系统可编

7、程是Flash存储器的固有特性(通常无需额外电路),Flash几乎都采用这种方式编程。ISP的实现相对要简单一些,一般通用做法是内部的存储器可以由上位机的软件通过串口来进行改写。对于8051系列单片机来讲可通过SPI接口或其它的串行接口接收上位机传来的数据并写入存储器中。而上位机PC机与下位机单片机通过RS-232串行接口总线进行的串行通信。8051系列单片机带有一个全双工的串行接口,因此用RS-232串行接口总线非常方便。PC机配置RS-232标准接口,RS-232信号电平为负逻辑(逻辑“0”为+12V ;逻辑“1”为-12V),8051单片机输入、输出电平为TTL电平(逻辑“0”为小于等于

8、0.5V;逻辑“1”为大于等于2.4V)。所以8051单片机与PC机间点对点异步通信需加电平转换电路,否则将烧坏TTL电路。MAX232是MAXIM公司生产的电平转换器件,只需在外部接入相应的电解电容即可。因此,本设计采用直连串口线进行串口通信,其中STC12C5A60S2的P30/RXD和P31/TXD分别和下载器的第10管脚/T和第9管脚/R相连,串口线的第5管脚接地,2、3管脚和下载器的7、8管脚相连。具体电路如图2-5所示。图 2-5 程序下载系统Fig 2-5 Program Download System2.7 音乐播放系统在本设计中,音乐播放系统是通过三极管驱动有源蜂鸣器发声,而

9、具体的音符声调则由程序控制。因此,音乐播放系统的硬件电路非常简单。具体接法为有源蜂鸣器正极直接接+5V电源,负极与三极管8050的发射极相连,8050的集电极直接接地,其基极串一个1K的电阻连接到STC12C5A60S2单片机的P20端口。如图2-6所示。图片2-6 音乐播放系统Fig 2-6 Music Player System2.8 LCD液晶显示接口电路 液晶显示屏是整个系统硬件的重要组成部分,担当着人机交互的重要角色。本设计采用铭正同创公司生产的MzL02D-12864液晶点阵屏作为显示器件。它是一块128*64点阵的LCD显示模组,模组上的LCM采用COG技术将控制(包括显存)、驱

10、动器集成在LCM的玻璃上,接口简单、操作方便。其特点为单电源供电,对比度编程可调,可采用并行接口为6800/8080时序或者串行SPI的MPU接口方式,整块液晶屏由3.3V的白色LED背光,美观大方。其外部接口分为电源端口、数据端口和命令端口三部分组成。本设计中LCD的数据端口连接到STC12C5A60S2单片机的P0端口,LCD的命令端口连接到单片机的P2端口。具体硬件电路如图2-7所示。图 2-7 LCD液晶显示接口电路Fig 2-7 Liquid Display Interface Circuit2.9 操作控制接口操作控制模块是智能俄罗斯方块游戏系统的输入器件。它包括主控制器和辅助控制

11、器。主控制器包括七个按键,分别为:旋转/确定、向左/返回上级菜、向右/下一个、快速下降、使用道具、暂停、退出。副控制器则包括五个按键,分别为:旋转/确定、向左/返回上级菜、向右/下一个、快速下降、使用道具。在硬件电路方面辅控制器比主控制器少两个按键的连接。如图2-8所示为主控制器的接线图。与单片机的具体接口可根据实际设定。图片2-8 控制模块接口Fig 2-8 Control Interface 3 系统软件平台构建3.1 Vision简介Vision是德国Keil公司开发的单片机IDE软件,最初主要用于8051系列单片机,目前也有支ARM系列单片机的专用版本MDK-ARM。本设计使用的是ke

12、il Vision3版本的开发软件进行程序开发。3.2 LCD12864液晶屏显示原理3.2.1 LCD模块总线选择及时序 MzL02D模块提供了两个LCM的引脚(C86和PS引脚)供用户选择模块的接口类型,分别可以选择6800并行总线、8080并行总线或者SPI串行接口。模块默认情况下PS为高电平、C86为高电平,此时为6800总线接口类型,本设计采用6800总线模式。在此种接口模式下,WR 线为读写控制信号线,当WR 为高电平时为读状态,WR为低电来时为写入状态。在6800总线接口模式下LCD的时序如图3-1所示。图 3-1 6800总线时序Fig 3-1 6800 Bus Timing3

13、.2.2 LCD显示RAM区映射概况驱动控制芯片的显示RAM区中,每个byte的数据对应屏上的点的排列方式为:纵向排列,低位在上高位在下;如图3-2所示。MzL02D-12864液晶显示模组的显示器上的显示点与驱动控制芯片中的显示缓存RAM是一一对应的;共有65(8Page * 8bit + 1)*132个位的显示RAM区。而显示器的显示点阵大小为64*128点,所以实际上在液晶显示模块中有用的显示RAM区为64*128个位;按byte为单位划分,共分为8个Page,每个Page为8行,而每一行为128个位。(即128列)。图 3-2 字节数据排列情况Fig 3-2 Byte data arr

14、angementMzL02D-12864液晶显示模块的显示屏上的每一个点都对应有控制器片内的显示缓存RAM中的一个bit,显示屏上64*128个点分别对应着显示RAM的8个Page,每一个Page有128个byte的空间。因此可知显示RAM区中的一个Page空间对应8行的点,而该Page中的一个byte数据则对应一列(8个点)。用户如要点亮LCD屏上的某一个点时,实际上就是对该点所对应的显示RAM区中的某一个位进行置1操作,所以就要确定该点所处的行地址、列地址。MzL02-12864液晶显示模组的行地址实际上就是Page的信息,每一个Page应有8行;而列地址则表示该点的横坐标,在屏上为从左到

15、右排列,Page中的一个Byte对应的是一列(8行,即8个点),达128列。可以根据这样的关系在程序中控制LCD显示屏的显示。3.2.3 LCD的驱动方法在很多资料以及书籍当中,通常介绍有两种 LCD模块的连接方法:直接控制和间接控制;直接控制实际指的是 LCD模块的总线接口直接与MCU端口连接,然后 MCU 通过程序控制端口来模拟 LCD的总线时序来完成对其的控制操作;而间接控制指的是MCU本身就有外部总线拉出,与LCD的总线接口对应的连接上,程序中直接操作总线以控制LCD。目前有很多MCU 都把总线密封起来了,都没有引出外部总线;所以通常在用MCU控制LCD模块时,时常会选择直接控制的方式

16、,即利用端口来模拟总线时序;当然了,如果本身就有总线而且也与LCD模块的总线配得上的话,肯定会使用总线连接的间控方式。本设计采用直接控制的方式,将MzL02D-12864 LCD模块的总配置为6800总线,这与绝大部分引出外部总线的MCU的时序是不一样的。本设计的LCD12864模块中,用户程序对其进行显示控制时,无非就是通过对LCD模块内部的驱动控制器当中的寄存器进行设置操作;最常用的如LCD的显示开/关、操作显存地址(行与列地址)的设置等。这些寄存器一般都在LCD模块的驱动控制器文档中有详细介绍。3.2.4 LCD驱动程序架构LCD12864驱动程序主要由LCD底层驱动和LCD功能函数两部

17、分组成。用户在应用层直接使用功能函数即可。具体框架如图3-3所示。功能函数声明图 3-3 LCD驱动程序架构Fig 3-3 LCD Driver architectures3.3 俄罗斯方块游戏设计3.3.1 俄罗斯方块游戏功能简介俄罗斯方块游戏的规则很简单,当方块从屏幕上方落下来时,玩家控制方块的位置以及旋转方块,巧妙地安排布置达到充分利用屏幕空间的目的。每当屏幕的一整行被方块排满时,作为奖赏,整行从屏幕上消失,剩余的方块依次往下降一行。当方块堆积达到无法再落下方块的时候,游戏结束。本设计中游戏主要的功能点包括:(1) 每4个小方块可以组合成一组方块群,游戏共有7种方块群,每次随机产生一种;

18、玩家使用向左、向右、快速向下这些按键控制方块的位置,旋转按键控制方块顺时针旋转。在主控制手柄上还有退出、暂停按钮,可以实现随时切换到启动时的状态和暂停游戏的功能。(2) 在本设计中,系统为玩家提供了背景音乐,玩家可以根据个人喜好开启或关闭音效。(3) 单人模式下,玩家使用主控制器进行操作。每消去一行,系统就给玩家加1分。在单人模式下,如果积分超过系统记录的最高积分,系统将更新最高积分。(4) 本设计的亮点是实现双人对战游戏,通过主控制器在菜单选项中选择双人模式,第二玩家可以通过副控制器对第二游戏界面进行操作。本游戏系统规定,双人对战游戏中积分可分为两个阶段。第一阶段是普通积分阶段,即双方玩家每

19、消去一行,其相应积分表加1分;第二阶段是多积分阶段,即每消去三行才获得1个积分。双方先达到第二阶段末尾者,即可取胜。同时,该设计中还为双方玩家增加了道具功能,即当使用该功能时,可令对手当前移动图块消失,随机出下一个图块。当玩家一次性消去三行,就能获得一次道具功能,最多一次性累积2个道具。系统默认为每个玩家提供1个道具。这样不仅丰富了俄罗斯方块游戏的功能,而且使其更具趣味性。3.3.2 系统界面的设计(1) 菜单选项界面当玩家将本设计的作品上电启动后,系统首先在LCD显示器件上呈现一个动态的开机动画。然后,系统提供三个功能选项,即最高积分、游戏设置、开始游戏。其中,“游戏设置”选项包含了两级子菜

20、单。一级菜单包括“模式选择”和“音效选择”。在这两个选项后面给出单字提示,以说明当前相应设置选项的状态。“模式选择”菜单包含的二级子菜单有“单人模式”和“双人模式”。“音效选择”菜单包含的二级子菜单有“开音效”和“关音效”通过控制按键即可设置成相应状态。“最高积分”菜单选项为玩家提供单人模式下系统记忆的最高积分。如果选择了“开始游戏”菜单选项,则系统根据“游戏设置”选项中的设置启动相应的游戏界面。菜单选项界面框架如图3-4所示。关音效图 3-4 菜单选项界面框架Fig 3-4 The menu option interface framework(2) 游戏操作界面首先,我们先来介绍单人模式下

21、游戏界面的一些情况。在启动单人模式后,LCD12864显示屏分成两屏,左半屏为俄罗斯方块游戏地图map区,右半屏为俄罗斯方块图形预览区和实时积分显示区。其结构框架如图3-5所示。积分显示图 3-5 单人模式界面结构框架Fig 3-5 The single-player game interface architecture其次,如果玩家启动的是双人模式,LCD12864显示屏也分为两屏,左屏由主控器操作,称为map1区,右屏由副控制器操作,称为map2区。在两屏中间是双方积分显示区和各自的道具数量显示区。其结构框架如图3-6所示。map1区图 3-6 双人模式界面结构框架Fig 3-6 Dou

22、ble mode interface architecture系统界面整体程序流程图如图3-7所示。图 3-7 开机界面功能框架Fig 3-7 Boot interface function frame3.3.3 游戏系统“枚举算法”概述本文绕开了涩难懂、比较复杂的“矩阵算法”,提出了另一种“枚举算法”来实现这个经典游戏。“枚举算法”没有复杂的数学理论、避免了在程序中大量使用矩阵运算公式,设计思路清晰、明了,非常适合游戏设计的初学者理解和实现。所谓枚举算法,就是直接枚举出游戏中各图块的基本形状和它们的旋转形状,然后控制每一种不同形状的方块在游戏戏中的产生、移动、旋转、落下、填满和清除等游戏过程

23、。3.3.4 俄罗斯方块造型设计的方法众所周知,俄罗斯方块一般有七种基本形状,每个基本形状都由4个正方形的小方块构成。利用小方块不同的摆放位置,可产生19种旋转型图块。这七种图形分别是“I型”、“L型”、“反L型”、“Z型”、“反Z型”、“口型”、“T型”。如图3-8所示。口型图 3-8 方块模型Fig 3-8 Square model本系统在构造19个方块模型时的思路是:定义一个数组,用以存储各个模型中4个小方块的顶点坐标。比如L型,其数据结构为0,0,0,4,0,8,4,8。其中,每两个数据为一个小正方形的列、行坐标,如图 3-9所示。由图可知,整个界面的坐标原点在左上角,分别向右、向下作

24、为横轴的正方向和纵轴的正方向。图中每一格代表了LCD12864中的连续四行,第1格的坐标是(0,0);第2格的坐标是(0,4);第3格的坐标是(0,8);第4格的坐标是(4,8);其它图块也按此方法编辑数组内容。1图 3-9 L型Fig 3-9 L Shape3.3.5 随机产生俄罗斯方块的方法(1) 产生随机数的理论依据为了实现随机落下各类方块图形,游戏过程序中必须抽取随机数来确定方块的类型。随机数是一个既简单又复杂的问题。本设计采用众所周知的线性叠加法,虽然没有完美的方法产生随机数,不过线性叠加法是一个合适的方法,它彻底解决了8位机随机数的问题。如果从一个足够长的数字序列中的某一个点取出一

25、边串的数字,那么这些数字就看似随机。这个开始的点(数字)叫做种子。如果从相同的点(种子)开始,将会得到相同的数字,这是因为我们是从固定的序列中取数字(所以叫伪随机)。但这却是一个有用的特性,我们可以每次从不同的点取数,即改变种子,从而可以实现真正的随机。(2) “线性叠加法”的概况“线性叠加法”其实只涉及二个内容即:乘法和加法。只需三个步骤即:第一,为了取得新的种子,旧的种子与一个常数A相乘;第二,所得的结果和第二个常数C相加;第三,新的种子就是第二步结果的低32位。保留低32位很重要,用来获得下一个种子。计算公式为: 种子 = A * 种子 + C (3-1)此公式在几何图中表示为一条直线,

26、而且新种子由旧种子反复相加得来,所以叫线性叠加。随机函数的关键在于选择优秀的“常数A”(也叫乘数A),其实也就是选择了一个固定的数字序列。“常数C”,不像乘数A那样重要,但是一定是个奇数。事实上,C可选1。因为奇数(旧的种子)乘奇数(乘数A)是奇数,再加奇数(常数C)将会是一个偶数学偶数(旧的种子)乘奇数(乘数A),加奇数(常数C)将会是一个奇数。如此种子会在奇数和偶数之间转变。因为种了的变化足够随机,所以种子的值可以作为8位或16位随机数。(3) Keil C51中“线性叠加法”的实现方法在Keil C51中生成伪随机数需要用到两个函数,一个是srand(unsigned int seed)

27、,一个是rand()。首先给srand(unsigned int seed)提供一个种子,该种子为unsigned int类型,其取值范围从0到65536,srand(unsigned int seed)根据这个种子会由上述特定的公式生成一个随机数序列;然后调用rand(),它会依次从这个序列中返回一个数,其值在0 到32767之间。因随机数函数rand()函数实际上是线性随机的,如果在不指定srand(unsigned int seed)的种子的情况下,它每次都使用默认的种子,因此生成的序列会是同一个,所以会取到相同的数字序列。这可能会导致每次重新运行游戏时其随机数结果都是一样的。为了解决该问题,本设计在玩家进入游戏时读取按键按下瞬间定时器T0的计数值,作为srand(unsigned int seed)的种子。从而实现真正的随机。(4) 随机数程序流程图如图3-10为随机数程序流程图。将返回值进行处理后选择相应的方块数组图 3-10 随机数程序流程图Fig 3-10 Ramdom process flow program diagram3.3.6 俄罗斯方块平移的实现方法 方块产生后,需要用全局变量来保存方块在游戏map区中的行坐标和列坐标。方块的平移包括左移和右移两种情况,无论那种情况都要首先进行合法性判断。(1) 俄罗斯

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1