首页 >> 大全

基于AT89C51单片机的贪吃蛇游戏设计

2023-10-12 大全 34 作者:考证青年

点击链接获取Keil源码与 仿真图:

源码获取

主要内容:

设计一个贪吃蛇游戏,使其具有以下游戏规则:①当没有改变方向时,贪吃蛇沿原来路径一直前进②贪吃蛇无法回头,只能异于当前方向改变行动③蛇头碰到蛇身时死亡,游戏结束④贪吃蛇吃到豆子则蛇身增加⑤蛇头碰到墙壁时死亡,游戏结束⑥当蛇长达到17及以上时出现山洞出口,进入则游戏胜利

基本要求:

1、游戏不改变方向时,贪吃蛇沿原来路径一直前进;

2、游戏设计过程中,贪吃蛇无法回头,;

3、游戏进行过程中,蛇头碰到蛇身或触碰墙壁则贪吃蛇死亡,游戏结束;

4、贪吃蛇吃到豆子则蛇身增加,当蛇长达到17及以上时游戏胜利。

主要参考资料:

[1] 李丹,马莹,彭玄璋.单片机原理及应用[M] .成都:电子科技大学出版社,2021.

[2] 田希晖.C51单片机技术教程[M]. 北京:人民邮电出版社,2007.

[3] 顾晖等.微机原理与接口技术-基于8086和仿真(第二版).北京:电子工业出版社,2015.

           完  成  期  限: 12月11日 - 12月25日 指导教师签名:                     课程负责人签名:                           

摘 要

随着科技的发展,现代生活节奏越来越快,人们的工作生活压力也随之加大。设计一款操作简单,生动新颖,娱乐性强,便于携带的小游戏,在繁忙的工作生活之余玩玩这款小游戏,不仅可以调节人们的情绪,使人心情舒畅,还能健脑益智,为更好地投入工作学习做好准备。

本文基于单片机设计的贪吃蛇游戏,除了具有传统意义上的贪吃蛇游戏的特点:吃豆子蛇身増长,得分;分数达到一定高度后,山洞会打开一扇门,使得游戏拥有胜利结局。本次设计加入了游戏暂停的功能,方便随时离开不至于重新玩。为节省存储空间,游戏算法上进行了新的设计,定义一个一维数组,直接保存蛇头以及蛇尾的xy坐标。

具体实现上,硬件系统平台采用51系列单片机,搭载LCD和按键,构成了一个轻巧便携的游戏机系统。51系列单片机技术成熟,功能强大,应用广泛。使用单片机作为控制核心,可以简化硬件电路,采用软件编程控制单片机实现硬件电路的功能,降低能耗,降低成本。软件采用C语言编程,方便灵活,大大加快了软件开发速度,缩短了开发周期,并且便于移植。为提高开发效率和硬件稳定性,采用了功能强大的硬件仿真软件 ,依托该软件提供的仿真环境搭配Keil作为软件开发调试环境进行仿真调试成功。

关键词:贪吃蛇;51单片机;游戏

目 录

摘 要 I

第1章 绪论 1

1.1 概述 1

1.2 背景设定 1

1.3 操作指南 1

1.4 游戏特色 2

1.5 游戏评价 2

第2章 硬件设备介绍 3

2.1 单片机 3

2.1.1 51单片机特性 3

2.1.2 51单片机管脚说明 3

2.2 LCD-12864 5

2.2.1 12864基本参数 5

2.2.2 12864内部功能器件及相关功能 7

2.2.3 12864相关指令 7

第3章 系统的硬件设计 9

3.1 仿真设计 9

3.1.1 主控芯片连接 9

3.1.2 LCD-12864连接 9

3.1.3 控制按键连接 10

第4章 系统的软件设计 11

4.1 贪吃蛇算法介绍 11

4.2 典型算法实现 11

4.2.1 采用循环队列存储蛇头的转向信息 11

4.2.2 根据行列具体点亮或熄灭LCD-12864某一个点 12

4.2.3 碰撞检测 13

4.2.4 2×2点扩大 13

4.2.5 字模算法 14

第5章 系统测试 17

结论 19

参考文献 20

第1章 绪论

1.1 概述

贪吃蛇(也叫贪食蛇)是一款经典的小游戏。初始是像素版本,后来又衍生出3D版本、多人对战版本等。有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃豆子,从而使得蛇变得越来越长。

贪吃蛇游戏最初为单机模式,后续又陆续推出团战模式、赏金模式、挑战模式等多种玩法。

另外还有一种名为“贪吃蛇”钻井测井技术,是运用旋转导向系统、随钻测井系统等的油气田定向钻井、随钻测井技术,可完成海上“丛式井”和复杂油气层的开采需求,大幅降低油气田开发综合成本。

1.2 背景设定

1976年,平台推出了一款经典街机游戏。游戏中,两名玩家分别控制一个角色在屏幕上移动,所经之处砌起围栏。角色只能向左、右方向90度转弯,游戏目标保证让对方先撞上屏幕或围栏。听起来有点复杂,其实就是下面这个样子:

基本上就是两条每走一步都会长大的贪吃蛇比谁后完蛋,玩家要做的就是避免撞上障碍物和越来越长的身体。

