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

上传人:wj 文档编号:1925308 上传时间:2023-05-02 格式:DOC 页数:32 大小:1.29MB
下载 相关 举报
毕业论文----基于单片机的推箱子游戏设计.doc_第1页
第1页 / 共32页
毕业论文----基于单片机的推箱子游戏设计.doc_第2页
第2页 / 共32页
毕业论文----基于单片机的推箱子游戏设计.doc_第3页
第3页 / 共32页
毕业论文----基于单片机的推箱子游戏设计.doc_第4页
第4页 / 共32页
毕业论文----基于单片机的推箱子游戏设计.doc_第5页
第5页 / 共32页
毕业论文----基于单片机的推箱子游戏设计.doc_第6页
第6页 / 共32页
毕业论文----基于单片机的推箱子游戏设计.doc_第7页
第7页 / 共32页
毕业论文----基于单片机的推箱子游戏设计.doc_第8页
第8页 / 共32页
毕业论文----基于单片机的推箱子游戏设计.doc_第9页
第9页 / 共32页
毕业论文----基于单片机的推箱子游戏设计.doc_第10页
第10页 / 共32页
毕业论文----基于单片机的推箱子游戏设计.doc_第11页
第11页 / 共32页
毕业论文----基于单片机的推箱子游戏设计.doc_第12页
第12页 / 共32页
毕业论文----基于单片机的推箱子游戏设计.doc_第13页
第13页 / 共32页
毕业论文----基于单片机的推箱子游戏设计.doc_第14页
第14页 / 共32页
毕业论文----基于单片机的推箱子游戏设计.doc_第15页
第15页 / 共32页
毕业论文----基于单片机的推箱子游戏设计.doc_第16页
第16页 / 共32页
毕业论文----基于单片机的推箱子游戏设计.doc_第17页
第17页 / 共32页
毕业论文----基于单片机的推箱子游戏设计.doc_第18页
第18页 / 共32页
毕业论文----基于单片机的推箱子游戏设计.doc_第19页
第19页 / 共32页
毕业论文----基于单片机的推箱子游戏设计.doc_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

《毕业论文----基于单片机的推箱子游戏设计.doc》由会员分享,可在线阅读,更多相关《毕业论文----基于单片机的推箱子游戏设计.doc(32页珍藏版)》请在冰点文库上搜索。

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

本科毕业论文(设计)

题  目:

 基于单片机的推箱子游戏设计                

学生姓名:

  徐卫   学号:

P30914093

院(系):

电子信息工程   专业:

 微电子     

入学时间:

 2009       年   9    月

导师姓名:

 杨宗立     职称/学位:

 讲师  

导师所在单位:

    安徽大学         

完成时间:

  2013     年    5    月

基于PROTEUS的推箱子游戏的设计

摘要

本论文主要介绍了基于单片机的推箱子游戏的规则、硬件结构、软件代码的编写及工作原理、基于T6963C内核的液晶模块PG160128A的详细介绍以及指令集。

模拟出Windows系统下的推箱子游戏,具有任意关数选择、难度依次加大、游戏步数记录、游戏时间记录、按键发声、系统低功耗、可实现在线调试等特点。

本系统是以单片机为其控制核心,以有源晶振构成的电路作为时钟信号,通过方向键的选择向单片机控制系统发出人物移动控制命令,控制系统接收命令后做出一系列必要的判断后,控制人物及箱子的移动。

本设计已通过了实验仿真,运行稳定,基本上没有规则方面的错误。

论文主要分为两大块:

一块为游戏的硬件电路组成部分,一块为软件程序设计部分。

在硬件电路里主要包括有源晶振部分、方向控制部分及液晶显示部分等与单片机的接线设计;软件编程方面主要是子程序和主程序的编写,包括:

初始化代码、液晶驱动代码、方向按键代码、过关判断代码、步数记录代码、时间记录代码、按键发声代码、关数选择代码及表格数据代码等等。

所有这些在文中都有详细说明。

关键词:

单片机;推箱子;PG160128A;T6963C内核;指令集

DesignOfPROTEUSSokobanGameBasedOn[1]

Abstract

Thispaperintroducesthesingle-chipbasedontherulesofthegameSokoban,thestructureofhardware,softwarecodewritingandworkingprinciple,basedonthecoreT6963CLCDmodulePG160128A,aswellasdetailsoftheinstructionset.SimulatethesystemunderWindowsSokobangame,anarbitrarynumberofrelatedoptions,inturnincreasethedifficultyofthegameafewstep-by-steprecordtimeofthegamerecord,soundbutton,low-powersystemcanachieveon-linedebuggingandsoon.Thesystemisbasedonitssingle-chipcontrolofthecore,consistingofactivecrystalclockcircuitclocksignalsentthroughthearrowkeystoselectthesingle-chipcontrolsystemtocontrolmobilecommandcharacters,thecontrolsystemafterreceivinganordertomakeaSeriestodeterminethenecessary,tocontrolthemovementofpeopleandboxes.Thisdesignhasbeenadoptedbythesimulationexperiments,stable,rulesvirtuallynomistakes.

