基于单片机的88俄罗斯方块游戏.docx

上传人:b****3 文档编号:5549388 上传时间:2023-05-08 格式:DOCX 页数:25 大小:565.97KB
下载 相关 举报
基于单片机的88俄罗斯方块游戏.docx_第1页
第1页 / 共25页
基于单片机的88俄罗斯方块游戏.docx_第2页
第2页 / 共25页
基于单片机的88俄罗斯方块游戏.docx_第3页
第3页 / 共25页
基于单片机的88俄罗斯方块游戏.docx_第4页
第4页 / 共25页
基于单片机的88俄罗斯方块游戏.docx_第5页
第5页 / 共25页
基于单片机的88俄罗斯方块游戏.docx_第6页
第6页 / 共25页
基于单片机的88俄罗斯方块游戏.docx_第7页
第7页 / 共25页
基于单片机的88俄罗斯方块游戏.docx_第8页
第8页 / 共25页
基于单片机的88俄罗斯方块游戏.docx_第9页
第9页 / 共25页
基于单片机的88俄罗斯方块游戏.docx_第10页
第10页 / 共25页
基于单片机的88俄罗斯方块游戏.docx_第11页
第11页 / 共25页
基于单片机的88俄罗斯方块游戏.docx_第12页
第12页 / 共25页
基于单片机的88俄罗斯方块游戏.docx_第13页
第13页 / 共25页
基于单片机的88俄罗斯方块游戏.docx_第14页
第14页 / 共25页
基于单片机的88俄罗斯方块游戏.docx_第15页
第15页 / 共25页
基于单片机的88俄罗斯方块游戏.docx_第16页
第16页 / 共25页
基于单片机的88俄罗斯方块游戏.docx_第17页
第17页 / 共25页
基于单片机的88俄罗斯方块游戏.docx_第18页
第18页 / 共25页
基于单片机的88俄罗斯方块游戏.docx_第19页
第19页 / 共25页
基于单片机的88俄罗斯方块游戏.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的88俄罗斯方块游戏.docx

《基于单片机的88俄罗斯方块游戏.docx》由会员分享,可在线阅读,更多相关《基于单片机的88俄罗斯方块游戏.docx(25页珍藏版)》请在冰点文库上搜索。

基于单片机的88俄罗斯方块游戏.docx

基于单片机的88俄罗斯方块游戏

基于单片机的8*8俄罗斯方块游戏

摘要:

本文集中论述了如何使用AT89C52单片机来实现8*8俄罗斯方块游戏,该系统能具体根据8*8俄罗斯方块游戏的基本规则进行游戏,并通过单片机控制点阵屏显示其8*8俄罗斯方块游戏界面。

系统具有实用实时性强、操作简单、娱乐性能好,扩展性能较好价格便宜等特点。

关键词:

单片机;AT89C52;点阵屏显示管;俄罗斯方块游戏

 

一前言

汇编语言易学易用的特点,特别适合于初学者学习单片机系统编程。

随着21世纪信息社会的到来,计算机在人们的工作和生活中的深入,要求我们越来越多地与计算机打交道,为了使用户在繁忙的日程工作中得到放松,于是出现了各种各样的休闲软件,如聊天工具,游戏等等。

于是我们着手设计开始一个这样的游戏软件。

通过汇编语言的学习,我初步掌握了汇编语言的最基本的知识,于是在王筝老师的指导下动手用汇编语言编写俄罗斯方块游戏。

无可争议,《俄罗斯方块》是有史以来最伟大的游戏之一。

它是永恒的娱乐经典,但它实际上又和那些传统的经典娱乐方式不同,因为它的本质是电子化的,所以它的确属于现代产物。

《俄罗斯方块》举世闻名的游戏性,在该游戏新鲜出炉时就显得非常直观。

某些与坠落的玩具碎片和它们的形状有关的东西,使得哪怕新手也会很自然地企图把它们排列起来,并加以适当组合,就好似《俄罗斯方块》触动了我们某些内在的感官,使得哪怕是我们当中最杂乱无章的人也要把事情整理妥当。

在曾经发布过的所有游戏中,《俄罗斯方块》还被认为是仅有的一个能够真正吸引广泛人群的作品。

为了怀念经典,也为了能够给大多的计算机用户在工作之余找到一个休闲、娱乐的一个方式,我们小组开始着手用汇编语言开发一个经典的俄罗斯方块游戏,本文就是介绍一种采用52系列单片AT89C52为中心器件来实现8*8俄罗斯方块游戏,下面就设计过程及关键技术作一些具体介绍。

