【课程设计】基于51单片机的点阵贪吃蛇 - 嘉立创EDA开源硬件平台

编辑器版本 ×
标准版 Standard

1、简单易用,可快速上手

2、流畅支持300个器件或1000个焊盘以下的设计规模

3、支持简单的电路仿真

4、面向学生、老师、创客

专业版 professional

1、全新的交互和界面

2、流畅支持超过3w器件或10w焊盘的设计规模,支持面板和外壳设计

3、更严谨的设计约束,更规范的流程

4、面向企业、更专业的用户

标准版 【课程设计】基于51单片机的点阵贪吃蛇

简介:以单片机为控制核心的贪食蛇游戏系统

开源协议: GPL 3.0

(未经作者授权,禁止转载)

创建时间: 2021-05-14 16:30:12
更新时间: 2023-12-02 14:11:47
描述

注:以下内容仅供个人学习参考,严禁转载!!!

视频链接:哔哩哔哩(给个赞吧!)

 

基于单片机的贪吃蛇设计

         

本设计为以单片机为控制核心的贪食蛇游戏系统。所设计的贪食蛇能由四个按键控制其上下左右的运动、吃食物和自动放置食物。游戏开始后默认出现2节蛇身、一个食物,当蛇吃到食物后蛇身自动加长。硬件设计包括48*8点阵组成的16*16点阵及其驱动电路、独立按键、锂电池充放电电路和下载电路。软件采用C语言编程,方便灵活,大大加快了软件开发速度,缩短了开发周期,并且便于移植。所设计的贪食蛇游戏系统轻巧便携、老少皆宜,且成本较低,具有一定的市场前景。

关键词51单片机,点阵,游戏,贪吃蛇

 

 

Snake design based on single chip microcomputer

      Abstract 

This design is a snake game system with single chip computer as the control core. The designed snake can move up, down, left and right, eat food and place food automatically by four buttons. When the game starts, there will be two snake bodies and one food by default. When the snake eats the food, the snake body will lengthen automatically. The hardware design includes 4 8*8 dot matrix composed of 16*16 dot matrix and its drive circuit, independent keys, lithium battery charge and discharge circuit and download circuit. Software using C language programming, convenient and flexible, greatly accelerated the speed of software development, shorten the development cycle, and easy to transplant. The snake game system designed by the light and portable, and the old and young are suitable, and the cost is low, has a certain market prospect.

Key words: 51 MCU, dot matrix, game, snake

 

 

1         绪论

1.1 设计目的

21世纪的今天,人们的生活开始变得更加丰富多彩。在繁忙的工作之余,娱乐成为人们生活不可或缺的一份子,而游戏作为近年来逐渐兴起的一种娱乐方式,已经越来越受到人们的青睐。在工作学习之余,通过玩游戏来放松、调节紧张的学习工作压力是不错的选择;然而大型的网络游戏玩起来比较耗费时间,且不能随时随地的玩。那么如果这时候拥有一款简单易携带,并且能够缓解压力的小游戏将是个不错的选择,所以,我就设计了这样一款简单易携带的经典小游戏——贪吃蛇。

1.2 设计要求

①制作一个的贪吃蛇游戏,系统以单片机为控制器,用四个输入端表示四个控制键(上下左右)。

②游戏初始化蛇的节数,以及障碍墙壁。

③当蛇的头碰到障碍墙壁或蛇的身体时自动结束。

2         总体方案

2.1 总体框图

 

21总体框图

2.2 方案选择

2.2.1            点阵驱动电路选择

由于单片机IO口的驱动能力有限,当驱动16*16点阵时,行控制IO口需要控制16LED,单个IO口驱动能力达不到良好的显示效果,故需要驱动电路来控制16*16点阵,具体有以下两种方案以供选择:

方案一:选用74HC595作为点阵驱动。74HC595是一个8位串行输入、并行输出的位移缓存器。可使用474HC595来控制点阵的行列,在控制点阵时仅需6IO口,但每次控制时需要发送16次数据。

