基于51单片机模拟射击类游戏.docx
《基于51单片机模拟射击类游戏.docx》由会员分享,可在线阅读,更多相关《基于51单片机模拟射击类游戏.docx(29页珍藏版)》请在冰豆网上搜索。
基于51单片机模拟射击类游戏
基于51单片机模拟射击类游戏
上海大学王凯
(抄袭必纠)
摘要
电子游戏机,又俗称电玩,电动,不同于电脑。
自从问世以来,在全球范围内吸引了无数人的热潮,在每个国家都能找到众多的游戏发烧友,它无疑是当今社会上炙手可热的产品,基于这个广大的应用前景,本文着手研究电子模拟射击训练游戏。
本文主要通过使用51单片机来模拟简单的射击游戏。
在像素为160*128的LCD显示屏上显示模拟的手枪,并且可以用按键控制手枪的上下移动以及射出子弹,判断子弹是否击中移动的目标,最后统计得分显示结果。
当目标被击中时,蜂鸣器就会发出声音,并且设置有重新开始按键,即得分清零,子弹恢复初始值。
本设计通过K1、K2、K3、K4四个按键对游戏进行控制,分别为“向上”键,“向下”键,“发射”键,“子弹复位”键。
通过控制上下键使射击器与射击目标保持同一水平线上,然后开始射击,此时蜂鸣器发出发射音效,如射中即可获得一分得分,否则得分不变。
当子弹弹数为0时,按“子弹复位”键使游戏中的子弹数目恢复,就重新开始新的游戏。
本课题是基于单片机应用技术和LCD液晶显示屏的广泛应用而提出的,本课题所做的设计是以AT89S52单片机结合JM160128A显示器,通过proteus画图软件和keil的C语言编程软件,达到实现模拟射击游戏的目的。
通过将AT89S52单片机与JM160128ALCD结合应用,在仿真软件和硬件上都能很好地模拟常见的简单射击游戏,实现预期目标。
在游戏运行过程中,能够通过上下键移动枪支,射击目标,并能够实现上弹复位的目的。
这对于更深层次的单片机开发应用有着重要的意义。
关键词:
AT89S52单片机,LCD液晶显示屏,C语言,射击游戏
Abstract
Electronicgames,alsoknownaselectrictoys(videogames,electric),separatedfromthehomecomputer.Sincetheadventofasensationaroundtheworld,wecanfindagroupofingeniousenthusiastsoneveryfootintheEarth's.Itisundoubtedlyoneoftoday'smostcomputerproductsofthecustomers,basedonthevastnumberofpotentialapplications,thepaperstartedstudyingelectronicanalogshootingtraininggame.
ThispaperismainlyusingcombinationdesignwhichincludesMCUAT89S52and160*128LCDtosimulatesimpleshootingtraininggame,displayingthesimulatepistol’sgraphicsinpixelsfor160*128LCDandthroughpressingthebuttontocontrolpistolandtomoveupanddownandthendecidewhetherithashitthetarget,thenstatisticscoresanddisplayit.everytimewhenhittingthetarget,buzzerwillissuehitsound,otherwiserestartkeyworks.Bythisdesign,thereareK1,K2,K3,K4fourcontrolbuttonsonthegame,namely"up"key,"down"key,the"transmit"button,"bulletReset"button.Bycontrollingtheupanddownkeystokeepshootingtargetandpistolonthesamelevel,thenstartshootingtarget,atthesametime,thebuzzersoundsemitted,thescorewilladdoneifyoushot,otherwisethescoreunchanged.Whenthebulletshellsiszero,pressthe"bulletReset"keytorestorethenumberofbulletsinthegame,thegamecanstartagain,anewroundofchallengesbegin.Thispaperproposedisbasedonthewiderangeofapplicationsofsingle-chiptechnologyandJM160128A.Inordertosimulateshootingtraininggame,AT89S52single-chipisservedasthecore,combinedJM160128Adisplay,thentogetherwithISIS_7_ProfessionalandMicro-controllerDevelopmentkit,alsonamedKEIL,toachievethegoalofsimulatingshootingtraininggame.
BycombiningAT89S52MCUwithJM160128ALCDapplications,wecanachievethedesiredobjectivesandcancanwellsimulatecommonsimpleshootinggamebothinsoftwareandhardware.Inthecourseofthegamerunning,wecanshoottargetbymovinggunswithupanddownkeysandhavetheabilitytoachievethepurposeofthemissilereset.ThishasveryrealimplicationsforthedevelopmentofSCMdeeperapplications.
Keywords:
AT89S52MCU,LCD, C language,shooting game
第一章绪论
1.1系统设计背景及意义
1988年,随着自动售货机的面试,一个叫斯托维克的德国人根据其原理设计了一种叫做“自动产蛋机”的机器,自此游戏机在世界范围内风行起来。
在世界范围内,无论是大城市还是小村庄,无论是在国内还是在国外,每时每刻都在进行着这样的“奋斗”。
随着时间的推移,人们的生活已经离不开游戏机了,在大街小巷能看见各种各样的游戏机。
然而,游戏机狂潮为什么能够席卷全世界呢?
从游戏机的发展历史我们不难看出,科学技术的快速进步在游戏机发展过程中起到了至关重要的作用。
然而,科学技术水平的快速发展并不是游戏机在全世界风行的唯一因素。
随着我们对终端设备的开发,使得娱乐终端的游戏机同时也获得了很大程度的发展。
这也是导致游戏机全世界风靡的一个重要因素。
因此我们对于游戏机的研究具有很重要的意义,这也是我们对于本课题研究的背景和意义。
用51单片机设计一个游戏,与现如今那些大型游戏和手机游戏不同,也与单片机控制的其他程序有所区别,因为它要求游戏编写者对单片机的构造原理、工作的模式、指令系统和数据在内存中的分配以及信息的传递都要有着很深刻的理解,特别是游戏运行的时候对外部按键中断的处理以及各个子程序调用的先后顺序,代码的复杂程度也比一般的单片机程序要复杂很多。
如果我们编写的游戏程序能够如预期一样的稳定运行,我们将对单片机有着更深的理解,对编写游戏的复杂程度有更切身的体会。
同时也将大大提高我们的编程能力以及逻辑思维能力,也将再一次的体会到C语言的适用性,高效性和易移植性,也将使我们对C语言有更深刻的理解。
1.2国内外研究现状
目前国内的游戏公司已经发展到了几百家的规模,市场上运营的游戏亦达到了250多款,但是与欧美、韩国等科技强国的游戏发展程度还存在一定的差距。
我国有广阔的游戏市场,无限的发展前景,还有日益庞大的玩家队伍。
随着互联网的兴起,巨大的市场需求量使中国的游戏市场在短短几年内,从无到有,从陌生到熟悉,从掌握到运用。
现如今,游戏俨然已经成为了一种体育项目,更是衍生出了电竞圈。
电竞也像足球那样有自己的俱乐部,有自己的战队,玩家们还可以代表国家参加国际大赛,我国的战队游戏水平更是在世界巅峰,就在最近英雄联盟季中赛上,中国战队EdwardGaming打败了统治多年的韩国队,为国争光。
对于国外,电子游戏机的发展也非常迅速,尤其是发展到现在的高档游戏机成为电子游戏发烧友的最爱,跟着家电小型化和超大型化的开展潮流,日本任地狱公司率先于1989年4月推出GAMEBOY液晶8位机。
次年,美国雅利达公司出售ATARILYNK彩电液晶8位机,运用3.4英寸五颜六色液晶显现板。
接着,日本的NEC与SEGA公司也别离推出了相应的NECPC、SEGAGAMEGEAR16位五颜六色液晶机,并可观看电视节目,其液晶显现屏别离为2.6英寸与3.2英寸。
游戏在将来很有可能成为网络竞争中的主角,而且其产生的商业价值与利益无法估量。
游戏产业发展很快,游戏种类不断变化。
由此可见,世界游戏机发展前景一片大好,我们应该加大力度开发游戏。
1.3系统设计任务
利用51单片机设计一个模拟射击训练游戏机。
程序启动时在像素为160*128的液晶屏幕上显示游戏封面,然后显示游戏区,默认弹药为20发,K1,K2键用于向上或向下移动枪支,跟踪目标,K3键用于发射并模拟枪声,在每次发射时,如果击中则加1分,在击中后若目标物体尚未移动就发射并击中,程序不重复加分,弹药用完可按下K4键重新开始,也可按键更改默认弹药数。
本设计通过K1、K2、K3、K4四个按键对游戏进行控制,分别为“向上”键,“向下”键,“发射”键,“子弹复位”键。
通过控制上下键使射击器与射击目标保持同一水平线上,然后开始射击,此时蜂鸣器发出发射音效,如射中即可获得一分得分,否则得分不变。
当子弹弹数为0时,按“子弹复位”键使游戏中的子弹数目恢复,游戏可重新开始,进行新一轮的挑战。
1.4本章小结
本章主要介绍了本课题的研究背景,即游戏机的发展历程,以及国内外对于本课题的研究现状,国内外游戏机的发展,主要说明了本设计的任务,利用51单片机来模拟射击游戏,通过按键控制手枪的移动和射击,击中加一分。
本设计将使我们对单片机最小系统有更深刻的理解,将所学的知识应用到实践当中。
第二章射击训练游戏系统方案设计
2.1系统工作原理
整个硬件电路由AT98S52单片机及单片机最小系统的晶振电路和复位电路外接JM128*160LCD液晶屏、4个独立按键以及蜂鸣器和一个双4输入与非门74LS20和一个74HC04非门组成。
系统工作原理:
系统启动后首先由160*128LCD显示屏初始化,然后从左上角开始清屏,接着显示预先设置好的游戏开机界面:
图2.1游戏开机界面
在开机界面显示五秒后再次清屏,在屏幕第一行显示“射击训练游戏”,中间显示游戏主图像,左下角显示得分,右下角显示剩余弹药。
随后打开定时器T0,定时器T1和外部中断INT0。
其中定时器T0控制屏幕每秒通过函数刷新被击目标随机出现的位置,定时器T1模拟目标被击中后的枪声,在LCD显示屏上显示得分和剩余弹药的数量。
游戏进行时的界面如下:
图2.2正在游戏的界面
2.2系统组成框图
本系统硬件主要由51单片机与蜂鸣器、按键中断、JM160128ALCD液晶显示模块、单片机晶振和复位电路连接组成。
其组成框图如下:
图2.3系统组成框图
本次课题设计硬件部分由中央处理器,控制部分,显示部分组成,AT89S52单片机为中央处理器,4个独立按键为控制部分,LCD显示屏为显示部分。
软件部分的主要内容是通过keil软件进行编写游戏程序以及在Proteus中调试来实现射击移动目标的功能。
游戏机系统通过数据在各个部分之间的传送使整个游戏最后能够稳定的运行。
2.3硬件的选型
2.3.1.单片机概述
单片机是一种集成芯片,一个小而完善的微型计算机系统。
它通过采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、多种I/O口和中断系统、随机存储器RAM、只读存储器ROM、定时器/计数器等功能(可能还包括A/D转换器、模拟多路转换器、脉宽调制电路、显示驱动电路等电路)集成到一块硅片上。
2.3.2.单片机最小系统
单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统。
对于51系列单片机来说,最小系统一般应该包括:
单片机、晶振电路、复位电路,如下图所示即单片机最小系统。
图2.4单片机最小系统
2.3.3.单片机选型
目前市面上的单片机种类有很多,通用型单片机如果按位数分主要有4位机,8位机,16位机和32位机等等。
如果按厂家分类的话就更多。
目前我国市面上常见的单片机有如下几家:
Inter公司生产的MCS51系列和MCS96系列,Atmel公司生产的MCS51内核的AT89系列,Motorola公司生产的68HCXX系列,Microchip公司生产的PIC系列,Philips公司生产的MCS内核的87、80系列,Zilog公司生产的Z86系列,NEC公司生产的78系列,Siemens公司生产的MCS51内核的SAB80系列,每种单片机的内部都有所不同,包括I/O口的个数、数据/程序存取区的大小、定时/计数器的个数、有无A/D转化、有无看门狗中断等。
由于本次课题设计的游戏只用到了不到20个I/O口,2个定时器中断。
因此我们选择了Atmel公司的AT89S51单片机/AT89S52单片机。
具体参数如下:
1、基于8051的全静态CMOS工艺控制器;
2、32个I/O口;
3、3级流水线指令执行构架;
4、6个中断源;
5、2个定时/计数器;
6、128字节的片内数据存取器;
7、4K的闪存程序储存器;
由于市面上AT89S51单片机近乎淘汰了,且AT89S52在功能上与51单片机一致,52是51的增强型,S52比C5多了个,定时器T2,RAM多128B,ROM多4K,中断多2个,多一个看门狗,在掉电、数据指针等方面还有一些改进。
由此可知,AT89S52单片机完全满足本次课题设计的要求。
2.3.4.LCD的选型
液晶显示屏的英文名称是LiquidCrystalDisplay(Device),简称LCD。
根据LCD所采用的材料构造,液晶显示屏主要分为TN、STN、TFT等三大类,然而根据目前的技术原理又可以将它们分为TN、STN、FSTN、DSTN、TFT等诸多类别。
我们经常用到的LCD液晶显示屏主要包括:
AMPIRE128*64,LGM12641BSIR,LM016L,LM020L,LM017L等。
前面两种是64行128列不带字库的汉字、图形点阵液晶屏,它们能显示4行8列32个16*16点阵汉字或4行16列64个16*8点阵字符,还有一种最大128*64的点阵图形。
也有市面上最常见的带字库的12864,功能都是一样的。
后几种则是带字库的字符点阵,不能显示图形。
由以上介绍可知:
后3种液晶不能显示图形,最先排除;前2种液晶虽然可以显示图形,但屏幕较小不能完整的显示所有的游戏界面的内容,单单是地图显示就需要128*144点阵的屏幕,而这两种都是液晶屏的分辨率都只是128*64,所以我们需要一种更大的液晶显示屏。
因此本课题我们选择PG160128A液晶屏。
这块液晶屏是160*128点阵的屏幕,不仅可以满足基本的图像显示,还可以显示其他的记录信息,如游戏机常见的步数显示(推箱子游戏)、时间显示、关数显示等,完全满足设计要求。
2.4本章小结
本章主要介绍了系统的工作原理,系统的组成部分,由单片机最小系统外接蜂鸣器,显示部分与按键部分构成。
在完成本设计所需要用到的单片机以及LCD的选择。
第三章射击训练游戏器件介绍
3.1AT89S52单片机
由于市面上的AT89S51单片机近乎淘汰了,更多的是采用AT89S52代替。
AT89S52是一种功耗低但是性能高的8位单片机,单片机内带有一个4KB的Flash可反复擦写的只读存储器,它采用了CMOS工艺以及ATMEL公司的高密度非易失性存储器技术,兼容标准MCS-51指令系统。
片内的存储器允许用常规的非易失性存储器编程器来编程或者也可以在线编程,同时还具有三级程序存储器保密的性能。
在市面上众多的52系列单片机中我们选择了ATMEL公司的AT89S52,因为它不仅指令、管脚和MCU-51系列单片机能够完全兼容,而且它还将在线可编程Flash和通用CPU集成在一个芯片上。
这种单片机对于我们开发设备的要求并不高,也会大大的缩短开发时间。
图3.1AT89S52引脚图
主要性能参数:
·4.0---5.5V 的工作电压范围
·4k字节在线系统编程(ISP)Flash闪速存储器
·1000次反复擦写周期
·全静态工作模式:
0Hz---33MHz
·128×8 字节内部 RAM
·三级程序加密锁
·2个16位定时/计数器和6个中断源
·全双工串行UART通道
·低功耗空闲与掉电模式
·看门狗(WDT)及双数据指针
·中断可从空闲模式唤醒系统
·灵活的在线系统编程(ISP一字节或页写模式)
·掉电标识和快速编程特性
AT89S52功能特性概述:
AT89S52单片机的标准功能:
字节内部RAM和字节Flash闪速存储器,4k字节在线系统编程Flash闪速存储器,32个I/O口线,看门狗(WDT),两个数据指针,一个全双工串行通信口,一个5向量两级中断结构,两个16位定时(计数)器,片内振荡器和时钟电路。
同时,AT89S52可降至0Hz的全静态工作模式操作,并且还支持两种软件可选的节电工作的模式。
空闲的时候停止CPU的工作,但允许定时(计数)器,中断系统,RAM以及定串行通信口继续工作。
掉电方式下会保存RAM中的内容,但是振荡器会停止工作并且禁止其它所有部件的工作,直至下一个硬件复位。
AT89S52引脚功能说明:
·P0口(P0.0~P0.7):
P0口是由一组8位漏极开路型双向I/O口组成,从32脚~39脚,作为地址和数据总线复用口。
当P0作为输出口用的时候,每位可以驱动8个TTL逻辑门电路,对端口写‘1’即作为高阻抗输入端使用。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用,并且会激活内部上拉电阻。
在程序校验得时候,其输出指令字节,并且会外接上拉电阻,而在Flash编程时P0口就会接收指令字节。
·P1口(P1.0~P1.7):
P1口是由一个带内部上拉电阻的8位双向I/O口组成,从1脚~8脚,由输出缓冲级P1P1驱动的4个TTL逻辑门电路。
作为输入口用时,对端口写‘1’,上拉电阻端口通过内部的时候会被拉到高电平,因为此时内部存在上拉电阻,某个引脚被外部信号拉低,会输出一个电流(In)。
程序校验和Flash编程的时候P1将接收低8位地址。
·P2口(P2.0~P2.7):
P2口是由一个带有内部上拉电阻的8位双向I/O口组成的,从21脚~28脚,P2输出缓冲器可驱动(吸收或输出电流)4个TTL逻辑门电路。
当对端口写‘1’时,P2口将通过内部的上拉电阻把端口拉至高电平,此时可作输入口,当P2口作为输入口使用的时候,因为内部上拉电阻的存在,某个引脚会被外部信号拉低,此时便输出一个电流(In)。
在访问外部程序存储器或者16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口将输出高8位的地址数据。
P2在执行例如MOVX @Ri指令时就会访问8位地址的外部数据存储器,P2口输出P2锁存器的内容。
在Flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
·P3口(P3.0~P3.7):
P3口是由一组包含内部上拉电阻的8位双向I/O口组成的,从10脚~17脚,其输出缓冲器能驱动(吸收或输出电流)4个TTL逻辑门电路。
当对P3口写入“1”的时候,端口会被内部上拉电阻拉高并且可作为输入。
当P3口作为输入端时,被外部拉低的端口将用上拉电阻输出电流(In)。
P3口除了作为一般的I/O口外还有更重要的用途就是它的第二功能。
P3口还接收一些程序校验以及Flash闪速存储器编程的控制信号。
·RST:
复位输入。
引脚为第9脚,在晶振工作时,RST脚持续两个机器周期高电平将使单片机复位。
看门狗计时完成后,RST脚输出96个晶振周期的高电平。
特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。
在DISRTO默认状态下,复位高电平有效。
3.2PG160128A
PG160128A是一个由128行160列的点阵组成的液晶屏。
它可以显示各种图形、字符、也可以显示10×8个(16×16点阵)汉字。
由于T6963C内核的控制,并且自带字符库,同时也可以自己建立汉字、图形库。
主要技术参数和性能:
因为模块内自带-15负压,所以可以用于LCD的驱动电压
1.电源VDD:
+5V;
2.显示内容:
160(列)×128(行)点
3.全屏幕点阵
4.十三种指令
5.与CPU接口采用8位数据总线并行输入输出
6.占空比1/128
7.工作温度:
-10℃∽+55℃,存储温度:
-20℃∽+70℃
PG160128A在Proteus中的元器件的图形如图所示:
图3.2PG160128A元件图
各种引脚的功能描述如下表所示:
表3.1PG160128A引脚功能表
T6963C与其指令集:
T6963C是一个LCD控制器,是一个数据显示和LCD控制驱动芯片的存取器。
该控制器有一个8位并行数据总线,可以通过微控制器接口来对控制线实现读取和写入,它也可以直接连接至TMPZ80微处理器中。
T6963C控制器有一个128字节的字符发生器,可作为外部显示RAM中数据的控制,达到64K字节。
图形与配置的文字以及外部字符发生器RAM数据都能很容易地控制其在窗口中显示,也能够自由移动、分配内存范围。
该器件支持的字符格式很广泛,LCD显示器允许通过编程设置选择不同的组合。
它可以用于文字与图形结合的文本模式及其他属性的功能。
T6963C控制器总共分为十大类,有26条指令,详细信息如下表:
表3.2 T6963C指令集
3.374LS20与非门
74ls20是常见的双4输入与非门集成电路,是功能很简单的芯片,其包含两个4输入与非门。
第一组:
1,2,4,5引脚为输入,6脚为输出。
第2组:
9,10,12,13引脚为输入,8脚为输出。
引脚图如