基于单片机设计推箱子游戏,protues仿真_第1页
基于单片机设计推箱子游戏,protues仿真_第2页
基于单片机设计推箱子游戏,protues仿真_第3页
基于单片机设计推箱子游戏,protues仿真_第4页
基于单片机设计推箱子游戏,protues仿真_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、南京邮电大学毕 业 论 文题 目:基于单片机设计推箱子游戏 专 业: 学生姓名: 班级学号: 指导教师: 指导单位: 南京邮电大学通信与信息工程学院 日期: 年 月 日至 年 月 日摘 要本论文主要介绍了基于AT89C52单片机推箱子游戏设计的游戏规则、硬件结构、软件代码的编写及工作原理,基于T6963C内核的液晶模块PG160128A液晶模块的介绍,在仿真软件上模拟出推箱子游戏。本系统是以单片机为其控制核心,以有源晶振构成的电路作为时钟信号,通过方向键的选择向单片机控制系统发出人物移动控制命令,控制系统接收命令后做出一系列必要的判断后,控制人物及箱子的移动。论文分为两大块:一块为游戏的硬件电

2、路组成部分,一块为软件程序设计部分。在硬件电路里主要包括有源晶振部分、方向控制部分及液晶显示部分等与单片机的接线设计;软件编程方面主要是子程序和主程序的编写,包括:初始化代码、液晶驱动代码、方向键代码、过关判断代码等等。关 键 词:单片机;推箱子;PG160128A;T6963C内核ABSTRACTThis paper mainly introduces the based on single chip microcomputer AT89C52 tuixiangzi game design rules of the game, hardware structure, software cod

3、e compiling, and working principle of LCD module of T6963C kernel based PG160128A LCD module, simulate the tuixiangzi game on the simulation diagram.This system is based on single chip microcomputer as its control core, active crystals constitute the circuit as the clock signal, through the choice o

4、f the direction key issued a person move control command to the single-chip microcomputer control system, control system after the judgements made after a series of necessary receive commands, to control the movement of figures and boxes.Paper is divided into two areas: a piece of hardware circuit p

5、art of the game, a piece of software design part.In the hardware circuit mainly includes active crystals, direction control part and part, such as liquid crystal display (LCD) and the connection design of single chip microcomputer;Software programming are mainly subroutines and main program of the w

6、riting, including: the initialization code, LCD driver code, the direction key code, pass judgment and so on.Key words: single chip microcomputer; pushing; PG160128A;T6963C kernel目 录第一章 绪论11.1游戏总体功能的设计11.2系统框图11.3游戏设计的目的21.4游戏实现的目标21.5设计的基本要求2第二章 设计模块3 2.1控制模块3 2.2显示模块5 2.3T6963C指令集6 2.4Protues介绍8 2

7、.5Keil uVision4编译环境介绍10第三章 游戏架构12 3.1游戏基本元素12 3.2推箱子方向控制键12 3.3游戏关卡设计13 第四章 设计结果14 4.1编译 14 4.2仿真图19 4.3开机画面20 4.4流程20 4.5游戏画面23结束语26致谢27参考文献28附录29南京邮电大学通达学院2014届本科生毕业设计(论文)第一章 绪论目前,在中国乃至世界,游戏产业已经逐渐成为微控制器领域的一个相当庞大以及重要的分支,而关于这方面的高级人才仍甚是缺乏,很多初学单片机的朋友都会对其庞大而复杂的机制感到困惑。本文以经典的推箱子游戏规则为基础,趣味而有序地对这个游戏从需求分析到整

8、体方案进行了全新的设计。1.1 游戏总体功能的设计 首先运行游戏并载入相应的地图数据,屏幕上出现一个推箱子工人,其周围是预制好的地图、围墙人可以行走的通道、几个可以移动的箱子和游戏胜利结束时安放这些箱子的目标位置。玩家通过键盘操纵推箱子工人的位置。当工人靠近箱子并朝箱子位置移动的时候,箱子在其移动方向没有被其他物件(箱子或者墙)所阻碍的情况下可以被移动,当所有箱子被移到指定的安放位置后,则胜利通关并进入下一关的游戏。这个游戏是个小型游戏,实现的功能比较简单,不像大型游戏那样功能复杂,他只要控制人物奖箱子推到正确位置即可,难度随着箱子的增多而加大,对于实现这样一个功能,程序不是太复杂,用一块单片