该文将主要为硬件和软件两部分来介绍如何用AT89C52实现8*8俄罗斯方块游戏。

二设计思路,方案比较、设计与论证

1、单片机的总体设计思路:

 

2、电源提供方案:

为使模块稳定工作,须有可靠电源。

我们考虑了两种电源方案。

方案一:

采用独立的稳压电源。

此方案的优点是稳定可靠,且有各种成熟电路可选用;缺点是各模块都采用独立电源,会使系统复杂,且可能影响电路电平。

方案二:

采用单片机控制模块提供电源。

改方案的优点是系统简明扼要,节约成本;缺点是输出功率不高。

综上所述,我们选择第二种方案。

3、显示界面方案:

该系统要求完成游戏界面方块的移动,旋转等功能。

基于上述原因,我们考虑了三种方案:

方案一:

完全采用数码管显示。

这种方案只显示有限的符号和数码字苻,无法胜任题目要求。

方案二:

完全采用点阵式LED显示。

这种方案实现可行,这种方案既满足系统功能要求,又减少了系统实现的复杂度。

我们决定采用方案二以实现系统的显示功能。

4、输入方案:

题目要求系统能手动复位游戏、左右下键处理,旋转键处理。

我们讨论了两种方案:

方案一:

采用矩阵按键。

该方案的优点是:

充分利用I/O口。

若用该方案,可提供较多I/O口,但按键少,体现不了矩阵按键的优势,而且操作起来稍显复杂。

方案二:

采用独立按键,直接在I/O口线上接上按键开关。

因为设计时精简和优化了电路,所以剩余的口资源还比较多,我们使用四个按键,分别是旋转键,下键,左键,右键。

由于该系统对于8*8俄罗思方块游戏控制,只用单片机本身的I/O口就可实现,且本身的计数器及RAM已经够用,故选择方案二。

 

三8*8俄罗思方块游戏硬件系统设计

(一)、单片机最小系统:

1、电源(5v的稳压电源,通过整流,滤波,稳压得到)

2、复位电路

(1)自动上电复位(RC延时电路)当刚接上电源的瞬间,电容C两端相当于短路,即相当于给RESET9号引脚一个高电平,等充电结束时(这个时间很短暂),电容相当于断开,这时已经完成了复位动作。

(2)手动复位电路

3、晶振电路(提供时钟脉冲)

18,19号管脚,如下图分别接30pf的电容。

(二)、点阵显示屏及其驱动电路:

三极管采用PNP型,发光二极管采用共阳型。

单片机的P1口作为数据端,P2口作为片选端。

点阵显示屏及其驱动电路图

点阵显示屏及其驱动电路仿真图

(三)、独立按键电路:

按键K1定义为右键,按键K2定义为左键,按键K3定义为下键,按键K4定义为旋转键。

按键电路图按键电路仿真图

(四)、8*8俄罗斯方块游戏系统硬件:

(1)选用设备:

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俄罗斯方块游戏的软件设计

系统软件的设置主要包含延迟时间设计、方块显示程序设计、判断按键程序、方块旋转程序、判断在下移,左移,右移,旋转时是否冲突程序、俄罗斯方块消行程序以及游戏结束界面显示程序设计。

我们将对每一步的具体如何实现展示给大家。

下面为俄罗斯方块游戏主程序流程图:

;/////////主程序/////

MAIN:

JNBSS,$;判断中断是否到来

CLRSS;中断标志清0

ACALLHECHENG;调用移动与背景合成程序

ACALLDISPLAY;调用动态显示子程序

ACALLJIANPAN;调用键盘扫描程序

INCR3;等待1秒

CJNER3,#50,MAIN

MOVR3,#0

ACALLMOVINGDOWN;1秒到了,下移

ACALLJIESHU;调用结束

jnbliyongzhi,llll

liyongzhi555:

movr4,#50

oooo:

calljieshuhou

djnzr4,oooo

movr4,#50

oooo1:

calljieshuhou1

djnzr4,oooo1

movr4,#50

oooo2:

calljieshuhou2

djnzr4,oooo2

ljmpliyongzhi555

llll:

JBCHONGTU,LEE_A;判断是否冲突

JNBCHONGHE,MAIN;判断是否需要合成

LEE_A:

ACALLBACKHECHENG;移动合成到背景

