基于51单片机与点阵的贪食蛇游戏机开发

更新时间:2023-09-24 06:14:01 阅读量: IT计算机 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于51单片机与8*8点阵的贪吃蛇游戏机开发

1

目录

2

一、硬件设计

1、8*8LED点阵的原理说明

本设计采用的点阵显示模块是ARK-SZ411288K,其原理

结构图如图1所示。ARK-SZ411288K显示模块是8*8点阵的显示模块,从图1中可以看出,8*8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点

上,当对应的某一列置1电平,某一行置0电平,则相应的 图1 8*8LED点阵的原理图 二极管就亮。ARK-SZ411288K可与CPU直接连接,根据引脚说明,将其各个引脚与相应的I/O口连接。

2、LED阵列驱动电路

正向点亮一颗LED,至少也得10~20毫安,若电流不够大,则LED不够亮。而不管是8051

的输入/输出口,还是TTL、CMOS的输出端,其高态输出电流都不是很高,不过1~2毫安而已,因此,很难直接高态驱动LED。这时候就需要额外的驱动电路,本设计采用的是74HC595,用74HC595芯片驱动LED有以下特点:速度较快,功耗较小,LED的数目多少随意,既可以控制共阴极的LED显示器,也可以控制共阳极的LED显示器,可以软件控制LED的亮度,还可以在必要的时候关断显示 (数据保留),以减小功耗,并可随时唤醒显示。用它设计的电路,不仅软硬件设计简单,而且功耗低,驱动能力强,占用的I/O口线较少,是一种造价低廉,应用灵活的设计方案。

3

物理与信息科学学院

图2 74HC595管脚图

74HC595内含8位串入、串/并出移位寄存器和8位三态输出锁存器。寄存器和锁存器分别

有各自的时钟输入(SCLK和SLCK),都是上升沿有效。当SCLK从低到高电平跳变时,串行输入数据(SDA)移入寄存器;当SLCK从低到高电平跳变时,寄存器的数据置入锁存器。清除端(CLR) 的低电平只对寄存器复位(QS为低电平),而对锁存器无影响。当输出允许控制(EN)为高电平时, 并行输出(Q0~Q7)为高阻态,而串行输出(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一个上升沿,寄存器中的数据即置入锁存器。此时如果EN为低电平,数据即从并口Q0~Q7输出,把Q0~Q7与LED的8段相接,LED就可以实现显示了。要想软件改变LED的亮度,只需改变EN的占空比就行了[1]。

二、软件设计

1、主程序工作流程

4

物理与信息科学学院

主程序工作流程如图3所示,系统上电后首先对LED进行初始化,接着对定时器初始化,并启动定时器,接着执行程序主体逻辑,程序主体逻辑执行一遍后检查是否有中断发生。中断源有两个,一个是驱动贪吃蛇自动前行的定时中断,另一个是用户控制贪吃蛇移动方向的键盘中断,任意中断的到来都将改变贪吃蛇的当前状态。若当前没有中断发生,主程序继续判断蛇头是否碰壁或头尾相撞,若是,结束游戏,否则继续执行程序主体循环。

图3 主程序工作流程

2、LED点阵初始化

对点阵初始化,先把点阵所有的信息清空,让其不显示任何信息,再在指定的位置显示蛇所

处的最初位置和第一个果实的位置。初始化程序如下:

void Init() {

for (i = 3; i < SNAKE + 1; i++)

x[i] = 100;

//SNAKE是蛇的最大长度

for (i = 3; i < SNAKE + 1; i++)

y[i] = 100;

//初始化

x[0] = 4; y[0] = 4; //果子 n = 3; //蛇长 n=-1

5

本文来源:https://www.bwwdw.com/article/aj0d.html

Top