9、机足以达到目的。其次,他的控件比较少,只有四个方向键和一个开始键,这些控键在Proteus中用弹跳式按键代替即可。第三,游戏地图相对比较少、画面简单,只有箱子、人物、砖头等几个图形,这些在一个稍大的液晶屏上足以显示,用不着电脑显示屏。第四,就编程语言方面来说,编写这样一个简单的小游戏不需要什么高级语言,C语言或者汇编语言足以完成,C语言是一种通用行的语言,编程灵活,可读性强,移植性好;汇编语言是一种直接面向硬件的基础语言,最接近机器语言,执行速度快(本游戏采用C语言编写)。所以,单片机上运行推箱子游戏在硬件和软件两个方面都是可行的。输入模块主控模块160128显示模块1.2 根据设计目标,整个

10、系统框图如图1.1: 图1.1 系统框图1.3 游戏设计的目的单片机是一门实践性很强的专业基础课,通过课程设计,达到进一步理解单片机的硬件、软件和综合应用方面的知识,培养实践能力和综合应用能力,开拓学习积极性、主动性,学会灵活运用已经学过的知识,并能不断接受新的知识。培养大胆发明创造的设计理念,为今后就业打下良好的基础。通过课程设计,掌握以下知识和技能:1.单片机应用系统的总体方案的设计;2.单片机应用系统的硬件设计;3.单片机应用系统的软件程序设计;4.单片机开发系统的应用和调试能力。1.4 游戏实现目标推箱子是一个经典游戏,目的是在训练逻辑思考能力。在一个规定区域中,要求把木箱放到指定的位

11、置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。1.5 设计的基本要求利用单片机进行硬件开发,必须具备用Keil C51编程能力和用Proteus进行仿真设计的能力。这使得单片机开发相对变得容易。我们利用课余时间装载上述软件,学会使用软件进行C51程序编程和单片机电路原理图仿真。一般而言,使用Keil C51集成调试软件建立自己的一个程序要经过如下几个步骤:建立一个工程项目文件;为工程选择一个目标器件(如AT89C52);为工程项目设定相关的软件和硬件的调试环境(如软件仿真或在线调试等);创建源程序文件并输

12、入、编辑程序源代码(汇编格式或C语言格式);保存所创建的源程序项目文件并添加到项目中;程序文件的编译与连接及调试。Proteus软件可以进行单片机系统仿真设计,绘制电路原理图并进行单片机仿真。使用Proteus软件的一般步骤如下:根据单片机电路原理图拾取元器件;将元器件放置到绘图区;在绘图区对元器件进行布局并连接;将程序文件置入单片机进行软件调试。第二章 设计模块2.1 控制模块选用ATMEL公司 生产的AT89C52为主控芯片,它是是一个低电压,高性能CMOS 8位单片机,主要功能特性如下:1、兼容MCS51指令系统;2、8k可反复擦写(大于1000次)Flash ROM;3、32个双向I/

13、O口;4、256x8bit内部RAM;5、3个16位可编程定时/计数器中断;6、时钟频率0-24MHz;7、2个串行中断,可编程UART串行通道;8、2个外部中断源,共8个中断源;9、2个读写中断口线,3级加密位;10、低功耗空闲和掉电模式,软件设置睡眠和唤醒功能;本次课设选用PDIP封装的 AT89C52芯片,其引脚功能如图2.1所示,图2.2为最小系统: 图2.1 引脚功能AT89C52 有256 个字节的内部RAM,80H-FFH 高128 个字节与特殊功能寄存器(SFR)地址是重叠的,也就是高128字节的RAM 和特殊功能寄存器的地址是相同的,但物理上它们是分开的。当一条指令访问7FH

14、 以上的内部地址单元时,指令中使用的寻址方式是不同的,也即寻址方式决定是访问高128 字节RAM 还是访问特殊功能寄存器。如果指令是直接寻址方式则为访问特殊功能寄存器。例如,下面的直接寻址指令访问特殊功能寄存器0A0H(即P2 口)地址单元。MOV 0A0H,#data间接寻址指令访问高128 字节RAM,例如,下面的间接寻址指令中,R0 的内容为0A0H,则访问数据字节地址为0A0H,而不是P2 口(0A0H)。MOV R0,#data堆栈操作也是间接寻址方式,所以,高128 位数据RAM 亦可作为堆栈区使用。定时器0和定时器1:AT89C52的定时器0和定时器1 的工作方式与AT89C51

