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

下载本文档

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

文档简介

1、基于单片机的8*8俄罗斯方块游戏摘要:本文集中论述了如何使用AT89C52单片机来实现8*8俄罗斯方块游戏,该系统能具体根据8*8俄罗斯方块游戏的基本规则进行游戏,并通过单片机控制点阵屏显示其8*8俄罗斯方块游戏界面。系统具有实用实时性强、操作简单、娱乐性能好,扩展性能较好价格便宜等特点。关键词:单片机;AT89C52;点阵屏显示管;俄罗斯方块游戏一 前言汇编语言易学易用的特点,特别适合于初学者学习单片机系统编程。随着21世纪信息社会的到来,计算机在人们的工作和生活中的深入,要求我们越来越多地与计算机打交道,为了使用户在繁忙的日程工作中得到放松,于是出现了各种各样的休闲软件,如聊天工具,游戏等

2、等。于是我们着手设计开始一个这样的游戏软件。通过汇编语言的学习,我初步掌握了汇编语言的最基本的知识,于是在王筝老师的指导下动手用汇编语言编写俄罗斯方块游戏。无可争议,俄罗斯方块是有史以来最伟大的游戏之一。它是永恒的娱乐经典,但它实际上又和那些传统的经典娱乐方式不同,因为它的本质是电子化的,所以它的确属于现代产物。俄罗斯方块举世闻名的游戏性,在该游戏新鲜出炉时就显得非常直观。某些与坠落的玩具碎片和它们的形状有关的东西,使得哪怕新手也会很自然地企图把它们排列起来,并加以适当组合,就好似俄罗斯方块触动了我们某些内在的感官,使得哪怕是我们当中最杂乱无章的人也要把事情整理妥当。在曾经发布过的所有游戏中,

3、俄罗斯方块还被认为是仅有的一个能够真正吸引广泛人群的作品。为了怀念经典,也为了能够给大多的计算机用户在工作之余找到一个休闲、娱乐的一个方式,我们小组开始着手用汇编语言开发一个经典的俄罗斯方块游戏,本文就是介绍一种采用52系列单片AT89C52为中心器件来实现8*8俄罗斯方块游戏,下面就设计过程及关键技术作一些具体介绍。 该文将主要为硬件和软件两部分来介绍如何用AT89C52实现8*8俄罗斯方块游戏。二 设计思路,方案比较、设计与论证1、单片机的总体设计思路: 2、电源提供方案:为使模块稳定工作,须有可靠电源。我们考虑了两种电源方案。方案一:采用独立的稳压电源。此方案的优点是稳定可靠,且有各种成

4、熟电路可选用;缺点是各模块都采用独立电源,会使系统复杂,且可能影响电路电平。方案二:采用单片机控制模块提供电源。改方案的优点是系统简明扼要,节约成本;缺点是输出功率不高。综上所述,我们选择第二种方案。3、显示界面方案:该系统要求完成游戏界面方块的移动,旋转等功能。基于上述原因,我们考虑了三种方案:方案一:完全采用数码管显示。这种方案只显示有限的符号和数码字苻,无法胜任题目要求。方案二:完全采用点阵式LED 显示。这种方案实现可行,这种方案既满足系统功能要求,又减少了系统实现的复杂度。我们决定采用方案二以实现系统的显示功能。4、输入方案:题目要求系统能手动复位游戏、左右下键处理,旋转键处理。我们