ACALLXIAOHANG;调用消行子程序

ACALLQINGCHU;清除移动区数据

ACALLCHUSUIJI;出随机数

ACALLSUIJI;通过随机数取出积木

ACALLTIHUAN3;新积木送旋转区

ACALLTIHUAN;再送移动区

MOVSHUCHU,#00H;关屏幕

AJMPMAIN1

1.延时时间程序设计

其中延迟时间设计方法有两种:

一种是采用软延时的方法;另一种是利用MCS-51内部定时器产生溢出中断来延迟时间。

具体方案设计如下:

(1)定时器初值计算

定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL上的。

它是以加法记数的,并能从全1到全0时自动产生溢出中断请求。

因此可以把计数器记满为零所需的计数值设定为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,T0JISUQI1,TH0,TL0

;功能:

中断初始化

ZDCUSIHUA:

MOVTMOD,#01H;T0方式1

MOVDPTR,#65536-20000;赋初值

MOVTH0,DPH

MOVTL0,DPL

MOVT0JISUQI0,DPH;保护定时器初值

MOVT0JISUQI1,DPL

SETBTR0;开启中断

SETBET0

SETBEA

RET

;//////////////中断子程序//////////////

;输入:

36H,35H

;输出:

36H,35H,SS

;功能:

置中断标志位为1

ZDUAN:

MOVTH0,T0JISUQI0;定时器重新赋初值

MOVTL0,T0JISUQI1

SETBSS;秒标志位置1

RETI

;//////////////延时子程序//////////////

;功能:

延时一段时间,稳定点阵屏的显示

DELAY:

MOVR7,#30

DL:

MOVR6,#40

DJNZR6,$

DJNZR7,DL

RET

;//////////////等待1秒//////////////

INCR3;等待1秒

CJNER3,#50,MAIN

MOVR3,#0

ACALLMOVINGDOWN;1秒到了,程序往下执行

2.方块显示的设计

当点阵屏按照给定的变化规律进行运行时,采用动态显示原理。

单片机的P1口作为数据端,P2口作为片选端。

达到显示俄罗斯方块的目的。

动态显示原理:

同一时刻,最多只有一位数码管工作,并且所有数码管以一定的频率交替循环工作。

当频率较低时,看到的显示效果是闪烁的、不稳定的。

当频率较高时,由于人眼的视觉暂留现象,就会看到稳定显示的数字了。

俄罗斯方块显示仿真图

方块显示参考程序如下:

;/////////////显示子程序///////////////

;输入:

XIANSHOW0--7

;输出:

SHUCHU

;功能:

显示

DISPLAY:

MOVR0,#XIANSHOW0

MOVR2,#7fH

NEXT_II:

MOVPIANXUAN,R2

MOVA,@R0

CPLA

MOVSHUCHU,A

ACALLDELAY

MOVSHUCHU,#0FFH

INCR0

MOVA,R2

RrA

MOVR2,A;片选

CJNER0,#40H,NEXT_II

RET

3.判断按键程序

由于按键只需要四个,采用独立按键就足以满足要求。

当按键按下,则相应的I/O口置0。

判断按键是否按下,需通过编程来完成:

;////////////////键盘子程序///////////////

;输入:

RETURN/LEFT/LIGHT/DOWNKEY

;输出:

;功能:

判断按键

JIANPAN:

JBRETURNKEY,TAIQI;旋转按键

JBRETURNKEYBZ,TAIQI

SETBRETURNKEYBZ

ACALLRETURNMOVING

TAIQI:

JNBRETURNKEY,PANZUO

CLRRETURNKEYBZ

PANZUO:

JBLEFTKEY,TAIQI2;左移按键

JBLEFTKEYBZ,TAIQI2

SETBLEFTKEYBZ

ACALLLEFTMOVING

TAIQI2:

JNBLEFTKEY,PANYOU

CLRLEFTKEYBZ

PANYOU:

JBRIGHTKEY,TAIQI3;右移按键

JBRIGHTKEYBZ,TAIQI3

SETBRIGHTKEYBZ

ACALLRIGHTMOVING

TAIQI3:

JNBRIGHTKEY,PANXIA

CLRRIGHTKEYBZ

PANXIA:

JBDOWNKEY,TAIQI4;下移按键

ACALLMOVINGDOWN

TAIQI4:

RET

4.方块旋转程序

游戏过程中方块可以自由旋转,俄罗斯方块的旋转主要将方块的位置加以变换得到的,当然首先要判断是否满足旋转的要求。

