基于51单片机的俄罗斯方块游戏课设内容摘要:

是对应口地址不同。 JM12864J 的电路结 构特点 JM12864J是使用 HD61202及其兼容控制驱动器作为列驱动器,同时使用 HD61203作为行驱动器的液晶模块。 由于 HD6120不与 MPU发生联系,只要提供电源就能产生行驱动信号和各种同步信号,比较简单,因此这里就不作介绍了。 下面主要介绍一下JM12864J的逻辑电路图。 JM12864J共有两片 HD61202及其兼容控制驱动器和一片 HD61203,如图 23所示: 图 23 JM12864J的逻辑电路图 在 JM12864J 中,两片 HD61202 的 ADC 均接高电平, RST 也接高电平,这样在使用 JM12864J 时就不必再考虑这两个引脚的作用。 CSA 跟 HD61202( 1)的 CS1 相连;CSB 跟 HD61202( 2)的 CS1 相连,因此 CSA 、 CSB 选通组合信号为 CSA , CSB =01选通( 1), CSA , CSB =10 选通( 2)。 对于 JM12864J,只要供给 VDD、 VSS 和 V0 即可, HD61202 和 HD61203 所需的电源将由模块内部电路在 VDD 和 V0、 VSS 的作用下产生。 XII JM12864J 的应用 以下内容为以单片机 89S52 为例机的接口电路,控制电路为直接访问方式的接口电路。 电路原理图如图 24所 示: 图 24 AT89S52 与液晶的接口电路 由图 25 可以看出: VSS 接地;数字电源 VDD 接+ 5V;数据、指 令选择信号 RS接单片机 口;读写选择信号 R/W 接单片机 口; DB0~ DB7 分别接单片机的~ 口;芯片 芯片 2的片选分别接单片机的 、 口;复位端 RST、背光正电源 LEDA 接+ 5V;液晶驱动电压 VEE、背光负电源 LEDK 接地。 XIII 行满 表格满 消除行并把上面的行数据下移并置清行为 true、当前图改变为 false 清所有数据 绘图 (清屏 ) N Y N 提示图形变量给当前图形 随机生成一个图形交给提示图形变量 游戏结束 绘图 结束 Y Y 绘图一次 Y 键盘电路 键盘电路本设计共采用按键 3个,分别与单片机的 、 、 、 口相连,分别对应旋转、左移、下、右移。 系统程序的设计 俄罗斯方块驱动流程图 N 图形下降一行 开始 随机生成一个图形 交给当前图形变量 根据变化绘图(绘提示图和当前图形) 随机生成一个图形 交给提示图形变量 图形到底了吗 XIV 俄罗斯方块所有绘图工作流程图 输出分数 清除刚才位置的图形 当前图形改变 Y 绘当前图的现在位置 N 提示图形改变真。 Y 绘提示图 N 消行动作为真。 N Y 从消行的那一行的第一列开始 为空数据 N Y 绘白色;相当于清除色彩 表格中对应的色彩 行 +1 到移动数据最后一行 N 结束 Y 开始 XV 俄罗斯方块 中按下键的流程图 记下下降图形时的位置 () 按下键 结束 直接把图形下降到底 行满 N 表格满 Y 消除行并把上面的行数据下移并置清 行为 true、当前图改变为 false Y N 游戏结束 清所有数据 绘图 (清屏 ) 绘图 提示图形变量给当前图形 随机生成一个图形交给提示图形变量 XVI 俄罗斯方块 所有绘图工作流程图 开始 输出分数 清除刚才位置的图形 ,包括清除提示图和当前图 当前图形改变 绘当前图的现在位置 N 提示图形改变真。 Y 绘提示图 N 消行动作为 真。 N Y 重绘表格 游戏结束 结束 Y N Y 清除所有数据并清屏 17 图 41 Protues仿真 系统性能测试与功能说明 焊接完成后,将电源接通,游戏画面出现后,分别按下左、右、下、旋转等按钮,均能正常在屏幕上做出反应。 当方块堆满一行时,方块正确消除,并将分数累计在屏幕右侧,同时消除多行方块时,分数有额外奖励。 达到一定分数时,方块下落速度加快,难度提高。 当屏幕中方块有触及顶端的时候,游戏结束。 附录 1: C 语言程序 include define uchar unsigned char define uint unsigned int 18 define DOWNTIME 30 define MAXHANG 20 define MAXLIE 16 define MAXPIX 3 define PUSHON 50 define LCD P2 define EN P3_0 define RW P3_1 define RS P3_2 define CS1 P3_3 define CS2 P3_4 define KEYLEFT P3_5 define KEYDOWN P3_6 define KEYRIGH P3_7 define KEYROTATION P1_0 uchar gkey=0xff,keystate=0,t0ms1=0,t0ms=0,downtimegap=0。 uchar miao=0,fen=0。 uchar downok。 bit keyflag,timeupdate,fashionupdate。 uchar idata cubeMap[MAXHANG][2]。 typedef struct{ uchar code * box。 uchar cube : 4。 uchar state : 4。 char row。 char column。 } block。 block this。 uint score=0。 uchar speed=1。 uchar code bittable[8]={1,2,4,8,0x10,0x20,0x40,0x80}。 19 uchar code cube[]= { /* ■ ■■■ */ 0,4,0xe,0, 0,2,6,2, 0,7,2,0, 4,6,4,0, /*■ ■■■ */ 0,8,0xe,0, 0,4,4,0xc, 0,0,0xe,2, 0,6,4,4, /*■■■ ■ */ 0,0xe,8,0, 0,4,4,6, 0,1,7,0, 6,2,2,0, /*■■ ■■ */ 0,0xc,6,0, 0,2,6,4, 0,6,3,0, 2,6,4,0, /* ■■ ■■ */ 0,6,0xc,0, 0,4,6,2, 0,3,6,0, 4,6,2,0, /*■■■■ */ 0,0xf,0,0, 4,4,4,4, 0,0,0xf,0, 2,2,2,2, /*■■ ■■ */ 0,6,6,0, 0,6,6,0, 0,6,6,0, 0,6,6,0 }。 uchar code asii[]= { 0x3E,0x51,0x49,0x45,0x3E, // 0 20 0x00,0x42,0x7F,0x40,0x00, // 1 0x62,0x51,0x49,0x49,0x46, // 2 0x21,0x41,0x49,0x4D,0x33, // 3 0x18,0x14,0x12,0x7F,0x10, // 4 0x27,0x45,0x45,0x45,0x39, // 5 0x3C,0x4A,0x49,0x49,0x31, // 6 0x01,0x71,0x09,0x05,0x03, // 7 0x36,0x49,0x49,0x49,0x36, // 8 0x46,0x49,0x49,0x29,0x1E, // 9 0x00,0x36,0x36,0x00,0x00, // :10 //next 0x7F,0x04,0x08,0x10,0x7F, // N11 0x7F,0x49,0x49,0x49,0x41, // E12 0x63,0x14,0x08,0x14,0x63, // X13 0x01,0x01,0x7F,0x01,0x01, // T14 //speed 0x26,0x49,0x49,0x49,0x32, // S15 0x7F,0x09,0x09,0x09,0x06, // P16 0x7F,0x49,0x49,0x49,0x41, // E17 0x7F,0x41,0x41,0x41,0x3E, // D18 //score 0x3E,0x41,0x41,0x41,0x22, // C19 0x3E,0x41,0x41,0x41,0x3E, // O20 0x7F,0x09,0x19,0x29,0x46, // R21 0x00,0x00,0x00,0x00,0x00, // 22 //GAME OVER 0x3E,0x41,0x51,0x51,0x72, // G23 0x7C,0x12,0x11,0x12,0x7C, // A24 0x7F,0x02,0x0C,0x02,0x7F, // M25 0x1F,0x20,0x40,0x20,0x1F, // V26 //TIME // 0x00,0x41,0x7F,0x41,0x00 // I27 }。 //////////////////////////////////////////////////////////////////////////////// 21 void lcdCmd(uchar cmd) { bit ea。 ea=EA。 EA=0。 EN=0。 RW=0。 RS=0。 LCD=cmd。 EN=1。 EN=1。 EN=0。 EA=ea。 } // void lcdWriteByte(uchar ch) { EN=0。 RS=1。 RW=0。 LCD=ch。 EN=1。 EN=1。 EN=0。 } // void lcdSetPage(uchar page) { page amp。 =0x7。 page +=0xb8。 lcdCmd(page)。 } // void lcdSetColumn(uchar column) 22 { column amp。 =0x3f。 column +=0x40。 lcdCmd(column)。 } // //character fron=5*8 void lcdPlayChar(ucha。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。