方案二:选用74LS138配合74HC373作为点阵驱动。74LS1383线-8线译码器,可由274LS138构成一个4线-16线译码器来驱动点阵的行。74HC373是八路D型锁存器,可用来并行驱动点阵的列,每次控制只需执行一次命令。但在此方案中需要20IO口来控制电路。

根据以上两种方案的描述,再结合我们的系统设计,IO口还未完全利用,为使刷新速度更快,故采取用方案二。

2.2.2            按键电路设计方案

在本设计中,我们需要通过按键来实现改变贪吃蛇的运动方向。那么,键盘就是整个系统中不可缺少的一部分。具体有以下两种方案以供选择:

方案一:矩阵式键盘,这种键盘I/O口利用率高,但电路连接复杂,软件编程也比较复杂,适用于需要大量使用案件的系统。

方案二:独立式键盘,这种键盘每个按键之间是相互独立的,每个按键占用一个IO口,当按键数量较多时,I/0口利用率不高,但程序编写简单,适用于所需按键较少的场合。

根据以上两种方案的描述,再结合我们的系统设计,显而易见,我们需要独立式键盘,所以,这里我们选择方案一。

2.2.3            电源供电选择

电源电路是一个电子产品的重要组成部分,本设计中的单片机与驱动电路都需要电源。在本设计中的单片机、74HC37374LS138的电压典型值都为5V,故需要一个5V的电源供电。具体有以下三种方案以供选择:

方案一:使用直流电源供电,例如手机充电器,可以直接获取5V的电源,并且可以长时间供电,但必须有电线连接,不具有便携性。

方案二:使用干电池供电,电池无需电线连接,具有便携性。并且单节干电池由1.5V的电压,3节干电池串联即可得到4.5V的电压,基本满足需求。但干电池仅能单次使用,没电后需更换电池,造成浪费。

方案三:使用锂电池供电,电池无需电线连接,比干电池更加轻便,更具有便携性。锂电池还可以重复充电循环使用,设计产品可有更长的寿命。另外锂电池典型电压为3.7V,不满足系统所需的5V,但市面上有类似于FM3209M之类的锂电池管理芯片只需搭配简单的外围电路即可获得5V的电压。

根据以上两种方案的描述,我们选用方案三,使用锂电池为本设计供电,以便使设计产品更加便捷。

3         硬件设计

3.1 单片机最小系统

3.1.1            单片机选型

本设计选用STC89C52单片机作为系统的主控芯片,控制该贪吃蛇系统的整体运行。STC89C52单片机的优点为功耗低、八位CMOS微处理器性能高,片内具有8k在线编程Flash存储器,采用MCS-51内核,指令完全兼容MCS-51,具有开发简单、可在线编程下载、成本低等优点。[1]

最小系统主要由STC89C52单片机、晶振电路、复位电路构成。电源采用锂电池供电,晶振电路为12M石英晶振,并联两个电容,可以起到频率微调作用。复位电路有上电自动复位和开关复位两种复位方式。

3.1.2            单片机最小系统

单片机最小系统原理图如 3‑1所示:


 

31单片机最小系统

[1]    时钟电路


 

32单片机最小系统-时钟电路

单片机内部具有一个高增益反相放大器,用于构成振荡器。通常在引脚XTALIXTAL2跨接石英晶体和两个补偿电容构成自激振荡器,系统时钟电路结构如 3‑2所示,在本设计中时钟电路采用12M石英晶振作为基准时钟。

[2]    复位电路


 

33单片机最小系统-复位电路

复位电路用于重新启动系统,使得单片机回到原始状态。设置复位电路的目的是当系统失去控制或程序跑飞时,通过复位按钮恢复默认设置,系统重新启动运行。[2]

复位电路由电容串联电阻构成,由 3‑3并结合“电容电压不能突变”的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC值来决定。典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位。一般教科书推荐C 10uR8.2K。当然也有其他取法的,原则就是要让RC组合可以在RST脚上产生不少于2个机器周期的高电平。

31电容充电时间计算公式