15、 相同。图2.2 最小系统U1:AT89C52,DIPf封装;C1,C2:22pf瓷片电容C3:10uf电解电容;X1:12M晶振R1:10K金属膜电阻2.2 显示模块PG160128A为一个128行160列的点阵液晶屏,他能显示各种字符、图形、汉子,基于T6963C内核控制,自带字符库,同时用户也可以自己建立汉字。图形库,其在Proteus中的元器件图形如图2.3:图2.3 PG16128A各引脚的的功能描述如表2.1:表2.1 PG160128A引脚功能引脚序列引脚名称引脚功能描述1FG信号设计引脚,此引脚为一个输出引脚,在电路连接时为空2VDD电源引脚,外接5v工作电压3VSS地引脚,接

16、地4CON功能不详,在电路连接时悬空5WR写信号脚,当引脚为低电平时数据写入T6963C中6RD读信号脚,当引脚为低电平时数据从T6963C中读出7CE使能信号脚,正常工作时此脚接地,当为高电平时CPU不能与T6963C通信8C/D指令,数据信号脚:当引脚为高电平且WR=L时可以写入指令;当引脚为高电平且RD=L时可以读T6963C状态;当引脚为低电平且WR=L时可以写入数据;当引脚为低电平且RD=L时可以读出数据1118 D0D7数据引脚,用于液晶屏与单片机之间的数据通信10RET复位引脚,低电平有效,起复位作用,器件内部集成了上拉电阻,正常工作时此引脚接电源19FS1字形选择引脚FS1,用

17、于选择字形,当为高电平时是5*8点阵字体,当为低电平时是8*8点阵字体 2.3 T6963C指令集T6963C是一个LCD控制器,可设计为用于液晶显示器控制驱动芯片和数据显示的存取器。该控制器有一个8位并行数据总线,控制线的读取或写入通过微控制器接口实现,可以直接连接到TMPZ80微处理器中。它有一个128字节的字符发生器也可以控制外部显示RAM中的数据,达64k字节。配置的文字,图形和外部字符发生器RAM数据能很容易控制其显示在窗口中,可以自由移动、分配内存范围。该器件支持非常广泛的字符格式,液晶显示器允许通过编程设置选择不同的组合。他可以用于文字,图形和结合文本模式及其他各种属性的功能。T

18、6963C共分为十大类,26条指令,详细信息如表2.2表2.2 T6963C指令集指令类型有无参数D7D0引脚值指令说明指针设置D1/D200100001光标指针设置D1水平位置(低7位有效)D2垂直位置(低5位有效)00100010CGRAM偏置位置设置D1地址(低5位有效)D2=00H00100100地址指针位;D1低字节;D2高字节显示区域设置D1/D201000000文本区首址;D1低字节;D2高字节01000001文本区宽度字节数D1=字节数,D2=00H01000011图形区首址D1低字节;D2高字节01000011图形区宽度(字节数)D1=字节数,D2=00H显示方式设置无100

19、00000逻辑“或”合成10000001逻辑“异或”合成10000011逻辑“与”合成10000100文本特征显示开关无1001N3N2N1N090H显示开关;N0=1/0光标闪烁启用/禁用N1=1/0光标显示启用/禁用;N2=1/0文本显示启用/禁用;N3=1/0图形显示启用/禁用光标形状选择 无10100N2N1N00xA0-0xA7表示光标占的行数屏读无11100000屏读数据一次读D111000000数据写,地址加111000001数据读,地址加111000010数据写,地址减111000011数据读,地址减111000100数据写,地址不变11000101数据读,地址不变数据自动读、

20、写方式设置无10110000自动写设置10110001自动读设置10110010自动写结束10110011自动读结束屏拷贝无11101000屏拷贝位操作无1111N3N2N1N0N3=1置1N3=0清 2.4 Proteus介绍单片机系统设计包含硬件和软件设计,调试过程一般分为软件调试、硬件调试和系统调试个过程,传统设计方法需在三者之间反复修改调试,如硬件电路有问题需重新修改硬件电路设计,调试费时费力,且浪费硬件资源,为解决上述问题本文在单片机系统的设计过程中引入了Protues仿真软件。Protues软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它

21、EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Protues不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。 它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。课程设计、毕业设计是学生走向就业的重要实践环节。由于protu