很受欢迎,类似的游戏先后出现在 Atari 2600、TRS-80、苹果 2 等早期游戏机、计算机上。但真正让这种游戏形式红遍全球的还是21年后随诺基亚手机走向世界的贪吃蛇游戏——Snake。

1.3 操作指南

玩家使用方向键操控一条长长的蛇不断吞下豆子,同时蛇身随着吞下的豆子不断变长,当蛇头撞到蛇身或障壁时游戏结束。贪吃蛇最初为人们所知的是诺基亚手机附带的一个小游戏,它伴随着诺基亚手机走向世界。现在的贪吃蛇出现了许多衍生版本,并被移植到各种平台上。

1.4 游戏特色

贪吃蛇游戏操作简单,可玩性比较高。这个游戏难度最大的不是蛇长得很长的时候,而是开始。那个时候蛇身很短,看上去难度不大,却最容易死掉,因为把玩一条小短蛇让人容易走神,失去耐心。由于难度小,你会不知不觉加快调整方向的速度,在游走自如的时候蛇身逐渐加长了,而玩家却没有意识到危险,在最得意洋洋的一刻突然死亡。

贪吃蛇的另一个危险期在于游戏开始几十秒之后。由于玩家的注意力高度集中,精神紧张,此时局面稍好,就会不由自主地想放松一下,结果手指一松劲,贪吃蛇就死了。所以贪吃蛇可以算作一个敏捷型的小游戏。

1.5 游戏评价

和别的游戏不同,贪吃蛇是一个悲剧性的游戏。许多电子游戏都是以操作者的胜利而告终,而贪吃蛇的结局却是死亡。不管玩得多么纯熟,技术多么高超,你最终听到的都是贪吃蛇的一声惨叫。当手机上的小蛇越长越长,积分越来越高的时候,死亡也就越来越近。那时候忙的不是为了吃豆子长身体,而是为了避免撞墙。你会发现你穷于应付,四处奔忙。

第2章 硬件设备介绍

2.1 单片机

是一种带4K字节 FLASH存储器( - Flash and Read Only )的低电压,高性能CMOS8位微处理器,俗称单片机。

是一种帯2K字节闪存可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪速存储器组合在单个芯片中,ATMEL的是一种高效微控制器,是它的一种精简版本。单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

2.1.1 51单片机特性

提供以下标准功能:4k 字节Flash 闪速存储器,256字节片内数据存储器(00H -7FH为片内RAM,80H-FFH为特殊功能寄存器SFR),32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

2.1.2 51单片机管脚说明

VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为的一些特殊功能口,如下表所示:

口管脚 备选功能

P3.0 RXD(串行输入口)

P3.1 TXD(串行输出口)

P3.2 /INT0(外部中断0)

P3.3 /INT1(外部中断1)

P3.4 T0(计时器0外部输入)

P3.5 T1(计时器1外部输入)

P3.6 /WR(外部数据存储器写选通)

P3.7 /RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

振荡器特性:

XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

2.1.3 芯片擦除

整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。

此外,设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片工作,直到下一个硬件复位为止。

2.2 LCD-12864

带中文字库的 是一种具有4 位/8 位并行、2 线或3 线串行多种接口方式,内部含有国标一级、二级简体 中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192 个1616 点汉字,和128 个168 点ASCII 字符 集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4 行16×16 点 阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶 显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。

2.2.1 12864基本参数

(1)低电源电压(VDD:+3.0–+5.5V)(2)显示分辨率:128×64 点(3)内置汉字字库,提供8192 个16×16 点阵汉字(简繁体可选)(4)内置128 个16×8 点阵字符(5)2MHZ 时钟频率(6)显示方式:STN、半透、正显(7)驱动方式:1/,1/5BIAS

(8)视角方向:6 点(9)背光方式:侧部高亮白色LED,功耗仅为普通LED 的1/5—1/10

(10)通讯方式:串行、并口可选(11)内置DC-DC 转换电路,无需外加负压(12)无需片选信号,简化软件设计(13)工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃

2.2.2 12864内部功能器件及相关功能

指令寄存器(IR)

IR是用于寄存指令码,与数据寄存器数据相对应。当D/I=0时,在E信号下降沿的作用下,指令码写入IR。

2.数据寄存器(DR)

DR是用于寄存数据的,与指令寄存器寄存指令相对应。当D/I=1时,在下降沿作用下,图形显示数据写入DR,或在E信号高电平作用下由DR读到DB7∽DB0数据总线。DR和DDRAM之间的数据传输是模块内部自动执行的。

3.忙标志:BF

BF标志提供内部工作情况。BF=1表示模块在内部操作,此时模块不接受外部指令和数据。BF=0时,模块为准备状态,随时可接受外部指令和数据。

利用 READ指令,可以将BF读到DB7总线,从检验模块之工作状态。

4.显示控制触发器DFF

此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示( OFF),DDRAM的内容就显示在屏幕上,DFF=0为关显示( OFF)。

DDF的状态是指令 ON/OFF和RST信号控制的。

5.XY地址计数器

XY地址计数器是一个9位计数器。高3位是X地址计数器,低6位为Y地址计数器,XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器为DDRAM的页指针,Y地址计数器为DDRAM的Y地址指针。

X地址计数器是没有记数功能的,只能用指令设置。

Y地址计数器具有循环记数功能,各显示数据

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了