基于单片机的可调速俄罗斯方块游戏设计_第1页
基于单片机的可调速俄罗斯方块游戏设计_第2页
基于单片机的可调速俄罗斯方块游戏设计_第3页
基于单片机的可调速俄罗斯方块游戏设计_第4页
基于单片机的可调速俄罗斯方块游戏设计_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2019届毕业生毕业设计说明书题 目: 基于单片机的可调速俄罗斯方块游戏设计 院系名称:信息科学与工程学院专业班级: 电科1504 学生姓名: 刘贝贝 学 号: 201516030412 指导教师: 王胜轩 教师职称: 讲师 2019年 6月 5日毕 业 设 计 中 文 摘 要摘 要在历史的长河中,游戏机的发展十分迅速,从上世纪五六十年代简单的街机投币式游戏机到现在大型网络竞技类网游,带动了一个娱乐行业崛起,创造了巨大的经济价值,因此对游戏的开发有着巨大的经济价值,对于基于单片机的可调速俄罗斯方块游戏设计,遵循传统的俄罗斯方块游戏规则,对整个游戏机部署硬件电路并且对游戏程序进行优化,移植,使得游戏程序完全适合单片机的硬件电路。显示部分是用基于ST7920驱动器的液晶模块LCD12864,因此需要弄清楚LCD12864液晶显示屏的详细介绍以及ST7920驱动器的功能说明。例如传统的俄罗斯方块游戏玩法,难度会随着消除行数的增加而增加,方块下落的速度也会随着难度的增加而增加给玩家提供激动刺激的游戏体验,在基于单片机的开发过程中,系统所需的功耗很低,用不到传统CRT显示器,以及高电压供电,在编写游戏开发过程中可以直接进行在线调试。硬件电路是主要以STC89C52单片机为核心,结合外部晶振电路提供工作时钟频率,通过矩阵键盘让玩家控制方块的移动、旋转、暂停和开始游戏,游戏程序主要是通过对数组的控制,在液晶屏上显示出游戏的画面,通过液晶显示画面,显示出砖块的移动和旋转。关键词:STC89C52单片机;俄罗斯方块;12864液晶显示器;ST7920;C语言毕 业 设 计 外 文 摘 要Title Tetris game based on single chip microcomputer AbstractIn the long river of history, the development of the game is very fast, from the fifties and sixties of the last century simple arcade coin-operated games consoles to large network competitive online now, led to a rise of the entertainment industry, adjustable speed tetris follow the traditional rules of tetris game, for the whole game deployment of hardware circuit and optimize the game program, transplantation, makes the game completely suitable for single chip microcomputer hardware circuit. Therefore, it is necessary to make clear the detailed introduction of the LCD screen of LCD12864 and the function description of the driver of ST7920. This system simulate the tetris game, the difficulty with eliminate increase with the increase of the number of rows, square falling speed will increase with the increase of the difficulty to the players also provide excited exciting game experience, and the design of the system power consumption is low, with less than the traditional CRT display. The design of hardware circuit is mainly STC89C52 single-chip microcomputer as the core, through the matrix keyboard for players to control block move, rotate, pause and start the game, the game is mainly through the control of the array, on the LCD screen shows a picture of the game, through the liquid crystal display screen, show the bricks of the move and rotate.Keywords: STC89C52; Tetris; 12864E LCD display; ST7920; C languageII目 次1 绪论11.1 课题背景11.2 课题的研究目的及意义21.3 课题的总体要求及规划22 课题任务及系统整体设计方案32.1 主要任务32.2 系统整体设计方案33 系统硬件平台设计53.1 系统的核心模块单片机53.2 外部振荡电路53.3 液晶显示电路63.4 复位开关电路73.5 矩阵键盘电路84 系统软件平台开台94.1 系统软件开发环境94.2 游戏玩法及实现的主要思路94.3 游戏运行过程中重要程序和算法125 游戏的调试与仿真205.1 游戏程序的调试205.2 硬件电路的仿真205.3 实物验证及演示21结 论22致 谢23参 考 文 献24附 录A25附 录B261 绪论单片机诞生于上世纪70年代经历了SCM、MCU、SOC三大阶段,单片机是嵌入式系统发展过程中的一个阶段,随着微电子技术的发展、IC设计、EDA工具的发展,基于SOC的单片机也有了极大的发展1,例如现在最大的SOC设计厂商美国高通公司,现在设计的SOC性能已经可以与几年前PC机的性能相抗衡,它有更低的功耗和优秀的性能体现这在几十年前是无法想象的。单片机系统的开发主要包括外部电路的设计和单片机的控制程序设计,其中以单片机程序控制设计为核心,单片机的程序设计还可以采用汇编程序语言设计和C语言程序设计。和单片机汇编语言相比,单片机C51语言的代码体积要大,执行效率不高2。但是随着技术的发展,C51语言在代码执行的效率方面越来越接近汇编语言。另外,单片机的程序储存器容量越来越大,硬件的工作效率也越来越快,这些改变使得C语言的优势更加能够体现出来,使得当时受限于硬件容量的短板不复存在,让更多的程序开发者,对单片机的程序开发有了更大的发挥空间,而俄罗斯方块作为当时十分受欢迎的游戏之一,成为了一个不错的开发对象。1.1 课题背景随着科学技术的进步,电脑、手机、掌上游戏机电子硬件性能越来越好的同时,电子游戏逐渐成为人们在业余生活中越来越多人喜欢的的娱乐方式,甚至有许多人认为,电子游戏已经不仅仅是一种娱乐活动,它现在已然成为了一种文化。在一些高质量的游戏中不亚于现实生活中电影影视剧的水平高度,现如今由人们精心打量的游戏有的已经可以堪称为一种艺术,游戏开发者们可以通过游戏来告诉玩家自己想表达的内容,而玩家也在自己亲身体味过之后有了更深的感悟。电子游戏按照不同的平台及运行环境可以分为主机游戏、街机游戏、手机游戏、掌机游戏、PC游戏,每个平台的游戏完全可以通过计算机编程进行平台的移植,以便在多个平台占领市场。俄罗斯方块游戏作为经典的电子游戏之一,它曾经在世界上的影响非常巨大带动了一个产业的发展和经济的增长,它上手非常简单,但是想要完全驾驭却又十分困难,方块图形的变化图形有28种而且随着消除行数的增加,游戏的难度也会随着自己得到的分数,不断增加,这款游戏看似简单其实要想成为一个高手十分困难,这是一个不断挑战自我的游戏,只有更快的反应速度和应对技巧才能应付下一次方块的下落。这款游戏被多家游戏厂商代理过,但是最终被任天堂公司代理,任天堂经过本地化优化结合自家的产品gameboy获得了巨大的成功。对于中国玩家来说,俄罗斯方块可以说是第一次让国人认识到游戏是一种老少皆宜的娱乐方式,从某种程度上扭转了国人的游戏是小孩的东西或游戏是毒害儿童的元凶等错误观念2。1.2 课题的研究目的及意义现在电子游戏的发展越来越快,游戏市场每天发行的游戏数以万计,而每天活跃在游戏中的人们更是数以亿计,游戏已经深入到人们的生活之中,这些在当时游戏诞生时是无法想象的,硬件性能的提升和技术的进步促使游戏的发展如火如荼,必然这个巨大的蛋糕吸引了热爱者许多投身于游戏开发和运营领域,希望在自己喜欢的方向拼出自己的天地,于是就有了许多游戏编程开发设计人才,他们不断地优化,升级,更新,不断地提升技术水平,为游戏的发展源源不断地注入新的动力从之前红白机的FC游戏到谷歌公司旗下的阿尔法围棋与人的对决,游戏的技术是日益的发展、进步。然而技术也会受限于时代物质水平,硬件终端的性能表现也在时时刻刻约束着游戏开发设计人员的创作,当硬件性能速度更快,容量更大,功耗更低时,反过来促进游戏设计水平的提高,本次设计是用现在的C语言在单片机上开发设计俄罗斯方块游戏,让简洁的代码在低功耗,速度快的单片机上运行。1.3 课题的总体要求及规划1.3.1 硬件结构规划(1)系统规划:搭建C51最小硬件系统,主要运用到C51中断、定时、矩阵键盘、晶振电路和液晶显示模块。(2)系统需求分析:分析目标任务为搭建C51硬件系统所需要的电子元器件。(3)系统总体设计:画出系统原理图,列出所有模块。1.3.2 软件功能规划(1)运用LCD液晶显示屏显示输出,由4个小方块可以组合成一组方块图形, 游戏共有7 种方块图形,每次随机产生一种方块图形。(2)通过矩阵键盘按键可对方块姿势位置进行控制,同时实现可以选择方块的下落速度。(3)行满则进行消除操作,直到地图无法容下新的方块或者列满,提示游戏结束。2 课题任务及系统整体设计方案2.1 主要任务在现在经济高速发展的时代,游戏风靡全球,各种游戏层出不穷,大到100G左右的单机游戏,小到手机、掌机里几百字节的休闲游戏。但是这种简单也是相对于PC机平台上大型单机游戏相比的,小游戏的代码对于特定的平台也是有一定的技术难度的,因为代码的实现可能要受到硬件性能的表现,它要执行一系列代码才能正确的完成一个简单的操作,才能按照玩家的想法工作,硬件平台的受限能否实现俄罗斯方块在单片机的实现,这次系统设计的主要任务是实现俄罗斯方块在单片机环境中能够正常运行,在硬件部分主要构建一个俄罗斯方块运行的硬件环境给俄罗斯方块一个能够流畅运行的硬件平台,其中主要包括,单片机,显示输出电路,键盘控制输入电路,开关复位电路。游戏在运行过程中能够实现玩家通过按键控制俄罗斯方块在屏幕上旋转、移位和消行处理,并且对玩家消除行数进行打分奖励,随着分数的增加,玩家所面对的游戏难度也在不再增加,最后当玩家在游戏中游戏区域达到了满列或者方块完全填充游戏区域时,游戏结束,显示游戏结束画面。2.2 系统整体设计方案俄罗斯方块游戏虽然出现在电视游戏上,刚开始运行于电视平台,但是我们仍能对对代码简化和移植,把游戏的游戏算法保留下来,结合单片机特定的工作特征,对代码进行合理的移植,完全可以用单片机平台实现,它的显示输出可以用LCD12864液晶显示模块进行显示,不需要电视屏幕那么复杂,这也是单片机的优势所在,它的输入可以使用独立按键结合单片机的IO口实现玩家对游戏的控制和操作,它的开发和编译可以使用更加方便和运用的编程语言如C语言进行编译设计,因为C语言更加灵活,可阅读,方便后期维护和修复。 2.2.1 系统设计总体框图这次基于单片机的可调速俄罗斯方块游戏设计硬件电路主要包括液晶显示电路、单片机、开关复位电路、晶振电路、和矩阵键盘电路。系统总体框图如图2-1所示。键盘输入电路STC89C52单片机用于构建最小单片机系统电路液晶显示输出电路图2-1 系统总体框图2.2.2 系统的工作过程当玩家接通电源后,单片机从内部存储器中读取数据,然后单片机发出信号,输出到液晶显示器上显示输出,玩家通过选择好方块下落速度后,进入游戏,方块下落的初试速度为一秒下降一行,满行则消除这一行,分数加1,玩家可以通过左、右、下方向键控制方块的位置,旋转键控制方块的姿势,以调整方块摆放,获得最高的分数。如图2-2所示。开始显示开机画面开始游戏按键操作执行移动或者旋转程序N游戏是否结束Y显示结束画面图2-2 系统工作过程3 系统硬件平台设计为实现游戏程序在单片机的环境中运行,我们需要简单搭建一个硬件物理环境,这个环境是根据系统设计具体情况具体构建的,用到单片机哪部分功能就添加那部分硬件电路,对于本次单片机设计来说,需要用到的单片机系统硬件结构主要包括:单片机核心部件、外部振荡电路、复位电路、矩阵键盘电路和液晶显示电路,下面我来具体展开介绍。3.1 系统的核心模块单片机本次采用型号为STC89C52的单片机,STC89C52单片机的引脚图如图3-1所示。STC89C52单片机是宏晶科技有限公司推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择3。STC89C52单片机和其他公司的单片机相比主要的特征是STC89C52拥有8K字节的程序储存空间,拥有512字节的数据存储空间,而且内部自带有4K字节的EEPROM存储空间,对于本次设计,最方便的就是可以通过串口直接下载程序,不需要再经过特殊处理,方便游戏程序的开发和后期程序代码的编译、调试。图3-1 STC89C52单片机引脚图3.2 外部振荡电路外部振荡电路是由两个瓷片电容和一个晶振组成的电路,电容并联在晶振两侧起到一个起振的作用,这次设计选择的电容是两个30pf的瓷片电容,STC89C52单片机内部同时也拥有一个用于内部振荡器的反相放大器,它的输入和输出分别是XTAL1和XTAL24。把晶振电路的两端并联到反向放大器的两端XTAL1和XTAL2,即可构成一个外部自激振荡电路。如图3-2所示。图3-2 外部振荡电路3.3 液晶显示电路本次使用的液晶显示器是LCD 12864-15系列中文图形液晶模块,LCD 12864-15系列中文图形液晶模块的特性主要由其控制器 ST7920决定4,液晶的对比度调节引脚为V0引脚,串口并口选择引脚为PSB引脚,DB0到DB7为数据的传输引脚,内部结构如图3-3所示。图3-3 LCD 12864液晶显示器内部结构图我们从LCD12684液晶显示器的内部结构图和单片机的引脚,可以简单画出一个原理图,把液晶显示模块与单片机进行连接,这部分在我们编写程序时也有一个铺垫作用,先确定一下单片机的引脚,定义单片机引脚的功能,液晶显示器与单片机的连接如图3-4所示。从图3-4可以看出:LCD12864液晶显示器的数据引脚DB0到DB7分别连接到单片机引脚的P20到P27引脚,BLA、VDD引脚连接电源VCC,液晶显示模块的GND和BLK都接地,RS 、RW、 EN、 PSB、 NC、分别连接单片机的P10、P11、P12、P14、P13引脚, V0引脚和VOUT引脚用于调节液晶显示器的对比度。图3-4 液晶模块电路连接图在这里我们结合硬件电路的实物连接用汇编语言先进行位定义具体代码如下:sbit LCD_RS=P10;sbit LCD_RW=P11;sbit LCD_E=P12;sbit LCD_CS2=P14;sbit LCD_CS1=P13;sbit LCD_RST=P37;我们把单片机的P10引脚定义为LCD液晶显示器的寄存器选择端,把P11引脚定义为LCD液晶显示器的读写选择端,把P12引脚定义为LCD液晶显示器的使能端,P13、P14定义为LCD显示器的左屏选择、右屏选择,P37引脚定义为LCD的复位端。3.4 复位开关电路当外部电路接通电源,再按下自锁开关的时候,外部振荡器起振,这是只要给单片机的RST引脚两个机器周期就可以完成系统的复位功能,这次系统设计采用的是上电自动复位,再打开自锁开关的一瞬间,复位电路的电容器两端的电压不能突变,要经过一段时间的充电,而单片机上的RST引脚上的电平是VCC和电容的电平之差,刚开始RST引脚的电平与VCC的电平相同,但随着充电的进行,电容器两端的电压不断上升,RST引脚的电平逐渐下降5,查阅资料后得知,RST引脚只需要保持10ms以上的高电平系统就可以完成复位。因此这次系统设计的复位电路是使用10uf的电容充放电串联一个10K欧姆电阻进行分压,完成系统电源开关控制同时完成系统复位功能。如图3-5所示。图3-5 复位电路3.5 矩阵键盘电路本次设计的游戏共有6个可供玩家操作的按钮,分别是左右两个方向键用于控制方块图形的左右移动位置,下落键用于加速方块图形的下降,旋转键用于改变图形的形状即方块按照顺时针旋转得到的姿势,当在游戏过程中出现需要暂停的情况,可以通过按下暂停键对游戏当前进度进行临时保存,当再次按下暂停键时可以继续游戏,在玩家选择好游戏难度并且确认进入游戏时,可以通过按下确认键进行进入游戏,硬件矩阵键盘与单片机的硬件连接为:矩阵键盘的左键与单片机的P31引脚连接,右键与单片机的P32引脚连接,旋转键与单片机的P34引脚连接,下落键与单片机的P30引脚连接,暂停键与单片机的P32引脚连接,确认键与单片机的P35引脚连接,公共端接地,原理图如图3-6所示。图3-6 矩阵键盘电路4 系统软件平台开台当完成系统硬件总体方案部署,确定单片机型号以及电路设计后,下面来进行游戏程序设计。在整个单片机应用系统设计中,单片机的游戏程序设计至关重要。4.1 系统软件开发环境每一种程序语言的开发都需要一个合适的开发环境,C51程序设计语言也不例外,在单片机的程序开发设计中,我们在工作过程中最常使用的软件是Keil Vision系列软件,它是Keil Software公司推出的51系列兼容单片机软件开发系统。这次程序设计使用的就是这家公司的第4代Keil软件Keil Vision4。它包括C编译器,宏汇编,库管理,仿真调试,并且向下兼容版本,在程序开发过程中使用十分方便5。软件开发界面如图4-1所示。图4-1 Keil Vision4开发软件4.2 游戏玩法及实现的主要思路(1)游戏玩法:通过电源线连接外部5V稳定电源,然后玩家按下自锁开关,也就是系统的开关键,等待单片机进入游戏欢迎界面,按下确认键进入游戏,选择合适的下落速度也就是选择适合自己的游戏难度,按下确认键,游戏进入游戏的主画面,游戏屏幕左侧显示当前玩家获得的分数,和游戏当前的游戏难度,并显示提示下一个下落方块图形,中间为游戏区,右侧为系统提示玩家系统的状态,以便给玩家更好的游戏体验,在游戏区,屏幕上方会随机出现一个方块按照难度以不同的速度下落,玩家通过外部矩阵键盘的操作,控制方块下落的位置,和方块的姿势,以便于消除某一行,随着消除行数的增多玩家获得的分数增多,方块下落的速度也会增加,获得更高的分数。为了刷新最高的分数,该游戏没有游戏通关结局,提供给玩家一个挑战自我的训练机会,在游戏过程中,由于其他原因需要暂时离开游戏的情况,可以选择暂停键,暂停游戏,再次按下暂停键可继续游戏。键盘按键功能如图4-2所示。图4-2 按键功能提示图(2)游戏设计的主要思路: 对于本次设计而言,玩家在接通电源后,系统初始化液晶显示器,执行清屏程序,当玩家选择好难度进入游戏后,随机生成一个图形,提交给当前图形变量,然后系统再随机生成一个图形作为下一个即将出现的图形提交给提示图形变量,绘制当前图形和提示图形并且绘制由按下左,右,下,旋转的按键操作后的当前图形。经过按键操作后,判断图形是否到底,如果没有到底,图形下降一行,绘图一次;如果图形到底,判断是否满行,如果没有满行,提示图形变量赋值给当前图形变量,再随机生成一个提示图形赋值给提示图形变量,绘制当前图形变量然后回到按键操作循环判断,如果某一行满,则先判断一下表格是否满了,当表格没有满的时候,消除满的一行并把上面的行数据下移并置清行变量为true,当前图形标志变量为false。若表格满了则清除所有数据,清屏,显示游戏结束画面,游戏结束。游戏运行的主要流程图见下页如图4-3所示。行满了吗表格满了吗消除行并把上面的行数据下移并置清行为true、当前图改变为false绘图(游戏结束)Y游戏结束Y绘图一次图形到底了吗根据变化绘图(绘提示图和当前图形)随机生成一个图形交给提示图形变量开始随机生成一个图形交给当前图形变量按键处理绘制当前图形位置提示图变当前图形随机生成提示图绘制当前图YNNNY图形下降一行清除所有数据图4-3 游戏运行的流程图4.3 游戏运行过程中重要程序和算法4.3.1 液晶图形显示程序(1)俄罗斯方块图形缓存数据函数我们把俄罗斯方块的游戏区域称作为地图,比如可以看成一个U字型的容器。LCD12864液晶显示器总共有12864个像素点,经过与实物对比考察,每一个方块占用LCD12864液晶显示器的44个像素点看起来比较直观,大小也比较合适。如图4-4所示。本次设计中游戏区地图的大小为4064个像素点,可完全容纳方块1016个方块。游戏中共有7种方块图形分别是J型、L型、S型、Z型、I型、T型和O型,如图4-5所示。每种方块又可以旋转,得到4种姿势。图4-4 每个方块的像素点 图4-5-1 J型 图4-5-2 L型 图4-5-3 S型 图4-5-4 Z型 图4-5-5 I型 图4-5-6 T型 图4-5-7 O型图4-5 游戏中7种方块类型这7种图形本质上都是由16个方块(这里把44个像素点直接看成一个方块)组成的正方形,下面以L型为例,我们来研究怎样把图形的数据保存下来,如图4-6所示。图4-6 L型图的数据存储 我们将这些图形转化为数据,每个方块代表1位(bit)(实心代表1,空心代表0),这样一个方块可以保存在2个字节(Byte)中,转化的方式如图4-5所示,先把每一行按照二进制进行转换,然后再按照从高到低转化为十六进制进行保存。这样每个图形有4种姿势,一共有7种图形,我们可以通过运用Switch Case语句进行保存每个图形的类型和形状。具体代码如下:unsigned int box_read_data(unsigned char tpmode,unsigned char tpshape)unsigned int tpbox;switch(tpmode)case 0: switch(tpshape)/ L型数据存储case 0: tpbox=0xe800;break;case 1: tpbox=0xc440;break;case 2: tpbox=0x2e00;break;case 3: tpbox=0x88c0;break;default:;break;/完整代码请见附录Breturn(tpbox);(2)开始结束画面显示函数点阵图形型液晶显示模块除了可以显示中文信息外,另一个优势是可以显示图形,图形的点阵信息可以逐个查看像素点的黑白值,为了更快地得到图像的点阵信息,得到任何一个图形的点阵信息,可以选择一个字模提取软件,本次设计使用的是CharacterMatrix 软件,把图片转化为黑白图用字模提取程序得到点阵信息7,我们把这段代码保存到pic.c子程序中如图4-7所示。图4-7 游戏开始界面点阵信息(3)游戏界面布局程序及数字图形字模本次的游戏区域即地图的大小为1016,我们需要定义一个游戏点阵缓存为Box_Ram_data函数,为LCD液晶显示器提供缓存区域。unsigned int code Box_Ram_data=0x2004,0x2004,0x2004,0x2004,0x2004,0x2004,0x2004,0x2004, 0x2004,0x2004,0x2004,0x2004,0x2004,0x2004,0x2004,0x2004,0xffff,0x0000,0x0000;游戏点阵缓存1016(用前十位表示)(1代表亮,0代表灭),共十六行,多出来的三行是为了能让图形落到最低位置,显示行初值为0X2004表示左右边界。游戏中除了7种俄罗斯方块图形外,还有一些人机互动的提示,这些显示同样也需要进行保存,原理与方块图形的存储大致相同,首先计算出每个字体或者图案所占的像素点,然后把这些像素点按照二进制进行转换,转换后再按照一定的顺序保存为十六进制。点阵信息如图4-8所示。图4-8 其它点阵信息4.3.2 方块属性的数据结构方块的属性有方块的类型(mode7种)、形状(shape4种)、对应的位置坐标(X,Y)、和方块缓存,所以我们定义一个结构体类型,包含这几个成员,代码如下:structunsigned char mode;/类型unsigned char shape;/形状unsigned char x;/x坐标unsigned char y;/y坐标unsigned int box;/定义方块缓存s_box;4.3.3 基本显示函数对于显示就是把显示缓存区的数据显示到显示器上,于是需要一个函数display_basic()来进行显示。代码如下:void display_basic()unsigned char i;for(i=0;i8;i+)LCD_display_byte(GAME_LOCATION,i,0xff);LCD_display_byte(GAME_LOCATION+41,i,0xff);其中LCD_display_byte(x,y, tpdata)为LCD显示一个字节函数,x代表x坐标,y代表y坐标,tpdate代表需要显示的数据。4.3.4 LCD初始化函数首先让LCD12864液晶显示器复位操作,然后经过两次延迟,再把复位操作取消,通过调用写指令函数对LCD12864左右屏进行显示,对于左屏,首先打开显示设置,设置显示初始行为第一行,在进行页面地址设置,把列地址设为0,同理对右屏也进行相同的操作如此就完成了LCD初始化。具体实现代码如下:void LCD_initialize()LCD_RST=0;_nop_();_nop_();LCD_RST=1;LCD_W_code(0x3f,0);LCD_W_code(0xc0,0);LCD_W_code(0xb8,0);LCD_W_code(0x40,0);LCD_W_code(0x3f,1);LCD_W_code(0xc0,1);LCD_W_code(0xb8,1);LCD_W_code(0x40,1);4.3.5 游戏初始化函数初始化函数主要包括方块初始化,显示初始化,首先方块下落累加寄存器置为0,下一个方块图形类型为第6个及(T字型),形状为第2个,清行函数置为0,游戏结束标志位为0,暂停游戏标志位为0,执行清屏函数,定时器0累加寄存器置为0,调用基本显示函数,调用分数,速度函数,初始化分数速度数值。代码如下:void game_initialize()box_down_reg=0;next_mode=6;next_shape=2;destroy_row_num=0;game_over_flag=0;pause_game_flag=0;LCD_clear();time0_reg=0;display_basic();LCD_display_word(score_data,24,0,3);LCD_display_word(speed_data,24,3,3);show_score_num(3,1);show_speed_num(13,4);4.3.6 游戏主函数首先调用游戏开始界面显示函数,液晶屏显示游戏名称,然后调用游戏界面布局函数及相关字模显示函数,把游戏结束标志位为0表示游戏未结束,调用方块生成函数,调用方块载入函数,调用方块映射游戏点阵缓存函数,给方块下落累加寄存器赋值,调用定时器0初始化函数,如果游戏结束标志位置1,表示游戏结束,打破循环,调用游戏结束显示函数,当游戏结束后关闭单片机中断。代码如下:void Tetris_main()unsigned char i;for(i=0;i19;i+)Box_Rami=Box_Ram_datai;LCD_draw(mpic);game_over_flag=0;box_build();box_load();/next_box();box_to_Box_Ram(s_box.x,s_box.y,s_box.box);box_down_reg=(20-(speed_num1)-1); time0_initialize();while(!game_over_flag)game_button();EA=0; 4.3.7 速度选择函数首先设置循环标志位为1,调用清屏程序,然后调用LCD显示数据函数显示输出,再套用一个while循环用switch case语句选择游戏难度,并赋给相应的方块下落的初始速度值。代码请见附录B。4.3.8 方块生成函数俄罗斯方块类型和形状的绘制在理想状态下应该是随机的,但是在实际操作中其实用的方式是伪随机的方式,当下一个图形的类型和形状(初始时的赋值)被赋值给当前图形时下一次生成的类型和形状是由定时器的置取余得到的数值,用这种方式来产生随机数具体代码如下:void box_build()s_box.mode=next_mode;s_box.shape=next_shape;s_box.x=3;s_box.y=0;next_mode=TL0%7;next_shape=TL0%4;show_next_box();4.3.9 检查覆盖函数在游戏过程中,检查方块是否重叠,即是否到底,然后在点阵缓存中,先消去原有砖块的位置,类型,形状,再在缓存中加入新的方块。代码如图4-9所示:图4-9 检查覆盖函数5 游戏的调试与仿真5.1 游戏程序的调试任何游戏程序的开发都离不开调试和编译,同样单片机在实际使用前,均需要进行代码仿真。单片机仿真测试和程序设计是紧密相关的。在实际设计过程中,通过仿真测试,可以及时发现问题,确保及程序的正确性。当发现问题时,需要重新进行修改设计,直到程序通过仿真测试,本次仿真测试环境选择的是美国Keil Software公司的Keil Vision 4软件,和英国Lab center electronics 公司的Proteus 8.7软件。在游戏程序调试过程中最好的方式是采用分块调试,把整个程序按照每个模块单独调试,这样就能很快发现问题,并且修复BUG。在调试过程中设置好断点,单步调试,逐语句,逐过程调试并且结合监视窗口监视变量的变化,找出问题所在8。本次游戏设计调试结果如图5-1所示。图5-1 游戏程序调试结果5.2 硬件电路的仿真本次使用的硬件仿真软件为Proteus 8.7,Proteus 8.7的UI界面比之前的前几个版本的界面更加友好,其中包括整个设计工作流程中的功能改进。此版本涉及文件格式更改,该更改不与旧版本的软件向后兼容。在仿真方面,对于Arduino产品的VSM进行了重大改进,包括用于添加IDE内部屏蔽和突破的外围图库以及拖放方法放置,以便于控制,自动布局9。经过布局,绘制仿真得到结果如图5-2所示。图5-2 硬件电路仿真5.3 实物验证及演示在游戏程序调试通过和硬件仿真成功之后,最后一步就是把生成的HEX文件烧录到单片机中进行实物验证结果如图5-3所示。图5-3 实物验证及演示经过多次烧录和少许硬件电路的修改,实物真机验证与软件仿真结果完全吻合,在验证过程中,游戏机系统表现稳定,游戏程序也十分稳定,在与真机环境中没有出现任何BUG。本次设计圆满完成!结 论通过这次毕业设计让我重新巩固了大学四年间所学到的东西,从搜集资料,整理资料,方案确立,到自己动手进行实物焊接,软件程序编写调试,每一个过程都需要细心和耐心,而选择这个课题也是因为自己想选择一个硬件和软件都能切合的课题,能让自己对单片机和程序开发都能有一个深入的了解,游戏不是最主要的,主要的是在开发和制作的过程中,对程序的理解,单片机灵活的运用。在本课题的设计过程中,最为复杂的就是游戏程序的调试环节,最耗用时间的部分是方块与下面的图形相遇的处理。经过多次查阅资料和老师指导最终调试通过。在本课题硬件设计过程中,相对问题不是很多,主要出现在液晶屏的显示方面,最初液晶屏不通电,到不显示图案,再到图案显示乱码,经过一次次的排查和检测最终解决了问题。这次设计虽然过程中遇到了很多困难,每天都在图书馆和自习室编写代码和调试代码,翻阅了很多书籍和相关资料,最终完成之时也是收获了满满的成就感,在这次设计中,自己的动手能力、独立思考能力得到了锻炼和提升,帮助我更加清晰地认识自我,对以后的工作和生活有很大的帮助。致 谢在这次设计中我遇到了很多的困难,开发进程会因为函数的BUG,或者错误而受到阻碍,然而找到这些错误并且修正它们耗费了大量的的时间与精力,在这一过程中尤其感谢王胜轩老师的指导,老师对代码算法的理解十分的深入,有时候老师的一句话就能使自己研究了半天的问题豁然开朗,程序算法的思路以及单片机内部中断定时来响应外部按键的操作,这些都是需要对单片机内部结构有十分清晰的了解和运用,然而在实际过程中,平时只注于考试和解题的我们会找不到问题出现的地方,这些需要自己动手操作,需要一定的经验,而老师在这一方面经验比我们充足的多,所以在此特别感谢王老师的指导和同学的帮助!参 考 文 献1 全国大学生电子设计竞赛组委会.第五届全国大学生电子设计竞赛获奖作品选编.北京理工大学出版社,2005. 10-172 康华光,陈大钦.电子技术基础模拟部分第四版. 第四版.北京:高等教育出版社,1999.82-1553 康华光,邹寿彬.电子技术基础数字部分第四版. 第四版.北京:高等教育出版社,2000. 83-1554 周坚如何用C语言编写计数器程序无线电合订本,2004年(下):213-2145 黄智伟,王彦,陈文光.全国大学生电子设计竞赛训练教程.电子工业出版社,2005.304-314 6 张万奎模拟电子技术M湖南湖南大学出版社,2005:226-2297 彭为,黄科,雷道仲.单片机典型系统设计实例精讲.电子工业出版社.2006.58 李广弟,朱月秀,王秀山.单片机基础.第2版.北京航空航天大学出版社,2001.13-719 梅丽风,王艳秋,张军等.单片机原理及接口技术.清华大学出版社,2004.296-32310 涂时亮等单片机软件设计技术.科学技术文献出版社.199811 席德勋现代电子技术D北京高等教育出版社,2002:121-12512 陆子明,徐长根.单片机设计与应用基础M.北京:国防工业出版社,2005 13 刘胜利.新型显示器电路分析.北京:电子工业出版社,1999.122-34414 胡伟单片机C程序设计及应用实例.北京:人民邮电出版社, 2003.1-24715 实用电子元器件手册.上海:上海科学技术出版社,1998.1-2116 Adrian Maxim,Ramin K.Poorfard,Richard A.Johnson,et al.A Fully Integrated 0.13-m CMOS Digital Low-IF DBS Satellite Tuner Using a Ring Oscillator-Based Frequency Synthesizer. IEEE Journal of Solid State Circuits. 200717 Lee Jri.High-Speed Circuit Designs for Transmittersin Broad-band Data Links. IEEE Journal of Solid-State CircuitsJ. 200618 Lim Kyoohyun,Park Chanhong,Kim Dalsoo,et al.A low-noise phase-locked loop design by loop bandwidth optimization. IEEE Journal of SolidState Circuits. 2000 附 录A本设计中的硬件结构原理图:附 录B本设计中的部分游戏程序代码:#include #includepic.c#include #define LCD_DATA P2#define button_delay 150#define button_acceleration 65 #define GAME_LOCATION 30sbit change = P34;sbit OK = P35;sbit up = P32;sbit down = P30;sbit left = P31;sbit right = P33;sbit LCD_RS=P10;sbit LCD_RW=P11;sbit LCD_E=P12;sbit LCD_CS2=P14;sbit LCD_CS1=P13;sbit LCD_RST=P37;structunsigned char mode;unsigned char shape;unsigned char x;unsigned char y;unsigned int box;s_box;unsigned int box_read_data(unsigned char tpmode,unsigned char tpshape)unsigned int tpbox;switch(tpmode)case

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论