基于51单片机与点阵的贪食蛇游戏机开发剖析_第1页
基于51单片机与点阵的贪食蛇游戏机开发剖析_第2页
基于51单片机与点阵的贪食蛇游戏机开发剖析_第3页
基于51单片机与点阵的贪食蛇游戏机开发剖析_第4页
基于51单片机与点阵的贪食蛇游戏机开发剖析_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 基于51单片机与8*8点阵的贪吃蛇游戏机开发目录一、硬件设计1、8*8LED点阵的原理说明本设计采用的点阵显示模块是ARK-SZ411288K,其原理结构图如图1所示。ARK-SZ411288K显示模块是8*8点阵的显示模块,从图1中可以看出,8*8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点COLPINROWNO.PINjN0._71二ATATJafl_AT_ATAT-上,当对应的某一列置1电平,某一行置0电平,则相应的图18*8LED点阵的原理图二极管就亮。ARK-SZ411288K可与CPU直接连接,根据引脚说明,将其各个引脚与相应的I/O口连接。2、LE

2、D阵列驱动电路正向点亮一颗LED,至少也得1020毫安,若电流不够大,贝VLED不够亮。而不管是8051的输入/输出口,还是TTL、CMOS的输出端,其高态输出电流都不是很高,不过12毫安而已,因此,很难直接高态驱动LED。这时候就需要额外的驱动电路,本设计采用的是74HC595,用74HC595芯片驱动LED有以下特点:速度较快,功耗较小,LED的数目多少随意,既可以控制共阴极的LED显示器,也可以控制共阳极的LED显示器,可以软件控制LED的亮度,还可以在必要的时候关断显示(数据保留),以减小功耗,并可随时唤醒显示。用它设计的电路,不仅软硬件设计简单,而且功耗低,驱动能力强,占用的I/O口