22、es提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神的平台随着科技的发展,“计算机仿真技术”已成为许多设计部门重要的前期设计手段。它具有设计灵活,结果、过程的统一的特点。可使设计时间大为缩短、耗资大为减少,也可降低工程制造的风险,相信在单片机开发应用中protues也能茯得愈来愈广泛的应用。Protues软件具有其它EDA工具软件(例:multisim)的功能。这些功能是:(1)原理布图(2)PCB自动或人工布线(3)SPICE电路仿真革命性的特点:(1)互动的电路仿真。用户甚至可以实时

23、采用诸如RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。(2)仿真处理器及其外围电路。可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。配合系统配置的虚拟逻辑分析仪、示波器等,Protues建立了完备的电子设计开发环境。具有3大功能模块:(1)个易用而又功能强大的ISIS原理布图工具;(2)PROSPICE混合模型SPICE仿真;(3) ARES PCB设计;Protues提供了丰富的资源: (1)protues可提供的仿真元器件资源:仿真数字和模拟、交流和直

24、流等数千种元器件,有30多个元件库。(2)protues可提供的仿真仪表资源 :示波器、逻辑分析仪、虚拟终端、SPI调试器、I2C调试器、信号发生器、模式发生器、交直流电压表、交直流电流表。理论上同一种仪器可以在一个电路中随意的调用。(3)除了现实存在的仪器外,protues还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似,但功能更多。这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗。这些都尽可能减少了仪器对测量结果的影响。(4)protues可提供的调试手段protues提供了比较丰富的测试信号用于电路的测试。这些测试信号

25、包括模拟信号和数字信号。软件仿真:支持当前的主流单片机,如51系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列、68000系列等。1)提供软件调试功能2)提供丰富的外围接口器件及其仿真RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。这样很接近实际。在训练学生时,可以选择不同的方案,这样更利于培养学生。3) 提供丰富的虚拟仪器利用虚拟仪器在仿真过程中可以测量外围电路的特性,培养学生实际硬件的调试能力。4) 具有强大的原理图绘制功能电路功能仿真:在PROTUES绘制好原理图后,调入已编译好的目标代码文件:*.HEX,

26、可以在protues的原理图中看到模拟的实物运行状态和过程。2.5 Keil uVision4编译环境介绍Keil uVision4集成开发环境是Keil Software,Inc/Keil Elektronik GmbH开发的基于80C51内核的微处理器软件开发平台,内嵌多种符合当前工业标准的开发工具,可以从工程建立到管理、编译、链接、目标代码的生成、软件仿真、硬件仿真等完整的开发流程尤其是C编译工具在产生代码的准确性和效率方面达到了较高的水平,而且可以附加灵活的控制选项,在开发大型项目时非常理想。Keil C51集成开发环境的主要功能有以下几点:1:uVision4 for Windows

27、:是一个集成开发环境,它将项目管理、源代码编辑和程序调试等组合在一个功能强大的环境中;2:C51国际标准化C交叉编译器:从C源代码产生可重定位的目标模块;3:A51宏汇编器:从80C51汇编源代码产生可重定位的目标模块;4:BL51链接器/定位器:组合由C51和A51产生的可重定位的目标模块,生成绝对目标模块;5:LIB51库管理器:从目标模块生成连接器可以使用库文件;6:OH51目标文件至HEX格式的转换器,从绝对目标模块生成Intel Hex文件;7:RTX_51实时操作系统:简化了复杂的实时应用软件项目的设计。uVision4支持所有的Keil80C51的工具软件,包括C51编译器、宏汇

28、编器、链接程序等操作。1:C51编译器和A51汇编器由uVision4 IDE创建源文件,可以被C51编译器或A51汇编器处理,生成可重定位的object文件。KkeilC51编译器遵照ANSIC语言标准,支持C应用的所有标准特性。另外,还增加了几个可以直接支持80C51结构的特性。KeilA51宏汇编器支持80C51及派生系列的所有指令集。2:LIB51库管理器LIB51库管理器可以从由汇编器和编译器创建的目标文件建立目标库。这些库是按规定格式排列的目标模块,可在以后被链接器所使用。当链接器处理一个库时,仅仅使用了库中程序使用了的目标模块而不是全部加以引用。3:BL51连接器/定位器BL51

