ImageVerifierCode 换一换
格式:DOC , 页数:32 ,大小:1.29MB ,
资源ID:1925308      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-1925308.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(毕业论文----基于单片机的推箱子游戏设计.doc)为本站会员(wj)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

毕业论文----基于单片机的推箱子游戏设计.doc

1、本科毕业论文(设计)题目:基于单片机的推箱子游戏设计 学生姓名:徐卫 学号: P30914093 院(系): 电子信息工程专业:微电子 入学时间: 2009年9月导师姓名:杨宗立 职称/学位: 讲师 导师所在单位: 安徽大学 完成时间: 2013年5月基于PROTEUS的推箱子游戏的设计摘 要本论文主要介绍了基于单片机的推箱子游戏的规则、硬件结构、软件代码的编写及工作原理、基于T6963C内核的液晶模块PG160128A的详细介绍以及指令集。模拟出Windows系统下的推箱子游戏,具有任意关数选择、难度依次加大、游戏步数记录、游戏时间记录、按键发声、系统低功耗、可实现在线调试等特点。本系统是以

2、单片机为其控制核心,以有源晶振构成的电路作为时钟信号,通过方向键的选择向单片机控制系统发出人物移动控制命令,控制系统接收命令后做出一系列必要的判断后,控制人物及箱子的移动。本设计已通过了实验仿真,运行稳定,基本上没有规则方面的错误。论文主要分为两大块:一块为游戏的硬件电路组成部分,一块为软件程序设计部分。在硬件电路里主要包括有源晶振部分、方向控制部分及液晶显示部分等与单片机的接线设计;软件编程方面主要是子程序和主程序的编写,包括:初始化代码、液晶驱动代码、方向按键代码、过关判断代码、步数记录代码、时间记录代码、按键发声代码、关数选择代码及表格数据代码等等。所有这些在文中都有详细说明。关键词:单

3、片机;推箱子;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

4、 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

5、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

6、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

7、 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 direc

8、tion 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 推箱

9、子游戏编译介绍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、.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 中断代码

11、设计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 推箱子游戏编译介绍 现如今,游戏风靡全球,各种游戏层出不穷,大到网络型的复杂游戏,小到手机游戏、单机游戏、智力游戏等简单游戏。但是这种简单也是相对于网络游戏等大型游戏而言的,小游戏本身的代码还是相当繁杂,它要执行一系列指令才能正确的完成一个简单的操作,才能按照玩家的意

12、志工作。所以我们现在见到的游戏多是在基于电脑这种高速执行指令的平台上运行的,脱离了它就什么事都做不了了。那么推箱子这种小游戏能否在单片机上编出来呢?答案是肯定的。首先,这个游戏是一个小型游戏,实现的功能比较简单,不像大型游戏那样功能复杂,它只要控制人物将所有箱子推到正确的位置即可,难度随着箱子的增多而加大,对于实现这样一个功能,程序不是太复杂,用一块单片机足以达到目的。其次,它的控件也比较少只有4个方向键和2个辅助的功能键,这些控键在Proteus中用弹跳式按键代替即可。第三,游戏地图相对比较小、画面简单,只有箱子、人物和正确位置箱子等几个图形,这些在一块稍大的液晶屏上就足以显示,用不着电脑显

13、示屏。第四,就编程语言方面来说,编写这样一个简单的小游戏不需要什么高级的语言,C语言或汇编语言就足以完成,C语言是一种通用型的语言,编程灵活、可读性强、移植性好;汇编语言是一种直接面向硬件的基础语言,最接近机器语言,执行速度快(本游戏采用C语言编写)。所以,单片机上运行推箱子游戏在硬件和软件两个方面都是可行的。 2 推箱子游戏的硬件部分设计 本部分内容包括介绍PG160128A及其引脚功能;介绍T6963C指令集;晶振电路、复位电路的硬件设计;控件及按键发声电路设计,最后给出游戏仿真的整体硬件电路图,接下来是具体的说明。2.1 PG160128A液晶屏介绍2 PG160128A为一个128行1

