基于51单片机的贪食蛇游戏机开发.docx

上传人:b****7 文档编号:9375539 上传时间:2023-02-04 格式:DOCX 页数:38 大小:375.37KB
下载 相关 举报
基于51单片机的贪食蛇游戏机开发.docx_第1页
第1页 / 共38页
基于51单片机的贪食蛇游戏机开发.docx_第2页
第2页 / 共38页
基于51单片机的贪食蛇游戏机开发.docx_第3页
第3页 / 共38页
基于51单片机的贪食蛇游戏机开发.docx_第4页
第4页 / 共38页
基于51单片机的贪食蛇游戏机开发.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

基于51单片机的贪食蛇游戏机开发.docx

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

基于51单片机的贪食蛇游戏机开发.docx

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

第ChpNum章基于51单片机的贪食蛇游戏机开发

1本设计的特点和目的

本设计以51系列单片机STC89C52为控制核心,以点阵液晶显示模块、键盘为人机接口,实现了一个贪食蛇游戏机。

通过本设计,令读者掌握利用单片机开发简单电子产品的根本技能,熟悉原理图绘制、仿真、软件设计、优化以及系统调试的根本方法,为进一步设计开发更为复杂的嵌入式模拟/数字混合系统打下一定的根底。

2产品简介

“贪食蛇〞又称为“贪吃蛇〞,是一种益智小游戏。

其游戏规那么比拟简单,就是一条小蛇,不停地在屏幕上游走去吃屏幕上出现的蛋,越吃越长,只要蛇头碰到屏幕四周或者碰到自己的身子,小蛇就立即毙命并完毕游戏。

本作品有上下左右四个按键来控制蛇头的移动方向,另有一个复位按键控制程序的重启,游戏界面采用分辨率为128×64的液晶显示屏。

3硬件设计

3.1人机接口电路

本游戏机游戏界面由液晶显示模块呈现。

液晶显示模块中,最主要的就是LCD液晶屏。

根据LCD液晶屏显示内容的不同,液晶显示模块可以分为数显液晶模块、点阵字符液晶模块和点阵图形液晶模块3种。

本设计使用点阵图形液晶模块OCM12864。

OCM12864液晶显示模块是128×64点阵型液晶显示模块,可显示各种字符及图形,可与CPU直接连接,具有8位标准数据总线、6条控制线及电源线,各引脚的信号说明参见表ChpNum-1。

表ChpNum-1OCM12864引脚说明

管脚名称

方向

引脚说明

VSS

-

逻辑电源地。

VDD

-

逻辑电源+5V。

V0

I

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

RS

I

数据\指令选择:

高电平:

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

低电平:

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

R/W

I

读\写选择:

高电平:

读数据;低电平:

写数据。

E

I

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

DB0

I/O

数据输入输出引脚。

DB1

I/O

数据输入输出引脚。

DB2

I/O

数据输入输出引脚。

DB3

I/O

数据输入输出引脚。

DB4

I/O

数据输入输出引脚。

DB5

I/O

数据输入输出引脚。

DB6

I/O

数据输入输出引脚。

DB7

I/O

数据输入输出引脚。

CS1

I

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

CS2

I

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

/RET

I

复位信号,低电平有效。

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)显示开/关设置

引脚

R/W

RS

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

电平

L

L

L

L

H

H

H

H

H

H/L

功能:

设置屏幕显示开/关。

DB0=H,开显示;DB0=L,关显示。

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

(2)设置显示起始行

引脚

R/W

RS

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

电平

L

L

H

H

行地址〔0~63〕

功能:

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

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

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

(3)设置页地址

引脚

R/W

RS

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

电平

L

L

H

L

H

H

H

页地址〔0~7〕

功能:

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

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

(4)设置列地址

引脚

R/W

RS

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

电平

L

L

L

H

列地址〔0~63〕

功能:

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

(5)状态检测

引脚

R/W

RS

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

电平

H

L

BF

L

ON/OFF

RST

L

L

L

L

功能:

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

BF=H:

内部正在执行操作;BF=L:

空闲状态。

RST=H:

正处于复位初始化状态;RST=L:

正常状态。

ON/OFF=H:

表示显示关闭;ON/OFF=L:

表示显示开。

(6)写显示数据

引脚

R/W

RS

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

电平

L

H

D7

D6

D5

D4

D3

D2