在本设计中C10uR10K。由 3‑1计算得 =0.1s远大于两个机器周期(2us),故可以实现上电复位功能,另外还设置了一个按键作为复位按键,即按下后直接将单片机RST端接至5V复位单片机,当按键松开后再重复电容充电的过程恢复正常运行。

3.2 点阵驱动电路


 

 

35点阵LED内部原理图

点阵LED内部原理图如 3‑5所示,外侧的就是点阵LED的引脚号,左侧的8个引脚是接的内部LED的阴极,上侧的8个引脚接的是内部LED的阳极。从图上可以看出来,我们的9脚如果是低电平,13脚是高电平的话,最左上角的那个LED小灯就会亮。

控制一个8*8的点阵需要16个引脚,将四个点阵行与行分别连接,列与列分别连接,控制这个16*16点阵仍然需要32个引脚,占用了过多的单片机IO口,所以需要一定的驱动电路来控制点阵。具体驱动方式如下述所示。

3.2.1            4-16线译码器(行驱动)


 

36由两片74LS138构成的4~16线译码器

设计中采用74LS138译码器译码器每一时刻的输出口会根据输入信号的译码来选择同一时刻仅有一个端口输出与其他端口的输出不同该电平信号就是设计所需的只要在输入端给出连续的编码信号输出端就会产生由低位端口到高位端口输出的电平信号由于16×16点阵给出的行引脚为1674LS138仅有8位输出引脚所以要想实现译码选择行线的话一片74LS138显然是不够的因此该设计中采用两片74LS138译码器级联成416线译码器那么怎样才能实现两片74LS138级联成为416线译码器呢?级联原理如 3‑6所示从图中可以看到两片74LS138的输入端被相应地连在一起组成416译码器的低三位关键是第四位的连接方式从图中可以看出D3=0会使73LS138(1)对输入信号译码而输出端也仅会在73LS138(1)Y0Y7之间进行选择这与一片74LS138的译码关系一样74LS138(2)则不参与译码而全部输出默认电平但从输入端看是输入了四位信号而产生了16位数据再当D3=173LS138(2)对输入的低三位信号译码73LS138(2)被屏蔽输出端全部输出高电平这样只要将416线译码器的输入端口接入单片机的IO端口上16位输出端接在16×16点阵的行线接口上即可完成点阵的行驱动[3]

37点阵行驱动电路

在本设计中,如 3‑6所示通过单片机的P2.0P2.1P2.2P2.3四个引脚作为4~16线译码器的输入,4~16线译码器的输出接至四个点阵的阴极。

3.2.2            D锁存器(列驱动)

74HC373是八路D型锁存器,每个锁存器具有独立的D型输入,以及适用于面向总线的应用的三态输出。

锁存器的主要作用

[1]     

缓存

[2]     

完成高速的控制其与慢速的外设的不同步问题

[3]     

是解决驱动的问题(提供的电流比51IO口输出电流大)

[4]     

拓展I/O口(可以用锁存器幂叠加方法,即锁存器的Q再接锁存器实现IO口的无限拓展)

31锁存器的主要作用

在本设计中就是用到了锁存器的第三个功能,微控制器的IO口均不能流过过大的电流,LED点亮时有约10ms的电流,因此点阵阳极不要直接接单片机IO口,应先经过一个缓冲器74HC373。单片机IO口只需很小的电流控制74HC373即可间接的控制点阵阳极的显示,而74HC373输出也能负载约10mA的电流。设置数码管段的驱动电流为ID=15mA,这个电流点亮度好,并且有一定的裕度。


 

38点阵列驱动电路

在本设计中,如 3‑7所示将锁存器串如单片机与点阵之间,将锁存器的OE接低电平、LE接高电平,以使锁存器的输出始终等于输入。从而实现扩大电流的作用。

3.3 按键电路


 

39按键电路

在本设计中,需要4个按键来控制蛇的方向,因为设计中只需4个按键(上下左右)所以使用独立按键即可满足要求。四个独立按键的一端都接地,独立按键的另一端与单片机连接,其连接方式如 3‑9所示。KEY1-KEY4分别为上下左右。