5、讨论了两种方案:方案一:采用矩阵按键。该方案的优点是:充分利用I/O 口。若用该方案,可提供较多I/O 口,但按键少,体现不了矩阵按键的优势,而且操作起来稍显复杂。方案二: 采用独立按键,直接在I/O口线上接上按键开关。因为设计时精简和优化了电路,所以剩余的口资源还比较多,我们使用四个按键,分别是旋转键,下键,左键,右键。由于该系统对于8*8俄罗思方块游戏控制,只用单片机本身的I/O 口就可实现,且本身的计数器及RAM已经够用,故选择方案二。三 8*8俄罗思方块游戏硬件系统设计(一)、单片机最小系统:1、电源(5v的稳压电源,通过整流,滤波,稳压得到)2、复位电路(1)自动上电复位(RC延时电

6、路)当刚接上电源的瞬间,电容C两端相当于短路,即相当于给RESET9号引脚一个高电平,等充电结束时(这个时间很短暂),电容相当于断开,这时已经完成了复位动作。(2)手动复位电路3、晶振电路(提供时钟脉冲)18,19号管脚,如下图分别接30pf的电容。(二)、点阵显示屏及其驱动电路: 三极管采用PNP型,发光二极管采用共阳型。单片机的P1口作为数据端,P2口作为片选端。 点阵显示屏及其驱动电路图 点阵显示屏及其驱动电路仿真图 (三)、独立按键电路:按键K1定义为右键,按键K2定义为左键,按键K3定义为下键,按键K4定义为旋转键。按键电路图 按键电路仿真图(四)、8*8俄罗斯方块游戏系统硬件:(1

7、)选用设备:AT89C51芯片一片,USB数据线一根,共阳极的点阵屏一个,驱动三极管八个,开关按键五个,导线,限流电阻若干。系统总框图如图所示。硬件系统总框图(2) 8*8俄罗斯方块游戏控制线路图(3) 系统工作原理1) 编程设置好俄罗斯方块游戏规则,通过编程器写入89C51单片机系统。2) 由89C51单片机通过P1口输送数据,P2口片选。3) 通过89C51单片机的RESET位来控制系统是工作或设置初值,为0就对系统进行初始化,为1系统就开始工作;通过AT89C51单片机的P3.2,P3.3,P3.4位来控制游戏方块的右移,左移,下移,P3.5位来控制俄罗斯方块的旋转。四 8*8俄罗斯方块

8、游戏的软件设计系统软件的设置主要包含延迟时间设计、方块显示程序设计、判断按键程序、方块旋转程序、判断在下移,左移,右移,旋转时是否冲突程序、俄罗斯方块消行程序以及游戏结束界面显示程序设计。我们将对每一步的具体如何实现展示给大家。下面为俄罗斯方块游戏主程序流程图:;/主程序/MAIN:JNBSS,$;判断中断是否到来CLR SS ;中断标志清0ACALL HECHENG;调用移动与背景合成程序ACALL DISPLAY;调用动态显示子程序ACALL JIANPAN ;调用键盘扫描程序INC R3 ;等待1秒CJNE R3,#50,MAINMOV R3,#0ACALL MOVINGDOWN ;1秒

9、到了,下移ACALL JIESHU ;调用结束jnb liyongzhi, llllliyongzhi555:movr4,#50oooo: call jieshuhou djnz r4,oooomov r4,#50oooo1: call jieshuhou1 djnz r4,oooo1 mov r4,#50oooo2: call jieshuhou2 djnz r4,oooo2 ljmp liyongzhi555llll: JB CHONGTU,LEE_A ;判断是否冲突 JNB CHONGHE,MAIN ;判断是否需要合成LEE_A: ACALL BACKHECHENG ;移动合成到背景 A

10、CALL XIAOHANG ;调用消行子程序 ACALL QINGCHU ;清除移动区数据 ACALL CHUSUIJI ;出随机数ACALL SUIJI ;通过随机数取出积木 ACALL TIHUAN3 ;新积木送旋转区 ACALL TIHUAN ;再送移动区 MOV SHUCHU,#00H ;关屏幕 AJMP MAIN11.延时时间程序设计其中延迟时间设计方法有两种:一种是采用软延时的方法;另一种是利用MCS- 51内部定时器产生溢出中断来延迟时间。具体方案设计如下:(1) 定时器初值计算定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL上的。它是以加法记数的,并能从全1到全0时