3、线较少,是一种造价低廉,应用灵活的设计方案。物理与信息科学学院 QB1016QC2*15QD314QE刍74HC59513QF5QG611QH|7图274HC595管脚图1074HC595内含8位串入、串/并出移位寄存器和8位三态输出锁存有各自的时钟输入(SCLK和SLCK),都是上升沿有效。当SCLK从低VCC0AR(KSCKSCLR器。寄存器和锁存器分别,串行输入数据(SDA)移入寄存器;当SLCK从低到高电平跳变时,寄存器的数据置入锁存器。清除端(CLR)的低电平只对寄存器复位(QS为低电平),而对锁存器无影响。当输出允许控制(EN)为高电平时,并行输出(Q0Q7)为高阻态,而串行输出(

4、QS)不受影响。74HC595最多需要5根控制线,即SDA、SCLK、SLCK、CLR和EN。其中CLR可以直接接到高电平,用软件来实现寄存器清零;如果不需要软件改变亮度,EN可以直接接到低电平,而用硬件来改变亮度。把其余三根线和单片机的I/O口相接,即可实现对LED的控制。数据SDA口送入74HC595,在每个SCLK的上升沿,SDA口上的数据移入寄存器,在SCLK的第9个上升沿,数据开始从QS移出。如果把第一个74HC595的QS和第二个74HC595的SDA相接,数据即移入第二个74HC595中,照此一个一个接下去,可接任意多个。数据全部送完后,给SLCK一个上升沿,寄存器中的数据即置入

5、锁存器。此时如果EN为低电平,数据即从并口Q0Q7输出,把Q0Q7与LED的8段相接,LED就可以实现显示了。要想软件改变LED的亮度,只需改变EN的占空比就行了1。二、软件设计1、主程序工作流程主程序工作流程如图3所示,系统上电后首先对LED进行初始化,接着对定时器初始化,并启动定时器,接着执行程序主体逻辑,程序主体逻辑执行一遍后检查是否有中断发生。中断源有两个,一个是驱动贪吃蛇自动前行的定时中断,另一个是用户控制贪吃蛇移动方向的键盘中断,任意中断的到来都将改变贪吃蛇的当前状态。若当前没有中断发生,主程序继续判断蛇头是否碰壁或头尾相撞,若是,结束游戏,否则继续执行程序主体循环。图3主程序工作

6、流程/SNAKE是蛇的最大长度/初始化/果子/蛇长n=-12、LED点阵初始化对点阵初始化,先把点阵所有的信息清空,让其不显示任何信息,再在指定的位置显示蛇所处的最初位置和第一个果实的位置。初始化程序如下:voidInit()for(i=3;iSNAKE+1;i+)xi=100;for(i=3;iSNAKE+1;i+)yi=100;x0=4;y0=4;n=3;x1=1;y1=0;/蛇头x2=0;y2=0;/蛇尾1addx=0;addy=0;/位移偏移3、贪吃蛇的移动当蛇没有吃到任何食物时,每次步进蛇头的将要到的下一个LED灯点亮,而蛇尾那个LED灯会灭掉,程序设计时只要将蛇尾那点位置的值传给蛇

7、头下一个位置的值,再改变蛇尾的值即可。而蛇头下一个位置根据蛇头和偏移量来确定,每次上下左右按键决定了蛇步进的偏移量,只要将蛇头的位置加上偏移量的值即得到新的蛇头位置。当蛇头碰到四周的墙壁或者碰到自己的身体,小蛇就立即毙命并结束游戏。4、食物的随机出现食物的出现是一种随机行为,所以必须做一个随机数,而且食物出现的位置不能与蛇的位置相同,也不能超出墙外,否则就要重置食物。这里使用程序中的定时计数器的低八位TL0的数值,由于TL0不断变化,不同的时间点数值不同,我这里使用的是C+语言里的stdlib.h文件库,使用里面的随机函数srand(),先利用srand(TLO)获得TL0的数值,再利用两次r

8、and()%8分别得到食物出现的横纵坐标的位置。三、调试及仿真程序软件编译器使用uVision3。在用uVision3编写单片机程序时,因uVision3往往只能修改语法上的错误,对于算法上的问题不好检查,而直接下到单片机里又受电路板的限制而不方便调试,因此这里使用Proteus进行电路仿真。该软件具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能,同时有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。先在Proteus上绘制硬件电路(并未画出驱动电路),电路设计完成后就可以进行仿真。先双击单片机,把用

9、uVision3编译生成的HEX文件指定为下载文件,点击PLAY键即可进行仿真。当出现ANALYSERERRORS时,表示电路有错误,列表中说明了具体的错误,必须要先排错才可以进行仿真。本设计仿真效果如图4所示。SCTAL1C2X1CRYSTAL:TE:7I1-巴4TTZW空.-FZZh1Pg-5nP2-*pi.irrzBPZi.hWP2JA11P2.*/A12P3.&ViJHp.TiirrrP2.TW1SCT13工B33JbpP1J31HI2卩23+Pi*SP1S6riJ3F173pnu-ADoPn.1/AD1PnZfAD2pnjADiPD.AD*P口S*ADSPD.9AD6Pn.?/AD7

10、PUP=LZ.1PjP2p14?ZZF213PZ_i3*FZZ3PZ3UE:DP3.imDP32iTffTpPWTITTl-PZ5图4系统测试效果图软件调试及Proteus仿真完成后就进行硬件的安装。本设计按照原先设计好的电路图进行总体上的布置,采用人工搭电路的方法进行硬件的安装。安装时要考虑受热、稳固等多方面的影响使用电烙铁时要控制好焊接的时间,电烙铁停留的时间太短,焊锡不易完全熔化,形成“虚焊,”而焊接时间太长又容易损坏元器件,每一两秒内要焊好一个焊点,若没完成,宁愿等一会儿再焊一次。其次芯片的摆置要方便连线,焊接时要先把芯片拔出,等线接好了再插上去。在焊接时要考虑电路的抗干扰能力同时要充

11、分考虑电源对单片机的影响。每焊接完一个模块,要用万能表根据电路图检查有没有接错、短路等现象,确认正确后再继续下一个模块2。附录:代码#include#defineucharunsignedcharsbitdown=P3l;#defineSNAKE20/最大长度#defineTIME50/显示延时时间#defineSPEED71/速度控制sbitkeyenable=P36/方向使能sbitkeyy=P02;/上下*/sbitup=P33;/downsbitright=P32;sbitleft=P34;ucharxSNAKE+1;ucharySNAKE+1;uchartime,n,i,e;/延时时

12、间,当前蛇长,通用循环变量,当前速度charaddx,addy;/位移偏移量延时程序*/voiddelay(charMS)charus,usn;while(MS!=0)usn=0;while(usn!=0)us=0 xff;while(us!=0)us-;usn-;MS-;判断碰撞g/bitknock()bitk;k=0;if(x17|y17)k=1;/撞墙for(i=2;in;i+)if(x1=xi)&(y1=yi)k=1;/撞自己returnk;/*上下左右键位处理*/voidturnkey()/interrupt0using2if(keyenable)if(left)addy=0;if(

13、addx!=1)addx=-1;elseaddx=1;if(right)addy=0;if(addx!=-1)addx=1;elseaddx=-1;if(up)addx=0;if(addy!=-1)addy=1;elseaddy=-1;if(down)addx=0;if(addy!=1)addy=-1;elseaddy=1;/*乘方程序ucharmux(uchartemp)if(temp=7)return128;if(temp=6)return64;if(temp=5)return32;if(temp=4)return16;if(temp=3)return8;if(temp=2)return4

14、;if(temp=1)return2;if(temp=0)return1;return0;/*显示时钟显示程序voidtimer0(uchark)while(k-)for(i=0;iSNAKE+1;i+)P2=mux(xi);P1=255-mux(yi);turnkey();/上下左右键位处理/显示延迟delay(TIME);P2=0 x00;P1=0 xff;/*主程序voidmain(void)e=SPEED;P0=0 x00;P1=0 xff;P2=0 x00;P3=0 x00;while(1)/if(keyenable=1)P1=0 x00;P2=0 xff;elseP1=0 xff;P2=0 x00;for(i=3;iSNAKE+l;i+)xi=100;for(i=3;iSNAKE+l;i+)yi=100;/初始化/果子/蛇长n=-1/蛇头/蛇尾1/位移偏移x0=4;y0=4;n=3;x1=1;y1=0;x2=0;y2=0;addx=0;addy=0;/k=1;while(1)if(key

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论