D1

D0

功能:

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

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

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

(7)读显示数据

引脚

R/W

RS

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

电平

H

H

D7

D6

D5

D4

D3

D2

D1

D0

功能:

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

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

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

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

4.2.2键盘扫描程序

键盘扫描通过外部中断来检测,四个方向键经与门与P3.2〔中断输入〕引脚相连。

程序初始化时将IT0置0,表示外部中断使用电平触发方式,低电平可引起中断。

任何键的按下均会使P3.2电平为低,进入中断效劳程序。

中断效劳程序先将P2口数据取出,右移6位将键盘接入引脚(P2.7、P2.6)的值取出,得到键盘识别码。

键盘识别码有四个:

1〔左键〕、2〔右键〕、0〔上键〕、3〔下键〕。

得到按键识别码后根据识别码及当前方向更新前进方向。

4.2.3显示16*16点阵汉字

液晶显示器的数据线是8位的,显示数据是逐字节输入的。

每字节输入数据对应到一列的8个像素点〔8行〕。

自然地,64行像素点分成8页,每8行为一页。

向液晶显示器写入显示数据时均要先设置写入的页号和列号〔而不是具体某一个像素点的坐标〕,然后写入一个字节的数据。

如表ChpNum-2所示,液晶显示模块中的DDRAM是存储图形显示数据的,LCD显示的数据与DDRAM中的数据一一对应〔一位DDRAM对应一个像素,数据为1表显示该点,为0不显示〕。

汉字在液晶中占用16*16像素点,即两页16列。

把汉字的点阵数据写到液晶的DDRAM中时。

先载入第一页的16列(字节),再载第2页的16列。

详细过程见参考代码。

表ChpNum-2DDRAM地址映像

Y地址

0

1

2

………………………

61

62

63

X地址

DB0

∫                     PAGE0

DB7

X=0

DB0

∫                     PAGE1

DB7

X=1

DB0

∫                     PAGE6

DB7

X=7

DB0

∫                     PAGE7

DB7

4.2.4食物的随机出现

食物的出现是一种随机行为,所以必须做一个随机数,而且食物出现的位置不能与蛇的位置一样,也不能超出墙外,否那么就要重置食物。

这里使用程序中的定时计数器的低八位TL0的数值,由于TL0不断变化,不同的时间点数值不同,TL0%24及TL0%15分别为食物的列地址和行地址。

4.3软件编译

程序调试使用uVision3,此在软件中要求每个工程都要建立一个文件来存储相关信息,因此不管是汇编的,还是C语言的,不管是只有一个文件的还是有多个文件的程序都需要一个工程文件。

这里使用C语言编写,具体步骤如下:

〔1〕翻开uVision3后,翻开Project菜单,在弹出的下拉菜单中选择NewProject命令,选择保存路径,输入工程名“贪食蛇〞,最后单击“保存〞按钮。

在保存新建工程后要求选择所使用单片机的型号,在此选择Atmel的80C52单片机。

〔2〕建立起一个新工程后,接下来是新建程序及各种文件,保存程序文件后需要将其添加文件到工程中。

〔3〕至此就可以进展源程序编写,完成编写后就对程序进展编译及仿真。

通过单击工具栏图标BuildTarget,可以翻译所有源文件并生成应用。

当Build应用存在语法错误时,uVision3将会在OutputWindow-Build页显示错误和警示信息。

双击信息行,uVision3在编辑器窗口翻开此信息对应的源文件,并定位到相应的位置。

一旦成功地生成了应用程序,就可以开场调试了。

在调试好应用程序后,要求生成一个IntelHEX文件。

这个文件可以下载到EPROM编程器中。

5系统调试

5.1PROTEUS仿真

在用uVision3编写单片机程序时,因uVision3往往只能修改语法上的错误,对于算法上的问题不好检查,而直接下到单片机里又受电路板的限制而不方便调试,因此这里使用Proteus进展电路仿真。

该软件具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能,同时有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

在Proteus软件的ISIS中新建立计图,画出本设计的电路图。

电路设计完成后就可以进展仿真。

先双击单片机,把用uVision3编译生成的HEX文件指定为下载文件,点击PLAY键即可进展仿真。

当出现ANALYSERERRORS时,表示电路有错误,列表中说明了具体的错误,必须要先排错才可以进展仿真。

5.2硬件的安装

