创新产品说明书.docx
- 文档编号:26727044
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:37
- 大小:278.62KB
创新产品说明书.docx
《创新产品说明书.docx》由会员分享,可在线阅读,更多相关《创新产品说明书.docx(37页珍藏版)》请在冰豆网上搜索。
创新产品说明书
俄罗斯方块游戏
----基于单片机实现的
摘要:
本设计是通过AT89S52单片机来实现俄罗斯方块游戏的设计,使用C语言进行编程,并通过Proteus来进行仿真。
本设计要实现的基本功能是:
应用按键来控制方块的变换与移动;消除一行并计分;消除多行额外奖励记分,方块堆满时结束游戏,而且在玩游戏过程中还伴随着音乐和灯光基本上实现了俄罗斯方块的一般功能。
单片机在手持娱乐设备上的应用具有非常大的潜力,它能将其带入到一个新的阶段。
为了解决外部电路图,必须充分了解所用液晶的显示方法和单片机的外部接口功能,和所需要处理的逻辑关系;还要理解LCD液晶的控制原理,来通过数据端口和控制端口来实现画面在液晶上面的显示。
程序则要求对外部电路了解的情况下完成自己所需要的功能,并将所要完成的功能用编程语言的形式来实现。
然后通过Protues仿真实现通过外部按键来控制各种不同图形的方块来玩游戏,并且实现记录分数和通过过关数来改变方块下降的速度。
最后将程序下载至AT89S52单片机并进行实际运行,实际运行表明,本设计可以实现基本的游戏功能,达到预期的目的。
引言.......................................................3
第一章方案论证...............................................4
1.1选题背景及意义.........................................4
1.2功能介绍...............................................4
1.3设计原理图...............................................4
1.4系统硬件连接.............................................4
1.4.1单片机最小系统电路..................................5
1.4.2ST7920驱动12846字库液晶电图......................5
1.4.3键盘电路............................................5
1.4.4音乐发声电路........................................5
1.5主要元器件介绍............................................6
1.5.1AT89S52引脚功能描述...............................6
1.5.212864液晶.........................................8
1.5.3晶振特性..........................................10
第二章设计原理.................................................11
2.1硬件工作原理.............................................11
2.2程序设计内容.............................................11
第三章程序框图.................................................12
3.1程序框图..................................................12
3.2源程序.....................................................14
第四章总结和不足................................................26
4.1总结.......................................................26
4.2不足之处...................................................26
4.3问题解决方案................................................26
第五章结束语......................................................27
第六章心得体会.....................................................27
第七章作品实物图...................................................27
引言
游戏是人们活动中一项非常重要的内容,有人认为如果哪一天人类对所有的游戏都失去兴趣,恐怕世界的末日就要到了。
电脑对游戏的贡献有目共睹,现在摸过电脑的人很少有没玩过电脑游戏的,喜欢游戏的人也很少有不玩电脑的。
俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。
这款游戏最初是由苏联的游戏制作人AlexPajitnov制作的,它看似简单但却变化无穷,令人上瘾。
相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。
究其历史,俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。
现在联众又将重新掀起这股让人沉迷的俄罗斯方块风潮。
对一般用户来说,它的规则简单,容易上手,且游戏过程变化无穷,而在"联众俄罗斯方块"中,更有一些联众网络游戏所独有的魅力――有单机作战与两人在线对战两种模式,用户可任选一种进行游戏。
网络模式还增加了积分制,使用户既能感受到游戏中的乐趣,也给用户提供了一个展现自己高超技艺的场所。
俄罗斯方块游戏可以说是随计算机的发展而发展,并不断推陈出新演变出各种类似游戏,深受广大玩家喜爱。
这个游戏有的简单,有的复杂,但其根本原理是一样的都是对运动的方块进行组合,来训练玩家的反应能力。
本文利用单片机进行俄罗斯方块设计,采用51汇编语言进行编程,基于汇编语言的原因是在编写程序的过程中,对于程序的执行会有一个比较直观的表现。
第一章方案论证
1.1选题背景及意义
随着社会的发展,人们越来越注重精神上的享受,那么俄罗斯方块作为一款风靡全球的电视游戏机和掌上游戏为人类带来了无与伦比的精神上的愉悦。
时至今日,成为最经典的游戏之一,它的实用和经济价值都是无可比拟的。
因此,我们选做俄罗斯方块,虽然用单片机来设计一个简单的俄罗斯方块游戏程序似乎有点大材小用了,但这仅仅是一个单片机在嵌入式游戏方面的简单应用,正因为他的前景无可预计,所以才有这个设计,此次设计仅仅是为了举一个单片机在游戏上应用的一个简单例子,他可以很好的说明单片机功能的强大,更高的可控性和高集成度的好处,因此它可以在电子游戏方面成为一个不可计量的明日之星。
1.2功能介绍
应用按键来控制方块的变换与移动;消除一行并计分;消除多行额外奖励记分,方块堆满时结束游戏等俄罗斯方块的基本功能。
单片机在手持娱乐设备上的应用具有非常大的潜力,它能将其带入到一个新的阶段。
为了解决外部电路图,必须充分了解所用液晶的显示方法和单片机的外部接口功能,和所需要处理的逻辑关系;还要理解LCD液晶的控制原理,来通过数据端口和控制端口来实现画面在液晶上面的显示。
1.3设计原理图
1.4系统硬件连接
1.4.1单片机最小系统电路
1.4.2ST7920驱动12846字库液晶电路
1.4.3键盘电路
键盘电路本设计共采用按键4个,分别与单片机的P3.4、P3.5、P3.6、P3.7口相连,分别对应旋转、下降、左移、右移。
1.4.4音乐发声电路
音乐发声电路由音乐芯片(s-088BD*),喇叭及三级管组成,在游戏开始时放出音乐增加游戏趣味性。
1.5主要元器件简介
1.5.1AT89S52引脚功能描述
AT89S52单片机的管脚说明如下图所示:
DIP封装AT89S52单片机引脚结构图
1.VCC:
电源。
2.GND:
接地端。
3.P0口(P0.0~P0.7):
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0具有内部上拉电阻。
在Flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
4.P1口(P1.0~P1.7):
P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。
对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如表2-1所示:
在Flash编程和校验时,P1口接收低8位地址字节。
表2-1P1口第二功能
引脚号
第二功能
P1.0
T2(定时器/计数器T2的外部计数输入),时钟输出
P1.1
T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)
P1.5
MOSI(在系统编程用)
P1.6
MISO(在系统编程用)
P1.7
SCK(在系统编程用)
5.P2口(P2.0~P2.7):
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2口送出高八位地址。
在这种应用中,P2口使用很强的内部上拉发送1。
在使用8位地址(如MOVX@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
6.P3口(P3.0~P3.7):
P3口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
P3口亦作为AT89S52第二功能使用,如表2-2所示:
表2-2P3口第二功能
引脚号
第二功能
P3.0
RXD(串行输入)
P3.1
TXD(串行输出)
P3.2
I
(外部中断0)
P3.3
I
(外部中断0)
P3.4
T0(定时器0外部输入)
P3.5
T1(定时器1外部输入)
P3.6
(外部数据存储器写选通)
P3.7
(外部数据存储器写选通)
在flash编程和校验时,P3口也接收一些控制信号。
RST:
复位输入。
晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。
看门狗计时完成后,RST脚输出96个晶振周期的高电平。
特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。
DISRTO默认状态下,复位高电平有效。
ALE/
:
地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。
在flash编程时,此引脚(PROG)也用作编程输入脉冲。
在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。
然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。
如果需要,通过将地址为8EH的SFR的第0位置
“1”,ALE操作将无效。
这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。
否则,ALE将被微弱拉高。
这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。
:
外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。
当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。
A/VPP:
访问外部程序存储器控制信号。
为使能从0000H到FFFFH的外部程序存储器读取指令,EA必须接GND。
为了执行内部程序指令,EA应该接VCC。
在flash编程期间,EA也接收12伏VPP电压。
XTAL1:
振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:
振荡器反相放大器的输出端。
1.5.212864液晶
(1)液晶显示模块概述
12864中文汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点
阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。
主要技术参数和显示特性:
电源:
VDD3.3V~+5V(内置升压电路,无需负压);
显示内容:
128列×64行
显示颜色:
黄绿/蓝屏/灰屏
显示角度:
6:
00钟直视
LCD类型:
STN
与MCU接口:
8位或4位并行/3位串行
配置LED背光
多种软件功能:
光标显示、画面移位、自定义字符、睡眠模式等
(2)外形尺寸
外观尺寸:
93×70×12.5mm视域尺寸:
73×39mm
外形尺寸图
外形尺寸
ITEMNOMINALDIMENUNIT
模块体积93×70×12.5mm
视域73.0×39.0mm
行列点阵数128×64dots
点距离0.52×0.52mm
点大小0.48×0.48mm
(3)模块引脚说明
128X64HZ引脚说明
引脚号引脚名称方向功能说明
1GND-模块的电源地
2VCC-模块的电源正端
3V0-LCD驱动电压输入端可悬空
4RS(CS)H/L并行的指令/数据选择信号;串行的片选信号
5R/W(SID)H/L并行的读写选择信号;串行的数据口
6E(CLK)H/L并行的使能信号;串行的同步时钟
7DB0H/L数据0
8DB1H/L数据1
9DB2H/L数据2
10DB3H/L数据3
11DB4H/L数据4
12DB5H/L数据5
13DB6H/L数据6
14DB7H/L数据7
15PSBH/L并/串行接口选择:
H-并行;L-串行
16NC空脚
17/RSTH/L复位低电平有效
18VOUT倍压输出脚(VDD=+3.3V有效)可悬空
19LED_A-背光源正极(LED+5V)
20LED_K-背光源负极(LED-OV)
逻辑工作电压(VDD):
4.5~5.5V
电源地(GND):
0V
工作温度(Ta):
-20~70℃
储存温度:
-30~80℃
1.5.3晶振特性
AT89S52单片机有一个用于构成内部振荡器的反相放大器,XTAL1和XTAL2分别是放大器的输入、输出端。
石英晶体和陶瓷谐振器都可以用来一起构成自激振荡器。
从外部时钟源驱动器件的话,XTAL2可以不接,而从XTAL1接入,如下图所示。
由于外部时钟信号经过二分频触发后作为外部时钟电路输入的,所以对外部时钟信号的占空比没有其它要求,最长低电平持续时间和最少高电平持续时间等还是要符合要求的。
如下图所示:
内部振荡电路连接图
第二章设计原理
2.1硬件工作原理
以下内容为以单片机89S52为例机的接口电路,控制电路为直接访问方式的接口电路。
电路原理图如下图所示:
AT89S52与液晶的接口电路
根据以上电路原理图中液晶的各引脚与单片机的接法,可得本设计的液晶模块电路如下图所示:
由图可以看出:
VSS接地;数字电源VDD接+5V;数据、指令选择信号RS接单片机P3.2口;读写选择信号R/W接单片机P3.1口;DB0~DB7分别接单片机的P2.0~P2.7口;芯片1、芯片2的片选分别接单片机的P3.4、P3.3口;复位端RST、背光正电源LEDA接+5V;液晶驱动电压VEE、背光负电源LEDK接地。
图2.5液晶模块电路
2.2程序设计内容
程序设计主要为游戏的程序以及对单片机个各端口的设置。
第三章程序框图
3.1程序框图
(1)俄罗斯方块驱动图流程图
(2)俄罗斯方块所有绘图工作流程图
俄罗斯方块所有绘图工作流程图
(3)俄罗斯方块中按下键的流程图
俄罗斯方块按下键的流程图
3.2源程序
#include"reg51.h"
#include"12864.h"
#defineucharunsignedchar
#defineuintunsignedint
staticunsignedlongSeed=1;
#defineA48271L
#defineM2147483647L
#defineQ(M/A)
#defineR(M%A)
sbitK1=P3^4;
sbitK2=P3^5;
sbitK3=P3^6;
sbitK4=P3^7;
unsignedintidatanum[19+2]={
0xfff,//第1行,最下面
0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,
0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,//第2行到第20行共19行
0xfff//第21行,最上面
};//定义共21行,其中num[0]为下墙壁行,num[20]为上墙壁行,每行12格,最左一格为左墙壁列,最右一格为右墙壁列
unsignedcharcodeBlock[28][2]={
/*
*口口口口口口
*口口口口
*口口口口口口
*/
{0x88,0xc0},{0xe8,0x00},{0x62,0x20},{0x02,0xe0},
/*
*口口口口口口
*口口口口
*口口口口口口
*/
{0x22,0x60},{0x08,0xe0},{0xc8,0x80},{0xe2,0x00},
/*
*口
*口口口口
*口口口
*/
{0x8c,0x40},{0x6c,0x00},{0x8c,0x40},{0x6c,0x00},
/*
*口口口
*口口口口
*口
*/
{0x4c,0x80},{0xc6,0x00},{0x4c,0x80},{0xc6,0x00},
/*
*口口
*口口口口口口口口
*口口口口口口
*/
{0x04,0xe0},{0x8c,0x80},{0xe4,0x00},{0x26,0x20},
/*口
*口
*口口口口口
*口
*/
{0x44,0x44},{0x0f,0x00},{0x44,0x44},{0x0f,0x00},
/*
*口口
*口口
*/
{0x06,0x60},{0x06,0x60},{0x06,0x60},{0x06,0x60}
};
#definePASSSCORE20
structJimu
{
unsignedintdat;
charx;
unsignedchary;
unsignedchartype;
unsignedcharchange;
}Sign[3];//积木结构体
unsignedcharSysFlag=0;
#defineNEWSIGNFLAG0
#defineDEADFLAG1
#definePAUSEFLAG2
unsignedcharScore=0;
unsignedcharLevel=1;
unsignedcharDelayCnt=5;
/*********************************************************/
#defineN25
/************************************
伪随机数发生器
*************************************/
doubleRandom(void)
{
longTmpSeed;
TmpSeed=A*(Seed%Q)-R*(Seed/Q);
if(TmpSeed>=0)
Seed=TmpSeed;
else
Seed=TmpSeed+M;
return(double)Seed/M;
}
/**************************************
为伪随机数发生器播种
***************************************/
voidInitRandom(unsignedlongInitVal)
{
Seed=InitVal;
}
//延时子程序
voidDelay(unsignedintt)
{
unsignedinti,j;
for(i=0;i for(j=0;j<10;j++); } /********************************* 初始化MPU **********************************/ voidInitCpu(void) { TMOD=0x0; TH0=0; TL0=0; TR0=1; ET0=1; EX1=1; EA=1; TCON|=0x04; } /**************************** welcome游戏选择界面 /**********************/ voidwelcome() { Lcd_WriteStr(0,0,"欢迎来玩"); Lcd_WriteStr(0,1,"俄罗斯方块"); Lcd_WriteStr(0,2,"设置按K1"); Lcd_WriteStr(0,2,"开玩按K2"); } /*************俄罗斯方块部分 /****************************** 画墙壁,初始化界面 *******************************/ voidDrawBoard(void) { unsignedcharn; for(n=0;n<12;n++) { Lcd_Rectangle(3*n,0,3*n+2,2,1); Lcd_Rectangle(3*n,60,3*n+2,62,1); } for(n=0;n<20;n++) { Lcd_Rectangle(0,3*n,2,3*n+2,1); Lcd_Rectangle(33,3*n,35,3*n+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 创新 产品说明书