基于单片机游戏设计Word格式.docx

上传人:b****5 文档编号:21432558 上传时间:2023-01-30 格式:DOCX 页数:31 大小:516.01KB
下载 相关 举报
基于单片机游戏设计Word格式.docx_第1页
第1页 / 共31页
基于单片机游戏设计Word格式.docx_第2页
第2页 / 共31页
基于单片机游戏设计Word格式.docx_第3页
第3页 / 共31页
基于单片机游戏设计Word格式.docx_第4页
第4页 / 共31页
基于单片机游戏设计Word格式.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

基于单片机游戏设计Word格式.docx

《基于单片机游戏设计Word格式.docx》由会员分享,可在线阅读,更多相关《基于单片机游戏设计Word格式.docx(31页珍藏版)》请在冰豆网上搜索。

基于单片机游戏设计Word格式.docx

目前国内游戏公司已达到了200多家,市场上运营的游戏亦达250多款,但与欧美、韩国等国家的游戏发展程度还有一定差距。

我国有广阔的游戏市场,宽阔的发展空间,无限的继续挑战和剧增的玩家队伍。

随着网络的兴起,巨大的市场需求量使中国在短短几年,已经从无到有,从陌生到熟知,从掌握到运用。

游戏必将成为网络竞争中的主角,他的商业利益和商业价值无法估量。

中国,人口众多的国家,随着人们生活水平的提高,温饱已经不是最终目的,我们寻求的是更加多姿多彩的生活,那么我们怎么能错过游戏这一最佳休闲娱乐项目呢?

所以我国游戏发展前景一片大好!

编程完成推箱子游戏的设计实现。

以单片机为核心,设计人机接口电路。

第1章系统总图设计

§

1.1系统总图

图1-1系统总图

1.2系统功能

实现游戏推箱子的运行,用户用键盘通过单片机来控制游戏的运行,并且在液晶显示器上显示出来;

其中键盘由5个键组成,四个控制方向,一个开始/暂停。

1.3单片机的选择

单片机的种类有很多:

通用型单片机按位数分有4位机,8位机,16位机和32位机等等。

按厂家分种类就更多,我国目前最常用的单片机有如下几家:

Intel公司的(MCS51系列);

Atmel公司的(AT89系列,MCS51内核);

Microchip公司的(87,80系列,MCS51内核);

Siemens公司的(SAB80系列,MCS51内核);

NEC公司的(78系列),每种单片机都有不同,包括:

I/O口个数,定时/计数器个数、数据/程序存取区大小、中断源个数、有无看门狗中断、有无A/D转化等等。

基于本游戏只用了不到20个I/O口;

一个定时器。

所以选择Atmel公司的AT89C51系列单片机。

其参数如下:

1、基于8051的全静态CMOS工艺控制器

2、3级流水线指令执行架构;

3、32个I/O口;

4、2个定时/计数器;

5、6个中断源;

6、4k的闪存程序存储器;

7、128字节的片内数据存取器;

有以上参数可知AT89C51单片机完全满足游戏设计要求。

1.4液晶屏的选择

液晶屏的种类也有很多,我们经常用到的液晶屏包括:

AMPIRE12864;

LGM12641BS1R;

LM016;

LM020L;

LM017等等。

液晶显示器TFTLCD,全称为薄膜晶体管液晶显示器(ThinFilmTransistorLiquidCrystalDisplayer),一般简称LCD(LiquidCrystalDisplay)。

液晶显示器LCD具有超薄体形、低功耗、低辐射、无闪烁、完全物理平面、低反光、清晰的字符显示等优点。

显示游戏信息和游戏运行画面的LCDl602和LCDl2864使用广泛,技术相对成熟,故LCD底层驱动采用前人成果,并在此基础上设计了游戏的运行界面。

第2章推箱子游戏硬件设计

2.1硬件原理图

图2-1硬件原理图

2.2LCD12864液晶介绍

2.2.1液晶显示模块概述

YM12864R汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。

主要技术参数和显示特性:

电源:

VDD3.3V~+5V(内置升压电路,无需负压);

显示内容:

128列×

64行

显示颜色:

黄绿

显示角度:

6:

00钟直视

LCD类型:

STN

与MCU接口:

8位或4位并行/3位串行

配置LED背光

多种软件功能:

光标显示、画面移位、自定义字符、睡眠模式等

2.2.2硬件连接

图2-2LCD12864硬件连接

2.2.3模块引脚说明

128X64HZ引脚说明

引脚号引脚名称方向功能说明

1VSS-模块的电源地

2VDD-模块的电源正端

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/RETH/L复位低电平有效

18NC空脚

19LED_A-背光源正极(LED+5V)

20LED_K-背光源负极(LED-OV)

逻辑工作电压(VDD):

4.5~5.5V

电源地(GND):

0V

工作温度(Ta):

0~60℃(常温)/-20~75℃(宽温)

2.3晶振、复位电路

图2-3晶振电路

晶振包括有源晶振和无源晶振。

晶振在单片机系统中为单片机运行提供时钟源,任何指令的执行都必须依靠时钟源的存在,所以被称为工作三要素之一。

