基于51单片机的贪食蛇游戏机开发Word格式.doc

上传人:b****2 文档编号:14624575 上传时间:2022-10-23 格式:DOC 页数:31 大小:923.50KB
下载 相关 举报
基于51单片机的贪食蛇游戏机开发Word格式.doc_第1页
第1页 / 共31页
基于51单片机的贪食蛇游戏机开发Word格式.doc_第2页
第2页 / 共31页
基于51单片机的贪食蛇游戏机开发Word格式.doc_第3页
第3页 / 共31页
基于51单片机的贪食蛇游戏机开发Word格式.doc_第4页
第4页 / 共31页
基于51单片机的贪食蛇游戏机开发Word格式.doc_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

基于51单片机的贪食蛇游戏机开发Word格式.doc

《基于51单片机的贪食蛇游戏机开发Word格式.doc》由会员分享,可在线阅读,更多相关《基于51单片机的贪食蛇游戏机开发Word格式.doc(31页珍藏版)》请在冰豆网上搜索。

基于51单片机的贪食蛇游戏机开发Word格式.doc

管脚名称

方向

引脚说明

VSS

-

逻辑电源地。

VDD

逻辑电源+5V。

V0

I

LCD调整电压,应用时接10K电位器可调端

RS

数据\指令选择:

高电平:

数据D0-D7将送入显示RAM;

低电平:

数据D0-D7将送入指令寄存器执行。

R/W

读\写选择:

高电平:

读数据;

写数据。

E

读写使能,高电平有效,下降沿锁定数据。

DB0

I/O

数据输入输出引脚。

DB1

DB2

DB3

DB4

DB5

DB6

DB7

CS1

片选择信号,高电平时选择左半屏。

CS2

片选择信号,高电平时选择右半屏。

/RET

复位信号,低电平有效。

VEE

O

LCD驱动,负电压输出,对地接10K电位器

LEDA

背光电源,LED+(5V)。

LEDK

背光电源,LED-(0V)。

单片机与液晶显示器的连接电路如图ChpNum-1所示,片选信号CS1与CS2接P2.4和P2.3引脚,RS、R/W、E分别接引脚P2.2、P2.1、P2.0。

VEE驱动负电压输出,而V0接10K电位器,对LCD亮度进行调节。

51单片机的P0口为了实现准3态,采用了OC输出,也就是集电极悬空输出。

这种电路结构,只有下拉能力,高电平输出没有电流。

在高电平时表现为高阻态,加上拉电阻,就会失去高阻态,变成1、0两态。

因此在P0口与OCM12864的I/O口之间接上10K的排阻。

用户通过四个按键控制蛇头的上下左右移动,接法如图ChpNum-1所示。

四个按键尾端均接地,任意按键的按下均会使与门输出由高电平变成低电平,从而触发中断。

此时,中断服务程序通过检测P2.6口与P2.7口的电平可以识别是哪个按键被按下。

若P2.6和P2.7同时为低电平,表明是UP键按下;

若同时为高电平,表明DOWN键按下;

若P2.6为高,P2.7为低则表明是LEFT键被按下;

若P2.6为低,P2.7为高则表明RIGHT键被按下。

游戏音效由蜂鸣器实现,接法如图ChpNum-1所示。

由于单片机输出脚的驱动电流有限,我们用单片机P2.5脚输出信号控制PNP三极管S8550的通断,当P2.5输出高电平时,三极管截止,当P2.5输出低电平时,三极管导通。

因此,通过在P2.5脚输出不同频率的方波信号,可使得蜂鸣器发出不同频率的声音。

图ChpNum-1人机接口电路

3.2单片机与PC机通信电路

本设计采用的STC89C52单片机具备ISP下载功能,无需用到编程器,编译好的单片机程序可以通过串口下载到单片机。

单片机与PC机串行通信采用RS-232C标准。

因为RS-232C接口信号不是标准的TTL电平,单片机与PC机通过RS-232C串口进行通信时,必须进行电平转换。

虽然可以用分立元件组成RS-232C与TTL电平之间的转换电路,但是现在更多的是使用集成电路来完成,这里使用MAX232集成电路。

如图ChpNum-2所示,MAX232需要外接4只0.1uF电容,或者1uF的电解电容。

之所以需要电容,是因为RS-232电平是工作在大约-9V~+9V之间,需要电容将5V电压转换成RS-232电平需要的+10V和-10V。

单片机侧安装了DB9物理连接器,可直接通过串口线连接到PC的串口。

图ChpNum-2RS-232信号适配电路

3.3其他部分电路说明

电源电路、复位和时钟电路比较简单,具体连接请参见电路原理总图。

供电部分采用7805将输入9~12V电压转换为5V输出,输入输出端接220uF电解电容,使整流后的脉动直流电压变成相对比较稳定的直流电压。

由于大容量的电解电容一般具有一定的电感,对高频及脉冲干扰信号不能有效地滤除,所以两端并联一只容量为0.1uF的电容,以滤除高频及脉冲干扰。

复位电路含有上电复位和按键复位功能,按键复位用于游戏结束后游戏的重新启动。