Themainthesisisdividedintotwoblocks:

oneforthegame'shardwarecomponentsofthecircuit,asapartofthesoftwareprogramming.Inthehardwarecircuitry,includingthemainactivepartofthecrystal,thedirectionandcontrolofsomeoftheliquidcrystaldisplayandotherpartsofthesingle-chipwiringdesign;softwareprogrammingsideofthemainsubroutineisthemainprogramandthepreparation,including:

initializationcode,LCDDrivercode,thedirectionofkeycode,customscodetodetermine,step-by-steprecordofthenumberofcode,recordtimecode,voicebuttoncode,customscodeandselectanumberofformsofdatacodeandsoon.Alloftheseareinthetextindetail.

Keywords:

MCU;Sokoban;PG160128A;T6963Ccore;instructionset

目录

1推箱子游戏编译介绍 7

2推箱子游戏的硬件部分设计 7

2.1PG160128A液晶屏介绍 7

2.2T6963C及其指令集介绍 9

2.2.1T6963C 9

2.3晶振、复位电路 10

2.3.1晶振电路 10

2.3.2复位电路 11

2.4液晶显示屏与单片机接口电路 11

3推箱子游戏的软件部分设计 13

3.1液晶屏驱动代码设计 15

3.1.1读状态程序 15

3.1.2是否可读写程序 15

3.1.3是否可自动读写程序 16

3.1.4写单参数程序 16

3.1.5写双参数程序 16

3.1.6写指令程序 17

3.1.7写8字节数据程序 17

3.1.8设置数据显示在屏幕上的坐标程序 17

3.1.9设置数据存储起始地址 17

3.1.10CGRAM偏置地址设置函数 18

3.1.11液晶初始化函数 18

3.1.12显示一个汉字子程序 18

3.1.13清屏程序 18

3.1.14自定义字符写入CGROM函数 19

3.1.15设置点显示在屏幕上的坐标(以位为单位) 19

3.1.16画圆子程序,其中x0,y0表示圆心,R表示半径 19

3.2初始化代码设计 20

3.3游戏时间代码设计 20

3.4游戏选关代码设计 20

3.5步数、关数更新代码设计 21

3.5.1步数更新代码设计 21

3.5.2关数更新代码设计 21

3.6过关代码设计 21

3.7图形显示子程序 22

3.7.1地图显示子程序 22

3.7.2原来位置显示子程序 22

3.8中断代码设计 23

3.8.1定时器0中断发声程序 23

3.8.2定时器1中断计时程序 23

3.9方向控制代码设计 23

4推箱子游戏的系统仿真 25

4.1建立工程项目流程 25

4.2Proteus中原理图的绘制及文件的加载 29

4.3开机界面显示 31

4.4游戏界面显示 31

4.5仿真结果分析及解决方法 33

5总结 34

参考文献. 34

致谢 35

1推箱子游戏编译介绍

现如今,游戏风靡全球,各种游戏层出不穷,大到网络型的复杂游戏,小到手机游戏、单机游戏、智力游戏等简单游戏。

但是这种简单也是相对于网络游戏等大型游戏而言的,小游戏本身的代码还是相当繁杂,它要执行一系列指令才能正确的完成一个简单的操作,才能按照玩家的意志工作。

所以我们现在见到的游戏多是在基于电脑这种高速执行指令的平台上运行的,脱离了它就什么事都做不了了。

那么推箱子这种小游戏能否在单片机上编出来呢?

答案是肯定的。

首先,这个游戏是一个小型游戏,实现的功能比较简单,不像大型游戏那样功能复杂,它只要控制人物将所有箱子推到正确的位置即可,难度随着箱子的增多而加大,对于实现这样一个功能,程序不是太复杂,用一块单片机足以达到目的。

其次,它的控件也比较少只有4个方向键和2个辅助的功能键,这些控键在Proteus中用弹跳式按键代替即可。

第三,游戏地图相对比较小、画面简单,只有箱子、人物和正确位置箱子等几个图形,这些在一块稍大的液晶屏上就足以显示,用不着电脑显示屏。