由于本开发板使用可拔插晶振,所以长期使用难免会出现接触不良的现象,需要定期检测晶振的可靠性。

正常工作的开发板,晶振产生的时钟频率与标称的频率是一致的,可以用示波器观察波形和频率,在没有示波器的情况下,可以使用万用表测量两个引脚的对地电压估计晶振的工作状态,一把情况如下:

5V系统中,2个引脚的对地电压是都2V左右,且压差不大,如果出现引脚电压为0V或者5V表明晶振没有起振,需要检查连接可靠性或者更换晶振。

图2-4复位电路

单片机复位电路可以正常引导单片机到正确的程序执行位置,复位电路不正常会导致程序运行错乱甚至不能运行。

所以称为单片机工作的三要素之一。

上图包括2种复位方式,低电平复位与高电平复位,51单片机都采用高电平复位,即正常工作时复位引脚为低电平,按下复位按键时,复位脚为高电平。

阻容复位的特点是成本低连接方便。

第3章推箱子游戏软件部分设计

3.1游戏流程图

3.1.1方向函数所调用的函数流程图

图3-1方向函数调用程序图

3.1.2主程序流程图

图3-2主程序流程图

3.2液晶屏驱动代码

3.2.1清屏函数

输入参数:

bColor清屏所使用的背景色

voidCLR_Screen(unsignedintbColor)

{unsignedinti,j;

LCD_SetPos(0,240,0,320);

//320x240

for(i=0;

i<

320;

i++)

{for(j=0;

j<

240;

j++)

Write_Data_U16(bColor);

}

}

3.2.2显示字符串

可以中英文同时显示

x横坐标y纵坐标*s需要显示的字符串fColor字符颜色bColor字符背景颜色

voidLCD_PutString(unsignedshortx,unsignedshorty,unsignedchar*s,unsignedintfColor,unsignedintbColor)