29、连接器使用从库中提取出来的目标模块和有编译器、汇编生成的目标模块,创建一个绝对地址目标模块。绝对地址目标文件或模块包括不可重定位的代码和数据。所以的代码和数据都被固定在具体的存储单元中。4:uVision4软件调试器uVision4软件调试器能十分理想地进行快速、可靠的程序调试。调试器包括一个高速模拟器,可以使用它模拟整个80C51系统,包括片上外围器件和外部硬件。当从器件数据库选择器件时,这个器件的属性会被自动配置。5:uVision4硬件调试器uVision4调试器提供了几种在实际目标硬件上测试程序的方法。安装MON51目标监控器的目标系统,并通过Monitor_51接口下载程序。6:RT

30、X51实时操作系统RTX51实时操作系统是针对80C51为控制器系列的一个多任务内核。RTX51实时内核简化了需要对实时事件进行反应的复杂应用的系统设计、编程和调试。这个内核完全集成在C51编译器中,使用非常简单。任务描述表和操作系统的一致性有BL51链接/定位器自动进行控制。此外,uVision4还具有强大的软件环境、友好的操作界面和简单快捷的操作方法,主要表现在以下几点:丰富的菜单栏;可以快速选择命令按钮的工具栏;一些源代码文件窗口;对话框窗口;直观明了的信息显示窗口。第三章 游戏架构3.1 游戏基本元素出现在显示画面中的游戏元素在液晶上以一个字符显示,即88的点阵。在字模提取软件设计各个

31、元素,并获得元素的显示码。显示码的每8位构成字符的一行,8行就有8个字节。图3.1 游戏元素图3.1中从左至右依次为:1人物, 2砖头,3箱子,4目的地,5完成后。 图3.2 界面元素3.2 推箱子方向控制键用按键执行人物或箱子移动时,先判断游戏缓存数组人物位置(人物在图像中的位置用curx,cury表示)移动的下一个位置的元素,为空格或目的时,仅执行人移动操作;为箱子时,要接着判断箱子的下一个位置的元素,若为空格则执行推箱子的操作,若为目的时执行推箱子操作且相应元素变成成功;为成功时,要接着判断箱子的下一个位置的元素,若为空格择执行推箱子的操作,若为目的时执行推箱子操作且相应元素变成成功;判

32、断完毕后,及时更新游戏画面缓存数组,并记录当前人物位置。上下左右操作类似,可参照向上移动的函数注释理解其它移动函数。 图3.3 方向控制键3.3 游戏关卡设计游戏每关都是在88个字符组成的区域中进行的,只要在每一个字符显示相应的元素,就可以组成游戏界面。定义一个三维数组code level88,存储每一关每一个字符位上要显示的元素。为增加游戏的趣味性和难度,设置的关口,逐渐增加箱子的个数和移动难度。推箱子游戏的关口设置需要及时更新不同关口的游戏界面。因此,在人物及箱子移动过后,必须判断是否完成本关口的任务,而及时进入下一关。我们在设计程序时,首先检测初始画面数组level88中目的4、成功5的

33、位置,然后在检测在游戏当前画面缓存数组level_temp中相应位置是否均为成功5。若相应位置均为成功5,设置一个标志位,判断该标志位为1时,则将游戏当前画面缓存数组level_temp更新为下一关数据。第4章 设计结果4.1 编译1)打开Keil uVision4后点击project,在弹出的下拉菜单中选中新建选项,如图4.1 图4.1 新建project2)然后选择要保存的路径,输入一个文件的名字,比如”zyj”保存在程序文件夹中,如下图4.2,点击保存。图4.2 保存文件3)这时会弹出一个新窗口,需要选择单片机的型号,根据使用的单片机型号选择,我这里使用的是AT89C52,选中后,如下图

34、4.3,右边栏是对AT89C52的说明,然后点击确定。图4.3 选中单片机4)完成以上步骤,屏幕如下图4.4显示。图4.4 完成界面5)单机“File”菜单,在下拉菜单中选择”NEW“选项,如下图4.5如果已经写好了c文件直接添加即可。图4.5 新建file图4.6 新建完成后6)如图4.7打开工程项目,点击”view”菜单下的”project window”选项,就会如图4.8显示。图4.7 打开工程项目图4.8 显示左侧框图在建立目标文件前,首先要将文件添加到组里去,具体操作如下:将鼠标箭头移至左边项目窗口中的“Source Group 1”前,在点击鼠标右击,在弹出的菜单项中选择“Add