然后在旋转区将方块图形进行旋转,再送往移动区。

程序如下:

;///////////////旋转判断子程序///////////////////

;输入:

MOVESHOW0-MOVESHOW7

;输出:

MOVESHOW0-MOVESHOW7

;功能:

没有冲突和处边情况,积木旋转90度

RETURNMOVING:

;/////////////////判断左边是否处边/////////////////

CLRC;进位标志清0

MOVR0,#MOVESHOW0;判断能不能左移

NEXT_CX:

MOVA,@R0

RLCA;如果CY为1表示模型

JCNEXT_11;已经碰到边界

INCR0;因为8行,所以要判断8次

CJNER0,#48H,NEXT_CX

AJMPPANYOUBIAN

NEXT_11:

MOVA,X_X;判断是否是中心处边

CJNEA,#7,PANYOUBIAN

AJMPOUT_CD

;/////////////////判断右边是否处边//////////////////////

PANYOUBIAN:

MOVR0,#MOVESHOW0;判断能不能右移

NEXT_MX:

MOVA,@R0

RRCA;如果CY为1表示模型

JCNEXT_12;已经碰到边界

INCR0;因为8行,所以要判断8次

CJNER0,#48H,NEXT_MX

AJMPPANXIABIAN

NEXT_12:

MOVA,X_X;判断是否是中心处边

JZOUT_CD

;///////////////判下边是否处底//////////////////////

PANXIABIAN:

MOVR7,MOVESHOW7

CJNER7,#0,OUT_CD;为1表示碰到边框

;///////////////开旋转子程序//////////////////////

;输入:

SUIJISHU

;输出:

;功能:

开始旋转

KAIXUANZHUAN:

;MOVA,SUIJISHU

;CJNEA,#0,NEXT_BF;方块不旋转

;AJMPOUT_CD

NEXT_BF:

ACALLCUNSHU;移动区数据送显示区暂存

ACALLCUNSHU3;旋转区数据送显示区暂存

ACALLZHUANDONG;调用转动子程序

ACALLQINGCHU;调用清除子程序

ACALLTIHUAN;调用替换子程序

ACALLYIDIYIDONG;调用异地移动子程序

ACALLCHONGTUPANDUAN;旋转是否冲突

JNBCHONGTU,OUT_CD

ACALLFANGSHU;恢复移动区数据

ACALLFANGSHU3;恢复旋转区数据

OUT_CD:

RET

;/////////////////异地移动子程序/////////////////////

;输入:

X_X,Y_Y

;输出:

;功能:

旋转数据送到积木原始位置

YIDIYIDONG:

MOVR4,X_X

TANG15:

DJNZR4,YIDIZHUAN;X坐标减1为0表示水平位置没有移动

MOVR5,Y_Y

TING15:

DJNZR5,YIDIZHUAN3;Y坐标减1为0表示水平位置没有移动

AJMPOUT_BACK

YIDIZHUAN:

ACALLZUOYI

AJMPTANG15

YIDIZHUAN3:

ACALLXIAYI

AJMPTING15

OUT_BACK:

RET

;////////////////////转动子程序//////////////////////

;输入:

SAVE1_1--SAVE1_3

;输出:

SAVE1_1--SAVE1_3

;功能:

旋转区数据旋转90度

;////////////////////外旋////////////////////

ZHUANDONG:

MOVC,23H.0;数据暂时存储

MOV26H.0,C

MOVC,25H.0;9-3

MOV23H.0,C

MOVC,25H.2;7-9

MOV25H.0,C

MOVC,23H.2;1-7

MOV25H.2,C

MOVC,26H.0;3-1

MOV23H.2,C

;////////////////////内旋////////////////////

MOVC,23H.1;数据暂时存储

MOV26H.0,C

MOVC,24H.0;6-2

MOV23H.1,C

MOVC,25H.1;8-6

MOV24H.0,C

MOVC,24H.2;4-8

MOV25H.1,C

MOVC,26H.0;2-4

MOV24H.2,C

RET

5.冲突判断程序

俄罗斯方块游戏区图形框看成移动区、旋转区、背景区几部分构成,判断是否遇到边界,是否移动区的数据与背景区的数据重和。

;/////////////////////冲突判断子程序/////////////////

;输入:

MOVESHOW0--7ANDBACKSHOW0--7

;输出:

;功能:

判断在下移,左移,右移,旋转时是否冲突