{unsignedcharl=0;

while(*s)

{if(*s<

0x80)

{LCD_PutChar(x+l*8,y,*s,fColor,bColor);

s++;

l++;

}

else

{PutGB1616(x+l*8,y,(unsignedchar*)s,fColor,bColor);

s+=2;

l+=2;

3.3游戏初始化代码

voidInit_0()

{CLR_Screen(0x7FFF);

//调用清屏函数

Rectangle(0,0,128,160,0xaa);

Rectangle(16,16,112,144,0xaa);

//绘制矩形框

LCD_PutString(32,128,"

推箱子"

0x00ff,0xBE5F);

LCD_PutString(16,144,"

机电092李召"

0xf800,0xBE5F);

LCD_PutString(48,64,"

开机"

3.4地图显示代码

voidDTXS(void)

{unsignedchari,j;

for(i=0;

8;

i++)

//扫描8行

for(j=0;

j++)

//扫描8列

{map_ram[i][j]=map[game][i][j];

//将关卡数组中的数据传给跟踪数组

a=map_ram[i][j];

//将跟踪数组中的数据赋给动态内存

switch(a)

//根据动态内存中的数据做出判断

{case0:

LCD_PutString(16*i,16*j,"

李"

0x00ff,0xFFFF);

break;

//如果是0,则将白色汉字‘李’显示在屏幕对应位置

case1:

"

0x00ff,0xF800);

renwu_x=i,renwu_y=j;

//如果是1,则将红色汉字‘李’显示在屏幕对应位置

case2:

0x00ff,0x0000);

//如果是2,则将黑色汉字‘李’显示在屏幕对应位置

case3:

0x00ff,0x07E0);

//如果是3,则将绿色汉字‘李’显示在屏幕对应位置

case4:

0x00ff,0xFFE0);

//如果是4,则将黄色汉字‘李’显示在屏幕对应位置

case5:

召"

//如果是5,则将汉字‘召’显示在屏幕对应位置

}

3.5原来位置代码

void_DTXS()

{if(a==0||a==3||a==1)

//如果原来人物位置是空白或者箱子,则显示空白

{LCD_PutString(16*renwu_x,16*renwu_y,"

//显示出来空白

map_ram[renwu_x][renwu_y]=0;

//更新跟踪数组

if(a==4||a==5)

//如果人物位置是目标或者目标与箱子重合的位置,则显示目标

//将目标显示出来

map_ram[renwu_x][renwu_y]=4;

3.6关卡更新代码

voidguangeng()

{game++;

//关卡加1

if(game>

8)game=1;

//如果关卡大于8,则置一

DTXS();

//显示地图

3.7通关代码

voidpass()

{unsignedchari,j,a=1;

//内存空间分配

//扫描8行

{for(j=0;

//扫描8列

{if(map[game][i][j]==5||map[game][i][j]==4)

//如果关卡数组中此位置是目标或者目标与箱子重合后的图

{if(map_ram[i][j]==5)a=1;

//如果动作更新数组中此位置是目标与箱子重合后的图,则将a置一

}

else{a=0;

//如果不是的话,则将a置0,并退出

if(a)

{game++;

//如果a=1,则将关卡加一

if(game==9)game=1;

//如果关卡等与9,则返回第一关

DTXS();

//更新地图

3.8方向控制代码

游戏共有四个方向键,原理相同,所以只列出上推函数

voidUP()//向上推子函数

{charb;

a=map[game][renwu_x][renwu_y];

//原来人物这个位置是什么

b=map_ram[renwu_x-1][renwu_y];

//现在人物位置上面是什么

if(b==0||b==4)

//如果现在人物位置上面是空白或者目标图形则显示一个人物

{

LCD_PutString(16*(renwu_x-1),16*renwu_y,"

//上面显示代表人物的汉字

_DTXS();

//调用原来位置显示子程序,还原人物本身位置图形

renwu_x--;

//更新人物坐标

if(b==3||b==5)

//如果现在人物上面是箱子或者箱子与目标重合的图形则还得判断人物上边是什么图形,如果人物上面的上面不是箱子、墙和箱子与目标重合后的图形则可以移动

{if(map_ram[renwu_x-2][renwu_y]!

=2&

&

map_ram[renwu_x-2][renwu_y]!

=3&

=5)

{if(map_ram[renwu_x-2][renwu_y]==0)

//如果人物上边是空白

{LCD_PutString(16*(renwu_x-2),16*renwu_y,"

//则在上边的上边显示个箱子

map_ram[renwu_x-2][renwu_y]=3;

//更新箱子的位置

elseif(map_ram[renwu_x-2][renwu_y]==4)

//如果现在人物位置的上边是目标

{LCD_PutString(16*(renwu_x-2),16*renwu_y,"

//则在上边的上边显示目标与箱子重合的图形

map_ram[renwu_x-2][renwu_y]=5;

//更新箱子和目标重合的位置

}

LCD_PutString(16*(renwu_x-1),16*renwu_y,"

//在上边显示一个人物的图形

if(b==3)map_ram[renwu_x-1][renwu_y]=0;

//如果现在人物的上边是箱子则更新为空白

if(b==5)map_ram[renwu_x-1][renwu_y]=4;

//如果现在人物上边是箱子与目标重合的图则更新为目标的图形

_DTXS();

//调用原来位置显示子函数

renwu_x--;

pass();

//调用过关子函数,判断是否过关

第4章推箱子游戏联机调试

4.1KeiluVision4编译环境介绍

KeiluVision4集成开发环境是KeilSoftware,Inc/KeilElektronikGmbH开发的基于80C51内核的微处理器软件开发平台,内嵌多种符合当前工业标准的开发工具,可以从工程建立到管理、编译、链接、目标代码的生成、软件仿真、硬件仿真等完整的开发流程尤其是C编译工具在产生代码的准确性和效率方面达到了较高的水平,而且可以附加灵活的控制选项,在开发大型项目时非常理想。

KeilC51集成开发环境的主要功能有以下几点:

1:

uVision4forWindows:

是一个集成开发环境,它将项目管理、源代码编辑和程序调试等组合在一个功能强大的环境中;

2:

C51国际标准化C交叉编译器:

从C源代码产生可重定位的目标模块;

3:

A51宏汇编器:

从80C51汇编源代码产生可重定位的目标模块;

4:

BL51链接器/定位器:

组合由C51和A51产生的可重定位的目标模块,生成绝对目标模块;

5:

LIB51库管理器:

从目标模块生成连接器可以使用库文件;

OH51目标文件至HEX格式的转换器,从绝对目标模块生成IntelHex文件;

7:

RTX_51实时操作系统:

简化了复杂的实时应用软件项目的设计。

uVision4支持所有的Keil80C51的工具软件,包括C51编译器、宏汇编器、链接程序等操作。

C51编译器和A51汇编器

由uVision4IDE创建源文件,可以被C51编译器或A51汇编器处理,生成可重定位的object文件。

KkeilC51编译器遵照ANSIC语言标准,支持C应用的所有标准特性。

另外,还增加了几个可以直接支持80C51结构的特性。

KeilA51宏汇编器支持80C51及派生系列的所有指令集。

LIB51库管理器

LIB51库管理器可以从由汇编器和编译器创建的目标文件建立目标库。

这些库是按规定格式排列的目标模块,可在以后被链接器所使用。

当链接器处理一个库时,仅仅使用了库中程序使用了的目标模块而不是全部加以引用。

BL51连接器/定位器

BL51连接器使用从库中提取出来的目标模块和有编译器、汇编生成的目标模块,创建一个绝对地址目标模块。

绝对地址目标文件或模块包括不可重定位的代码和数据。

所以的代码和数据都被固定在具体的存储单元中。

uVision4软件调试器

uVision4软件调试器能十分理想地进行快速、可靠的程序调试。

调试器包括一个高速模拟器,可以使用它模拟整个80C51系统,包括片上外围器件和外部硬件。

当从器件数据库选择器件时,这个器件的属性会被自动配置。

uVision4硬件调试器

uVision4调试器提供了几种在实际目标硬件上测试程序的方法。

安装MON51目标监控器的目标系统,并通过Monitor_51接口下载程序;

RTX51实时操作系统

RTX

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

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1