35、 files to Group”,在弹出的对话框中选择刚才编辑保存好的原程序文件;需要点击“文件类型”右侧文本框中的倒三角,在弹出的下拉菜单中选择“All files”,然后再找到源程序文件。点击“Add”按钮,再在弹出的对话框中选择文件类型,如“c source file”;再点击“Close”按钮。此时可以在“Source Group 1”下看到源程序文件图标,如下图4.9显示。图4.9 打开源程序文件完成上述操作后方可进入建立目标文件。通常先点编译当前文件“Translate current file”再建立目标文件“Build target”;或直接点击重建目标文件“Rebuild a

36、ll target files”。即可生成我们需要的后缀名为hex的十六进制文件。编译结果如图4.10所示。图4.10 编译结果4.2 仿真图在proteus搭建的仿真图如图4.11:图4.11 仿真图控制开关上下左右用于人物的控制,中间sw1开关用于启动游戏,游戏中需要4个控制键和1个确定键,可以采用5个独立按键接入单片机进行控制,由单片机的P3.2口检测按键按下的信号。液晶显示屏幕用PG160128A来显示游戏画面,主控模块用AT89C52单片机。为液晶显示屏分配单片机的P2共8个数据口,P3.0-P3.2共3个控制口;为按键电路分配P1.0-P1.4共5个I/O接口;将5个开关接入与门电

37、路,并输出至单片机的P3.3外部中断接口。4.3 开机画面开机画面是用画图程序制作的一个128像素64像素的单色位图,并用取模软件提取该图像的点阵信息,共1024字节。使用T6963C的写数据地址自动加1的命令写入上述全部1024字节的数据,显示开机画面。如图4.12图4.12 开机画面4.4 流程游戏中,程序循环执行按键扫描程序,并做出相应判断。整个程序中,最关键的部分是要根据玩家的输入,控制小人、箱子的移动。定义一个二维数组,用于保存当前游戏状态每个字符位的元素,当玩家按键输入时,改变该数组中相应得数据,再将此二维数组每个数据代码的元素显示出来,就可以出现小人,箱子移动的效果。每关开始,进

38、行游戏初始化。将关卡数据写入上述二维数组中,并记入小人的位置(man_x,man_y)。人物位置显示目的地4原位置上面显示人物1end向上按键被按下人物上面的位置是空白0或者是目的地41人物位置原来是目的地4或箱子在目的地5人物位置显示空白0是否否图4.13 游戏流程图程序只要根据小人移动方向周围的元素信息,结合游戏规则,只要判断能够移动箱子、小人的情况,才显示出来,而不用对不能移动的情况进行判定,这大大简化了程序的编写。 流程图4.13,图4.14以向上移动为例。图4.13,图4.14中数字标号参照图3.1。人物上面的位置是箱子31否人物再上面的位置是空的0人物位置原来是目的地4或箱子在目的

39、地的52人物位置显示目的地4人物上面的位置显示人物1再上面的位置显示箱子3end人物位置显示空白人物上面的位置是目的地4人物位置原来是目的地4或箱子在目的地的5人物位置显示目的地4人物位置显示空白人物上面的位置显示人物1再上面的位置显示箱子在目的地上5end2是是是是否否否否图4.14 流程框图4.5 游戏画面图4.15 第一关游戏截图第一关设计比较简单,人物及箱子的路线可以直观的看出,通过控制上下左右四个方向键能轻易的将箱子推到目的地。图4.16 第二关游戏画面通过和第一关对比,明显发现比第一关稍有难度,人物及箱子的路线很难看出,需要稍作一些尝试才能完成。图4.17 第三关游戏画面为了增加第

40、三关的难度,这一关卡设计了两个箱子,需要将两个箱子都推到目的地才能通过,而箱子的顺序没有要求。结束语本设计能够通过四个键来控制箱子移动,一个键做开关,如果可以移动则移动方向同时跟踪显示人物的位置及刷新动态数组的内容。如果到了最后一关则自动返回第一关。在最近这段时间,我不断修改原理图和程序,直到程序和仿真基本满足要求,期间也是很辛苦,毕竟独立完成这样的毕业设计,开始的时候不知如何下手,没有头绪,只能一步一步去摸索。这次的毕业设计虽然困难重重,但这少有的经历使我学会了更多,努力做,用心学,还怕什么。致 谢这段时间里,指导老师和身边的一些同学给了我很大的帮助。在此,我要感谢这些给过我帮助的人。同时要