CHONGTUPANDUAN:

MOVR0,#BACKSHOW0

MOVR1,#MOVESHOW0

GOTO_A:

MOVA,@R0

ANLA,@R1

CJNEA,#00H,TANG_A1

INCR0

INCR1

CJNER0,#38H,GOTO_A

CLRCHONGTU

RET

TANG_A1:

SETBCHONGTU;冲突标志置1

RET

6.消行程序

我们的这个俄罗斯方块游戏,其实在游戏区图形框可以看成是由许多的小方块组成,方块运动的过程就是造型里方块显示或者隐藏,就像现在的霓虹灯效果一样,上一层的消失,下一层的显示,这样,从视觉效果可以看到方块的下落运动效果。

方块在下落的过程中会自动判断每一行方块是否满行,如果满行时,就会将这一行小方块的隐藏,在将上面的小方块向下移动。

当有多行同时出现这样情况时使用递归调用,实现连续消行。

具体程序如下:

;////////////////消行子程序////////////////////

;输入:

BACKSHOW0--7

;输出:

BACKSHOW0--7

;功能:

消掉全亮的行

XIAOHANG:

XH:

MOVR7,#0;R7赋予初值,一共判8行

MOVR0,#BACKSHOW7;从最底行开始判断,但当消了一行后,37H内的数据即为

XH_1:

;上一行的数据,即继续判断上行需要消行否

MOVA,@R0;首先判断每一行是否为0FF

CPLA;数据取反

JZXIAOCHU;如果为0(原来就为0FF),则可以去消行。

DECR0;判断下一行需要消行否

INCR7

CJNER0,#3FH,XH_1

RET

XIAOCHU:

MOV@R0,#0;把需要消行的那一行数据清0

X_H:

MOVA,R0;消行当前行赋予ACC,暂存

MOVR1,A

DECR1;上一行往下移

MOVA,@R1;上一行数据移下来,移到消行所在行

MOV@R0,A

DECR0;整体往下移动一格

CJNER0,#2FH,x_H;30H为最上行,判断移完没有

CJNER7,#08,XH;判断到顶行为止

RET

7.游戏结束界面显示程序

当背景区最上面的一行有方块,说明游戏结束,则进入游戏结束界面,游戏中结束后设计产生有意思的画面,给你带来乐趣。

具体程序如下:

;////////////////结束子程序////////////////////

JIESHU:

MOVR0,#BACKSHOW0

MOVA,@R0

clrliyongzhi

cjnea,#00h,lyz

RET

LYZ:

setbliyongzhi

Ret

jieshuhou:

;游戏结束后界面一

MOVXIANSHOW0,#40H

MOVXIANSHOW1,#40H

MOVXIANSHOW2,#40H

MOVXIANSHOW3,#40H

MOVXIANSHOW4,#40H

MOVXIANSHOW5,#40H

MOVXIANSHOW6,#40H

MOVXIANSHOW7,#7fh

ACALLDISPLAY

ret

jieshuhou1:

;游戏结束后界面二

MOVXIANSHOW0,#00H

MOVXIANSHOW1,#36H

MOVXIANSHOW2,#49H

MOVXIANSHOW3,#22H

MOVXIANSHOW4,#14H

MOVXIANSHOW5,#08H

MOVXIANSHOW6,#00H

MOVXIANSHOW7,#00H

ACALLDISPLAY

Ret

jieshuhou2:

;游戏结束后界面三

MOVXIANSHOW0,#00H

MOVXIANSHOW1,#22H

MOVXIANSHOW2,#22H

MOVXIANSHOW3,#22H

MOVXIANSHOW4,#22H

MOVXIANSHOW5,#22H

MOVXIANSHOW6,#1CH

MOVXIANSHOW7,#00H

ACALLDISPLAY

Ret

 

五测试、数据及结果分析

1、按键测试

当电路连接完毕后,将写好的测试程序刷写到芯片内,K1、K2、K3、K4以及复位按键分别给端口送高电平和低电平,通电观察即可检测。

2、点阵显示屏的测试

将串口的和电路板上的接口连接,将写好的测试程序刷写到芯片内,开电源即可测试。

3、整体电路测试

系统上电,刷写好程序即可开始测试,观测一次游戏从开始到结束的周期的显示状态是否正常,同时观察是否达到预期的显示功能。

实物图一实物图二实物图三

 

六结论与体会

本系统采用MSC-52系列单片机89C52为中心器件

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2