11、自动产生溢出中断请求。因此可以把计数器记满为零所需的计数值设定为C和计数初值设定为Tc可得到如下计算公式:Tc=M- C式中, M为计数器总值,且在方式1时M为216,( 在方式0时M的值为213,在方式2和3为28)由此可知:当工作于方式1时,定时时间最长,所以将定时器工作于方式1,即M=216=65536;同时设定单片机的主脉冲频率fosc=12MHz。(2) 软件计时1秒的方法在主程序中设定一个初值为0的软件计数器和使T0定时1秒。CPU先使软件计数器加1,然后判断它是否为50,若为50表示1秒已到。(3) 定时器计时参考程序代码;/中断初始化/;输入: 无;输出: T0JISUQI0,

12、T0JISUQI1,TH0,TL0;功能:中断初始化ZDCUSIHUA: MOV TMOD,#01H ;T0方式1 MOV DPTR,#65536-20000 ;赋初值 MOV TH0,DPH MOV TL0,DPL MOV T0JISUQI0,DPH ;保护定时器初值 MOV T0JISUQI1,DPL SETB TR0 ;开启中断 SETB ET0 SETB EA RET ;/中断子程序/;输入:36H,35H;输出:36H,35H,SS;功能:置中断标志位为1ZDUAN: MOV TH0,T0JISUQI0 ;定时器重新赋初值 MOV TL0,T0JISUQI1 SETB SS ;秒标志

13、位置1 RETI;/延时子程序/;功能:延时一段时间,稳定点阵屏的显示DELAY: MOV R7,#30DL: MOV R6,#40 DJNZ R6,$ DJNZ R7,DL RET;/等待1秒/ INC R3 ;等待1秒 CJNE R3,#50,MAIN MOV R3,#0 ACALL MOVINGDOWN ;1秒到了,程序往下执行2.方块显示的设计当点阵屏按照给定的变化规律进行运行时,采用动态显示原理。单片机的P1口作为数据端,P2口作为片选端。达到显示俄罗斯方块的目的。 动态显示原理:同一时刻,最多只有一位数码管工作,并且所有数码管以一定的频率交替循环工作。当频率较低时,看到的显示效果是

14、闪烁的、不稳定的。当频率较高时,由于人眼的视觉暂留现象,就会看到稳定显示的数字了。俄罗斯方块显示仿真图方块显示参考程序如下:;/显示子程序/;输入:XIANSHOW0-7;输出:SHUCHU;功能:显示DISPLAY: MOV R0,#XIANSHOW0 MOV R2,#7fHNEXT_II: MOV PIANXUAN,R2 MOV A,R0 CPLA MOVSHUCHU,A ACALL DELAY MOV SHUCHU,#0FFH INC R0 MOVA,R2 RrA MOVR2,A ;片选 CJNE R0,#40H,NEXT_II RET3.判断按键程序 由于按键只需要四个,采用独立按键就

15、足以满足要求。当按键按下,则相应的I/O口置0。判断按键是否按下,需通过编程来完成:;/键盘子程序/;输入:RETURN/LEFT/LIGHT/DOWNKEY;输出:无;功能:判断按键JIANPAN: JB RETURNKEY,TAIQI ;旋转按键 JB RETURNKEYBZ,TAIQI SETB RETURNKEYBZ ACALL RETURNMOVINGTAIQI: JNB RETURNKEY,PANZUO CLR RETURNKEYBZPANZUO: JB LEFTKEY,TAIQI2 ;左移按键 JB LEFTKEYBZ,TAIQI2 SETB LEFTKEYBZ ACALL LE

16、FTMOVINGTAIQI2: JNB LEFTKEY,PANYOU CLR LEFTKEYBZPANYOU: JB RIGHTKEY,TAIQI3 ;右移按键 JB RIGHTKEYBZ,TAIQI3 SETB RIGHTKEYBZ ACALL RIGHTMOVINGTAIQI3: JNB RIGHTKEY,PANXIA CLR RIGHTKEYBZPANXIA: JB DOWNKEY,TAIQI4 ;下移按键 ACALL MOVINGDOWNTAIQI4: RET 4.方块旋转程序游戏过程中方块可以自由旋转,俄罗斯方块的旋转主要将方块的位置加以变换得到的,当然首先要判断是否满足旋转的要求。

