基于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。基于51单片机的俄罗斯方块游戏课设
相关推荐
,否则,移入 0. if(IR_timer=7){ IR_DATAL|=1。 IR_DATAL=1。 }else{ IR_DATAL=1。 } } i++。 IR_timer=0。 if(i=32) //i=32时,标志着一个完整的红外数据帧已经接收完,将接收完标志致一 { IR_OK=1。 } }else { i=0。 starflag=1。 IR_OK=0。 IR_timer=0。 } }
8U bai,INT8U qian)。 //按键检测子程序 void anjian(void)。 INT8U counter1 = 0,counter2 = 0。 INT8U flag = 0。 /////////////////////////////////////////////////////////////////////////// void exdelay()//简单延时子程序 {
压电源供电部分 本次设计电源部分采用,常用 DC+5V 电源电路,从外部接入 810VAC/DC 电压,通过电桥整流以及电容滤波后,进入 7805,再次滤纹波后由 DC_OUT 接出,电压为 +5V。 注意的是,由于 7805 的功耗较大,所以必须要加散热片。 加 D6是为了防止电流反冲。 十六位抢答键盘 部分 图 33 4X4 扫描键盘 该 4X4 扫描键盘是在单片机中常用的键盘
111D31Q22D42Q53D73Q64D84Q95D135Q126D146Q157D177Q168D188Q19U 5 017 4L S 3 73P 2. 0P 2. 1P 2. 2A L EIN T 0V C CV C CR 5 00IN 0C 5 051 04C 5 031 04C 5 041 041234567J 50 3C O N 73 12J 50 4C O N 2R 5 061
s 内芯片不会进行更新,此时可以通过读写相应字节获取时间信息和设置信息 .UIP 位为只读位且不受复位信号影响,通过把 B 寄存器中的 SET 位置 1将 UIP 位清零并禁止时间更新 .DV0DV2 用来开关晶体振 荡器和复位分频器 ,本课题中不需设置 .RS0RS3用于控制分频器输出,设置成不同的值可以在 SQW引脚得到不同的分频输出或得到周期性的中断 (通过控制寄存器 B 实现 )
首先根据硬件设计在 Protues 中完成原理图的设计,确定使用单片机的哪些 I/O 口,然根据软件设计中 的流程图编写单片机 C 语言程序。 结合题目要求模块化地编写程序,首先编写走时程序,然后编写闹铃 闹铃 的程序,最后完成倒计时设计,在分模块化编写过程中,不断地根据仿真现象调试程序来修复软件编写错误。 例如调试液晶的显示问题,写指令 write_(0x80)将数据指针定位到第一行第一个字处