第四,就编程语言方面来说,编写这样一个简单的小游戏不需要什么高级的语言,C语言或汇编语言就足以完成,C语言是一种通用型的语言,编程灵活、可读性强、移植性好;汇编语言是一种直接面向硬件的基础语言,最接近机器语言,执行速度快(本游戏采用C语言编写)。

所以,单片机上运行推箱子游戏在硬件和软件两个方面都是可行的。

2推箱子游戏的硬件部分设计

本部分内容包括介绍PG160128A及其引脚功能;介绍T6963C指令集;晶振电路、复位电路的硬件设计;控件及按键发声电路设计,最后给出游戏仿真的整体硬件电路图,接下来是具体的说明。

2.1PG160128A液晶屏介绍[2]

PG160128A为一个128行160列的点阵液晶屏,他能显示各种字符、图形、汉字,基于T6963C内核控制,自带字符库,同时用户也可以自己建立汉字、图形库,其在Proteus中的元器件图形如下:

图1PG160128

各引脚的功能描叙如下表:

引脚序列

引脚名称

引脚功能描述

1

FG

信号设计引脚,此引脚为一个输出引脚,在电路连接时悬空

2

VDD

电源引脚,外接5V工作电压

3

VSS

地引脚,接地

4

CON

功能不详,在电路连接时悬空

5

WR

写信号脚,当引脚为低电平时数据写入T6963C中

6

RD

读信号脚,当引脚为低电平时数据从T6963C中读出

7

CE

使能信号脚,正常工作时此脚接地,当为高电平时CPU不能与T6963C通信

8

C/D

指令、数据信号脚:

当引脚为高电平且WR=L时可以写入指令;当引脚为高电平且RD=L时可以读T6963C状态;当引脚为低电平且WR=L时可以写入数据;当引脚为低电平且RD=L时可以读出数据

11~18

D0~D7

数据引脚,用于液晶屏与单片机之间的数据通信

10

RST

复位引脚,低电平有效,起复位作用,器件内部集成了上拉电阻,正常工作时此引脚接电源

19

FS1

字形选择引脚FS1,用于选择字形,当为高电平时是5*8点阵字体,当为低电平时是8*8点阵字体

表一PG160128引脚功能表

2.2T6963C及其指令集介绍

2.2.1T6963C[3]

T6963C是一个LCD控制器,可设计为用于液晶显示器控制驱动芯片和数据显示的存取器。

该控制器有一个8位并行数据总线,控制线的读取或写入通过微控制器接口实现,可以直接连接到TMPZ80微处理器中。

它有一个128字节的字符发生器也可以控制外部显示RAM中的数据,达64K字节。

配置的文字,图形和外部字符发生器RAM数据能很容易控制其显示在窗口中,可以自由移动、分配内存范围。

该器件支持非常广泛的字符格式,液晶显示器允许通过编程设置选择不同的组合。

它可以用于文字,图形和结合文本模式及其他各种属性的功能。

2.2.2T6963C指令集[4]

T6963C共分为十大类,26条指令,详细信息如下表:

指令类型

有无参数

D7~D0引脚值

指令说明

指针设置

D1/D2

0

0

1

0

0

0

0

1

光标指针设置D1水平位置(低7位有效)D2垂直位置(低5位有效)

0

0

1

0

0

0

1

0

CGRAM偏置地址设置D1地址(低5位有效)D2=00H

0

0

1

0

0

1

0

0

地址指针位;D1低字节;D2高字节

显示区域设置

D1/D2

0

1

0

0

0

0

0

0

文本区首址;D1低字节;D2高字节

0

1

0

0

0

0

0

1

文本区宽度字节数D1=字节数D2=00H

0

1

0

0

0

0

1

1

图形区首址D1低字节D2高字节

0

1

0

0

0

0

1

1

图形区宽度(字节数)D1=字节数D2=00H

显示方式设置

1

0

0

0

0

0

0

0

逻辑“或”合成

1

0

0

0

0

0

0

1

逻辑“异或”合成

1

0

0

0

0

0

1

1

逻辑“与”合成

1

0

0

0

0

1

0

0

文本特征

显示开关

1

0

0

1

N3

N2

N1

N0

90H显示开关;N0=1/0光标闪烁启用/禁用N1=1/0光标显示启用/禁用;N2=1/0文本显示启用/禁用;N3=1/0图形显示启用/禁用

光标形状选择

1

0

1

0

0

N2

N1

N0

0xA0-0xA7表示光标占的行数

屏读

1

1

1

0

0

0

0

0

屏读

数据一次读、写方式设置

D1

1

1

0

0

0

0

0

0

数据写,地址加1

1

1

0

0

0

0

0

1

数据读,地址加1

1

1

0

0

0

0

1