17、然后在旋转区将方块图形进行旋转,再送往移动区。程序如下:;/ /旋转判断子程序/;输入:MOVESHOW0-MOVESHOW7;输出:MOVESHOW0-MOVESHOW7;功能:没有冲突和处边情况,积木旋转90度RETURNMOVING:;/判断左边是否处边/ CLR C ;进位标志清0 MOV R0,#MOVESHOW0 ;判断能不能左移NEXT_CX: MOV A,R0 RLC A ;如果CY为1表示模型 JC NEXT_11 ;已经碰到边界 INC R0 ;因为8行,所以要判断8次 CJNE R0,#48H,NEXT_CX AJMP PANYOUBIANNEXT_11: MOV A,X

18、_X ;判断是否是中心处边 CJNE A,#7,PANYOUBIAN AJMP OUT_CD ;/判断右边是否处边/PANYOUBIAN: MOV R0,#MOVESHOW0 ;判断能不能右移NEXT_MX: MOV A,R0 RRC A ;如果CY为1表示模型 JC NEXT_12 ;已经碰到边界 INC R0 ;因为8行,所以要判断8次 CJNE R0,#48H,NEXT_MX AJMP PANXIABIANNEXT_12: MOV A,X_X ;判断是否是中心处边 JZ OUT_CD;/判下边是否处底/ PANXIABIAN: MOV R7,MOVESHOW7 CJNE R7,#0,OU

19、T_CD ;为1表示碰到边框;/开旋转子程序/;输入:SUIJISHU;输出:无;功能:开始旋转 KAIXUANZHUAN: ; MOV A,SUIJISHU ;CJNE A,#0,NEXT_BF ;方块不旋转 ;AJMP OUT_CD NEXT_BF: ACALL CUNSHU ;移动区数据送显示区暂存 ACALL CUNSHU3 ;旋转区数据送显示区暂存 ACALL ZHUANDONG ;调用转动子程序 ACALL QINGCHU ;调用清除子程序 ACALL TIHUAN ;调用替换子程序 ACALL YIDIYIDONG ;调用异地移动子程序 ACALL CHONGTUPANDUAN

20、;旋转是否冲突 JNB CHONGTU,OUT_CD ACALL FANGSHU ;恢复移动区数据 ACALL FANGSHU3 ;恢复旋转区数据OUT_CD: RET ;/异地移动子程序/;输入:X_X,Y_Y;输出:无;功能:旋转数据送到积木原始位置 YIDIYIDONG: MOV R4,X_XTANG15: DJNZ R4,YIDIZHUAN ;X坐标减1为0表示水平位置没有移动 MOV R5,Y_YTING15: DJNZ R5,YIDIZHUAN3;Y坐标减1为0表示水平位置没有移动 AJMP OUT_BACKYIDIZHUAN: ACALL ZUOYI AJMP TANG15YID

21、IZHUAN3: ACALL XIAYI AJMP TING15OUT_BACK: RET;/转动子程序/;输入:SAVE1_1-SAVE1_3;输出:SAVE1_1-SAVE1_3;功能:旋转区数据旋转90度;/外旋/ZHUANDONG: MOV C,23H.0 ;数据暂时存储 MOV 26H.0,C MOV C,25H.0 ;9-3 MOV 23H.0,C MOV C,25H.2 ;7-9 MOV 25H.0,C MOV C,23H.2 ;1-7 MOV 25H.2,C MOV C,26H.0 ;3-1 MOV 23H.2,C;/内旋/ MOV C,23H.1 ;数据暂时存储 MOV 26

