创意贪吃蛇模型
一、硬件设计 1、8*8LED点阵的原理说明 本设计采用的点阵显示模块是ARK-SZ411288K,其原理结构图如图1所示。ARK-SZ411288K显示模块是8*8点阵的显示模块,从图1中可以看出,8*8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的 8*8LED点阵的原理图 二极管就亮。ARK-SZ411288K可与CPU直接连接,根据引脚说明,将其各个引脚与相应的I/O口连接。 2、主程序工作流程 主程序工作流程如图3所示,系统上电后首先对LED进行初始化,接着对定时器初始化,并启动定时器,接着执行程序主体逻辑,程序主体逻辑执行一遍后检查是否有中断发生。中断源有两个,一个是驱动贪吃蛇自动前行的定时中断,另一个是用户控制贪吃蛇移动方向的键盘中断,任意中断的到来都将改变贪吃蛇的当前状态。若当前没有中断发生,主程序继续判断蛇头是否碰壁或头尾相撞,若是,结束游戏,否则继续执行程序主体循环。 主程序工作流程 3、LED点阵初始化 对点阵初始化,先把点阵所有的信息清空,让其不显示任何信息,再在指定的位置显示蛇所处的最初位置和第一个果实的位置。初始化程序如下: - void Init()
- {
- for (i = 3; i < SNAKE + 1; i++) //SNAKE是蛇的最大长度
- x[i] = 100;
- for (i = 3; i < SNAKE + 1; i++)
- y[i] = 100; //初始化
- x[0] = 4; y[0] = 4; //果子
- n = 3; //蛇长 n=-1
- x[1] = 1; y[1] = 0; //蛇头
- x[2] = 0; y[2] = 0; //蛇尾1
- addx = 0; addy = 0; //位移偏移
- }
复制代码
4、贪吃蛇的移动 当蛇没有吃到任何食物时,每次步进蛇头的将要到的下一个LED灯点亮,而蛇尾那个LED灯会灭掉,程序设计时只要将蛇尾那点位置的值传给蛇头下一个位置的值,再改变蛇尾的值即可。而蛇头下一个位置根据蛇头和偏移量来确定,每次上下左右按键决定了蛇步进的偏移量,只要将蛇头的位置加上偏移量的值即得到新的蛇头位置。当蛇头碰到四周的墙壁或者碰到自己的身体,小蛇就立即毙命并结束游戏。
5、食物的随机出现 食物的出现是一种随机行为,所以必须做一个随机数,而且食物出现的位置不能与蛇的位置相同,也不能超出墙外,否则就要重置食物。这里使用程序中的定时计数器的低八位 TL0的数值,由于TL0不断变化,不同的时间点数值不同,我这里使用的是C++语言里的stdlib.h文件库,使用里面的随机函数srand(),先利用srand(TL0)获得TL0的数值,再利用两次rand()%8分别得到食物出现的横纵坐标的位置。
三、调试及仿真 先在Proteus上绘制硬件电路(并未画出驱动电路),电路设计完成后就可以进行仿真。先双击单片机,把用uVision3编译生成的HEX文件指定为下载文件,点击PLAY键即可进行仿真。当出现ANALYSER ERRORS时,表示电路有错误,列表中说明了具体的错误,必须要先排错才可以进行仿真.
四、原理图
五、程序代码
全部资料51hei下载地址:
1095.doc
(158.5 KB, 下载次数: 58)
贪吃蛇.rar
(10.58 KB, 下载次数: 85)
|