41、感谢一起做毕设的其他同学,大家一起交流,相互鼓励,使我的毕设进行的很顺利。还要感谢宿舍的姐妹们,为我创造了一个温馨、舒适的宿舍环境,保证了我的休息和睡眠,使我以良好的精神状态投入到毕业设计当中。最后,感谢百忙中抽出时间来审阅论文、出席论文答辩的各位老师们。参考文献1 赵建领.51单片机开发与应用技术详解M.电子工业出版社,20092 赵建领.零基础学单片机C语言程序设计M.机械工业出版社,20093 李学礼.基于Proteus的8051单片机实例教程M.电子工业出版社,20084 梁炳东.单片机原理与应用M.人民邮电出版社,20095 不亦心.电子制作J .20106 吴飞青.单片机原理与应用

42、实践指导M.机械工业出版社,20097 马忠梅.单片机的C语言应用程序设计M.北京航空航天大学出版社,20088 朱清慧.PROTEUS教程-电子线路设计、制版与仿真M.清华大学出版 社,20099 张齐.单片机系统设计与开发-基于PROTEUS单片机仿真和C语言编程M.机械工业出版社,200810 黄近秋黄惠洪.微型电脑应用J.201011 Syed R. Rizvi.Microcontroller Programming:An IntroductionM. CRC Press,c201212 Inter. MCS-51 family of single-chip microcomputer

43、s users manualM. 1990附录主函数#include #include data.h#include order.h#include lcdinit.c#include function.cvoid int1(void) interrupt 2keyboard();int main()uchar i=1;error0=0;error1=0;error2=0;delay(50);EA=1;IT1=1;EX1=1;/wirte_bg();/*液晶初始化函数(文本区首地址D1,文本区首地址D2, 文本区宽度, 图形区首地址D1, 图形区首地址D2, 图形区宽度, 光标形状, 显示方式

44、, 显示开关)*/lcd_init(0x00,0x00,0x14,0x50,0x01,0x14,0x00,MOD_XOR,0x0c);/wirte_bg();set_cgram();wirte_cgrom();cls();start();cls();pushbox();guan();while(1)return(0);#define uchar unsigned char#define LCD_CHAR 0x14sbit cd = P30;/*通道选择*/sbit rd = P31;/*读操作信号*/sbit wr = P32;/*写操作信号*/sbit error0 = P15; /*出错提

45、示1*/sbit error1 = P16; /*出错提示2*/sbit error2 = P17; /*出错提示3*/*读状态*/uchar read_state()uchar temp;P2 = 0xff;cd = 1;rd = 0;temp = P2;rd = 1;return(temp);/*STA0指令读写状态,STA1数据读写状态 判断函数*/void lcd_enable()uchar i;for(i = 10; i 0; i-)if(read_state() & 0x03) = 0x03)break;if(i=0)error0=1;/*若i=0,说明错误*/else error

46、0=0;/*STA2数据自动读状态 判断函数*/void atrd_enable()uchar i;for(i = 10; i 0; i-)if(read_state() & 0x04) = 0x04)break;if(i=0)error1=1;/*若i=0,说明错误*/else error1=0;/*STA3数据自动写状态 判断函数*/void atwr_enable()uchar i;for(i = 10; i 0; i-)if(read_state() & 0x08) = 0x08)break;if(i=0)error2=1;/*若i=0,说明错误*/else error2=0;/*写无

47、参数函数*/void write_cmd0(uchar cmd)lcd_enable();cd=1;P2=cmd;wr=0;wr=1;/*写单参数函数*/void write_cmd1(uchar data1, uchar cmd)lcd_enable();cd=0;P2=data1;wr=0;wr=1;lcd_enable();cd=1;P2=cmd;wr=0;wr=1;/*写双参数函数*/void write_cmd2(uchar data1, uchar data2, uchar cmd)lcd_enable();cd=0;P2=data1;wr=0;wr=1;lcd_enable();cd=0;P2=data2;wr=0;wr=1;lcd_enable();cd=1;P2=cmd;wr=0;wr=1;/*写数据函数*/void write_data(uchar data0)lcd_enable();cd=1;P2=data0;wr=0;wr=1;/*读数据函数*/uchar read_data()char temp;lcd_enable();cd = 0;P2 = 0xff;rd = 0;temp = P2;rd = 1;return(temp);/*若返回0,可能错误*/*自动写开始*/void auto_write()wr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论