俄罗斯方块游戏设计Word文档下载推荐.docx
《俄罗斯方块游戏设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《俄罗斯方块游戏设计Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
Тетрис)是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·
俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。
由于上手简单、老少皆宜,从而家喻户晓,风靡世界。
由于俄罗斯方块具有的数学性、动态性与知名度,也经常拿来作为游戏程序设计的练习题材[1]。
本设计主要器件是AT89C52单片机和液晶12864,通过单片机发送信号控制液晶的显示,使用按键按键实现游戏的开始、暂停、移动、翻转等。
2系统设计方案
2.1系统分析
基于单片机与12864液晶的俄罗斯方块游戏上手简单、老少皆宜,家喻户晓,具有的数学性、动态性与知名度,是游戏程序设计的很好练习题材。
同时又扩展了万年历功能与温度显示,更加人性化、智能化、实用化。
此系统包含的模块如下:
硬件部分:
(1)时钟电路与复位电路;
(2)时钟芯片与单片机接口电路;
(3)液晶12864的显示接口电路;
(4)温度传感器电路;
(5)指示电路及键盘电路。
软件部分:
(1)系统复位初始化;
(2)DS18B20模块;
(3)DS12C887模块;
(4)多级菜单的实现;
2.3系统可行性分析
本设计以AT89C52单片机与液晶12864为核心器件,液晶在单片机的控制下完成各项工作。
本设计的主要难点也在于此。
需要单片机控制整个液晶画面的读写,整个地图的变动,既需要命令的读写,又需要数据的输入,在地图等方面还需要取模软件辅助,要实现必须深入了解各个期间的应用知识,如液晶的读写规则,在此基础上再实现俄罗斯方块的编程。
通过在网上搜寻相关资料,图书馆查询以及和老师同学的讨论,软件的仿真,知道了各器件使用方法,编程的思路,要用到的库、函数,算法等知识,再结合之前自己学的知识基本上确定了系统的可行性,实现基本功能没有问题,可能在某些小的方面会有所遗漏,但整体上能达到要求,实现既定功能,遗漏和不足还需要更多的实践来学习更正不断完善自己。
2.4预期结果
开机后显示预设画面,游戏开始后可通过键盘的控制实现液晶上各种方块的实现方块的产生、移动、翻转、消除、加分等。
3硬件设计
3.1单片机AT89C52简介
AT89C52节闪烁可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容[2]。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
管脚说明(如图1)
图1单片机引脚图
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号[3]。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(TTL)这是由于上拉的缘故。
P3口也可作为AT89C52的一些特殊功能口,如下所示:
P3口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
I/O口作为输入口时有两种工作方式,即所谓的读端口与读引脚。
读端口时实际上并不从外部读入数据,而是把端口锁存器的内容读入到内部总线,经过某种运算或变换后再写回到端口锁存器。
只有读端口时才真正地把外部的数据读入到内部总线。
输入缓冲器CPU将根据不同的指令分别发出读端口或读引脚信号以完成不同的操作,这是由硬件自动完成的不需要我们操心。
读引脚时也就是把端口作为外部输入线时,首先要通过外部指令把端口锁存器置1,然后再实行读引脚操作,否则就可能读入出错什么。
如果不对端口置1,端口锁存器原来的状态有可能为Q0端,Q0为1加到场效应管栅极的信号为1,该场效应管就导通,对地呈现低阻抗,此时即使引脚上输入的信号为1也会因端口的低阻抗而使信号变低,使得外加的1信号读入后不一定是1,若先执行置1操作,则可以使场效应管截止,引脚信号直接加到三态缓冲器中,实现正确的读入,由于在输入操作时,还必须附加一个准备动作,所以这类I/O口被称为准双向口AT89C51的P0/P1/P2/P3口,作为输入时都是准双向口。
接下来让我们再看另一个问题,从图中可以看出这四个端口还有一个差别,除了P1口外,P0/P2/P3口都还有其他的功能。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;
当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
3.2复位电路设计
单片机的复位是靠外电路实现的,在时钟电路工作后,只要在单片机的RST引脚上出现24个时钟振荡脉冲(2个机器周期)以上的高电平,单片机便实现初始化状态复位。
为了保证应用系统可靠地复位,通常是RST引脚保持10ms以上的高电平。
复位电路连接如图2所示:
图2 复位电路
图2复位电路
3.3时钟电路设计
8XX51系列单片机的时钟信号通常用两种电路形式得到:
内部振荡方式和外部振荡方式。
在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振),就构成了内部振荡方式。
由于单片机内部有一个高增益反向放大器,当外接晶振后,就构成了自激振荡器,并产生振荡时钟脉冲。
晶振通常选用6MHZ、12MHZ或24MHZ。
内部振荡方式如图3所示。
图中电容C1、C2起稳定振荡频率、快速起振的作用[4]。
电容值一般为5~30pF。
内部振荡方式所得时钟信号比较稳定,实用电路中使用较多。
外部振荡方式是把已有的时钟信号引入单片机内。
这种方式适宜用来使单片机的时钟与外部信号保持一致。
外部振荡方式电路如图4所示。
对HMOS的单片机(8031,8031AH等),外部时钟信号由XTAL2引入;
对于
CHMOS的单片机(8XCXX),外部时钟信号由XTAL1引入。
图3内部振荡图4外部振荡
3.4时钟电路设计
3.4.1时钟芯片DS12C887基本知识
美国DALLAS公司的新型时钟日历芯片DS12C887的功能很强大。
DS12C887实时时钟芯片功能丰富,可以用来直接代替IBMPC上的时钟日历芯片DS12887,
同时,它的管脚也和MC146818B、DS12887相兼容。
封装图见图5。
图5DS12C887封装图
3.4.2DS12C887产品的特点
●可选的Intel或Motorola总线时序
●RTC计数秒、分、时、星期、日期、月份和年份,闰年补偿至2100年
●定时闹钟为每秒一次至每日一次
●122um至500ms周期速率
●14字节的时钟和控制寄存器
●可编程方波输出
●+5.0V或+3.3V工作电源
●工业级温度范围
●DS12CR887密封DIP模块集成了电池与石英晶体
3.4.3DS12C8870的使用方法
GND、VCC:
直流电源,其中VCC接+5V输入,GND接地,当VCC输入为+5V时,用户可以访问DS12C887内RAM中的数据,并可对其进行读、写操作;
当VCC的输入小于+4.25V时,禁止用户对内部RAM进行读、写操作,此时用户不能正确获取芯片内的时间信息;
当VCC的输入小于+3V时,DS12C887会自动将电源发换到内部自带的锂电池上,以保证内部的电路能够正常工作。
MOT:
模式选择脚,DA12C887有两种工作模式,即Motorola模式和Intel模式,当MOT接VCC时,选用的工作模式是Motorola模式,当MOT接GND时,选用的是Intel模式。
SQW:
方波输出脚,当供电电压VCC大于4.25V时,SQW脚可进行方波输出,此时用户可以通过对控制寄存器编程来得到13种方波信号的输出。
AD0~AD7:
复用地址数据总线,该总线采用时分复用技术,在总线周期的前半部分,出现在AD0~AD7上的是地址信息,可用以选通DS12C887内的RAM,总线周期的后半部分出现在AD0~AD7上的数据信息。
AS:
地址选通输入脚,在进行读写操作时,AS的上升沿将AD0~AD7上出现的地址信息锁存到DS12C887上,而下一个下降沿清除AD0~AD7上的地址信息,不论是否有效,DS12C887都将执行该操作。
DS/RD:
数据选择或读输入脚,该引脚有两种工作模式,当MOT接VCC时,选用Motorola工作模式,在这种工作模式中,每个总线周期的后一部分的DS为高电平,被称为数据选通。
在读操作中,DS的上升沿使DS12C887将内部数据送往总线AD0~AD7上,以供外部读取。
在写操作中,DS的下降沿将使总线AD0~AD7上的数据锁存在DS12C887中,当MOT接GND时,选用Intel工作模式,在该模式中,该引脚是读允许输入脚,即ReadEnable[5]。
R/W:
读/写输入端,该管脚也有2种工作模式,当MOT接VCC时,R/W工作在Motorola模式。
此时,该引脚的作用是区分进行的是读操作还是写操作,当R/W为高电平时为读操作,R/W为低电平时为写操作;
当MOT接GND时,该脚工作在Intle模式,此时该作为写允许输入,即WriteEnable。
CS:
片选输入,低电平有效。
IRQ:
中断请求输入,低电平有效,该脚有效对DS12C887内的时钟、日历和RAM中的内容没有任何影响,仅对内部的控制寄存器有影响,在典型的应用中,RESET可以直接接VCC,这样可以保证DS12C887在掉电时,其内部控制寄存器不受影响。
3.5液晶显示器接口电路设计
3.5.1液晶12864基本知识
带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方
式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;
其显示分辨率为128×
64,内置8192个16*16点汉字,和128个16*8点ASCII字符集。
利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×
4行16×
16点阵的汉字。
也可完成图形显示、低电压低功耗是其又一显著特点。
由该模块构成的液晶显示方案,与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
3.5.212864产品的特点
●低电源电压(VDD:
+3.0-+5.5V)
●显示分辨率:
128×
64点
●内置汉字字库,提供8192个16×
16点阵汉字(简繁体可选)
●内置128个16×
8点阵字符
●2MHZ时钟频率
●显示方式:
SIN、半透、正显
●背光方式:
侧部高亮白色LED,功耗仅为普通LED的1/5—1/10
●通讯方式:
串行、并行可选
●内置DC-DC转换电路,无需外加负压
●无需片选信号,简化软件设计
●工作温度:
0℃—-+55℃,存储温度:
-20℃—+60℃
表112864液晶模块接口说明
管脚号
管脚名称
电平
管脚功能描述
1
VSS
0V
电源地
2
VCC
3.0V/5V
电源正
3
V0
-
对比度(亮度)调整
4
RS(CS)
H/L
RS=“H”,表示DB7~DB0为显示数据RS=“L”,表示DB7~DB0为显示指令数据
5
R/W
R/W=“H”,E=“H”,数据被读到DB7~DB0R/W=“L”,E=“H→L”,DB7~DB0的数据被写到IR或DR
6
E(SCLK)
使能信号
7~14
DB0~DB7
H/L
三态数据线
15
PSB
H:
8位或4位并口方式,L:
串口方式
16
NC
-
空脚
17
RESET
复位端,低电平有效
18
VOUT
LCD驱动电压输出端
19
A
VDD
背光源正端
20
K
背光源负端
3.5.312864的使用方法
忙标志BF:
BF标志提供内部工作情况。
BF=1表示模块在进行内部操作,此时模块不接受外部指令和数据。
BF=0时,模块为准备状态,随时可接受外部指令和数据。
利用STATUSRD指令,可以将BF读到DB7总线,从而检验模块工作状态。
字型产生ROM(CGROM):
字型产生ROM(CGROM)是用于模块屏幕显示开和关的控制。
DFF=1为开显示,DDRAM的内容就显示在屏幕上,DFF=0为关显示。
DFF的状态是指令DISPLAYON/OFF信号控制的。
显示数据RAM(DDRAM):
模块内部显示数据RAM提供64×
2个位元组的空间,最多可控制4行各16字的中文字型显示,当写入显示数据RAM时,可分别显示CGROM与CGRAM的字型;
此模块可显示三种字型,分别是半角英数字型(16*8)、CGRAM字型及CGROM的中文字型。
三种字型的选择,由在DDRAM中写入的编码选择,在0000H—0006H的编码中将选择CGRAM的自定义字型,02H—7FH的编码中将选择半角英数字的字型,至于A1以上的编码将自动的结合下一个位元组,组成两个位元组编码形成中文字型的编码[6]。
字型产生RAM(CGRAM):
字型产生RAM提供图象定义(造字)功能,可以提供四组16×
16点的自定义图象空间,使用者可以将内部字型没有提供的图象字型自行定义到CGRAM中,便可和CGROM中的定义一样地通过DDRAM显示在屏幕中。
地址计数器AC:
地址计数器是用来贮存DDRAM/CGRAM之一的地址,可由设定指令暂存器来改变,之后只要读取或写入DDRAM/CGRAM的值时,地址计数器的值就会自动加一。
当RS=0且R/W=1时,地址计数器的值会被读取到DB6—DB0中。
光标/闪烁控制电路:
此模块提供硬体光标及闪烁控制电路,由地址计数器的值来指定DDRAM中的光标或闪烁位置
液晶12864和单片机通信在这里采用并口通信。
其各端引脚如图6所示:
图6液晶显示器接口电路
3.6温度传感器电路
3.6.1温度传感器DS18B20基本知识
DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。
因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
该产品适用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等测温和控制领域,封装图见图7。
图7封装形式
3.6.2DS18B20产品的特点
(1)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即实现微处理器与DS18B20的双向通讯。
(2)在DS18B20中的每个器件上都有独一无二的序列号。
(3)实际应用中不需要外部任何元器件即可实现测温。
(4)测量温度范围在-55度到+125度之间。
(5)数字温度计的分辨率用户可以从9位到12位选择。
(6)内部有温度上、下限告警设置。
(7)支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定,实现多点测温。
3.6.3DS18B20的使用方法
由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。
DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。
该协议定义了几种信号的时序:
初始化时序、读时序、写时序。
所有时序都是将主机作为主设备,单总线器件作为从设备。
而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。
数据和命令的传输都是低位在先。
其与单片机接口电路非常简单。
如图8所示:
图8温度传感器电路
3.7指示电路
本系统中指示模块采用的是蜂鸣器和发光二极管。
其电路图如图9,图10所示,蜂鸣器与9015三极管集电极相连,三极管基极与主控芯片端口P3.7相连