实物基于普中V2实验板,Proteus仿真部分连线端略有不同,代码分开发板版本和Proteus版本,在打包文件中包含了俩者的原理图
一、设计任务与要求
基本功能:
制作一个8*8点阵的贪吃蛇游戏,系统以单片机为主控,用c语言进行软件设计。系统通过8*8LED点阵屏为载体显示数据,并用四个输入端表示四个控制键(上下左右),同时通过3个按键可以增加速度(最高8)、减少速度(最低1)、恢复默认速度(默认为3),1个按键控制暂停/继续,1个按键控制是否要开启边界死亡条件。通过右边3个LED以二进制方式显示当前速度等级,左边5个LED以二进制方式显示当前蛇身长度。系统硬件部分由STC89C516RD+单片机,8*8点阵屏,9个按键,软件部分在keil环境下用c51语言编写,包括游戏蛇的段数,死亡判定等,游戏结束时蜂鸣器响,全屏点亮。
具体要求:
1、用四个按钮控制蛇的方向,蛇的原始段数为4点,不设置触墙死亡;
2、蛇的移动速度手动调节,当蛇碰到自己的身体时死亡;
3、可以用1个按钮控制是否暂停,1个按钮控制是否要开启边界死亡条件;
4、可以用2个按钮调节速度(1-7),1个按钮恢复默认速度;
5、速度等级和蛇身长度通过LED灯珠以二进制显示出来;
6、用proteus设计,仿真基于STC89C52RC单片机的8*8点阵贪吃蛇的硬件电路;
7、蛇死亡,游戏结束,蜂鸣器响,全屏点亮。
二、方案设计
1、贪吃蛇的移动
当蛇没有吃到任何食物时,每次步进的蛇头将要到的下一个 LED 灯点亮,而蛇尾那个 LED 灯会灭掉,程序设计时将下一个蛇头位置的值点亮,再熄灭原来蛇尾的值即可。蛇头下一个位置根据蛇头和偏移量来确定,每次上下左右按键决定了蛇步进的偏移量,只要将蛇头的位置加上偏移量的值即得到新的蛇头位置。
2、食物的随机出现
食物的出现是一种随机行为,所以必须做一个随机数,而且食物出现的位置不能与蛇的位置相同,也不能超出墙外,否则就要重置食物。我们取用定时计数器的低八位 TLO 的数值,由于TL0不断变化,不同的时间点数值不同。这里使用的是C语言里的stdlib.h文件库,先利用 srand ( TL0)产生一个随机数的种子,再使用里面的随机函数rand (),加上蛇尾的坐标,再利用两次%8分别得到食物出现的横纵坐标的位置,防止溢出。
3、死亡判定
每次刷新完蛇身和食物时进行一次死亡检查,当蛇头碰到自己的身体或者在边界死亡条件开启时头部触碰边界,小蛇立即毙命并结束游戏,此时蜂鸣器响,全屏点亮,并且在while循环里面不跳出来,如果想重新开始游戏只需要复位程序即可。
三、原理图及元器件清单
器件清单:
元件 | 数目 |
共阳8*8点阵 | 1 |
最小系统板 | 1 |
电源 | 1 |
74HC595N芯片 | 1 |
Led灯、按键、导线、杜邦线、排针、蜂鸣器 | 若干 |
四、单位电路设计及分析
(1) AT89C52单片机最小系统模块
本系统以STC89C516RD+(等效器件选用AT89C52)为核心加上复位电路和晶振电路组成,本系统选用11.0592M的晶振,使得单片机有合理的运行速度。起振电容22pF对振荡器的频率高低、振荡器的稳定性和振荡器的快速性影响较合适,复位电路为按键高电平复位。
(2)8*8点阵屏模块
LED 点阵屏通过 LED (发光二极管)组成,以灯珠亮灭来显示程序的运行情况,是模块化的显示组件,本设计采用8*8共阳红色点阵显示屏(仿真中使用的是绿色点阵显显示屏),用来显示贪吃蛇的游戏画面。
(3)独立按键模块
4个按键控制蛇的游走方向(上下左右),3个按键控制速度加减以及暂停键提高游戏可玩性,1个按键控制游戏是否暂停,1个按键控制是否开启边界死亡条件。
(4)74HC595模块
74HC595是一个8位串行输入、并行输出的位移缓存器,并行输出为三态输出。在SCK 的上升沿,串行数据由SDL输入到内部的8位位移缓存器,并由Q7'输出,而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。使用74HC595可以减少IO口资源的占用。
(5)LED、蜂鸣器模块
右边3个LED以二进制方式显示当前速度等级,左边5个LED以二进制方式显示当前蛇身长度。蜂鸣器响时提示游戏已经结束。
五、仿真与调试
程序软件编译器使用uVision5。在用uVision5编写单片机程序时,因uVision5往往只能修改语法上的错误,对于算法上的问题不好检查,而直接下到单片机里又受电路板的限制而不方便调试。因此我们使用 Proteus 进行电路仿真。该软件具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统仿真、RS232动态仿真、I2C调试器、 SPI 调试器、键盘和 LCD 系统仿真的功能,同时有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
我们先在Proteus上绘制硬件电路,电路设计完成后就可以进行仿真。双击单片机,把用uVision5编译生成的HEX文件指定为下载文件,点击PLAY键即可进行仿真。当出现 ANALYSER ERRORS 时,表示电路有错误,列表中说明了具体的错误,必须要先排错才可以进行真。
软件调试及Proteus仿真完成后就进行硬件的安装。本设计按照原先设计好的电路图进行总体上的布置,采用人工搭电路的方法进行硬件的安装。安装时要考虑受热、稳固等多方面的影响使用电烙铁时要控制好焊接的时间,电烙铁停留的时间太短,焊锡不易完全熔化,形成"虚焊",而焊接时间太长又容易损坏元器件,每一两秒内要焊好一个焊点。若没完成,宁愿等一会儿再焊一次。其次芯片的摆置要方便连线,焊接时要先把芯片拔出,等线接好了再插上去。在焊接时要考虑电路的抗干扰能力,同时要充分考虑电源对单片机的影响。每焊接完一个模块,要用万能表根据电路图检查有没有接错、短路等现象,确认正确后再继续下一个模块。
主程序工作流程如图所示,系统上电后首先设置初始长度为3,设置初始前进方向为下,对定时器进行初始化,启动定时器。接着进入while循环执行程序主体逻辑,实时显示速度等级,在定时器中断里扫描键盘操作并且进行蛇身前进操作,中断源为一个是用户控制贪吃蛇移动方向的键盘定时扫描中断以及驱动贪吃蛇自动前行的定时中断,任意中断的到来都将改变贪吃蛇的当前状态。若当前没有中断发生,主程序继续刷新蛇身,判断是否吃了食物,判断是否死亡等。若死亡,结束游戏,点亮全屏,否则继续执行程序主体循环。
总资源占用量如下:
打包下载链接:
链接:https://pan.baidu.com/s/18d_jaqlfLJ2c3yuF7IdtqA?pwd=cgex
提取码:cgex