系统插电瞬间电源通过10K电阻给10uF电容充电电平,充电电流在10K电阻上产生压降,于是电阻上端产生一个维持几百毫秒的高电平输入到RESET对单片机进行复位,电容充电满后经过电阻电流为0,复位失效。

类似地,当开关按下时,强制产生一个高电平对单片机进行复位。

时钟电路使用12MHz的晶振,晶振的两引脚处接入两个22pF的瓷片电容来削减谐波对电路稳定性的影响。

4软件设计

4.1系统程序流程

如图ChpNum-3所示,贪食蛇软件主要分成三个部分:

主程序、外部中断服务程序、定时中断服务程序。

主程序的作用是一些初始化工作及蛇体动作执行、食物的随机产生、得分累计、图像显示等。

外部中断服务程序的功能是识别按键。

定时中断服务程序的作用是定时产生步进信号。

外部中断服务程序与主程序之间联系的纽带是全局变量MovDirection,键盘中断服务程序每次执行都要把按键对应的方向更新到此变量,而主程序每次步进方向都以此变量为依据。

定时中断服务程序通过全局变量IsToStep与主程序联系起来,主程序只有在IsToStep为1时才让蛇体步进,且步进后将该变量置0,定时中断服务程序每隔一段时间为IsToStep置位,使主程序得到步进信号。

图ChpNum-3程序流程

主程序首先进行LCD和定时器的初始化,绘制好游戏界面后打开外部中断并启动定时器,进入主循环。

主循环等待蛇体步进信号IsToStep(由定时中断服务程序设置),得到步进信号后根据当前方向MovDirection控制蛇体向前步进。

步进后判断当前蛇头是否碰到食物,若碰到,将食物与蛇体合并,并产生新的食物再进入首身相碰判断;

若未碰到食物,直接进入首身相碰判断。

若首身未相碰则将IsToStep清零、更新得分后回到主循环;

否则退出游戏。

定时器中断服务程序作用是定时产生步进信号,因硬件定时最大值不够蛇体步进最小间隔时间,我们用多次硬件定时来产生一个步进信号。

设计全局变量p,每硬件中断触发一次p减1。

当p减到0时置IsToStep为1并对p重新赋值。

值得注意的是,p的重新赋值应参考蛇体长度,若蛇体长度越长p值应越小,即步进间隔越短,蛇体移动速度越快,游戏难度越大。

具体做法见参考代码。

外部中断服务程序用于按键识别并更新前进方向全局变量MovDirection。

首先取出键盘检测位的值再确定贪食蛇要改变的方向。

当贪食蛇正向上或向下移动时,按下上下方向键,键值都不进行处理;

而贪食蛇正向左或向右移动时,按下左右方向键,键值都不进行处理。

4.2软件模块设计

4.2.1LCD初始化

在对LCD进行初始化时,先要检查读忙碌标志位,当BF为1表示内部操作正在进行,0表示允许指令操作。

具体指令说明如下:

(1)显示开/关设置

引脚

电平

L

H

H/L

功能:

设置屏幕显示开/关。

DB0=H,开显示;

DB0=L,关显示。

不影响显示RAM(DDRAM)中的内容。

(2)设置显示起始行

行地址(0~63)

执行该命令后,所设置的行将显示在屏幕的第一行。

显示起始行是由Z地址计数器控制的,该命令自动将A0-A5位地址送入Z地址计数器,起始地址可以是0-63范围内任意一行。

Z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。

(3)设置页地址

页地址(0~7)

执行本指令后,下面的读写操作将在指定页内,直到重新设置。

页地址就是DDRAM的行地址,页地址存储在X地址计数器中,A2-A0可表示8页,读写数据对页地址没有影响,除本指令可改变页地址外,复位信号(RST)可把页地址计数器内容清零。

(4)设置列地址

列地址(0~63)

DDRAM的列地址存储在Y地址计数器中,读写数据对列地址有影响,在对DDRAM进行读写操作后,Y地址自动加1。

(5)状态检测

BF

ON/OFF

RST

读忙信号标志位(BF)、复位标志位(RST)以及显示状态位(ON/OFF)。

BF=H:

内部正在执行操作;

BF=L:

空闲状态。

RST=H:

正处于复位初始化状态;

RST=L:

正常状态。

ON/OFF=H:

表示显示关闭;

ON/OFF=L:

表示显示开。

(6)写显示数据

D7

D6

D5

D4

D3

D2

D1

D0

写数据到DDRAM,DDRAM是存储图形显示数据的,写指令执行后Y地址计数器自动加1。

D7-D0位数据为1表示显示,数据为0表示不显示。

写数据到DDRAM前,要先执行“设置页地址”及“设置列地址”命令。

(7)读显示数据

从DDRAM读数据,读指令执行后Y地址计数器自动加1。

从DDRAM读数据前要先执行“设置页地址”及“设置列地址”命令.

LCD初始化时,根据指令格式,先进行读忙碌检查。

当BF为低电平时,设置显示起始行为第一行,A0~A5位为0,然后设置屏幕显示为开,具体做法见参考代码。

4.2.2键盘扫描程

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1