3.4 锂电池充放电电路


 

34FM3209锂电池充放电电路

FM3209F是一款全集成充电管理,锂电池保护,DC-DC升压限流,手电筒照明及电量指示的多功能电源管理芯片。

FM3209F的同步升压系统提供最大2.1A输出电流,转换效率高至93%。芯片只需一个电感实现降压与升压功能。DC-DC转换器工作在1.5MHz,可以支持低成本电感和电容;芯片支持4LED灯的电量指示与手电筒功能,支持按键单按,双按及长按功能。当空载时,系统进入休眠状态,工作电流降至50uA

FM3209F同步开关充电技术,提供最大2.1A电流,大大缩短充电时间。芯片内置温度控制电路,根据IC温度和输入电压智能调节充电电流。

在本设计中,使用FM3209F从锂电池获取3.7V电压升高至5V为单片机以及外围电路供电。并且可以直接插入5V电源为锂电池充电。

4         软件设计

4.1 主函数


41主函数流程图

单片机复位后,单片机运行main()函数,初始化定时器并点亮由两个LED构成的蛇身和一个食物,蛇开始默认向左运动。初始化完成后单片机循环执行点阵扫描函数(点阵显示扫描函数)与按键扫描函数(检测按键是否被按下)。

点阵扫描函数:点阵的显示原理是在每一时刻仅显示一行数据,然后通过每行轮流显示,以很快的速度不断地刷新,也就产生了静态的显示效果。在本设计中,单片机P2.0-P2.3引脚控制4~16线译码器从而控制点阵的行,P0P1控制点阵的列。当P2.0-P2.3分别是0000时,选中的是点阵的第一行,其显示内容由P0P1控制,IO口为高电平时点阵上对应LED点亮反之低电平则不亮,当P0P1分别是0xff0x00时,第一行的左八个LED点亮右八个熄灭。当P2.0-P2.3分别是0001时,选中的是点阵的第二行,依次类推从而实现点阵每行的显示。控制P2.0-P2.3引脚以实现选中1-16行,并使其依次循环选中,并通过P0P1发送数据从而实现点阵整片的显示。

按键扫描函数:在本设计中按键使用的是单片机的P3.2-P3.5,单片机内部有将其上拉,所以在没按下按键时按键输入为高电平,按键另一端接地,当按下按键时输入则为低电平。所以循环扫描按键是否有变成低电平,当找输入到低电平,就使蛇向相应的方向改变。

4.2 中断函数


 

42中断函数流程图

单片机复位后会初始化定时器中断,定时器每10ms中断一次,定义一个全局变量(计数缓存),判断计数缓存是否等于“速度”(定义的一个变量,通过与定时器中断中计数缓存的比较达到对蛇运动速度的控制)。当变量计数缓存等于变量速度时,随机生成一次食物坐标(单片机随机生成的坐标每次都一样,不能在吃到食物后随机生成食物,需每次运动的时候都随机生成一下,以达到食物的完全随机),执行“蛇运动函数”在4.3中介绍,并点亮下一个蛇头.

4.3 蛇运动函数


 

43蛇运动函数流程图

在蛇的运动中,可将蛇当作“两只蛇”,蛇头与蛇尾,蛇头在前面点亮LDE,蛇尾在后面熄灭LED,以实现蛇的运动。

蛇头的运动:首先判断蛇头是否碰到墙壁障碍,若碰到后有戏结束,蛇不再运动,点阵显示“完”字,需复位后才能继续游戏。之后判断蛇是否吃到了食物,当蛇吃到食物后蛇尾的LED不在会熄灭,从而实现蛇的增长效果。之后根据变量蛇头方向(定义的一个全局变量,默认为向左运动,在按键扫描函数中被更改)运算,得到蛇头下一次的坐标。最后判断运算后的蛇头坐标是否碰到了蛇身,若碰到则游戏结束,蛇不再运动,点阵显示“完”字,需复位后才能继续游戏。

