| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 单片机课程设计,基于AT89C51和LCD-12864的贪吃蛇游戏 -> 正文阅读 |
|
[嵌入式]单片机课程设计,基于AT89C51和LCD-12864的贪吃蛇游戏 |
前言课程设计报告以及keil文件和protues仿真在文末。 一、设计内容及要求设计一个贪吃蛇游戏,使其具有以下游戏规则: ????????①当没有改变方向时,贪吃蛇沿原来路径一直前进 ????????②贪吃蛇无法回头,只能异于当前方向改变行动 ????????③蛇头碰到蛇身时死亡,游戏结束 ????????④贪吃蛇吃到豆子则蛇身增加 ????????⑤蛇头碰到墙壁时死亡,游戏结束 ????????⑥当蛇长达到17及以上时出现山洞出口,进入则游戏胜利 二、系统的硬件设计
2.1? Protues仿真图2.2? 主控芯片连接? ?其中P0口连接LCD-12864的DB0~DB7,P2.0~P2.1连接LCD两个片选端,P2.2~P2.4连接LCD的指令线,读写线,以及电源线,P1.0~P1.4连接控制的四个按键。 2.3? LCD-12864连接? ?分别连接至AT89C51的引脚 2.4? 控制按键连接?此法连接,当按下按键后,相应端口置零 三、系统的软件设计3.1? 贪吃蛇算法介绍贪吃蛇游戏算法的实现,即如何通过液晶屏显示蛇的移动。 ????????1、其实蛇看似移动的过程中,实质只有两个点再变,即蛇头前进方向增加一个点,蛇尾减少一个点。 ????????2、知道如何显示蛇的移动后,再一个关键问题就是蛇的转折问题,如何控制蛇尾消失的点沿着蛇的路径。通俗的说就是蛇怎么实现曲折移动,这里就用到了循环队列,每次蛇头前进方向发生变化后,队列增加一个结点,结点中包含蛇头方向变化的位置,以及蛇头转变的方向。 ????????3、蛇尾每次移动的过程中都会与队列头指针所储存的位置做一次判断,当蛇尾到达这一位置后,从结点中取出保存的蛇头的移动方向赋给蛇尾,结点出队列即删除这一结点。 ????????4、由于队列是先进先出,所以每前进一步会先push进蛇头的节点,再pop出蛇尾的节点,即实现了蛇的曲折运动。 3.2? 典型算法实现3.2.1? 采用循环队列存储蛇头的转向信息????????存储蛇头转向的信息使用了step记录,即每走一步使step+1,初始化蛇头step>蛇尾step,当按下按键时代表蛇头发生转向,用循环队列记录此时蛇头step坐标入队,同时使队尾指针+1,当不停前进蛇尾到达此step时,代表之前蛇头在此发生转向,则可不用具体xy坐标记录信息,从而节省存储空间。
3.2.2??根据行列具体点亮或熄灭LCD-12864某一个点?????????由于LCD-12864的点阵点亮是八位DB0~DB7一次性操作一个page,代表一次只能八位一起操作,无法根据某一点的line,column点亮一个点,这里采用了位与或的思想,即根据某一点的line算出此坐标点对应的page中所在的位,后读取这点所在整列的数据与此位进行位或,即可在不改变原始数据的情况下点亮此点,熄灭相似,先对位信息进行取反,后与所在整列的数据与此位进行位与,即可熄灭某一具体点。
3.2.3 ?碰撞检测????????同样采取位与的思想,函数传入具体点的line,column坐标,读取此列的信息,后进行位与操作,若结果不为零,则代表此点已被点亮,表示发生碰撞(蛇身,墙壁)。
3.2.4 ?2×2点扩大??????由于一次只亮一个点,导致贪吃蛇和豆子会很小,对视觉和操作是一个很大的考验,于是可以使用比例扩大到一个点为2×2,使得游戏界面变得更加亲和。对于原先的1点扩大到2个点,我使用了每个点对应一个坐标,使得4个点是一体的,为后续的函数书写提供极大便利。 ? ?
3.2.5 ?字模算法????????由于LCD-12864采用的是点阵点亮,若想显示具体汉字信息,则需使用16×16的字模运算。可使用“PCtoLCD2002”软件进行字模提取。? ?在具体调用时,应设计相应算法,适应具体字模,例如16×16,由于一次只能书写8位,16则需分两次书写,先写上面的8×16,再写下方的8×16。
附录百度网盘,提取码:r70l |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 5:25:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |