毕业论文基于单片机的推箱子游戏设计内容摘要:

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 0xA00xA7 表示光标占的行 数 屏读 无 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 置 1 N3=0 清 表二 T6963C指令集 晶振、复位电路 晶振电路 单片机的晶振电路如图 2 所示,其中 XTAL1 和 XTAL2 分别为片内振荡电路的输入输出端。 一般电容取 20~47uF,本系统晶体的振荡频率为 24MHz。 晶振电路产生的振荡脉冲经过内部触发器进行二分频后,成为单片机的时钟脉冲信号 ,为单片机提供一个基本时钟信号。 X T A L 1X T A L 2X1CR Y S T A LC13 0 p FC23 0 p F 图 2 晶振电路 复位电路 复位操作是 单片机的基本操作,单片机在进入运行前和在运行过程中程序出错或操作失误使系统不能正常运行时,需要进行复位操作,复位操作后,程序将从 0000H 开始重新执行。 复位信号从单片机的 RST 引脚输入,复位操作有上电自动复位、按键电平复位和外部脉冲复位三种方式,本电路采用了按键电平复位,电路图如图 3.。 EARSTCE7RD6C/D8VSS2VDD3CON4WR5D011FS119FG1D112D213D314D415D516D617D718RST10L C D 1P G 1 6 0 1 2 8 AR11kR21kC32 2 0 u F 图 3 复位电路 液晶显示屏与单片机接口电路 液晶 显示屏 共有 18 个引脚,其中 VDD、 RST 两脚接电源, VSS、 FSCE 三脚接地, CON、 FG 两脚悬空, D0~D7 分别与单片机 ~ 相连接,WR 与 脚相连, RD 与 脚相连, C/D 与 脚相连,电路图见图 4. 控键、喇叭与单片机接口电路 本游戏共有 6 个控件,分别是:四个方向键,用于控制箱子的移动方向;一个确定键,用于刷新初始化界面进入游戏界面;一个选关键,用于选关。 一个喇叭,用于按键发声,以提示按键是否有效,电路图见图 4. 控件、喇叭与单片机的接线是:上 移键接 ;左移键接 ;右移键接;下移键接 ;确定键接 ;选关键接 ; 喇叭经过 分压式偏置共射放大电路 将 信号放大 再 与单片机 口相连,如图 4: P 3 .1Q12 N44 0 0C12 2 u FR15 1 kR22 0 kR32 .7 k C22 2 0 u FR45kC32 2 u FL S 1S P E A K E R 图 4 扬声器 放大电路 至此,游戏的硬件电路结构及连线全部介绍完成, 仿真电路图如图 5 所示,整个电路图以网络标号的形式给出,避免连线过多显得电路拥挤。 GRWRDCDP D0D1D2D3D4D5D6D7GP3P0GP4GP1 P2P GD0D1D2D3D4D5D6D7P0P1P2P3P4CDRDRWG P5P5GSPX T A L 1X T A L 2EARSTRS TEAX T A L 2X T A L 1GSPCE7RD6C/D8VSS2VDD3CON4WR5D011FS119FG1D112D213D314D415D516D617D718RST10L C D 1P G 1 6 0 1 2 8 A上下左 右确定X T A L 218X T A L 119A L E30EA31P S E N29RS T9P 0 .0 /A D 039P 0 .1 /A D 138P 0 .2 /A D 237P 0 .3 /A D 336P 0 .4 /A D 435P 0 .5 /A D 534P 0 .6 /A D 633P 0 .7 /A D 732P 2 .7 /A 1 528P 2 .0 /A 821P 2 .1 /A 922P 2 .2 /A 1 023P 2 .3 /A 1 124P 2 .4 /A 1 225P 2 .5 /A 1 326P 2 .6 /A 1 427P 1 .01P 1 .12P 1 .23P 1 .34P 1 .45P 1 .56P 1 .67P 1 .78P 3 .0 /R X D10P 3 .1 /T X D11P 3 .2 /I NT 012P 3 .3 /I NT 113P 3 .4 /T 014P 3 .7 /R D17P 3 .6 /W R16P 3 .5 /T 115U28 0 C5 1选关L S 1S O UN D E RX1CR Y S T A LC13 0 p FC23 0 p FR11kR21kC32 2 0 u F复位 图 5 推箱子游戏硬件电路图 4 推箱子游戏的软件部分设计 本部分主要介绍游戏的软 件部分设计,包括游戏流程图;液晶屏驱动代码设计;初始化代码设计游戏时间代码设计;游戏关数代码设计;游戏步数代码设计;过关代码设计;方向控制代码设计;按键发声代码设计;数据表格设计等几个方面,现就对这几个方面做具体分析。 游戏流程图 液晶驱动程序调用规则流程图 本游戏用到了液晶 PG160128A,势必用到驱动代码,包括读状态函数;写指令函数;读数据函数;写数据函数;自动读写函数;画圆、打点函数;设指针函数;显示汉字、字符函数等等,现以流程图的形式给出其互相调用规则( A 函数指向 B 函数,表示 B 调用了 A)。 方向函数所调用的函数流程图 在游戏中设置了四个方向键,用以控制箱子的移动情况 ,在这四个函数里又都调用了其他子函数,现以流程图的形式给出调用到的子函数及数组。 主函数流程图 在主函数的运行过程中,程序会随着确定键的按下进入主循环而不断地扫描键盘,判断是否有键按下,再调用相关函数做相应的处理,同时两个定时器中断有条件开启,在中断到来时响应中断,执行相关的中断操作,流程图如下: 液晶屏驱动代码设计 读状态程序 unsigned char Read_State()//返回液晶显示屏的当前状态 {unsigned char a。 P2=0xff。 //读状态之前先将数据线拉高 _CD=1。 // 为指令、状态操作条件 _RD=0。 //读操作条件 _RD=1。 //为下次读做准备 a=Pin。 //将状态保存 return a。 } 是否可读写程序 void Enable() {while(1) //bit0 指令写状态位 ,bit1 数据读 /写状态位 ,为 1 时候空闲 if((Read_State()amp。 3)==3)break。 }//如果状态的低 2 为 1 则可读写 是否可自动读写程序 void Aut_Write() {while(1) //bit3 数据自动写状态位 ,为 1 时候空闲 if((Read_State()amp。 8)==8)break。 } //如果状态的第 4 为 1 则可自动读写 写单参数程序 //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。 } 写双参数程序 // 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。 } 写指令程序 void Write_Com(unsigned char Com) {Enable()。 //判断 是否可读写 _CD=1。 // 为指令、状态操作条件 Pin=Com。 //将指令送数据线 _WR=0。 //写操作 _WR=1。 }//为下次写做装备 写 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)。 }//自动写结束 设置数据显示在屏幕上的坐标 程序 // (以字节为单位 ),x 表示显示的行 (0~15), y 表示显示的列 (0~19) void Set_xy(unsigned char x,unsigned char y) {unsigned int a。 a=x*20+y。 Write_Data2(aamp。 0xff,a8,ADR_POS)。 } 设置数据存储起始地址 void Set_Addr(unsigned char Addr1,unsigned char Addr2) {Write_Data2(Addr1,Addr2,ADR_POS)。 } CGRAM 偏置地址设置函数 void Set_CGRAM() {Write_Data2(1,0,CGR_POS)。 } 液晶初始化函数。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。