蛇尾的运动:蛇尾可当作一直追着蛇头的另一条蛇,不停的熄灭LED。在蛇头吃到食物时,蛇尾的LED不被熄灭,从而实现蛇长度的增长。当蛇头方向变化时,记录拐点的坐标与方向,当蛇尾达到拐点时,自动改变方向。

5         调试运行

5.1 PCB绘制

在立创EDA中通过参考数据手册及参考文献对原理图进行绘制,检查网络端口是否连接正确,检查无误后通过原理图生成PCB。首先合理摆放好元器件,元件摆放完毕后,按照飞线层进行连线,连线完毕后对检查端口是否全部连接完毕并检查DRC报错,检查无误后即可下单生产PCB

5.2 硬件焊接

元器件及PCB到货后进行对电路板的焊接。首先肉眼检查PCB板无损坏,并通过万用表蜂鸣档对VCCGDN进行检测以保证没有短路。整理元器件,确认元器件没有缺少并将元器件摆放至顺手的位置以便进行焊接。完成上诉步骤后开始对元器件进行焊接至PCB,焊接电路时应遵循先低后高、先易后难、先轻后重的原则进行焊接。焊接完毕后使用万用表蜂鸣档对VCCGDN进行检测以保证没有短路。

5.3 软件调试

通过KEIL软件对软件进行编写。首先对电路板各模块的驱动程序进行编写,如点阵驱动程序、按键扫描程序,编写完毕后进行编译进行编译生成.HEX文件,0错误、0警告后将程序烧入单片机中。因电路板上板载USB-TTL电路所以不要用下载器,用数据线将PCB连接到电脑上,使用STC-ISP将程序下载至单片机中,并测试各模块是否可以正常使用。各模块的驱动程序完成后开始对贪吃蛇程序进行编写,编写完毕后编译并下载至单片机中,检查程序是否可以正常运行,发现问题后修改相应的程序解决问题。

5.4 运行结果

 51系统复位后  52吃到一个食物并转向  53游戏结束

 

  单片机复位或从新开始后,如 5‑1所示,自动生成一条长度为2的蛇(初始默认向左移动)与一个食物。

  可通过四个按键来控制蛇转向,如 5‑2PCB丝印所示,按下向下箭头旁边的按键蛇将会向下转向。通过控制四个按键使蛇头运动至食物的位置上(单独显示的一个LED灯),蛇身自动加长一个并且点亮下一个食物。

  当蛇头碰到墙壁或蛇身时,游戏结束,点阵显示“完”字,如 5‑3所示。

 

 

通过本次的设计,我分析与总结了一下几点教训与经验:

1、在PCB设计前要先完成原理图的设计,不应该边画原理图一边设计PCB,防止原理图错误导致PCB的大面积修改。

2、在对PCB焊接时应一部分一部分的焊接,以方便排查错误。

3、要重视对数电与模电的学习。

要设计一个成功的电路,必须要有耐心,要有坚持的毅力。在整个电路的设计过程中,花费时间最多的是各个单元电路的连接及电路的细节设计上,如在多种方案的选择中,我们仔细比较分析其原理以及可行的原因。这就要求我们对硬件系统中各组件部分有充分透彻的理解和研究,并能对之灵活应用。通过这次设计,我在书本理论知识的基础上又有了更深层次的理解。

贪吃蛇是一款简单的益智游戏,本设计是以51单片机为核心来设计的一个简单的贪吃蛇游戏机,这只是单片机应用的一个点,由点及面,希望可以更好的将理性与感性相结合,深入了解和应用相关的专业技术,将之前理论学习的知识运用到实际中,提高实践动手能力,为将来科研道路打下坚实基础

 

参考文献

[1]李娇娇,徐勇,苏发桂,吕乐乐,冯文静.基于51单片机的酒精浓度监测系统设计[J].电子测试,2021(07):17-19.

[2]李建中.基于51单片机的步进电机正反转可控设计与仿真[J].电子测试,2020(19):41-42.