软件调试及Proteus仿真完成后就进展硬件的安装。

读者可以自己印制PCB进展设计,亦可在万能板上搭建。

安装时要考虑受热、稳固等多方面的影响。

比方使用电烙铁时要控制好焊接的时间,电烙铁停留的时间太短,焊锡不易完全熔化,形成“虚焊〞,而焊接时间太长又容易损坏元器件,每一两秒内要焊好一个焊点,假设没完成,宁愿等一会儿再焊一次。

其次芯片的摆置要方便连线,焊接时要先把芯片从插座拔出,等线接好了再插上去。

在焊接时要考虑电路的抗干扰能力,同时要充分考虑电源对单片机的影响。

每焊接完一个模块,要用万能表根据电路图检查有没有接错、短路等现象,确认正确后再继续下一个模块。

5.3调试考前须知

5.3.1硬件调试考前须知

硬件全部焊接好以后,先初步检查是否焊错,有没有漏焊、虚焊,元件有没有接错或者接反。

在上电之前可以用万用表检测电源正负极有没有短路,保证系统可靠地供电。

对于复杂的接口,例如LCD接口,单纯从硬件角度不易调试,应结合软件从不同的角度进展测试,这样能起到更好的效果。

有条件的话可以合理地使用示波器,提高工作效率。

同时系统时钟受干扰或晶体振荡不正常可能导致系统工作故障,复位电路也要保证连接正确及工作正常。

检查故障时要细心严谨,要学会正确迅速排除故障原因。

如果调试各局部都正常,就可以把整个程序下载到单片机系统中,再进展下一步的软件调试了。

5.3.2软件调试考前须知

整个程序是用C语言进展编写的,因为程序不可能一次就能正确无误的完成,所以须要在调试中慢慢修改。

程序完成后先是用Proteus软件进展仿真调试,之后再进展硬件调试。

这样可以防止屡次使用硬件下载调试造成不必要的麻烦与失误。

软件仿真成功了,便可以通过串口下载到单片机上进展调试了。

但要注意一点,并不是软件上仿真成功了硬件就一定能成功,很多时候软件上的仿真跟便件上仿真还是存在很大的差异的,软件仿真成功只说明电路连接正确,程序编写合理。

而硬件的仿真还受到元件性能,周围环境温度和噪音干扰等多方面因素影响,必须要综合的进展考虑。

6附录

6.1总原理图

图ChpNum-4总原理图

6.2单片机程序参考代码

/*********************************************************************

文件名:

main.c

说明:

程序文件,所有贪食蛇软件的函数均在此文件内,

包括main函数,中断处理处理函数和液晶驱动的相关函数。

其他:

编译器KeilC,单片机晶振12MHz.

************************************************************************/

#include"reg52.h"

#defineucharunsignedchar

#defineuintunsignedint

voidDelayINms(uintk);//函数原型声明

voidchekbusy12864();

voidchoose12864(ucharSlctScreen);

voidcmd_w12864(ucharcmd);

voiddat_w12864(uchardat);

voidclear12864();

voidinit_lcd();

voidPlay8(ucharSlctScreen,ucharColumn,ucharPage,uchar*pAdr);

voidPlay16(ucharSlctScreen,ucharColumn,ucharPage,uchar*pAdr);

uchardat_r12864(ucharPage,ucharColumn);

voidvertical(ucharRowStart,ucharRowStop,ucharColumn);

voiddot(ucharx,uchary);

voidcleardot(ucharx,uchary)

voidDisplayBodyCell(uchar*x,uchar*y);

voidClearBodyCell(uchar*x,uchar*y);

//文字点阵数据

ucharcodeshu0[]=

{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00};/*"0"*/

ucharcodeshu1[]=

{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00};/*"1"*/

ucharcodeshu2[]=

{0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00};/*"2"*/

ucharcodeshu3[]=

{0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00};/*"3"*/

ucharcodeshu4[]=

{0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00};/*"4"*/

ucharcodeshu5[]=

{0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00};/*"5"*/

ucharcodeshu6[]=

{0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00};/*"6"*/

ucharcodeshu7[]=

{0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00};/*"7"*/

ucharcodeshu8[]=

{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00};/*"8"*/

ucharcodeshu9[]=

{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00};/*"9"*/

ucharcodeGam

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

当前位置:首页 > 高等教育 > 文学

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

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