14、60列的点阵液晶屏,他能显示各种字符、图形、汉字,基于T6963C内核控制,自带字符库,同时用户也可以自己建立汉字、图形库,其在Proteus中的元器件图形如下: 图1 PG160128 各引脚的功能描叙如下表: 引脚序列引脚名称引脚功能描述1FG信号设计引脚,此引脚为一个输出引脚,在电路连接时悬空2VDD电源引脚,外接5V工作电压3VSS地引脚,接地4CON功能不详,在电路连接时悬空5WR写信号脚,当引脚为低电平时数据写入T6963C中6RD读信号脚,当引脚为低电平时数据从T6963C中读出7CE使能信号脚,正常工作时此脚接地,当为高电平时CPU不能与T6963C通信8C/D指令、数据信号脚

15、:当引脚为高电平且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控制器,可设计为用于液晶显示器控制驱动芯片和数

16、据显示的存取器。该控制器有一个8位并行数据总线,控制线的读取或写入通过微控制器接口实现,可以直接连接到TMPZ80微处理器中。它有一个128字节的字符发生器也可以控制外部显示RAM中的数据,达64K字节。配置的文字,图形和外部字符发生器RAM数据能很容易控制其显示在窗口中,可以自由移动、分配内存范围。该器件支持非常广泛的字符格式,液晶显示器允许通过编程设置选择不同的组合。它可以用于文字,图形和结合文本模式及其他各种属性的功能。2.2.2 T6963C指令集4T6963C共分为十大类,26条指令,详细信息如下表:指令类型有无参数D7D0引脚值指令说明指针设置D1/D200100001光标指针设置

17、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显示开关;N

18、0=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屏拷贝

19、位操作无1111N3N2N1N0N3=1置1 N3=0清 表二 T6963C指令集2.3 晶振、复位电路2.3.1 晶振电路单片机的晶振电路如图2所示,其中XTAL1和XTAL2分别为片内振荡电路的输入输出端。一般电容取2047uF,本系统晶体的振荡频率为24MHz。晶振电路产生的振荡脉冲经过内部触发器进行二分频后,成为单片机的时钟脉冲信号,为单片机提供一个基本时钟信号。 图2 晶振电路2.3.2 复位电路复位操作是单片机的基本操作,单片机在进入运行前和在运行过程中程序出错或操作失误使系统不能正常运行时,需要进行复位操作,复位操作后,程序将从0000H开始重新执行。复位信号从单片机的RST引脚

20、输入,复位操作有上电自动复位、按键电平复位和外部脉冲复位三种方式,本电路采用了按键电平复位,电路图如图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个控件,分别是:四个方向键,用于控制箱子的移动方向;一个确定键,用于刷新初始化界面进入游戏界面;一个选关键,用于选关。一个喇叭,用于按键发声,以提示按键是否有

21、效,电路图见图4. 控件、喇叭与单片机的接线是:上移键接P1.0;左移键接P1.1;右移键接P1.2;下移键接P1.3;确定键接P1.4;选关键接P1.5;喇叭经过分压式偏置共射放大电路将信号放大再与单片机P3.1口相连,如图4: 图4 扬声器放大电路至此,游戏的硬件电路结构及连线全部介绍完成,仿真电路图如图5所示,整个电路图以网络标号的形式给出,避免连线过多显得电路拥挤。 图5 推箱子游戏硬件电路图3 推箱子游戏的软件部分设计 本部分主要介绍游戏的软件部分设计,包括液晶屏驱动代码设计;初始化代码设计游戏时间代码设计;游戏关数代码设计;游戏步数代码设计;过关代码设计;方向控制代码设计;按键发声

22、代码设计;数据表格设计等几个方面,现就对这几个方面做具体分析。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

23、则可读写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; /

24、 为指令、状态操作条件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;

25、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);/自动写开始

26、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_PO

27、S);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

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2