[3]牛晓飞,张秀香,李明,郝保明,王祥,唐永刚.基于AT89C51单片机的16×16点阵显示屏的设计[J].宿州学院学报,2017,32(12):97-100.

[4]孙建振,王振,姬广超,董雨鑫,梁栋茂,邹劢豪.基于ARDUINO的多功能智能LED点阵屏[J].电脑知识与技术,2020,16(23):220-221.

[5]李晓彤,罗杉,王华阳,罗劲睿,张蕾.基于51单片机的综合游戏机的设计与实现[J].工业控制计算机,2018,31(07):143-145+153.

[6]刘港毓,龙波,欧阳朝煌,张磊涛.浅析《贪吃蛇》游戏设计与制作[J].科技风,2017(05):68.

[7]张光建.89S51单片机的16×16点阵汉字显示的设计[J].电子世界,2021(05):134-136.

[8]俞宏霖,李明明,陈旭标,白炳斌.基于51单片机的16*16 LED滚动式点阵显示研究[J].数码世界,2016(11):96-98.

 

 

 

 

附录1:系统原理图(见文档)

 

附录2:设计PCB



           

附录3:元件清单

 

附录4:设计实物图

 

附录5:程序源代码(见附录)

 

 

 

设计图
原理图
1 /
PCB
1 /
未生成预览图,请在编辑器重新保存一次
ID Name Designator Footprint Quantity
1 LED-0805_R 25,50,75,100 LED0805_RED 4
2 10u C1,C2,C10,C11,C13,C18 C0805 6
3 30pF C3,C8 C0805 2
4 1n C4 C0805 1
5 0.1uf C5,C9 C0805 2
6 2.2n C6 C0805 1
7 10u C7 CAP-D4.0×H5.5 1
8 2.2u C12 C0805 1
9 0.1u C14,C15,C16,C17,C19 C0805 5
10 X2016WV-02K-N0SN CN1 CONN-TH_2P-P2.00_X2016WV-2K-N0SN 1
11 1uH L1 IND-SMD_L6.0-W6.0 1
12 8*8 3.75mmLED LED1,LED2,LED3,LED4 38*38点阵屏 4
13 0.01 R1 R1206 1
14 4.7k R2,R7,R9,R11,R12,R13,R14,R15,R16,R17,R18 R0805 11
15 470 R3,R4,R5,R6 R0805 4
16 10k R8 R0805 1
17 1k R10 R0805 1
18 TS-1101S-B-A-B-W-A SW1 SW-SMD_L6.0-W3.5-LS8.0 1
19 1TS002B-1700-5000 SW2 SW-SMD_L6.0-W3.5-LS8.0 1
20 SK12D07L3B SW3 SW-TH_SK-12D07-X-X 1
21 TS-1102SD-C-E-B SW4,SW5,SW6,SW7 SW-SMD_4P-L6.0-W6.0-P4.50-LS9.2 4
22 XL74LS138 U1,U3 SOP-16_L9.9-W3.9-P1.27-LS6.1-BL 2
23 SN74HC373NSR U2,U4 SOIC-20_L12.6-W5.3-P1.27-LS10.6-BL 2
24 STC89C52RC U5 LQFP-44_L10.0-W10.0-P0.80-LS12.0-BL 1
25 CH330N U6 SOP-8_L4.9-W3.9-P1.27-LS6.0-BL 1
26 FM3209F U7 FM3209F-ESOP-16 1
27 U262-161N-4BCS73-08T USB1 USB-C-SMD_XKB_U262-16XN-XBCS73-08T 1
28 12M Y1 HC49US 1

展开

工程视频/附件
序号 文件名称 下载次数
1

【单片机课设】贪吃蛇.rar

2133
工程成员
侵权投诉
相关工程
换一批
加载中...
添加到专辑 ×

加载中...

温馨提示 ×

是否需要添加此工程到专辑?

温馨提示
动态内容涉嫌违规
内容:
  • 153 6159 2675

服务时间

周一至周五 9:00~18:00
  • 技术支持

support
  • 开源平台公众号

MP