22、H.0,C MOV C,24H.0 ;6-2 MOV 23H.1,C MOV C,25H.1 ;8-6 MOV 24H.0,C MOV C,24H.2 ;4-8 MOV 25H.1,C MOV C,26H.0 ;2-4 MOV 24H.2,C RET5.冲突判断程序 俄罗斯方块游戏区图形框看成移动区、旋转区、背景区几部分构成,判断是否遇到边界,是否移动区的数据与背景区的数据重和。;/冲突判断子程序/;输入:MOVESHOW0-7 AND BACKSHOW0-7;输出:无;功能:判断在下移,左移,右移,旋转时是否冲突CHONGTUPANDUAN: MOV R0,#BACKSHOW0 MOV R1

23、,#MOVESHOW0GOTO_A: MOV A,R0 ANL A,R1 CJNE A,#00H,TANG_A1 INC R0 INC R1 CJNE R0,#38H,GOTO_A CLR CHONGTU RETTANG_A1: SETB CHONGTU ;冲突标志置1 RET6. 消行程序我们的这个俄罗斯方块游戏,其实在游戏区图形框可以看成是由许多的小方块组成,方块运动的过程就是造型里方块显示或者隐藏,就像现在的霓虹灯效果一样,上一层的消失,下一层的显示,这样,从视觉效果可以看到方块的下落运动效果。方块在下落的过程中会自动判断每一行方块是否满行,如果满行时,就会将这一行小方块的隐藏,在将上面

24、的小方块向下移动。当有多行同时出现这样情况时使用递归调用,实现连续消行。具体程序如下:;/消行子程序/;输入: BACKSHOW0-7;输出: BACKSHOW0-7;功能: 消掉全亮的行XIAOHANG: XH: MOV R7,#0 ;R7赋予初值,一共判8行 MOV R0,#BACKSHOW7;从最底行开始判断,但当消了一行后,37H内的数据即为XH_1:;上一行的数据,即继续判断上行需要消行否 MOV A,R0 ;首先判断每一行是否为0FF CPL A ;数据取反 JZ XIAOCHU;如果为0(原来就为0FF),则可以去消行。 DEC R0 ;判断下一行需要消行否 INC R7 CJN

25、E R0,#3FH,XH_1 RETXIAOCHU: MOV R0,#0 ;把需要消行的那一行数据清0X_H: MOV A,R0 ;消行当前行赋予ACC,暂存 MOV R1,A DEC R1 ;上一行往下移 MOV A,R1 ;上一行数据移下来,移到消行所在行 MOV R0,A DEC R0 ;整体往下移动一格 CJNE R0,#2FH,x_H ;30H为最上行,判断移完没有 CJNE R7,#08,XH ;判断到顶行为止 RET7.游戏结束界面显示程序当背景区最上面的一行有方块,说明游戏结束,则进入游戏结束界面,游戏中结束后设计产生有意思的画面,给你带来乐趣。具体程序如下:;/结束子程序/

26、JIESHU: MOV R0,#BACKSHOW0 MOV A,R0 clrliyongzhi cjnea,#00h,lyz RETLYZ: setbliyongzhiRetjieshuhou: ;游戏结束后界面一 MOV XIANSHOW0,#40H MOV XIANSHOW1,#40H MOV XIANSHOW2,#40H MOV XIANSHOW3,#40H MOV XIANSHOW4,#40H MOV XIANSHOW5,#40H MOV XIANSHOW6,#40H MOV XIANSHOW7,#7fh ACALLDISPLAYretjieshuhou1: ;游戏结束后界面二 MOV

27、 XIANSHOW0,#00H MOV XIANSHOW1,#36H MOV XIANSHOW2,#49H MOV XIANSHOW3,#22H MOV XIANSHOW4,#14H MOV XIANSHOW5,#08H MOV XIANSHOW6,#00H MOV XIANSHOW7,#00HACALLDISPLAYRetjieshuhou2: ;游戏结束后界面三 MOV XIANSHOW0,#00H MOV XIANSHOW1,#22H MOV XIANSHOW2,#22H MOV XIANSHOW3,#22H MOV XIANSHOW4,#22H MOV XIANSHOW5,#22H MOV XIANSHOW6,#1CH MOV XIANSHOW7,

温馨提示

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

最新文档

评论

0/150

提交评论