0

数据写,地址减1

1

1

0

0

0

0

1

1

数据读,地址减1

1

1

0

0

0

1

0

0

数据写,地址不变

1

1

0

0

0

1

0

1

数据读,地址不变

数据自动读、写方式设置

1

0

1

1

0

0

0

0

自动写设置

1

0

1

1

0

0

0

1

自动读设置

1

0

1

1

0

0

1

0

自动写结束

1

0

1

1

0

0

1

1

自动读结束

屏拷贝

1

1

1

0

1

0

0

0

屏拷贝

位操作

1

1

1

1

N3

N2

N1

N0

N3=1置1N3=0清

表二T6963C指令集

2.3晶振、复位电路

2.3.1晶振电路

单片机的晶振电路如图2所示,其中XTAL1和XTAL2分别为片内振荡电路的输入输出端。

一般电容取20~47uF,本系统晶体的振荡频率为24MHz。

晶振电路产生的振荡脉冲经过内部触发器进行二分频后,成为单片机的时钟脉冲信号,为单片机提供一个基本时钟信号。

图2晶振电路

2.3.2复位电路

复位操作是单片机的基本操作,单片机在进入运行前和在运行过程中程序出错或操作失误使系统不能正常运行时,需要进行复位操作,复位操作后,程序将从0000H开始重新执行。

复位信号从单片机的RST引脚输入,复位操作有上电自动复位、按键电平复位和外部脉冲复位三种方式,本电路采用了按键电平复位,电路图如图3.。

图3复位电路

2.4液晶显示屏与单片机接口电路

液晶显示屏共有18个引脚,其中VDD、RST两脚接电源,VSS、FS1、CE三脚接地,CON、FG两脚悬空,D0~D7分别与单片机P2.0~P2.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液晶屏驱动代码设计[5]

3.1.1读状态程序

unsignedcharRead_State()//返回液晶显示屏的当前状态

{unsignedchara;

P2=0xff;//读状态之前先将数据线拉高

_CD=1;//为指令、状态操作条件

_RD=0;//读操作条件

_RD=1;//为下次读做准备

a=Pin;//将状态保存

returna;}

3.1.2是否可读写程序

voidEnable()

{while

(1)//bit0指令写状态位,bit1数据读/写状态位,为1时候空闲

if((Read_State()&3)==3)break;}//如果状态的低2为1则可读写

3.1.3是否可自动读写程序

voidAut_Write()

{while

(1)//bit3数据自动写状态位,为1时候空闲

if((Read_State()&8)==8)break;}//如果状态的第4为1则可自动读写

3.1.4写单参数程序

//Data1为传入的参数,Com为传入的指令;写入顺序为先数据后写指令。

voidWrite_Data1(unsignedcharData1,unsignedcharCom)

{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,最后写指令。

voidWrite_Data2(unsignedcharData1,unsignedcharData2,unsignedcharCom)

{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写指令程序

voidWrite_Com(unsignedcharCom)

{Enable();//判断是否可读写

_CD=1;//为指令、状态操作条件

Pin=Com;//将指令送数据线

_WR=0;//写操作

_WR=1;}//为下次写做装备

3.1.7写8字节数据程序

//Addr表示数据首地址,Way表示写的方式

voidWrite_8_Data(unsignedcharAddr,unsignedcharWay)

{Aut_Write();//判断是否能自动写

Write_Com(AUT_WR);//自动写开始

Write_Data1(Addr,Way);

Write_Com(AUT_WO);}//自动写结束

3.1.8设置数据显示在屏幕上的坐标程序

//(以字节为单位),x表示显示的行(0~15),y表示显示的列(0~19)

voidSet_xy(unsignedcharx,unsignedchary)

{unsignedinta;a=x*20+y;

Write_Data2(a&0xff,a>>8,ADR_POS);}

3.1.9设置数据存储起始地址

voidSet_Addr(unsignedcharAddr1,unsignedcharAddr2)

{Write_Data2(Addr1,Addr2,ADR_POS);}

3.1.10CGRAM偏置地址设置函数

voidSet_CGRAM()

{Write_Data2(1,0,CGR_POS);}

3.1.11液晶初始化函数

//(文本区首地址D1,文本区首地址D2,文本区宽度,图形区首地址D1,

//图形区首地址D2,图形区宽度,光标形状,显示方式,显示开关)

voidLCD_Init(unsignedcharTxt1,unsignedcharTxt2,unsignedcharTxt_Wide,

unsignedcharMap1,unsignedcharMap2,unsignedcharMap_Wide,

unsignedcharGuang_Biao,unsignedcharDisp_Mode,unsignedcharKai_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