已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科毕业论文(设计)题目:基于单片机的推箱子游戏设计 学生姓名:徐卫 学号: P30914093 院(系): 电子信息工程专业:微电子 入学时间: 2009年9月导师姓名:杨宗立 职称/学位: 讲师 导师所在单位: 安徽大学 完成时间: 2013年5月基于PROTEUS的推箱子游戏的设计摘 要本论文主要介绍了基于单片机的推箱子游戏的规则、硬件结构、软件代码的编写及工作原理、基于T6963C内核的液晶模块PG160128A的详细介绍以及指令集。模拟出Windows系统下的推箱子游戏,具有任意关数选择、难度依次加大、游戏步数记录、游戏时间记录、按键发声、系统低功耗、可实现在线调试等特点。本系统是以单片机为其控制核心,以有源晶振构成的电路作为时钟信号,通过方向键的选择向单片机控制系统发出人物移动控制命令,控制系统接收命令后做出一系列必要的判断后,控制人物及箱子的移动。本设计已通过了实验仿真,运行稳定,基本上没有规则方面的错误。论文主要分为两大块:一块为游戏的硬件电路组成部分,一块为软件程序设计部分。在硬件电路里主要包括有源晶振部分、方向控制部分及液晶显示部分等与单片机的接线设计;软件编程方面主要是子程序和主程序的编写,包括:初始化代码、液晶驱动代码、方向按键代码、过关判断代码、步数记录代码、时间记录代码、按键发声代码、关数选择代码及表格数据代码等等。所有这些在文中都有详细说明。关键词:单片机;推箱子;PG160128A; T6963C内核;指令集Design Of PROTEUS Sokoban Game Based On1AbstractThis paper introduces the single-chip based on the rules of the game Sokoban, the structure of hardware, software code writing and working principle, based on the core T6963C LCD module PG160128A, as well as details of the instruction set. Simulate the system under Windows Sokoban game, an arbitrary number of related options, in turn increase the difficulty of the game a few step-by-step record time of the game record, sound button, low-power system can achieve on-line debugging and so on. The system is based on its single-chip control of the core, consisting of active crystal clock circuit clock signal sent through the arrow keys to select the single-chip control system to control mobile command characters, the control system after receiving an order to make a Series to determine the necessary, to control the movement of people and boxes. This design has been adopted by the simulation experiments, stable, rules virtually no mistakes. The main thesis is divided into two blocks: one for the games hardware components of the circuit, as a part of the software programming. In the hardware circuitry, including the main active part of the crystal, the direction and control of some of the liquid crystal display and other parts of the single-chip wiring design; software programming side of the main subroutine is the main program and the preparation, including: initialization code, LCD Driver code, the direction of key code, customs code to determine, step-by-step record of the number of code, record time code, voice button code, customs code and select a number of forms of data code and so on. All of these are in the text in detail.Key words:MCU; Sokoban; PG160128A; T6963C core; instruction set 目录1 推箱子游戏编译介绍72 推箱子游戏的硬件部分设计72.1 PG160128A液晶屏介绍72.2 T6963C及其指令集介绍92.2.1 T6963C92.3 晶振、复位电路102.3.1 晶振电路102.3.2 复位电路112.4 液晶显示屏与单片机接口电路113 推箱子游戏的软件部分设计133.1 液晶屏驱动代码设计153.1.1 读状态程序153.1.2 是否可读写程序153.1.3 是否可自动读写程序163.1.4写单参数程序163.1.5写双参数程序163.1.6写指令程序173.1.7写8字节数据程序173.1.8设置数据显示在屏幕上的坐标程序173.1.9设置数据存储起始地址173.1.10 CGRAM偏置地址设置函数183.1.11液晶初始化函数183.1.12显示一个汉字子程序183.1.13 清屏程序183.1.14 自定义字符写入CGROM函数193.1.15 设置点显示在屏幕上的坐标(以位为单位)193.1.16 画圆子程序,其中x0,y0表示圆心,R表示半径193.2 初始化代码设计203.3 游戏时间代码设计203.4 游戏选关代码设计203.5 步数、关数更新代码设计213.5.1 步数更新代码设计213.5.2 关数更新代码设计213.6 过关代码设计213.7图形显示子程序223.7.1 地图显示子程序223.7.2原来位置显示子程序223.8 中断代码设计233.8.1 定时器0中断发声程序233.8.2 定时器1中断计时程序233.9 方向控制代码设计234 推箱子游戏的系统仿真254.1建立工程项目流程254.2 Proteus中原理图的绘制及文件的加载294.3 开机界面显示314.4 游戏界面显示314.5 仿真结果分析及解决方法335 总结34参考文献34致谢351 推箱子游戏编译介绍 现如今,游戏风靡全球,各种游戏层出不穷,大到网络型的复杂游戏,小到手机游戏、单机游戏、智力游戏等简单游戏。但是这种简单也是相对于网络游戏等大型游戏而言的,小游戏本身的代码还是相当繁杂,它要执行一系列指令才能正确的完成一个简单的操作,才能按照玩家的意志工作。所以我们现在见到的游戏多是在基于电脑这种高速执行指令的平台上运行的,脱离了它就什么事都做不了了。那么推箱子这种小游戏能否在单片机上编出来呢?答案是肯定的。首先,这个游戏是一个小型游戏,实现的功能比较简单,不像大型游戏那样功能复杂,它只要控制人物将所有箱子推到正确的位置即可,难度随着箱子的增多而加大,对于实现这样一个功能,程序不是太复杂,用一块单片机足以达到目的。其次,它的控件也比较少只有4个方向键和2个辅助的功能键,这些控键在Proteus中用弹跳式按键代替即可。第三,游戏地图相对比较小、画面简单,只有箱子、人物和正确位置箱子等几个图形,这些在一块稍大的液晶屏上就足以显示,用不着电脑显示屏。第四,就编程语言方面来说,编写这样一个简单的小游戏不需要什么高级的语言,C语言或汇编语言就足以完成,C语言是一种通用型的语言,编程灵活、可读性强、移植性好;汇编语言是一种直接面向硬件的基础语言,最接近机器语言,执行速度快(本游戏采用C语言编写)。所以,单片机上运行推箱子游戏在硬件和软件两个方面都是可行的。 2 推箱子游戏的硬件部分设计 本部分内容包括介绍PG160128A及其引脚功能;介绍T6963C指令集;晶振电路、复位电路的硬件设计;控件及按键发声电路设计,最后给出游戏仿真的整体硬件电路图,接下来是具体的说明。2.1 PG160128A液晶屏介绍2 PG160128A为一个128行160列的点阵液晶屏,他能显示各种字符、图形、汉字,基于T6963C内核控制,自带字符库,同时用户也可以自己建立汉字、图形库,其在Proteus中的元器件图形如下: 图1 PG160128 各引脚的功能描叙如下表: 引脚序列引脚名称引脚功能描述1FG信号设计引脚,此引脚为一个输出引脚,在电路连接时悬空2VDD电源引脚,外接5V工作电压3VSS地引脚,接地4CON功能不详,在电路连接时悬空5WR写信号脚,当引脚为低电平时数据写入T6963C中6RD读信号脚,当引脚为低电平时数据从T6963C中读出7CE使能信号脚,正常工作时此脚接地,当为高电平时CPU不能与T6963C通信8C/D指令、数据信号脚:当引脚为高电平且WR = L时可以写入指令;当引脚为高电平且RD = L时可以读T6963C状态;当引脚为低电平且WR = L时可以写入数据;当引脚为低电平且RD = L时可以读出数据1118D0D7数据引脚,用于液晶屏与单片机之间的数据通信10RST复位引脚,低电平有效,起复位作用,器件内部集成了上拉电阻,正常工作时此引脚接电源19FS1字形选择引脚FS1,用于选择字形,当为高电平时是5*8点阵字体,当为低电平时是8*8点阵字体 表一 PG160128引脚功能表2.2 T6963C及其指令集介绍2.2.1 T6963C3T6963C是一个LCD控制器,可设计为用于液晶显示器控制驱动芯片和数据显示的存取器。该控制器有一个8位并行数据总线,控制线的读取或写入通过微控制器接口实现,可以直接连接到TMPZ80微处理器中。它有一个128字节的字符发生器也可以控制外部显示RAM中的数据,达64K字节。配置的文字,图形和外部字符发生器RAM数据能很容易控制其显示在窗口中,可以自由移动、分配内存范围。该器件支持非常广泛的字符格式,液晶显示器允许通过编程设置选择不同的组合。它可以用于文字,图形和结合文本模式及其他各种属性的功能。2.2.2 T6963C指令集4T6963C共分为十大类,26条指令,详细信息如下表:指令类型有无参数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显示方式设置无10000000逻辑“或”合成10000001逻辑“异或”合成10000011逻辑“与”合成10000100文本特征显示开关无1001N3N2N1N090H显示开关;N0=1/0 光标闪烁启用/禁用N1=1/0光标显示启用/禁用;N2=1/0文本显示启用/禁用;N3=1/0 图形显示启用/禁用光标形状选择无10100N2N1N00xA0-0xA7表示光标占的行数屏读无11100000屏读数据一次读、写方式设置D1 11000000数据写,地址加111000001数据读,地址加111000010数据写,地址减111000011数据读,地址减111000100数据写,地址不变11000101数据读,地址不变数据自动读、写方式设置无10110000自动写设置10110001自动读设置10110010自动写结束10110011自动读结束屏拷贝无11101000屏拷贝位操作无1111N3N2N1N0N3=1置1 N3=0清 表二 T6963C指令集2.3 晶振、复位电路2.3.1 晶振电路单片机的晶振电路如图2所示,其中XTAL1和XTAL2分别为片内振荡电路的输入输出端。一般电容取2047uF,本系统晶体的振荡频率为24MHz。晶振电路产生的振荡脉冲经过内部触发器进行二分频后,成为单片机的时钟脉冲信号,为单片机提供一个基本时钟信号。 图2 晶振电路2.3.2 复位电路复位操作是单片机的基本操作,单片机在进入运行前和在运行过程中程序出错或操作失误使系统不能正常运行时,需要进行复位操作,复位操作后,程序将从0000H开始重新执行。复位信号从单片机的RST引脚输入,复位操作有上电自动复位、按键电平复位和外部脉冲复位三种方式,本电路采用了按键电平复位,电路图如图3.。 图3 复位电路2.4 液晶显示屏与单片机接口电路 液晶显示屏共有18个引脚,其中VDD、RST两脚接电源,VSS、FS1、CE三脚接地,CON、FG两脚悬空,D0D7分别与单片机P2.0P2.7相连接,WR与P1.7脚相连,RD与P1.6脚相连,C/D与P1.5脚相连,电路图见图4.2.5 控键、喇叭与单片机接口电路 本游戏共有6个控件,分别是:四个方向键,用于控制箱子的移动方向;一个确定键,用于刷新初始化界面进入游戏界面;一个选关键,用于选关。一个喇叭,用于按键发声,以提示按键是否有效,电路图见图4. 控件、喇叭与单片机的接线是:上移键接P1.0;左移键接P1.1;右移键接P1.2;下移键接P1.3;确定键接P1.4;选关键接P1.5;喇叭经过分压式偏置共射放大电路将信号放大再与单片机P3.1口相连,如图4: 图4 扬声器放大电路至此,游戏的硬件电路结构及连线全部介绍完成,仿真电路图如图5所示,整个电路图以网络标号的形式给出,避免连线过多显得电路拥挤。 图5 推箱子游戏硬件电路图3 推箱子游戏的软件部分设计 本部分主要介绍游戏的软件部分设计,包括液晶屏驱动代码设计;初始化代码设计游戏时间代码设计;游戏关数代码设计;游戏步数代码设计;过关代码设计;方向控制代码设计;按键发声代码设计;数据表格设计等几个方面,现就对这几个方面做具体分析。3.1 液晶屏驱动代码设计53.1.1 读状态程序unsigned char Read_State()/返回液晶显示屏的当前状态unsigned char a;P2=0xff;/读状态之前先将数据线拉高_CD=1;/ 为指令、状态操作条件_RD=0;/读操作条件_RD=1;/为下次读做准备a=Pin;/将状态保存return a;3.1.2 是否可读写程序void Enable()while(1) /bit0指令写状态位,bit1数据读/写状态位,为1时候空闲if(Read_State()&3)=3)break;/如果状态的低2为1则可读写3.1.3 是否可自动读写程序void Aut_Write()while(1) /bit3数据自动写状态位,为1时候空闲if(Read_State()&8)=8)break; /如果状态的第4为1则可自动读写3.1.4写单参数程序/Data1为传入的参数,Com为传入的指令;写入顺序为先数据后写指令。void Write_Data1(unsigned char Data1,unsigned char Com)Enable();/判断是否可读写_CD=0;/为数据操作条件Pin=Data1;/将数据送数据线_WR=0;/写操作_WR=1;/为下次写做装备Enable();_CD=1; / 为指令、状态操作条件Pin=Com; /将指令送数据线_WR=0;_WR=1;3.1.5写双参数程序/ Data1/Data2为传入的参数,Com为传入的指令,先Data1后Data2,最后写指令。void Write_Data2(unsigned char Data1,unsigned char Data2,unsigned char Com)Enable();/判断是否可读写_CD=0; /为数据操作条件Pin=Data1; /将数据1送数据线_WR=0; /写操作_WR=1; /为下次写做装备Enable();_CD=0;Pin=Data2; /将数据2送数据线_WR=0;_WR=1;Enable();_CD=1;Pin=Com; /将指令送数据线_WR=0;_WR=1;3.1.6写指令程序void Write_Com(unsigned char Com)Enable();/判断是否可读写_CD=1; / 为指令、状态操作条件Pin=Com; /将指令送数据线_WR=0;/写操作_WR=1;/为下次写做装备3.1.7写8字节数据程序/ Addr表示数据首地址,Way表示写的方式void Write_8_Data(unsigned char Addr,unsigned char Way)Aut_Write();/判断是否能自动写Write_Com(AUT_WR);/自动写开始Write_Data1(Addr,Way);Write_Com(AUT_WO);/自动写结束3.1.8设置数据显示在屏幕上的坐标程序/ (以字节为单位),x表示显示的行(015),y表示显示的列(019)void Set_xy(unsigned char x,unsigned char y)unsigned int a;a=x*20+y;Write_Data2(a&0xff,a8,ADR_POS);3.1.9设置数据存储起始地址void Set_Addr(unsigned char Addr1,unsigned char Addr2)Write_Data2(Addr1,Addr2,ADR_POS);3.1.10 CGRAM偏置地址设置函数void Set_CGRAM()Write_Data2(1,0,CGR_POS);3.1.11液晶初始化函数/(文本区首地址D1,文本区首地址D2, 文本区宽度, 图形区首地址D1, /图形区首地址D2, 图形区宽度, 光标形状, 显示方式, 显示开关)void LCD_Init(unsigned char Txt1,unsigned char Txt2,unsigned char Txt_Wide, unsigned char Map1,unsigned char Map2,unsigned char Map_Wide, unsigned char Guang_Biao,unsigned char Disp_Mode,unsigned char Kai_Guan)Write_Data2(Txt1,Txt2,TXT_STP);Write_Data2(Txt_Wide,0,TXT_WID);Write_Data2(Map1,Map2,GRH_STP);Write_Data2(Map_Wide,0,GRH_WID);Write_Com(CUR_SHP|Guang_Biao);Write_Com(Disp_Mode);Write_Com(DIS_SW|Kai_Guan);3.1.12显示一个汉字子程序/x表示显示的行(015),y表示显示的列(019),n表示字在表格中的位置void Han_Zi(unsigned char x,unsigned char y,unsigned char Addr)Set_xy(x,y);Write_8_Data(Addr,INC_WR);Write_8_Data(Addr+2,INC_WR);Set_xy(x+1,y);Write_8_Data(Addr+1,INC_WR);Write_8_Data(Addr+3,INC_WR);3.1.13 清屏程序void Clear_LCD()unsigned int a;Set_xy(0,0);/从最左上角开始for(a=0;a320;a+)/清屏320字节Write_8_Data(0x83,INC_WR);/ 数据写,地址加13.1.14 自定义字符写入CGROM函数void Write_CGORM()unsigned int a;Set_CGRAM();Set_Addr(0,0x0c);for(a=0;a8,0x24);/设置写地址Write_Com(point);3.1.16 画圆子程序,其中x0,y0表示圆心,R表示半径/先打第一象限内的1/4段圆弧,再依据对称原理打出其他3段圆弧void Circle(unsigned char x0,unsigned char y0,unsigned R,bit n)unsigned char i,j=0;Point(x0,y0,n);for(i=0;i=R;i+) while(1) if(R*R-i*i=j*j)break; j+;Point(x0-j,y0+i,n);Point(x0-i,y0+j,n); /第一象限打点Point(x0+j,y0+i,n);Point(x0+i,y0+j,n); /第二象限打点Point(x0+j,y0-i,n);Point(x0+i,y0-j,n); /第三象限打点Point(x0-j,y0-i,n);Point(x0-i,y0-j,n); /第四象限打点j=0; 3.2 初始化代码设计6/初始化代码里包含定时器0、1的相关参数设置,初始化开机界面显示等。EA=ET0=ET1=1;/开启中断总开关,允许外部中断0、1中断TMOD=0x11;/将定时器0、1都设为定时模式且工作在方式一。TH0=64800/256;/定时器0初始值装载,用于按键发声TL0=64800%256;TH1=0x3c;/ 定时器1初始值装载,每25ms中断一次TL1=0xb0;Init_disply();/调用开机界面显示子函数,包含了开机界面的所有内容3.3 游戏时间代码设计if(F) /当程序检测到读时间标志位F=1(由定时器1控制)时会刷新一次时间。F=0;/为下一次做准备Set_xy(13,17);/设置百位数字显示的位置Write_8_Data(0x10+Time/100,0xc4);/得到时间的百位数据Set_xy(13,18); /设置十位数字显示的位置Write_8_Data(0x10+Time%100/10,0xc4);/得到时间的十为数据Set_xy(13,19); /设置个位数字显示的位置Write_8_Data(0x10+Time%10,0xc4);/得到时间的个位数据3.4 游戏选关代码设计/当按下选关按键后,主程序调用选关函数,程序代码如下:void Choice_Customs()Time=Steps=0;/选关时将时间、步数归零New_Step();/更新步数显示Custom=Cust;/将选得的关传给关数寄存器New_Custom();/更新关数显示Dispaly();/更新地图显示Cust+;/没按下一次键键关数加一if(Cust=18)Cust=1;/如果关数等于18则回到第一关(游戏总共17关)3.5 步数、关数更新代码设计73.5.1 步数更新代码设计/当按下任意一个方向键,且箱子能移动时,会调用游戏步数更新子程序void New_Step()Set_xy(7,17); /设置百位数字显示的位置Write_8_Data(0x10+Steps/100,0xc4); /得到步数的百位数据Set_xy(7,18); /设置十位数字显示的位置Write_8_Data(0x10+Steps%100/10,0xc4); /得到步数的十位数据Set_xy(7,19); /设置个位数字显示的位置Write_8_Data(0x10+Steps%10,0xc4); /得到步数的个位数据3.5.2 关数更新代码设计void New_Custom()Set_xy(1,18);/ 设置十位数字显示的位置Write_8_Data(0x10+Custom/10,0xc4);/ 得到关数的十位数据Set_xy(1,19);/ 设置个位数字显示的位置Write_8_Data(0x10+Custom%10,0xc4);/ 得到关数的个位数据3.6 过关代码设计/当所有箱子都推到指定位置时,会调用过关子程序,代码如下:void Pass()unsigned char i,j,a=1;/内存空间分配for(i=0;i8;i+)/扫描8行if(!a)break;/如果a=0则直接跳出函数for(j=0;j9;j+) /扫描9列 /如果关卡数组表格中此位置是叉图形或箱子和叉重合后的图 if(CustomsCustom-1ij=5|CustomsCustom-1ij=4)/如果动作跟踪数组里此位置是箱子和叉重合后的图,则将a置1if(Follow_Actionij=5)a=1;/如果动作跟踪数组里此位置不是箱子和叉重合后的图,则将a置0,并退出else a=0;break;if(a)Custom+;/如果a=1则将关数加一(因为所有箱子都已推好,可以过关)Steps=Time=0;/过关时将时间、步数归零New_Step();/更新步数显示if(Custom=18)Custom=1;/如果关数等于18则回到第一关(游戏总共17关)New_Custom();/更新关数显示Dispaly();/更新地图显示3.7图形显示子程序图形显示子程序包括地图显示程序和原来位置显示子程序两个3.7.1 地图显示子程序/在调用过关函数或选关函数时,会调用到显示子函数,功能是刷新地图void Dispaly()unsigned char i,j,a;for(i=0;i8;i+)/扫描8行for(j=0;j9;j+)/扫描9列Follow_Actionij=CustomsCustom-1ij;将关卡数组中的数据传给跟踪数组 a=Follow_Actionij;/将跟踪数组中的数据传给动态内存switch(a)/根据内存中的数据做出判断case 0:a=0x80;break;/如果是0(空白)则将空白字模的地址80H传给内存/如果是1(人物)则将人物字模的地址94H传给内存,并记录人物位置所在坐标case 1:a=0x94;x_Coordinate=i;y_Coordinate=j;break;case 2:a=0x84;break;/ 如果是2(墙壁)则将墙壁字模的地址84H传给内存case 3:a=0x8c;break;/ 如果是3(箱子)则将箱子字模的地址8cH传给内存case 4:a=0x88;break;/ 如果是4(叉)则将叉字模的地址88H传给内存case 5:a=0x90;break;/如果是5(箱子和叉重合)则将地址90H传给内存Han_Zi(2*i,2*j,a);/调用写汉字程序,将图形显示出来3.7.2原来位置显示子程序/此程序显示当人物移动后,人物本身位置所要显示的图形void _Display()if(a=0|a=3|a=1) /如果原来人物这个位置是空白或是箱子则显示一个空白Han_Zi(2*x_Coordinate,2*y_Coordinate,0x80);/ 将空白图形显示出来Follow_Actionx_Coordinatey_Coordinate=0;/更新跟踪数组中的内容/如果人物本身这里是一个叉图形或是箱子或叉重合后的图则显示一个叉if(a=4|a=5)Han_Zi(2*x_Coordinate,2*y_Coordinate,0x88);/ 将叉图形显示出来Follow_Actionx_Coordinatey_Coordinate=4;/ 更新跟踪数组中的内容3.8 中断代码设计中断代码设计包括定时器0和1两段,定时器0为中断发声代码,定时器1为中断计时代码,代码如下:3.8.1 定时器0中断发声程序void Time_0_Int() interrupt 1 using 0TH0=64800/256;TL0=64800%256;/定时器0初值设定Count+;/每次进入中断,发声计数数据加1if(Count=150)TR0=Count=0;/发声100ms后Count中数据归零,并关定时器Speaker=Speaker;/喇叭引脚电平取反3.8.2 定时器1中断计时程序void Time_1_Int() interrupt 3 using 1TH1=0x3c;TL1=0xb0;/ 定时器1初值设定Counts+;/每次进入中断,计时计数数据加1if(Counts=40)/如果1秒中到Counts=0;Time+;F=1;/ Counts数据归零,时间全局量加1,读时间标志置13.9 方向控制代码设计8游戏共有4个方向键,每一个键代码编写的原理,判断顺序及执行何种操作都是一样的,不同的是方向各不相同,现已向上推箱子为例详细说明其执行过程。void On_Push()/向上推子函数Cust=1;/关数计数器置一,为选关做准备a=CustomsCustom-1x_Coordinatey_Coordinate;/原来人物这个位置是什么b=Follow_Actionx_Coordinate-1y_Coordinate; /现在人物位置上面是什么 if(b=0|b=4)/如果现在人物位置上面是空白或是叉图形则显示一个人物Steps+;/箱子可以移动,步数加1New_Step();/更新步数Han_Zi(2*(x_Coordinate-1),2*y_Coordinate,0x94);/在上面显示人物_Display();/调用原来位置显示子程序,还原人物本身位置图形x_Coordinate-;/更新人物坐标if(b=3|b=5)/如果现在人物位置上面是箱子或是箱子和叉重合的图形则还得判/断人物上面的上面是什么图形,如果人物上面的上面不是箱子、墙壁和箱子和叉/重合后的图形则可以移动if(Follow_Actionx_Coordinate-2y_Coordinate!=2&Follow_Actionx_Coordinate-2y_Coordinate!=3&Follow_Actionx_Coordinate-2y_Coordinate!=5)Steps+;/箱子可以移动,步数加1New_Step();/更新步数/如果现在人物位置上面的上面是空白if(Follow_Actionx_Coordinate-2y_Coordinate=0)Han_Zi(2*(x_Coordinate-2),2*y_Coordinate,0x8c);/则在上面的上面显示个箱子Follow_Actionx_Coordinate-2y_Coordinate=3;/更新箱子的位置/如果现在人物位置上面的上面是叉else if(Follow_Actionx_Coordinate-2y_Coordinate=4)/则在上面的上面显示一个箱子和叉重合后的图Han_Zi(2*(x_Coordinate-2),2*y_Coordinate,0x90);Follow_Actionx_Coordinate-2y_Coordinate=5; /更新箱子和叉重合的位置Han_Zi(2*(x_Coordinate-1),2*y_Coordinate,0x94); /在上面显示一个人物/如果现在人物位置上面是箱子则更新为空白(因为箱子已经移掉了)if(b=3)Follow_Actionx_Coordinate-1y_Coordinate=0;/如果现在人物位置上面是箱子和叉重合的图则更新为叉(因为箱子已经移掉了)if(b=5)Follow_Actionx_Coordinate-1y_Coordinate=4;_Display();/调用原来位置显示子程序,显示人物本身位置所要显示的图形x_Coordinate-;/更新人物坐标Pass();/调用过关子程序,判断是否过关4 推箱子游戏的系统仿真9,10,11,12在仿真前先介绍有关工程项目的建立及编译生成可执行文件(*.Hex)的具体过程。4.1建立工程项目流程1)建立一个新工程单击Project菜单,在弹出的下拉菜单中选中New Project选项,如下图 2)然后选择你要保存的路径,输入工程文件的名字,比如保存到C51目录里,工程文件的名字为C51,如下图所示,然后点击保存.3)这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,keil c51几乎支持所有的51核的单片机,我这里还是以大家用的比较多的Atmel 的89C51来说明,如下图所示,选择89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定.4)完成上一步骤后,屏幕如下图所示 5)在下图中,单击“File”菜单,再在下拉菜单中单击“New”选项 ,如果已经写好了C文件则直接添加为文件,这一步可去掉。 新建文件后屏幕如下图所示在建立目标文件之前,首先要将文件添加到组里去。具体操作如下:将鼠标箭头移至中间左边项目窗口中的“Source Group 1”前的图标上,再单击鼠标右键,在弹出的菜单项中选择“Add files to Group Source Group 1”。在弹出的对话框中选择刚才编辑保存好的源程序文件;需点“文件类型”右侧文本框中的倒三角,在弹出的下拉菜单中选“All files(*.*)”,然后再找到程序文件。点“Add”按钮,再在弹出的对话框中选择文件类型,如“Assembly language file”;再点“Close”按钮。若是C语言源程序文件“*.c”;或汇编语言的源程序文件“*.asm”,则点“文件类型”右侧文本框中的倒三角,在弹出的下拉菜单中选“c source file”或“asm source file”,然后再找到程序文件。点“Add”按钮,再点“Close”按钮。此时按钮建立目标“Build target”前的编译当前文件“Translate current file”按钮的颜色也变深了。而在中间左边项目窗口中的“Source Group 1”前多了一个“+”号。点击“+”号,可以看到在“Source Group 1”下面就有一个源程序文件图标,图示如下 Keil中文件的添加完成上述操作后方可进入建立目标文件。通常先点编译当前文件“Translate current file”,再建立目标文件“Build target”;或直接点重建目标文件“Rebuild all target files”。即可生成我们需要的后缀名为HEX的十六进制文件。编译或汇编的结果见如图所示,上面提示“0个错误、0个报警”。如果在编译、连接中出现错误,则可按照提示进行检查。这个文件就是我们要下载到单片机中的程序文件。 图6 Keil工程项目目标文件生成4.2 Proteus中原理图的绘制及文件的加载依照仿真电路在Proteus中绘图,如下图所示 Proteus中的推箱子原理图双击单片机弹出对话框,在Clo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度民办学校校车服务合同2篇
- 2025版新能源汽车销售与服务合同模板下载4篇
- 2025年度农业科技项目知识产权保护合同8篇
- 2025版绿色建筑节能技术实施合同4篇
- 2025年度高端培训学校副校长职务聘任合同4篇
- 二零二五年度农家乐土地流转与乡村旅游发展合同
- 二零二五年度农家乐房屋出租与乡村旅游开发合同
- 2025年度汽车租赁合同车辆违章处理范本3篇
- 案外人另案确权诉讼与执行异议之诉的关系处理
- 二零二五年度民间借款担保与资产保全服务合同样本3篇
- 盘式制动器中英文对照外文翻译文献
- 社会系统研究方法的重要原则
- 重症医学科健康宣教手册
- 2022版《义务教育英语课程标准》解读培训课件
- 科技进步类现代轨道交通综合体设计理论与关键技术公
- 五个带头方面谈心谈话范文三篇
- 互联网的发展历程
- 部编人教版五年级道德与法治下册全册课件(完整版)
- 广西贵港市2023年中考物理试题(原卷版)
- 外观质量评定报告
- 窒息的急救解读课件
评论
0/150
提交评论