基于单片机的贪吃蛇游戏机设计与实现开题报告

合集下载

贪吃蛇开题报告

贪吃蛇开题报告

贪吃蛇开题报告一、引言贪吃蛇(Snake)是一款经典的游戏,具有较强的娱乐性和挑战性。

为了更好地理解和掌握贪吃蛇游戏的开发流程和实现技术,本文将详细介绍贪吃蛇游戏的开题报告。

本报告将讨论游戏的目的、游戏的规则和功能、技术选型以及开发计划等内容。

二、目的通过参与贪吃蛇游戏的开发,我们的目标是:•提高团队成员的编程能力和合作能力;•加深对游戏开发流程的理解和掌握;•实践设计模式和算法逻辑;•开发一款有趣且实用的游戏。

三、游戏规则和功能1. 游戏规则贪吃蛇游戏的基本规则如下:•蛇能够在地图上自由移动;•当蛇吃到食物时,蛇的长度会增加一节;•当蛇撞到自己的身体或地图边界时,游戏结束;•游戏会记录蛇吃到的食物数量;•蛇每移动一步,会不断消耗体力(长度)。

2. 游戏功能贪吃蛇游戏将包含以下功能:•开始、暂停和重新开始游戏的功能;•根据蛇吃到的食物数量更新游戏界面;•提供不同难度级别的游戏选择;•记录每次游戏的得分和最高得分。

四、技术选型1. 编程语言本次贪吃蛇游戏的开发将使用Python语言。

Python是一种易于学习和使用的高级编程语言,适合游戏开发和图形界面设计。

2. 开发工具和库•开发工具:我们将使用Visual Studio Code作为主要的开发工具。

Visual Studio Code是一个轻量级的集成开发环境,支持Python语言开发,并提供了丰富的插件和调试功能。

•游戏开发库:我们将使用Pygame库进行游戏的开发。

Pygame是一款跨平台的Python游戏开发库,提供了丰富的游戏开发功能和图形绘制功能。

3. 技术挑战在贪吃蛇游戏的开发过程中,我们将面临以下技术挑战:•蛇的移动逻辑和碰撞检测:需要设计蛇的移动逻辑和检测蛇与食物、身体和地图边界的碰撞逻辑。

•游戏界面的绘制:需要设计游戏界面的布局和绘制蛇、食物和地图等图形元素。

•游戏的交互和控制:需要实现游戏的开始、暂停和重新开始功能,并处理用户的键盘输入。

基于51单片机贪吃蛇游戏设计资料

基于51单片机贪吃蛇游戏设计资料

中文摘要摘要本文设计了一款新颖的以单片机为控制核心的贪食蛇游戏系统。

所设计的贪食蛇能完成移动、吃食物和摆放游戏自动输出的食物、使之默认出现3节蛇身、吃到每个随机点数而得分等功能。

硬件设计包括LED模块、键盘模块、供电模块驱动模块和下载模块。

软件采用C语言编程,方便灵活,大大加快了软件开发速度,缩短了开发周期,并且便于移植。

为提高开发效率和硬件稳定性,采用了功能强大的硬件仿真软件Proteus,依托该软件提供的仿真环境搭配Keil作为软件开发调试环境进行仿真调试成功。

所设计的贪食蛇游戏系统轻巧便携、老少皆宜,且成本较低,具有一定的市场前景。

关键词:贪吃蛇;单片机;游戏I英文摘要AbstractThis paper designs a novel single-chip microcomputer as the snake game control system. The snake can complete mobile, food and put the game automatically output of food, which appears by default 3 snake, eat each random points and scoring functions. The hardware design includes LED module, keyboard module, power supply module and driving module and download module. The software is programmed with C language, convenient and flexible, greatly accelerate the speed of software development, shorten the development cycle, and easy to transplant. In order to improve the development efficiency and stability of the hardware, the powerful hardware simulation software Proteus, based on the simulation environment of the software provided with Keil as the software development environment for debugging simulation debugging success. Snake game system design of the light and portable, suitable for all ages, and the cost is low, has a certain market prospects.KeyWords:Greedy Snake;51MCU;GameI目录目录第一章绪论 (1)1.1课题设计的背景与意义 (1)1.2 贪食蛇游戏的发展及现状 (2)1.2.1贪食蛇游戏发展历史 (2)1.2.2我国单机游戏的现状 (3)1.3 课题设计的内容与要求 (4)1.3.1课题设计的内容 (4)1.3.2课题设计的要求 (4)1.4设计方案 (4)1.4.1硬件设计 (4)1.4.2软件设计 (5)第二章系统总体设计 (6)2.1 系统基本组成及工作原理 (6)2.2 系统的主要元器件介绍 (8)2.2.1 74HC138 (8)2.2.2 74HC154 (10)2.2.3 74HC595 (12)2.3 主控芯片单片机 (14)2.3.1单片机的介绍 (14)2.3.2单片机的应用 (15)2.4 单片机红外无线 (17)2.4.1红外遥控 (17)2.4.2红外遥控发射 (18)2.4.5红外遥控接收 (19)2.4.6红外编码标准 (19)第三章系统硬件的设计 (21)3.1单片机控制模块的设计 (21)3.1.1 单片机的选择 (21)3.1.2 时钟电路 (24)I目录3.1.3 复位电路 (26)3.1.4 最小系统 (27)3.2 供电电路设计 (27)3.3 显示模块设计 (28)3.3.1 点阵模块 (28)3.3.2 驱动电路设计 (31)3.3.3 行驱动电路 (32)3.3.4 列驱动电路 (33)3.3.5 扫描显示过程 (34)3.3.6 显示模块原理图 (35)3.4下载模块设计 (35)第四章系统软件的设计 (37)4.1软件的整体设计思想 (37)4.2 软件开发环境 (37)4.2.1 keil软件的介绍 (37)4.2.2 软件功能 (38)4.2.3 软件应用流程 (39)4.3系统主函数的设计 (40)4.3.1按键检测模块 (42)4.3.2 显示模块 (43)4.3.3分数模块 (44)第五章系统调试 (46)5.1软件调试 (46)5.2硬件调试 (46)5.3作品展示 (48)总结 (49)参考文献 (50)致谢 (51)附录一:原理图 (I)附录二:原程序 (I)II第一章绪论第一章绪论“贪食蛇”又称为“贪吃蛇”,是一种益智小游戏。

贪吃蛇开题报告

贪吃蛇开题报告

贪吃蛇开题报告贪吃蛇开题报告一、引言贪吃蛇作为一款经典的电子游戏,自上世纪70年代问世以来一直备受玩家的喜爱。

它简单而有趣的玩法,让人沉迷其中。

本文旨在探讨贪吃蛇游戏的设计与开发,并提出一些创新的想法。

二、游戏规则和机制贪吃蛇的基本规则很简单:控制一条蛇在有限的空间内移动,通过吃食物来增长身体长度,同时避免碰到自己的身体或者墙壁。

游戏难度逐渐增加,当蛇的身体变得越来越长时,操作也变得更加困难。

三、游戏设计与开发1. 游戏界面设计在游戏界面设计中,我们可以考虑使用简洁明了的图形元素,如方块或者圆点来代表蛇和食物。

同时,背景可以选择适当的颜色或者纹理,以增加游戏的可视吸引力。

2. 控制方式优化传统的贪吃蛇游戏通常通过键盘来控制蛇的移动方向,但这种方式可能会对一些玩家造成困扰。

因此,我们可以考虑增加触摸屏或者重力感应等更直观的控制方式,以提高游戏的易玩性。

3. 难度调整与关卡设计为了增加游戏的挑战性,我们可以在游戏中设置不同的难度等级,例如增加蛇的移动速度或者缩小可用空间。

同时,通过设计不同的关卡和挑战,可以让玩家保持长久的兴趣。

4. 多人模式与社交功能除了单人游戏模式,我们还可以考虑添加多人对战模式,让玩家可以与其他玩家进行竞争。

此外,通过添加社交功能,如好友排行榜或者分享成绩到社交媒体,可以增加游戏的互动性和分享性。

四、创新想法1. 增加特殊道具除了传统的食物,我们可以考虑添加一些特殊道具,如加速道具、减速道具或者无敌道具等,以增加游戏的变化性和策略性。

2. 引入故事情节为了让游戏更具吸引力,我们可以设计一个有趣的故事情节,让玩家在游戏中扮演一个角色,完成一系列任务或者解谜。

3. 跨平台支持为了让更多的玩家能够体验贪吃蛇游戏,我们可以考虑将游戏开发为跨平台应用,支持不同的操作系统和设备。

五、结论贪吃蛇作为一款经典的电子游戏,一直以来都备受欢迎。

通过对游戏设计与开发的探讨,我们可以不断创新和改进,提升游戏的可玩性和娱乐性。

基于51单片机8x8点阵贪吃蛇综合课程设计报告-图文

基于51单片机8x8点阵贪吃蛇综合课程设计报告-图文

基于51单片机8x8点阵贪吃蛇综合课程设计报告-图文基于51单片机8x8点阵贪吃蛇综合课程设计报告-图文《电子线路综合》课程设计报告设计课题:贪吃蛇掌上游戏机毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。

尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。

对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。

作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。

作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。

除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。

对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。

本人完全意识到本声明的法律后果由本人承担。

作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。

本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。

涉密论文按学校规定处理。

作者签名:日期:年月日导师签名:日期:年月日注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。

基于51单片机实现的贪吃蛇游戏机开题报告

基于51单片机实现的贪吃蛇游戏机开题报告
以51单片机开发板为核心,通过操控“上”、“下”、 “左”、“右”按键来操控LCD12864显示屏上的贪吃蛇 行进的方向,获取食物,每获得一个食物,贪吃蛇的长 度将增大,达到一定长度时会进行晋级,同时贪吃蛇运 动速度加快。一旦在贪吃蛇的运动过程中碰到屏幕边缘、 障碍物或是蛇身,贪吃蛇死亡,游戏结束。
• 硬
按键开关
方向按键
单片机 扬声器 LCD12864 LCD1602
• 成员分工
软件程序调试: PCB画图与制版: 焊接电路与调试:
• 时间规划(第一周)
谢谢观看
• 预期实现目标
我们希望能够在单片机设计的贪吃蛇的游戏机中设置游 戏等级,通过LCD1604来显示游戏的等级信息以及游戏 得分等信息,在用户进入欢迎界面后,可以进行自由选 择等级,比如:简单,中等,困难。同时,希望能够在 游戏的开始、暂停和结束环节增加一些背景音乐增加趣 味性。
• 初期产品基本效果图
• 设计意义
贪吃蛇是一款简单的益智游戏,我们可以以51单片机为 核心来设计一个简单的贪吃蛇游戏机,这只是单片机应 用的一个点,由点及面,希望可以更好的将理性与感性 相结合,深入了解和应用相关的专业技术,将之前理论 学习的知识运用到实际中,提高实践动手能力,为将来 科研道路打下坚实基础。
• 预期实现目标
电子工艺实习
基于51单片机实现的贪吃蛇游戏机 Greedy Snake Game Based on 51 MCU
• 设想
在课程设计期间,我们学习了以MPS430单片机为核心的 DC/DC降压器的设计,因而想要进一步了解单片机的使 用,而单片机的基础入门必备的就是51单片机,所以我 们就设想通过51单片机来实现一些有意思的功能。于是 我们就想到了用51单片机来实现小时候的益智游戏—— 贪吃蛇。

c,,版的贪吃蛇开题报告

c,,版的贪吃蛇开题报告

c,,版的贪吃蛇开题报告关于贪吃蛇游戏程序开发的开题报告篇二:贪吃蛇开题报告武汉理工大学本科生毕业设计(论文)开题报告篇二:51贪吃蛇开题报告毕业设计开题报告院校:专业:班级:姓名:指导老师:开题日期:汕头职业技术学院应用电子技术0902班张优亮陈麒2012年1月一、选题的背景与意义单片微型机简称单片机,它是在一片芯片上集成了中央处理部件,存储器、定时器/计数器和各种输入输出设备等接口部件。

单片机是微机发展的一个重要的分支,自问世以来,性能不断地改善和提高,加之单片机具有集成度高、功能强、速度快、体积小、功耗小、使用方便、性能可靠、价格便宜等优点,故在工业控制、数据采集和处理、通信系统、家用电器等领域的应用日益广泛。

国内虽然起步较晚,但单片机的潜力越来越被人们所重视,尤其在工业控制、自动化仪器仪表、计算机系统接口、智能化外设等应用领域发展很快。

它的应用对于产品升级换代、机电一体化都具有重要的意义,在工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要被控参数,被用于各种不同产品的生产。

在通信行业更为广泛利用,手机从只能基本通话,到现在一台手机拥有各种不同的功能,单片机得到了广泛的应用。

手机可以听音乐,听收音机,玩游戏,照相片等等,比较流行的手机游戏贪吃蛇就能用单片机实现。

二、研究的基本内容与拟解决的主要问题贪吃蛇游戏设计主要硬件由单片机最小系统,8*8点阵,4个矩形按键,7805稳压电路,整个的游戏设计外围电路比较少,主要核心在于游戏的程序设计,本设计的游戏规则也参照现在手机流行的贪吃蛇游戏的规则去设计,当蛇吃到食物时,蛇身就会自动增加一格,食物随机出现在屏幕上,当蛇碰到墙壁时,游戏结束。

本设计需要考虑的问题有以下几个:1. 8*8点阵的选择2. 保证游戏的流畅性和及时响应性3. 游戏的设计应该接近人性化贪吃蛇初始化子程序流程图贪吃蛇运行子程序是整个程序设计的核心,首先由系统检测是否有按键按下,确定有按键按下后,外部中断程序自动执行,开始扫描矩阵键盘,得到键值,根据键值判断贪吃蛇要走的方向。

单片机贪食蛇课程设计报告

单片机贪食蛇课程设计报告

单片机课程设计报告目录1设计任务及要求 (1)2总体设计思路及功能描述 (1)3 各部分软硬件设计原理及方案详细说明 (3)3.1 人机接口电路 (3)3.2单片机与PC机通信电路 (5)3.3 其他部分电路说明 (5)3.4 软件模块设计 (6)3.4.1 LCD初始化 (6)3.4.2 键盘扫描程序 (7)3.4.3 显示16*16点阵汉字 (8)3.4.4 食物的随机出现 (8)3.4.58X8点阵LED工作原理说明 (9)3.4.6锁存器(74HC573) (9)3.5软件编译 (11)4 调试的步骤及调试过程中出现的问题以及解决方法 (11)4.1 PROTEUS仿真 (11)4.2 硬件的安装 (12)4.3 调试注意事项 (12)4.3.1 硬件调试注意事项 (12)4.3.2 软件调试注意事项 (12)5 设计心得体会 (13)6 附录 (14)6.1总原理图 (14)6.2单片机程序代码 (14)7 参考文献 (23)正文:1设计任务及要求本设计以51系列单片机STC89C52为控制核心,以点阵液晶显示模块、键盘为人机接口,实现了一个贪食蛇游戏机。

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

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

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

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

2总体设计思路及功能描述如图ChpNum-3所示,贪食蛇软件主要分成三个部分:主程序、外部中断服务程序、定时中断服务程序。

贪吃蛇小游戏的开题报告

贪吃蛇小游戏的开题报告

贪吃蛇小游戏的开题报告1. 简介本文档旨在描述贪吃蛇小游戏的开发计划和相关细节。

贪吃蛇是一款经典的街机游戏,目标是控制一条蛇在有限的区域内吃食物,每吃到一个食物,蛇的长度就会增加。

本文档将讨论游戏的功能、设计和开发计划。

2. 游戏功能贪吃蛇小游戏将具备以下基本功能:•游戏开始界面:显示游戏的标题、开始按钮和游戏规则。

•游戏区域:用于显示贪吃蛇和食物,并呈现在用户面前。

•游戏控制:玩家可以通过键盘控制蛇的移动方向。

•蛇的移动和成长:蛇根据玩家的操作移动,并在吃到食物时增长。

•碰撞检测:蛇与自身或游戏边界碰撞时,游戏结束。

•得分和计时:游戏将计算蛇吃到的食物数量和游戏的持续时间,以供玩家参考。

3. 游戏设计3.1 游戏界面游戏界面将使用简洁的设计,包括开始界面和游戏区域。

3.1.1 开始界面开始界面将显示游戏的标题、开始按钮和游戏规则。

玩家可以在此界面点击开始按钮以启动游戏。

3.1.2 游戏区域游戏区域将使用固定大小的矩形来呈现贪吃蛇和食物。

蛇和食物将以不同的颜色来区分。

3.2 游戏逻辑游戏将包含以下几个关键逻辑:3.2.1 蛇的移动和成长蛇将根据玩家的操作以一定的速度在游戏区域内移动。

当蛇吃到食物时,蛇的长度将增加,并在游戏区域内生成新的食物。

3.2.2 碰撞检测游戏将进行碰撞检测,确保蛇与自身或游戏边界的碰撞能够正确地触发游戏结束。

在游戏结束时,将显示得分和持续时间。

3.2.3 分数计算和计时游戏将记录蛇吃到的食物数量和游戏持续时间,并实时显示给玩家。

计分和计时将作为玩家的参考依据。

4. 开发计划根据以上的游戏功能和设计,我们将按照以下计划进行游戏的开发:1.确定开发工具和技术栈,如选择使用的编程语言(例如Python)、开发框架和相关依赖项。

2.创建游戏的开始界面,并实现开始按钮的功能。

3.创建游戏区域,并实现蛇的移动和成长逻辑。

4.实现碰撞检测逻辑,以及游戏结束时的显示功能。

5.添加分数计算和计时功能,并实时展示给玩家。

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

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

基于单片机的贪吃蛇游戏设计学生姓名:学生学号:院(系):电气信息工程学院年级专业:指导教师:二〇一五年五月摘要摘要在21世纪的今天,人们的生活开始变得更加丰富多彩。

在繁忙的工作之余,娱乐成为人们生活不可或缺的一份子,而游戏作为近年来逐渐兴起的一种娱乐方式,已经越来越受到人们的青睐。

在工作学习之余,通过玩游戏来放松、调节紧张的学习工作压力是不错的选择;然而大型的网络游戏玩起来比较耗费时间,且不能随时随地的玩。

那么如果这时候拥有一款简单易携带,并且能够缓解压力的小游戏将是个不错的选择,所以,我就设计了这样一款简单易携带的经典小游戏——贪吃蛇。

具体实现上,硬件系统平台采用STC89C52R单片机,搭载LCD12864显示屏,构成一个轻巧简单的游戏机系统。

软件系统采用C语言编程,Protues软件设计电路并仿真,KEIL软件进行程序的调试。

最终实现贪吃蛇游戏系统。

本次设计的贪吃蛇游戏,实现了传统意义上的贪吃蛇游戏的特点:蛇吃掉豆子后,得分增加并且蛇身变长;分数到达一定数目进行升级以后,蛇运动速度加快。

而玩家只需利用方向按钮“上↑、下↓、左←、右→”来改变蛇的运行方向,就能达到娱乐的目的,操作非常简单。

关键词:贪吃蛇游戏,STC89C52R单片机,LCD12864,C语言ABSTRACTIn the 21st century today, people's life become more colorful, In the outside of busy work, entertainment become an integral part of people's life, And the game as emerging in recent years, a kind of entertainment, already more and more get the popular of people, In the outside of work and study, through the play games to relax, adjust the pressure of learning is a good choice; However large network game play more time-consuming,And can't play anywhere, anytime. So if this time has a simple is easy to carry, and can ease the pressure of small game will be a good choice. So, I would design such a simple and easy to carry small classic game –the snake game.On the concrete implementation, with STC89C52RCSingle chip microcomputer system platform, with a LCD display, constitute a lightweight simple game system. Software use C language programming, use Protues software Circuit design and simulation, KEIL Software program debugging, Finally realizes the snake game system.The design of the snake game, Achieved in the traditional sense of the snake game features: after the snake to eat beans, scores and snake-body variable length; Score to reach a certain number after the upgrade, the snake's movement speed. Players need to use the direction key "↑,up, down, left, right , to change the running direction of snake, and can achieve the purpose of entertainment ,the operation is very simple.Key words:Greedy Snake Game, STC89C52RCSingle chip microcomputer, LCD12864,C language目录摘要 (I)ABSTRACT (2)1绪论 (6)1.1本课题研究的背景及意义 (6)1.2 国内外研究现状、水平 (6)1.3 本课题的发展趋势 (1)1.4本课题的研究内容和达到的要求 (1)2 方案分析与选择 (2)2.1 系统方案设计 (2)2.2显示器模块设计方案 (2)2.3 按键输入模块设计方案 (3)2.4 本课题的技术指标 (3)2.5 本课题的创新 (3)3 系统硬件设计 (4)3.1单片机的选择与其性能分析 (4)3.1.1 单片机概述 (4)3.1.2 单片机STC89C52RC的介绍 (4)3.1.3 单片机最小系统的介绍 (5)3.2 LCD12864简介 (6)3.2.1 LCD12864概述 (6)3.2.2 LCD128*64的基本特性 (6)3.2.3 模块接口说明 (7)3.2.4 指令说明 (9)3.3 键盘电路的设计 (11)3.4 蜂鸣器电路的设计 (11)3.4.1蜂鸣器简介 (11)3.4.2 蜂鸣器的设计 (12)4 软件系统设计 (13)4.1 游戏设计思想 (13)4.2 主要模块介绍及其功能 (14)4.3 编程语言介绍 (15)4.3.1 C语言简介 (15)4.3.2 C源程序结构特点 (15)4.4 程序设计流程图 (16)5 仿真设计与结果分析 (17)5.1 仿真软件的简介 (17)5.1.1 仿真软件Proteus的简介 (17)5.1.2 keiluVision4编程开发工具的简介 (17)5.2本系统的Proteus仿真设计 (18)5.2.1仿真设计的预期目标 (18)6 PCB设计 (19)6.1 PCB设计软件 (19)6.1.1 PCB原理图设计 (19)6.1.2 PCB板制作方法 (19)6.2 PCB的EMC设计 (1)6.2.1 元器件布局的基本原则 (1)6.2.2 布线设计原则 (1)6.3 印制电路板 (1)6.3.1 印制电路板的结构 (1)6.3.2 印制电路板的种类 (1)6.3.3 印制电路板制作流程 (1)7 系统调试 (2)7.1 硬件调试 (2)7.2 软件调试 (3)7.3 硬件软件联合调试 (3)7.4 调试结果 (3)结论 (7)参考文献 (8)附录一:系统PCB原理图 (9)附录二:系统仿真图 (10)附录三:PCB图 (11)附录四:程序主函数 (1)附录五:原器件清单 (6)致谢 ............................................................................................. 错误!未定义书签。

基于单片机的贪食蛇设计

基于单片机的贪食蛇设计

基于单片机的贪食蛇设计一、引言贪食蛇是一款经典的电子游戏,也是很多人童年的回忆。

在这个项目中,我们将使用单片机设计并实现一个基于单片机的贪食蛇游戏。

通过这个项目,我们可以学习并理解单片机的使用、游戏的逻辑设计和开发过程。

二、设计原理1.单片机选择和引脚配置我们选择使用ATmega16单片机作为主控芯片。

ATmega16是一款8位的RISC微控制器,具有很强的处理能力和丰富的外设资源。

我们将连接LCD显示屏、按键、LED等外设,以实现游戏的显示和交互功能。

2.游戏逻辑设计贪食蛇游戏的逻辑设计包括蛇的移动、食物的生成和判断是否吃到食物等功能。

(1)蛇的移动蛇的移动是游戏的核心逻辑之一、在每一个游戏周期内,蛇的位置将根据用户的输入进行更新。

当蛇吃到食物后,蛇将会增加身体长度,移动的方式则是在蛇头的位置插入新的节点,同时删除蛇尾的节点。

(2)食物的生成食物的生成是贪食蛇游戏的另一个重要功能。

食物的生成应该遵循一定的规则,例如不能生成在蛇身上。

当蛇吃到食物后,游戏分数将增加,并且在一个合适的位置生成新的食物,继续进行游戏。

(3)判断是否吃到食物判断蛇是否吃到食物是游戏进行的关键判断。

当蛇的头部位置与食物位置重合时,就表示蛇吃到了食物,游戏的分数将增加。

3.外设的接口设计我们将使用LCD显示屏、按键和LED等外设与单片机进行交互。

(1)LCD显示屏我们将使用LCD显示屏来显示游戏的界面和分数。

单片机通过并行或者串行接口与LCD进行通讯,将游戏界面和分数进行显示。

(2)按键按键用于控制蛇的移动方向,例如上、下、左、右。

通过检测按键的状态,单片机可以识别用户的输入,并根据输入来更新蛇的位置。

(3)LEDLED用于显示游戏的状态,例如游戏是否开始、是否结束等。

通过控制LED的亮灭,我们可以通过外设来反馈游戏的状态。

三、系统实现1.硬件连接将ATmega16单片机与LCD显示屏、按键和LED进行连接。

根据单片机和外设的引脚映射关系,正确地连接到单片机的对应引脚。

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

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

基于51单⽚机的贪吃蛇游戏设计本科时候做的⼀个课程作业,⾃⼰搭⼀个很简易的电路,⽐较有意思且易上⼿,故将之记录下来。

(全套的仿真及代码,演⽰视频,课程报告以及PPT展⽰上传在。

)⼀. 实验⽬的(1)通过对C51语⾔的理解,编写程序实现对贪吃蛇的有效控制;(2)通过对51单⽚机硬件的学习,学会运⽤⾯包板,独⽴按键、点阵屏等,完成对完整电路的搭建过程;(3)通过对Proteus仿真软件的学习,实现基于STC89C52单⽚机的8*8点阵贪吃蛇的硬件电路仿真。

⼆. 实验介绍贪吃蛇是⼀款经典⼩游戏,其游戏的规则是:玩家通过四个⽅向键来控制蛇的移动,控制其在地图上吃⾖⼦。

吃掉⾖⼦后蛇⾝相应加长,蛇⾝速度加快。

蛇运动过程中撞到墙壁或蛇⾝,则⽴即结束本轮游戏。

三. 实现功能(1)制作⼀个8*8点阵的贪吃蛇游戏;(2)通过LED点阵屏为载体显⽰数据;(3)外接4个独⽴按键作为输⼊端,分别控制蛇的移动⽅向(上、下、左、右);(4)蛇头与墙壁或蛇⾝相撞,随即结束游戏并复位。

四. ⽅案设计在该系统中,硬件部分包括STC89C52单⽚机,8*8点阵屏,4个按键;软件部分是在keil环境下⽤C51语⾔编写,设置蛇的初始段数为2点,并设置有障碍墙壁,游戏结束后⾃动复位。

(1)贪吃蛇的移动在贪吃蛇的移动过程中,每次需要将蛇头要到的下⼀个LED灯点亮,对应蛇尾的LED灯熄灭。

在程序中即是先把蛇尾位置的值传给蛇头的下⼀个位置,然后改变蛇尾的值即可。

蛇头下⼀个位置的确定由蛇头和偏移量来确定,每次通过操作四个独⽴按键来控制蛇步进的偏移量。

因⽽只要将蛇头的位置加上其偏移量的值,即可得到新的蛇头位置。

(2)⾷物的出现在市场上所流⾏的贪吃蛇游戏中,⾷物的出现是⼀种随机⾏为,这在程序中需要做⼀个随机数来⽀撑该过程。

我们组在实验过程中也尝试了该过程,最终选择让⾷物出现在蛇尾的后⼀步,来执⾏整个程序。

与此同时,⾷物出现的位置不能与蛇的位置重合,也不能超出墙外,否则需要重置⾷物。

基于51单片机的贪吃蛇游戏设计(Proteus仿真含完整程序)

基于51单片机的贪吃蛇游戏设计(Proteus仿真含完整程序)

中北大学硬件大型实验说明书学生姓名:学号:学院: 计算机与控制工程学院专业: 计算机科学与技术题目: “贪吃蛇”游戏设计指导教师:职称:2016 年 9 月 14 日目录一、需求分析 (1)二、工具 (1)三、概要设计 (1)四、详细设计(硬件设计和连接部分) (2)1.组件介绍 (2)1)AT89C55单片机 (2)2)Matrix-8X8点阵屏幕 (3)3)74LS154译码器 (3)4)CMOS反相器 (4)5)按键 (4)6)7-SEG BCD (5)2.硬件设计 (5)五、心得体会 (7)附录I(程序) (9)附录II(运行截图) (16)一、需求分析我们的课程设计题目是基于51单片机和一些基础组件设计出一个贪吃蛇游戏。

游戏的实现需要一个16x16的屏幕(由4个8x8的点阵屏组成)和5个按键,其中4个按键控制贪吃蛇的前进方向,另外一个按键可以使游戏重新开始。

另外还需要一个显示BCD码的数字型LED灯组用于记录得分。

贪吃蛇游戏需要实现的功能是:游戏开始时会出现一个长度为init_length的贪吃蛇,和一个随机出现的苹果(必须是贪吃蛇蛇身以外的一个点)。

玩家可以通过按键控制贪吃蛇的前进方向,但是只能转向,而不能向前或者向后,例如:当贪吃蛇向上行走时,只能通过左键和右键来让它左转或者右转,另外两个按键将失灵。

当贪吃蛇吃到苹果后,贪吃蛇尾部将会增加一个点,而屏幕上又会随机出现一个不与贪吃蛇重合的点。

此时积分器加一。

当贪吃蛇马上就要“撞向”屏幕边缘时,会从相反的一边钻出来。

所以“撞墙”并不会导致游戏结束。

而当贪吃蛇吃到自身时则会使游戏结束,并且会自动回到游戏初始化时的状态。

任何时候按下“重新开始”按键都将使游戏回到初始状态。

二、工具51单片机开发板,Keil uVision3,ISIS 7 Professional。

三、概要设计根据我们要实现的功能,我们决定把这次课程设计分成三个部分。

第一个部分为硬件设计和连接部分。

基于单片机的贪吃蛇游戏机设计与实现开题报告

基于单片机的贪吃蛇游戏机设计与实现开题报告

基于单片机的贪吃蛇游戏机设计与实现1设计的背景及目的随着社会的发展,人们生活的步调日益加快,越来越多的人加入了全球化的世界。

人们不再拘泥于一块天地,加班,出差成了现代人不可避免的公务。

而此时一款可以随时随地娱乐的游戏成了必需品。

贪吃蛇这一游戏简单易行,操作方便,娱乐性较强,吸引了不少人。

这一款游戏紧紧地抓住了人们的心理,虽然简单,却其乐无穷,在人们不断追求更多的欲望下,该游戏给人们带来了追逐的快感,以及成功后的满足感,对于一直处于高压下的现代人是很好的放松工具。

如今,游戏机风行的程度,是第一台电子游戏机的研制者诺兰-布什纳尔先生始料不及的。

在全世界最大的城市,直至最小的村庄,从纽约最辉煌的游乐场,到高加索最小的乡镇儿童娱乐点,在千家万户,正在进行着千千万万这样的“战斗”,伴随着无数成功与失败,兴奋与懊丧。

游戏机带来了一个全球性的疯狂症,其他任何娱乐与之相比都望尘莫及。

然而,究竟是什么原因使游戏机如此风行呢?在回顾了游戏机发展简史之后,我们不难悟出,技术进步在游戏机发展过程中起到了极大的促进作用。

当前科学技术飞速发展,特别是微电子技术,计算机软件与应用技术的发展,使得人们的日常生活丰富多彩。

单片微型计算机(简称单片机)作为微型计算机家族的一员,以其独特的结构,良好的稳定性,便宜的价格在嵌入式领域广泛应用。

与传统的PC上设计的贪吃蛇游戏不同,本次作者利用Proteus硬件仿真软件,采用单片机、液晶显示屏、扬声器、按键等搭建硬件平台,C语言编程,实现便携地贪吃蛇游戏。

随着深蓝计算机与人的棋类对决,到现在的PSP游戏机或者是家庭用的X-BOX游戏机,游戏机的技术是日益的发展、进步。

但是,技术进步绝不是游戏机风行的唯一因素。

随着终端设备开发能力的加强,作为娱乐终端的游戏机也得到了很大程度的发展。

只有得到了游戏终端技术的支持,才能做出更新、更高难的游戏。

这也加速了游戏机在全球风行程度,所以对于游戏机的研究和设计具有很重要的意义,这也是本课题研究的来源。

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

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

基于单片机的贪吃蛇游戏设计学生姓名:学生学号:院(系):电气信息工程学院年级专业:指导教师:二〇一五年五月摘要在21世纪的今天,人们的生活开始变得更加丰富多彩。

在繁忙的工作之余,娱乐成为人们生活不可或缺的一份子,而游戏作为近年来逐渐兴起的一种娱乐方式,已经越来越受到人们的青睐。

在工作学习之余,通过玩游戏来放松、调节紧张的学习工作压力是不错的选择;然而大型的网络游戏玩起来比较耗费时间,且不能随时随地的玩。

那么如果这时候拥有一款简单易携带,并且能够缓解压力的小游戏将是个不错的选择,所以,我就设计了这样一款简单易携带的经典小游戏——贪吃蛇。

具体实现上,硬件系统平台采用STC89C52R单片机,搭载LCD12864显示屏,构成一个轻巧简单的游戏机系统。

软件系统采用C语言编程,Protues软件设计电路并仿真,KEIL软件进行程序的调试。

最终实现贪吃蛇游戏系统。

本次设计的贪吃蛇游戏,实现了传统意义上的贪吃蛇游戏的特点:蛇吃掉豆子后,得分增加并且蛇身变长;分数到达一定数目进行升级以后,蛇运动速度加快。

而玩家只需利用方向按钮“上↑、下↓、左←、右→”来改变蛇的运行方向,就能达到娱乐的目的,操作非常简单。

关键词:贪吃蛇游戏,STC89C52R单片机,LCD12864,C语言ABSTRACTIn the 21st century today, people's life become more colorful, In the outside of busy work, entertainment become an integral part of people's life, And the game as emerging in recent years, a kind of entertainment, already more and more get the popular of people, In the outside of work and study, through the play games to relax, adjust the pressure of learning is a good choice; However large network game play more time-consuming,And can't play anywhere, anytime. So if this time has a simple is easy to carry, and can ease the pressure of small game will be a good choice. So, I would design such a simple and easy to carry small classic game –the snake game.On the concrete implementation, with STC89C52RCSingle chip microcomputer system platform, with a LCD display, constitute a lightweight simple game system. Software use C language programming, use Protues software Circuit design and simulation, KEIL Software program debugging, Finally realizes the snake gamesystem.The design of the snake game, Achieved in the traditional sense of the snake game features: after the snake to eat beans, scores and snake-body variable length; Score to reach a certain number after the upgrade, the snake's movement speed. Players need to use the direction key "↑,up, down, left, right , to change the running direction of snake, and can achieve the purpose of e n t e r t a i n m e n t,t h e o p e r a t i o n i s v e r ysimple.Key words:Greedy Snake Game, STC89C52RCSingle chip microcomputer, LCD12864,C language目录摘要 .......................................................................................................... I I ABSTRACT .. (1)1绪论 (2)1.1本课题研究的背景及意义 (2)1.2 国内外研究现状、水平 (2)1.3 本课题的发展趋势 (3)1.4本课题的研究内容和达到的要求 (3)2 方案分析与选择 (2)2.1 系统方案设计 (2)2.2显示器模块设计方案 (2)2.3 按键输入模块设计方案 (3)2.4 本课题的技术指标 (3)2.5 本课题的创新 (3)3 系统硬件设计 (4)3.1单片机的选择与其性能分析 (4)3.1.1 单片机概述 (4)3.1.2 单片机STC89C52RC的介绍 (5)3.1.3 单片机最小系统的介绍 (6)3.2 LCD12864简介 (7)3.2.1 LCD12864概述 (7)3.2.2 LCD128*64的基本特性 (7)3.2.3 模块接口说明 (8)3.2.4 指令说明 (10)3.3 键盘电路的设计 (13)3.4 蜂鸣器电路的设计 (14)3.4.1蜂鸣器简介 (14)3.4.2 蜂鸣器的设计 (14)4 软件系统设计 (16)4.1 游戏设计思想 (16)4.2 主要模块介绍及其功能 (18)4.3 编程语言介绍 (18)4.3.1 C语言简介 (18)4.3.2 C源程序结构特点 (19)4.4 程序设计流程图 (19)5 仿真设计与结果分析 (20)5.1 仿真软件的简介 (20)5.1.1 仿真软件Proteus的简介 (20)5.1.2 keiluVision4编程开发工具的简介 (2)5.2本系统的Proteus仿真设计 (2)5.2.1仿真设计的预期目标 (2)6 PCB设计 (2)6.1 PCB设计软件 (2)6.1.1 PCB原理图设计 (2)6.1.2 PCB板制作方法 (2)6.2 PCB的EMC设计 (2)6.2.1 元器件布局的基本原则 (2)6.2.2 布线设计原则 (2)6.3 印制电路板 (2)6.3.1 印制电路板的结构 (2)6.3.2 印制电路板的种类 (2)6.3.3 印制电路板制作流程 (2)7 系统调试 (2)7.1 硬件调试 (2)7.2 软件调试 (1)7.3 硬件软件联合调试 (1)7.4 调试结果 (1)结论 (3)参考文献 (4)附录一:系统PCB原理图 (5)附录二:系统仿真图 (2)附录三:PCB图 (1)附录四:程序主函数 (2)附录五:原器件清单 (2)致谢............................................................................... 错误!未定义书签。

基于某单片机地贪吃蛇游戏设计

基于某单片机地贪吃蛇游戏设计

基于单片机的贪吃蛇游戏设计学生姓名:学生学号:院(系):电气信息工程学院年级专业:指导教师:二〇一五年五月摘要在21世纪的今天,人们的生活开始变得更加丰富多彩。

在繁忙的工作之余,娱乐成为人们生活不可或缺的一份子,而游戏作为近年来逐渐兴起的一种娱乐方式,已经越来越受到人们的青睐。

在工作学习之余,通过玩游戏来放松、调节紧张的学习工作压力是不错的选择;然而大型的网络游戏玩起来比较耗费时间,且不能随时随地的玩。

那么如果这时候拥有一款简单易携带,并且能够缓解压力的小游戏将是个不错的选择,所以,我就设计了这样一款简单易携带的经典小游戏——贪吃蛇。

具体实现上,硬件系统平台采用STC89C52R单片机,搭载LCD12864显示屏,构成一个轻巧简单的游戏机系统。

软件系统采用C语言编程,Protues软件设计电路并仿真,KEIL软件进行程序的调试。

最终实现贪吃蛇游戏系统。

本次设计的贪吃蛇游戏,实现了传统意义上的贪吃蛇游戏的特点:蛇吃掉豆子后,得分增加并且蛇身变长;分数到达一定数目进行升级以后,蛇运动速度加快。

而玩家只需利用方向按钮“上↑、下↓、左←、右→”来改变蛇的运行方向,就能达到娱乐的目的,操作非常简单。

关键词:贪吃蛇游戏,STC89C52R单片机,LCD12864,C语言ABSTRACTIn the 21st century today, people's life become more colorful, In the outside of busy work, entertainment become an integral part of people's life, And the game as emerging in recent years, a kind of entertainment, already more and more get the popular of people, In the outside of work and study, through the play games to relax, adjust the pressure of learning is a good choice; However large network game play more time-consuming, And can't play anywhere, anytime. So if this time has a simple is easy to carry, and can ease the pressure of small game will be a good choice. So, I would design such a simple and easy to carry small classic game –t h e s n a k e g a m e.On the concrete implementation, with STC89C52RCSingle chip microcomputer system platform, with a LCD display, constitute a lightweight simple game system. Software use C language programming, use Protues software Circuit design and simulation, KEIL Software program debugging, Finally realizes the snake gamesystem.The design of the snake game, Achieved in the traditional sense of the snake game features: after the snake to eat beans, scores and snake-body variable length; Score to reach a certain number after the upgrade, the snake's movement speed. Players need to use the direction key "↑,up, down, left, right , to change the running direction of snake, and can achieve the purpose of entertainment ,the operation is very simple.Key words:Greedy Snake Game, STC89C52RCSingle chip microcomputer, LCD12864,C language目录摘要 (I)ABSTRACT (2)1绪论 (2)1.1本课题研究的背景及意义 (2)1.2 国内外研究现状、水平 (2)1.3 本课题的发展趋势 (3)1.4本课题的研究内容和达到的要求 (3)2 方案分析与选择 (2)2.1 系统方案设计 (2)2.2显示器模块设计方案 (2)2.3 按键输入模块设计方案 (3)2.4 本课题的技术指标 (3)2.5 本课题的创新 (3)3 系统硬件设计 (4)3.1单片机的选择与其性能分析 (4)3.1.1 单片机概述 (4)3.1.2 单片机STC89C52RC的介绍 (4)3.1.3 单片机最小系统的介绍 (5)3.2 LCD12864简介 (6)3.2.1 LCD12864概述 (6)3.2.2 LCD128*64的基本特性 (7)3.2.3 模块接口说明 (7)3.2.4 指令说明 (9)3.3 键盘电路的设计 (11)3.4 蜂鸣器电路的设计 (11)3.4.1蜂鸣器简介 (11)3.4.2 蜂鸣器的设计 (12)4 软件系统设计 (13)4.1 游戏设计思想 (13)4.2 主要模块介绍及其功能 (14)4.3 编程语言介绍 (15)4.3.1 C语言简介 (15)4.3.2 C源程序结构特点 (16)4.4 程序设计流程图 (16)5 仿真设计与结果分析 (17)5.1 仿真软件的简介 (17)5.1.1 仿真软件Proteus的简介 (17)5.1.2 keiluVision4编程开发工具的简介 (17)5.2本系统的Proteus仿真设计 (2)5.2.1仿真设计的预期目标 (2)6 PCB设计 (2)6.1 PCB设计软件 (2)6.1.1 PCB原理图设计 (2)6.1.2 PCB板制作方法 (2)6.2 PCB的EMC设计 (2)6.2.1 元器件布局的基本原则 (2)6.2.2 布线设计原则 (2)6.3 印制电路板 (2)6.3.1 印制电路板的结构 (2)6.3.2 印制电路板的种类 (2)6.3.3 印制电路板制作流程 (2)7 系统调试 (2)7.1 硬件调试 (2)7.2 软件调试 (2)7.3 硬件软件联合调试 (2)7.4 调试结果 (2)结论 (3)参考文献 (4)附录一:系统PCB原理图 (5)附录二:系统仿真图 (2)附录三: PCB图 (2)附录四:程序主函数 (1)附录五:原器件清单 (2)致谢............................................ 错误!未定义书签。

基于51单片机的贪吃蛇游戏的开题报告

基于51单片机的贪吃蛇游戏的开题报告

基于51单片机的贪吃蛇游戏的开题报告
一、项目背景
贪吃蛇是一个经典的游戏,深受广大玩家的喜爱。

本项目基于51单片机实现贪吃蛇游戏,旨在通过此项目掌握嵌入式系统设计及单片机编程技术。

二、项目概述
本项目的主要功能是实现贪吃蛇游戏。

通过51单片机实现游戏中的各种功能,包括蛇的移动,食物的产生,得分统计等。

同时,还需要设计合适的硬件电路,包括数码管、按键等,实现游戏的交互。

三、项目计划
1. 硬件设计
设计所需硬件电路,包括数码管、按键等,以实现游戏的交互。

2. 软件设计
(1)初始化
初始化游戏画面,初始化蛇的位置和方向,初始化食物位置,初始化得分等变量。

(2)蛇的移动
实现蛇的移动,根据按键输入确定蛇的方向,并判断是否碰到边界或自己的身体,以及是否吃到食物等。

(3)食物的产生
通过随机函数产生食物的位置,并将其显示在屏幕上。

(4)得分统计
统计蛇吃到的食物数量,每吃一个食物得分加一。

(5)游戏结束
当蛇碰到边界或自己的身体时,游戏结束,显示得分。

3. 调试测试
完成软硬件设计后,进行测试调试,确保游戏功能正常。

四、预期成果
通过本项目,期望掌握51单片机编程技术,熟练掌握嵌入式系统设计,实现一个基于51单片机的贪吃蛇游戏。

五、参考文献
1.《51单片机原理与应用》
2.《嵌入式系统开发技术详解》
3.《C语言程序设计实践》。

单片机贪吃蛇课程设计报告模板

单片机贪吃蛇课程设计报告模板

电气与信息工程学院单片机课程设计报告一、设计任务及要求基本功能:制作一个8*8点阵的贪吃蛇游戏,系统以单片机的C语言的软件设计,系统通过LED点阵屏为载体显示数据,并用五个输入端表示五个控制键(上下左右及加速)。

系统硬件部分由STC89C52RC单片机,8*8点阵屏,5个按键,软件部分在keil环境下用C51语言编写,包括游戏初始化蛇的节数,以及障碍墙壁,游戏结束时自动复位。

具体要求:1、用四个按钮控制贪吃蛇的行径,一个按钮控制贪吃蛇的加速,蛇的初始长度为2点,设置墙壁。

2、蛇吃到长度为1点的食物时,自身长度增加1点。

2、速度按钮带有一次加速,按两下速度按钮蛇的行进速度回到初始值。

3、当蛇碰到墙壁或自己的身体时游戏结束。

4、用proteus设计,仿真基于STC89C52RC单片机的8x8点阵贪吃蛇的硬件电路。

5、游戏结束,系统自动复位。

二、硬件电路设计本系统以STC89C52RC为核心,设置12MHz的晶振,使得单片机有合理的运行速度。

LED点阵屏通过LED(发光二极管)组成,以灯珠亮灭来显示程序的运行情况,是模块化的显示组件,本设计采用8*8共阳红色点阵显示屏,用来显示贪吃蛇的游戏画面。

五个独立按键控制蛇的游走方向(上下左右)和加速减速的功能。

贪吃蛇是一款经典的小游戏,玩家通过按键操控贪吃蛇不断地吃食物,蛇身逐渐伸长,当蛇碰到蛇身和墙壁时游戏结束。

需要注意的是实际元件中,点阵的封装不尽相同,因此需要测试出每个引脚的功能,以便正确连线。

注意,每个像素点的额定电压在3v左右,电压过大将会彻底损坏。

三、系统软件设计软件方面采用了C51编写代码,代码编写模块如下图:核心代码主要为游戏处理、信息处理和按键处理。

编写游戏的功能代码,先定义游戏的数据结构和常量。

其中食物的数据结构采用结构体定义,两个unsigned char变量分别定义为食物的横纵坐标;蛇的身体定义为长度最大值为20的数组,游戏中贪吃蛇长度达到39,游戏通关结束。

基于51单片机8x8点阵贪吃蛇综合课程设计报告-图文

基于51单片机8x8点阵贪吃蛇综合课程设计报告-图文

基于51单片机8x8点阵贪吃蛇综合课程设计报告-图文《电子线路综合》课程设计报告设计课题:贪吃蛇掌上游戏机毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。

尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。

对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。

作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。

作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。

除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。

对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。

本人完全意识到本声明的法律后果由本人承担。

作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。

本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。

涉密论文按学校规定处理。

作者签名:日期:年月日导师签名:日期:年月日注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词 4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论 7)参考文献 8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。

基于单片机的贪食蛇设计

基于单片机的贪食蛇设计

基于单片机的贪食蛇设计一题目要求:使用8051单片机和点阵显示屏实现贪吃蛇的基本功能二题目分析:1,贪吃蛇的基本功能: A,能够蛇形移动B,能够任意改变方向C,能够吃到食物并增长D,撞到四边的墙蛇死F,吃到自己蛇死E,放置新的食物2,拓展部分: A,能够过关B,在游戏开始和结束都显示一些相关花样C,过关能显示关数D,增加串口通信功能F,增加红外遥控功能3,贪吃蛇关键算法分析:A,蛇身的形成:使用20个RAM来存储蛇身X坐标,20个RAM来存储蛇身Y坐标显示时只须将X坐标输出到行,Y坐标输出列即可B,蛇的方向:使用两个存储单元分别来存储代表方向的X坐标和Y坐标向上: X=0,Y=1向下: X=0,Y=-1向左: X=-1,Y=0向右: X=1,Y=0C,蛇的移动:只须将蛇头的X坐标和Y坐标分别与方向的X坐标和Y坐标相加原来蛇身各节的前一节X从标和Y坐标分别与后一节的X坐标和Y坐标交换即可D,吃食物:只要判断蛇头的X,Y坐标是否与食物的X,Y坐标相同,相同则判断吃到食物,反之,没吃到食物F,吃到食物蛇增长一节:当判断为吃到食物后只须让蛇移动时多交换一次即可实现 G,判断蛇是否撞墙:只要判断蛇头的X坐标或Y坐标是否等于点阵最外边时的X或Y坐标H,判断蛇是否吃到自己:只须将蛇头X,Y坐标与每一节蛇身的X,Y坐标进行比较如果相等到则视为吃到自己I,放置新的食物:根据游戏者控制蛇吃到食物的时间的不同而产生的坐标,是随机的食物三功能描述:开机即显示“SNAKE”,当按下KEY5则显示蛇的形状,再按下KEY5进入游戏,即可开始游戏,此时即可通按下KEY1,KEY2,KEY3,KEY4来控制上,下,左,右,此时按下KEY5可退出游戏,上述按键也可用红外遥控来实现.此时吃到食物即可增长一节,撞到边框即蛇死,吃到自己蛇死,死亡则显示”GAMEOVER”,长到20节即过一关,并显示关数,10过完则重新开始.四系统硬件设计: 系统主原理图:五系统软件设计: A 流程序图设计1, 系统主流程图:2, 按键子程序流程图:3, 蛇移动子程序流程图:4, 判断蛇是否死亡子程序流程图:5, 蛇吃食物子程序流程图:6, 过关子程序流程图:7, 蛇显示子程序流程图:六程序清单:;=================================================================================================;红外遥控--串口--贪吃蛇;---------2008/9/1--------------------;============================================================================== ===================;硬件: P0,P2显示码输出---行, P1.0-P1.3接74LS154为点阵列扫描信号; P1.4-P1.7为4个独立键盘; P3.2 INT0为启停键; P3.3 INT1为红外接收; P3.0 P3.1为串口;============================================================================== ===================;字节定义区;============================================================================== ===================SNAKE_TAIL_X EQU 27H ;蛇尾X坐标暂存器SNAKE_TAIL_Y EQU 28H ;蛇尾Y坐标暂存器FOOD_X EQU 29H ;食物X坐标FOOD_Y EQU 2AH ;食物Y坐标SNAKE_CHANG EQU 2BH ;蛇的节数PUT_FOOD EQU 2CH ;放食物随机码产生器PASS_NUM EQU 2DH ;过关数目TIME EQU 2EH ;过关时间调节暂存器TIME_400 EQU 32H ;400延时XX EQU 33H ;方向X坐标暂存YY EQU 34H ;方向Y坐标暂存X EQU 35H ;方向X坐标Y EQU 36H ;方向Y坐标SNAKE_TOU_X EQU 40H ;蛇头 X坐标存储单元SNAKE_TOU_Y EQU 54H ;蛇头 Y坐标存储单元SNAKE_SHEN1_X EQU 41H ;蛇身第一节 X坐标存储单元SNAKE_SHEN1_Y EQU 55H ;蛇身第一节 Y坐标存储单元SNAKE_SHEN2_X EQU 42H ;蛇身第二节 X坐标存储单元SNAKE_SHEN2_Y EQU 56H ;蛇身第二节 Y坐标存储单元H_Y_8 EQU 37H ;Y坐标大于8的寄存器L_Y_8 EQU 38H ;Y坐标小于8的寄存器IR_COM1 EQU 39H ;红外接收操作码寄存器IR_COM2 EQU 3AH ;红外接收操作反码寄存器;============================================================================== ===================;位定义区;============================================================================== ==================B_GAME_ON_OFF BIT 00H ;启停标志位BT0 BIT 01H ;定时器0中断标志B_KEYTEST BIT 02H ;有键按下标志位B_SNAKE_DED BIT 03H ;蛇死亡标志位B_SNAKE_FOOD BIT 04H ;蛇吃到实物标志位B_PASS BIT 05H ;过关标志位IRIN BIT P3.3;============================================================================== =================;游戏开始;============================================================================== =================ORG 00HJMP START_1ORG 03HJMP GAME_ON_OFF ;INT0启停中断ORG 0BHJMP T0_SET ;定时器T0中断ORG 13HJMP IR_IN ;INT1红外接收ORG 23HJMP RI_SET ;串口通信ORG 30H;============================================================================== =================;初始化蛇总长20节;============================================================================== =================START_1:MOV PASS_NUM,#0MOV TIME,#20 ;20*20MS=400MS 移动一次CLR B_PASSSTART:MOV TIME_400,TIMEMOV SNAKE_TOU_X,#8 ;刚进入游戏模式时蛇为三节,初始 X,Y 坐标MOV SNAKE_TOU_Y,#8MOV SNAKE_SHEN1_X,#7MOV SNAKE_SHEN1_Y,#8MOV SNAKE_SHEN2_X,#6MOV SNAKE_SHEN2_Y,#8MOV R0,#SNAKE_SHEN2_X ;第三节之后的蛇身 X,Y 坐标清0CLE_SNAKE_SHEN_X_17:INC R0MOV @R0,#0CJNE R0,#53H,CLE_SNAKE_SHEN_X_17MOV R0,#SNAKE_SHEN2_YCLE_SNAKE_SHEN_Y_17:INC R0MOV @R0,#0CJNE R0,#67H,CLE_SNAKE_SHEN_Y_17MOV IR_COM1,#00H ;红外接收寄存器MOV IR_COM2,#00HMOV PUT_FOOD,#0 ;初始化随机码产生器归0MOV X,#1 ;初始化方向向右MOV Y,#0MOV FOOD_X,#4 ;第一颗食物X,Y坐标MOV FOOD_Y,#13MOV SNAKE_CHANG,#3 ;初始化蛇长为3节CLR BT0 ;T0中断标志位初始化CLR B_KEYTEST ;键盘测试标志位初始化CLR B_SNAKE_DED ;蛇死亡标志位初始化CLR B_SNAKE_FOOD ;蛇吃到食物标志位初始化CLR B_GAME_ON_OFF ;启停位清零SETB EA ;开中断SETB EX0 ;开INT0中断SETB EX1 ;开外部中断INT1SETB IT0 ;INT0负边缘触发CLR IT1 ;INT1边缘触发方式MOV TMOD,#01H ;定时器0工作方式SETB ET0 ;开定时器0SETB ES ;开串口中断MOV TMOD,#20H ;定时器1用作串口通信波特率产生器ANL PCON,#3FH ;SMOD=0 波特率不倍增MOV TH1,#0FDH ;波特率为9600 MOV TL1,#0FDHSETB TR1 ;开始定时MOV SCON,#50H ;串口设为工作模式1 接收MOV SP,#70H ;堆栈初始化JB B_PASS,GOTO_GAME ;过关则直接跳入游戏;============================================================================== ================;等待游戏开始并显示SNAKE 启停键按下则显示PLAYGAME 并进入游戏模式;============================================================================== ================SNAKE:CALL DISP_SNAKE ;等待开始时显示SNAKEJNB B_GAME_ON_OFF,SNAKE ;启停标志位为0表示启停键没按下继续等待CLR B_GAME_ON_OFF ;清除启停标志位SHEXIN:CALL DISP_SHEXIN ;启停键按下显示PLAYGAME进入游戏JNB B_GAME_ON_OFF,SHEXINCLR B_GAME_ON_OFF ;清除启停标志位GOTO_GAME:CLR B_PASSMOV DPTR,#65536-20000 ;定时器0定时初值MOV TH0,DPHMOV TL0,DPLSETB TR0 ;开定时器;============================================================================== ================;游戏主程序判断键盘, 移动, 是否死亡, 吃食, 显示;============================================================================== ================MAIN_GAME:JNB BT0,MAIN_GAME ;等待T0中断CLR BT0 ;清除T0中断标志CALL KEYTEST ;调用键盘测试程序JNB B_KEYTEST,NOKEY ;判断是否有键按下CALL READKEY_X_Y ;有键按下调用键盘操作子程序CJNE A,#0F0H,XX_X_YY_Y ;再次判断是否有键按下JMP NOKEYXX_X_YY_Y: ;有键按下将取得的方向值送入 X,YMOV X,XXMOV Y,YYNOKEY:DJNZ TIME_400,MAINDISP ;等待400MS到MOV TIME_400,TIME ;重送初值CLR P3.7INC PUT_FOOD ;对移动次数进行计数从而产生随机码CALL SNAKE_MOVE ;调用蛇身移动子程序==================1CALL SNAKE_DED ;判断蛇是否死亡子程序================2JB B_SNAKE_DED,GAMEOVER ;死亡则显示GAMEOVERCALL SNAKE_FOOD ;判断是否吃到食物子程序==============3JNB B_SNAKE_FOOD,MAINDISPCALL SNAKE_ZHANGCHANG ;吃到食物则增长一节并重放食物========4JNB B_PASS,MAINDISPCLR TR0CALL SNAKE_PASSMOV A,PASS_NUMCJNE A,#10,GOTO_STARTJMP START_1CALL GAME_DISP ;显示蛇==============================5JB B_GAME_ON_OFF,GAMEOVERJMP MAIN_GAME ;继续循环GAMEOVER:CLR TR0CLR B_GAME_ON_OFFCALL DISP_GAMEOVER ;启停键在游戏中按下则结束显示GAMEOVERJNB B_GAME_ON_OFF,GAMEOVER ;再次按下启停键则进入SNAKE进行等待CLR B_GAME_ON_OFF ;清除启停标志位GOTO_START:JMP START;============================================================================== =================;T0中断服务子程序重送初值置标志位;============================================================================== =================T0_SET:MOV DPTR,#65536-20000MOV TH0,DPHMOV TL0,DPLSETB BT0RETI;============================================================================== ==================;INTO中断服务子程序启 , 停;============================================================================== ==================GAME_ON_OFF: ;INTO中断服务子程序CLR EX0JB P3.2,OUTCALL DEL_10MSJB P3.2,OUTSETB B_GAME_ON_OFF ;置启停标志位为1表示按下OUT:SETB EX0;============================================================================== =================;键盘测试子程序有键按下则 B_KEYTEST=1;============================================================================== ================KEYTEST:SETB B_KEYTESTMOV A,P1ANL A,#0F0HCJNE A,#0F0H,KEYTEST_OUTCLR B_KEYTESTKEYTEST_OUT:RET;============================================================================== =================;读键值并得出方向 ,即 X, Y的值;============================================================================== =================READKEY_X_Y:JNB P1.4,PD_UP_DOWN1 ;判断是否为向上键按下 JMP KEY_DOWNPD_UP_DOWN1:MOV A,YCJNE A,#0,KEY_DOWNMOV YY,#1 ;向上键按下则置方向标志 MOV XX,#0JMP READKEY_OUTKEY_DOWN:JNB P1.7,PD_UP_DOWN2 ;判断是否为向下键按下 JMP KEY_LEFTPD_UP_DOWN2:MOV A,YCJNE A,#0,KEY_LEFTMOV YY,#-1 ;向下键按下则置方向标志 MOV XX,#0JMP READKEY_OUTKEY_LEFT:JNB P1.5,PD_LEFT_RIGHT1 ;判断是否为向左键按下 JMP KEY_RIGHTPD_LEFT_RIGHT1:MOV A,XCJNE A,#0,KEY_RIGHTMOV XX,#-1 ;向左键按下则置方向标志 MOV YY,#0JMP READKEY_OUTKEY_RIGHT:JNB P1.6,PD_LEFT_RIGHT2 ;判断是否为向右键按下 JMP READKEY_OUTPD_LEFT_RIGHT2:MOV A,XCJNE A,#0,READKEY_OUTMOV XX,#1 ;向右键按下则置方向标志 MOV YY,#0READKEY_OUT:MOV A,P1 ;去抖ANL A,#0F0HRET;============================================================================== =================;蛇移动子程序;============================================================================== =================SNAKE_MOVE:MOV R1,SNAKE_CHANGMOV A,SNAKE_TOU_XADD A,X ;蛇头X坐标加上方向X坐标MOV R0,#SNAKE_TOU_XMOVE_CHANGE_X: ;依次将前一个蛇身X坐标转向下一蛇身X坐标XCH A,@R0INC R0DJNZ R1,MOVE_CHANGE_X;MOV SNAKE_TAIL_X,AMOV R1,SNAKE_CHANGMOV A,SNAKE_TOU_YADD A,Y ;蛇头Y坐标加上方向Y坐标MOV R0,#SNAKE_TOU_YMOVE_CHANGE_Y: ;依次将前一个蛇身Y坐标转向下一蛇身Y坐标XCH A,@R0INC R0DJNZ R1,MOVE_CHANGE_Y;MOV SNAKE_TAIL_Y,ARET;============================================================================== =================;蛇显示子程序;============================================================================== =================GAME_DISP:MOV R0,#SNAKE_TOU_X ;从蛇头开始显示 MOV R1,#SNAKE_TOU_YGAME_DISP_20:MOV A,@R0 ;取X坐标 ORL A,#0F0H ;高位为键盘因此屏蔽掉 MOV P1,A ;X坐标输出INC R0 ;下一节蛇身的X坐标MOV A,@R1 ;Y坐标到R2MOV R2,ACALL COUNT_Y ;计算出Y坐标的高8位和低8位MOV P0,H_Y_8 ;输出Y坐标的高8位MOV P2,L_Y_8 ;输出Y坐标的低8位INC R1 ;取下一节的Y坐标CALL DEL ;延时MOV P0,#00HMOV P2,#00HCJNE R0,#53H,GAME_DISP_20 ;20节蛇身是否全部显示完 MOV A,FOOD_X ;显示食物ORL A,#0F0HMOV P1,AMOV R2,FOOD_YCALL COUNT_YMOV P0,H_Y_8MOV P2,L_Y_8CALL DELMOV P0,#00HMOV P2,#00HRET;==============================================================================================; Y坐标计算子程序 Y坐标大于8的存在H_Y_8中 , 小于8的存在L_Y_8中;============================================================================== ==================COUNT_Y:MOV H_Y_8,#00H ;初始化Y坐标的高8位和低8位MOV L_Y_8,#00HCJNE R2,#0,COUNT_Y_H ;Y坐标为0则不要调整JMP COUNT_Y_OUTCOUNT_Y_H:CLR CMOV A,#8SUBB A,R2JNC COUNT_Y_L ;判断Y坐标是否大于8 CLR C ;大于8则调整MOV A,R2SUBB A,#8MOV R2,A ;调整后的Y坐标存回R2SETB CMOV A,#00HCOUNT_Y_H_1: ;将Y坐标高8位转化为可输出的字节存入H_Y_8RLC ADJNZ R2,COUNT_Y_H_1MOV H_Y_8,AJMP COUNT_Y_OUTCOUNT_Y_L: ;Y坐标小于8则执行下面的操作SETB CMOV A,#00HCOUNT_Y_L_1: ;将Y坐标低8位转化为可输出的字节存入L_Y_8RLC ADJNZ R2,COUNT_Y_L_1MOV L_Y_8,ACOUNT_Y_OUT:RET;===============================================================================================;判断蛇是否死亡子程序死亡则置位B_SNAKE_DED=1;============================================================================== ==================SNAKE_DED:SETB B_SNAKE_DEDMOV A,#-1 ;判断蛇头是否撞到左边的墙CJNE A,SNAKE_TOU_X,X_16JMP SNAKE_DED_OUTX_16:MOV A,#16 ;判断蛇头是否撞到右边的墙CJNE A,SNAKE_TOU_X,Y_0JMP SNAKE_DED_OUTY_0:MOV A,#0 ;判断蛇头是否撞到下边的墙CJNE A,SNAKE_TOU_Y,Y_17JMP SNAKE_DED_OUTY_17:MOV A,#17 ;判断蛇头是否撞到上边的墙CJNE A,SNAKE_TOU_Y,SNAKE_DED_ZISHENJMP SNAKE_DED_OUTSNAKE_DED_ZISHEN: ;没撞到墙则判断是否撞到自已MOV R0,#SNAKE_TOU_XMOV R1,#SNAKE_TOU_YSNAKE_DED_1:INC R1INC R0MOV A,@R0CJNE A,SNAKE_TOU_X,SNAKE_DED_19MOV A,@R1CJNE A,SNAKE_TOU_Y,SNAKE_DED_19JMP SNAKE_DED_OUTSNAKE_DED_19:CJNE R0,#53H,SNAKE_DED_1SNAKE_NDED_OUT:CLR B_SNAKE_DEDSNAKE_DED_OUT:RET;================================================================================================;判断蛇是否吃到食物吃到食物B_SNAKE_FOOD=1;================================================================================================SNAKE_FOOD:CLR B_SNAKE_FOODMOV A,FOOD_XCJNE A,SNAKE_TOU_X,SNAKE_FOOD_OUT ;食物的X坐标是否与蛇头X坐标重合MOV A,FOOD_YCJNE A,SNAKE_TOU_Y,SNAKE_FOOD_OUT ;食物的Y坐标是否与蛇头Y坐标重合SETB B_SNAKE_FOODSNAKE_FOOD_OUT:RET;================================================================================================;吃到食物子程序增加一节并重新放食;================================================================================================SNAKE_ZHANGCHANG:CLR B_PASSINC SNAKE_CHANG ;吃到实物增长一节MOV FOOD_X,#0 ;消掉实物MOV FOOD_Y,#0MOV A,SNAKE_CHANGCJNE A,#20,PUT_FOOD_COUNTSETB B_PASS;放新的食物PUT_FOOD_COUNT: ;放新食物SETB P3.7MOV A,PUT_FOOD ;随机码即移动次数到AMOV B,#10DIV AB ;随机数除10取余MOV R3,A ;整数部分存入A,便于下一次除MOV A,#2 MUL AB ;余数乘以2MOV R2,A ;存入R2SUBB_1_X:MOV A,R2SUBB A,#17 ;得到的余数不能大于15DEC R2JNC SUBB_1_XCJNE R2,#-1,R2_FOOD_XINC R2R2_FOOD_X:MOV FOOD_X,R2 ;将算得的随机数存入食物的X坐标;得出食物Y坐标MOV A,R3 ;将上一次除完后的整数放入AMOV B,#10DIV AB ;再除以10取余MOV A,#2MUL AB ;余数乘以2 MOV R2,A ;存入R2CJNE A,#0,SUBB_1_Y ;Y坐标不能等于0INC R2 ;等于0则将其加1JMP R2_FOOD_YSUBB_1_Y:MOV A,R2SUBB A,#18 ;y坐标不能大于16DEC R2JNC SUBB_1_YCJNE R2,#0,R2_FOOD_Y ;防止Y坐标变0INC R2R2_FOOD_y:MOV FOOD_Y,R2 ;将算得的随机数存入食物的Y坐标;判断食物是否与蛇身重叠MOV R0,#SNAKE_TOU_X ;将蛇头的坐标转入R0,R1 MOV R1,#SNAKE_TOU_YPD_FOOD:MOV A,@R0MOV B,@R1INC R0INC R1CJNE R0,#53H,PD_FOOD_1 ;蛇身是否都比较完JMP PUT_FOOD_OUTPD_FOOD_1:CJNE A,FOOD_X,PD_FOOD ;依次取出各节蛇身与食物坐标进行比较,重叠则重放食物MOV A,BCJNE A,FOOD_Y,PD_FOODMOV A,#13ADD A,PUT_FOOD ;重放食物时修正随机数MOV PUT_FOOD,ACJNE A,#255,PUT_FOOD_COUNT ;修正后的随机数不能等于255,等于则减1DEC AMOV PUT_FOOD,AJMP PUT_FOOD_COUNTPUT_FOOD_OUT:RET;============================================================================== ==================;过关子程序每过一关显示GOOD 并显示关数;============================================================================== ==================SNAKE_PASS:MOV A,TIMESUBB A,#1 ;每过一关则提高一点速度MOV TIME,AINC PASS_NUM ;关数加1 MOV A,PASS_NUMCJNE A,#10,PASS_GO ;到了10关则退出JMP PASS_OUTPASS_GO: ;不同的关数显示不同的数字CLR CRLC AMOV DPTR,#TAB_PASSJMP @A+DPTRTAB_PASS:JMP PASS_OUTJMP PASS_1JMP PASS_2JMP PASS_3JMP PASS_4JMP PASS_5JMP PASS_6JMP PASS_7JMP PASS_8JMP PASS_9MOV DPTR,#TAB_PASS_1 MOV 31H,#42CALL DISP_MOVE_LJMP PASS_OUTPASS_2:MOV DPTR,#TAB_PASS_2 MOV 31H,#46CALL DISP_MOVE_LJMP PASS_OUTPASS_3:MOV DPTR,#TAB_PASS_3 MOV 31H,#46CALL DISP_MOVE_LJMP PASS_OUTPASS_4:MOV DPTR,#TAB_PASS_4 MOV 31H,#46CALL DISP_MOVE_LJMP PASS_OUTPASS_5:MOV DPTR,#TAB_PASS_5 MOV 31H,#46CALL DISP_MOVE_LJMP PASS_OUTPASS_6:MOV DPTR,#TAB_PASS_6 MOV 31H,#46CALL DISP_MOVE_LJMP PASS_OUTPASS_7:MOV DPTR,#TAB_PASS_7 MOV 31H,#46CALL DISP_MOVE_LJMP PASS_OUTPASS_8:MOV DPTR,#TAB_PASS_8 MOV 31H,#46CALL DISP_MOVE_LJMP PASS_OUTPASS_9:MOV DPTR,#TAB_PASS_9 MOV 31H,#46CALL DISP_MOVE_LJMP PASS_OUTRET;============================================================================== =================;串口中断服务子程序;============================================================================== =================RI_SET:CLR RI ;清除接收标志MOV A,SBUF ;读串口内容CJNE A,#00H,UPSETB B_GAME_ON_OFF ;收到00H则置启停标志JMP RI_OVERUP: ;收到01H则向上CJNE A,#01H,DOWNMOV A,YCJNE A,#0,DOWNMOV X,#0MOV Y,#1JMP RI_OVERDOWN: ;收到02H则向下CJNE A,#02H,LEFTMOV A,YCJNE A,#0,LEFTMOV X,#0MOV Y,#-1JMP RI_OVERLEFT: ;收到03H则向左CJNE A,#03H,RIGHTMOV A,XCJNE A,#0,RIGHTMOV X,#-1MOV Y,#0JMP RI_OVERRIGHT: ;收到04H则向右CJNE A,#04H,RI_OVERMOV A,#XCJNE A,#0,RI_OVERMOV X,#1MOV Y,#0RI_OVER:RETI;============================================================================== =================;外部中断1服务子程序红外接收;============================================================================== =================IR_IN:CLR EA ;关闭所有中断PUSH ACC ;保护现场PUSH PSWPUSH DPH ;保护DPTR的值PUSH DPLSETB RS0 ;转入工作寄存器区1MOV P0,#00H ;清屏MOV P2,#00HMOV R0,#IR_COM1 ;红外接收数据保存区地址到R0I1: JNB IRIN,I2 ;等待引导码出现JMP IR_IN_OUTI2: MOV R2,#40 ;等待2.8MSI2_0: CALL DEL_014DJNZ R2,I2_0JB IRIN,I1 ;IRIN状态为1则视为不是引导码,则继续返回等待引导码出现I2_1: JB IRIN,I3 ;IRIN状态为0则视为是引导码,等待高电平的结果码出现CALL DEL_014JMP I2_1I3: MOV R3,#0LL: JNB IRIN,I4 ;等待结果码结束CALL DEL_014JMP I3I4: JB IRIN,I5 ;结果码结束等待操作码的'0','1'编码的高电平出现;从而根据高电平的长短来判断是0码还是1码CALL DEL_014JMP I4I5: MOV R2,#0 ;高电平时间0.14MS的计数器,每过0.14MS则加1LL1: CALL DEL_014JB IRIN,ADD_R2 ;等待IRIN变为低电平,不为低电平则R2加1LL2:MOV A,#8CLR CSUBB A,R2 ;高电平大于1.12MS则为'1',高电平小于1.12MS则为'0'MOV A,@R0RRC A ;将得到的这位码移入红外接收存储单元MOV @R0,AINC R3CJNE R3,#8,LL ;判断8次则接收完1个字节 MOV R3,#0INC R0CJNE R0,#3BH,LL ;总共接收两个码JMP IR_IN_KEY ;两个码全部接收完后则转去执行ADD_R2:INC R2 ;高电平时间0.14MS的计数器,每过0.14MS则加1CJNE R2,#30,LL1 ;时间过长则判为1JMP LL2IR_IN_KEY:;MOV A,IR_COM1;CLR C;SUBB A,#15;JNC IR_IN_OUT ;排除其它红外遥控器的干扰MOV A,IR_COM2CPL ACJNE A,IR_COM1,IR_IN_OUT ;与原码不同则视为接收出错退出MOV A,IR_COM1CLR C ;键值乘2RLC AMOV DPTR,#KEY_TABJMP @A+DPTR ;散转分支KEY_TAB:JMP KEY0JMP KEY1JMP KEY2JMP KEY3JMP KEY4JMP KEY5JMP KEY6JMP KEY7JMP KEY8JMP KEY9JMP KEY10JMP KEY11JMP KEY12JMP KEY13JMP KEY14KEY0: SETB B_GAME_ON_OFF ;0键设启停 JMP IR_IN_OUTKEY1: JMP IR_IN_OUTKEY2: MOV A,X ;2键向右 CJNE A,#0,IR_IN_OUTMOV X,#1MOV Y,#0JMP IR_IN_OUTKEY3: JMP IR_IN_OUTKEY4: JMP IR_IN_OUTKEY5: JMP IR_IN_OUTKEY6: JMP IR_IN_OUTKEY7: MOV A,Y ;7键向下 CJNE A,#0,IR_IN_OUTMOV X,#0MOV Y,#-1JMP IR_IN_OUTKEY8: MOV A,Y ;8键向上 CJNE A,#0,IR_IN_OUTMOV X,#0MOV Y,#1JMP IR_IN_OUTKEY9: JMP IR_IN_OUTKEY10: JMP IR_IN_OUTKEY11: JMP IR_IN_OUTKEY12: MOV A,X ;12键向左 CJNE A,#0,IR_IN_OUTMOV X,#-1MOV Y,#0JMP IR_IN_OUTKEY13: JMP IR_IN_OUTKEY14: JMP IR_IN_OUTIR_IN_OUT:POP DPL ;弹出堆栈POP DPHPOP PSWPOP ACCCLR RS0 ;工作寄存区转回0SETB EA ;开中断RETI ;中断返回;============================================================================== ==================;显示 SNAKE PLAYGAME GAMEOVER 子程序;============================================================================== ==================DISP_SNAKE: ;显示SNAKEMOV DPTR,#TAB_SNAKE ;SNAKE表首址MOV 31H,#100 ;SNAKE共100个字节CALL DISP_MOVE_L ;调用左移显示RETDISP_SHEXIN: ;显示PLAYGAME MOV DPTR,#TAB_SHEXINMOV 31H,#64CALL DISP_MOVE_LRETDISP_GAMEOVER: ;显示GAMEOVERMOV DPTR,#TAB_GAMEOVERMOV 31H,#144CALL DISP_MOVE_LRETDISP_MOVE_L: ;左移显示子程序MOV A,#00H ;清屏MOV P0,AMOV P2,AMOV 30H,#00H ;取码指针MOV R2,#0F0H ;列扫描初值MEIMU:MOV R3,#50 ;每屏等待时间TL:MOV R4,#16 ;16列MOV R5,30H ;扫描初值到R5XL:JB B_GAME_ON_OFF,OVER ;判断启停键是否按下CALL QM ;调用取码子程序INC R2 ;扫描下一列DJNZ R4,XL ;16列是否完MOV R2,#0F0H ;重置列扫描初值DJNZ R3,TL ;每屏时间是否到MOV A,30H ;取码指针加2实现左移ADD A,#2MOV 30H,AXRL A,31H ;所有的码是否取完JNZ MEIMU ;没取完继续OVER:RET ;取完退出QM: ;取码子程序MOV P1,R2 ;列扫描MOV A,R5 ;取码MOVC A,@A+DPTRMOV P0,A ;输出到P0INC R5 ;取下一个码MOV A,R5MOVC A,@A+DPTRMOV P2,A ;输出到P2INC R5 ;取下一个码MOV R6,#100 ;等待DJNZ R6,$MOV A,#00H ;清屏MOV P0,AMOV P2,ARET ;退出DEL: MOV R6,#5 ;1MS延时LOOP1: MOV R7,#98DJNZ R7,$DJNZ R6,LOOP1RETDEL_014:MOV R5,#1 ;IR解码使用DEL0: MOV R6,#2DEL1: MOV R7,#32DEL2: DJNZ R7,DEL2DJNZ R6,DEL1DJNZ R5,DEL0RETDEL_10MS: ;10MS延时MOV R6,#20LOOP2: MOV R7,#248DJNZ R7,$DJNZ R6,LOOP2RETTAB_SNAKE: ;显示SNAKE表DB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00H;------------------------------------------------------------------------------ ; 源文件 / 文字: S; 宽×高(像素) : 6×10;------------------------------------------------------------------------------ DB 071H,0C0H,088H,040H,088H,040H,084H,040HDB 084H,040H,0E3H,080H;------------------------------------------------------------------------------ ; 源文件 / 文字: N; 宽×高(像素) : 7×;------------------------------------------------------------------------------ DB 080H,040H,0FFH,0C0H,0E0H,040H,01CH,000HDB 083H,080H,0FFH,0C0H,080H,000H;------------------------------------------------------------------------------ ; 源文件 / 文字: A; 宽×高(像素) : 7×;------------------------------------------------------------------------------ DB 000H,040H,003H,0C0H,03EH,040H,0C2H,000HDB 03EH,040H,003H,0C0H,000H,040H;------------------------------------------------------------------------------ ; 源文件 / 文字: K; 宽×高(像素) : 7×;------------------------------------------------------------------------------ DB 080H,040H,0FFH,0C0H,088H,040H,01CH,000HDB 0A3H,040H,0C0H,0C0H,080H,040H;------------------------------------------------------------------------------ ; 源文件 / 文字: E; 宽×高(像素) : 7×;------------------------------------------------------------------------------ DB 080H,040H,0FFH,0C0H,088H,040H,088H,040HDB 0BEH,040H,080H,040H,040H,080HTAB_SHEXIN: ;显示PLAYGAME表DB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00H;------------------------------------------------------------------------------ ; 源文件 / 文字: 口; 宽×高(像素) : 16×16;------------------------------------------------------------------------------ DB 000H,000H,00CH,018H,01CH,03CH,03EH,0ECHDB 03FH,0D8H,01FH,038H,00EH,060H,000H,0D8HDB 001H,0BCH,001H,0ECH,000H,0D8H,000H,030HDB 000H,060H,000H,060H,000H,030H,000H,010HDBTAB_GAMEOVER: ;显示GAMEOVER表DB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00H;------------------------------------------------------------------------------ ; 源文件 / 文字: G; 宽×高(像素) : 7×10;------------------------------------------------------------------------------ DB 03FH,000H,040H,080H,080H,040H,080H,040HDB 082H,040H,0E3H,080H,002H,000H;------------------------------------------------------------------------------ ; 源文件 / 文字: A; 宽×高(像素) : 7×10;------------------------------------------------------------------------------DB 000H,040H,003H,0C0H,03EH,040H,0C2H,000HDB 03EH,040H,003H,0C0H,000H,040H;------------------------------------------------------------------------------ ; 源文件 / 文字: M; 宽×高(像素) : 7×10;------------------------------------------------------------------------------ DB 080H,040H,0FFH,0C0H,0F0H,000H,00FH,0C0HDB 0F0H,000H,0FFH,0C0H,080H,040H;------------------------------------------------------------------------------ ; 源文件 / 文字: E; 宽×高(像素) : 7×10;------------------------------------------------------------------------------ DB 080H,040H,0FFH,0C0H,088H,040H,088H,040HDB 0BEH,040H,080H,040H,040H,080H;------------------------------------------------------------------------------ ; 源文件 / 文字: O; 宽×高(像素) : 7×10;------------------------------------------------------------------------------ DB 03FH,000H,040H,080H,080H,040H,080H,040HDB 080H,040H,040H,080H,03FH,000H;------------------------------------------------------------------------------ ; 源文件 / 文字: V; 宽×高(像素) : 7×10;------------------------------------------------------------------------------ DB 080H,000H,0F0H,000H,08FH,000H,000H,0C0HDB 08FH,000H,0F0H,000H,080H,000H;------------------------------------------------------------------------------ ; 源文件 / 文字: E; 宽×高(像素) : 7×10;------------------------------------------------------------------------------ DB 080H,040H,0FFH,0C0H,088H,040H,088H,040HDB 0BEH,040H,080H,040H,040H,080H;------------------------------------------------------------------------------ ; 源文件 / 文字: R; 宽×高(像素) : 7×10;------------------------------------------------------------------------------ DB 080H,040H,0FFH,0C0H,088H,040H,08CH,000HDB 08BH,000H,070H,0C0H,000H,040HTAB_PASS_1:DB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00H;------------------------------------------------------------------------------ ; 源文件 / 文字: 1; 宽×高(像素) : 5×;------------------------------------------------------------------------------ DB 040H,020H,040H,020H,0FFH,0E0H,000H,020HDB 000H,020HTAB_PASS_2:DB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00H;------------------------------------------------------------------------------ ; 源文件 / 文字: 2; 宽×高(像素) : 7×11;------------------------------------------------------------------------------ DB 030H,020H,040H,060H,080H,060H,080H,0A0HDB 081H,020H,0C2H,020H,07CH,020HTAB_PASS_3:DB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00H;------------------------------------------------------------------------------ ; 源文件 / 文字: 3; 宽×高(像素) : 7×11;------------------------------------------------------------------------------ DB 001H,080H,060H,0C0H,080H,020H,084H,020HDB 084H,020H,0CCH,020H,076H,0C0HTAB_PASS_4:DB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00H;------------------------------------------------------------------------------ ; 源文件 / 文字: 4; 宽×高(像素) : 7×;------------------------------------------------------------------------------ DB 003H,000H,00DH,000H,011H,000H,021H,020HDB 0FFH,0E0H,0FFH,0E0H,001H,020HTAB_PASS_5:DB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00H;------------------------------------------------------------------------------ ; 源文件 / 文字: 5; 宽×高(像素) : 7×10;------------------------------------------------------------------------------ DB 001H,080H,0F1H,0C0H,090H,040H,090H,040HDB 090H,040H,090H,040H,08CH,0C0HTAB_PASS_6:DB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00H;------------------------------------------------------------------------------ ; 源文件 / 文字: 6; 宽×高(像素) : 7×12;------------------------------------------------------------------------------ DB 00FH,080H,03FH,0E0H,064H,060H,048H,030HDB 088H,030H,088H,020H,084H,060HTAB_PASS_7:DB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00H;------------------------------------------------------------------------------ ; 源文件 / 文字: 7; 宽×高(像素) : 7×11;------------------------------------------------------------------------------ DB 0C0H,000H,080H,000H,080H,060H,083H,0E0HDB 087H,000H,098H,000H,0A0H,000HTAB_PASS_8:DB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00H;------------------------------------------------------------------------------ ; 源文件 / 文字: 8; 宽×高(像素) : 7×11;------------------------------------------------------------------------------ DB 021H,0C0H,07AH,040H,08CH,020H,088H,020HDB 084H,020H,08CH,020H,072H,040HTAB_PASS_9:DB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00H;------------------------------------------------------------------------------ ; 源文件 / 文字: 9; 宽×高(像素) : 7×11;------------------------------------------------------------------------------ DB 07CH,000H,0C6H,020H,082H,020H,082H,020HDB 082H,020H,0C6H,040H,07FH,080HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00HEND。

单片机小游戏实训报告

单片机小游戏实训报告

一、实训目的通过本次单片机小游戏实训,旨在掌握单片机的基本原理和编程方法,提高动手实践能力,锻炼团队合作精神。

本次实训以设计一款基于单片机的简单游戏为主,通过对硬件电路的搭建和软件编程的实现,完成游戏功能的开发。

二、实训内容1. 游戏选题与规则本次实训设计一款基于单片机的贪吃蛇游戏。

游戏规则如下:(1)玩家通过四个方向键控制蛇的移动,蛇在地图上吃豆子,吃掉豆子后蛇身相应加长,速度加快。

(2)蛇运动过程中,若撞到墙壁或蛇身,则游戏结束,并自动复位。

(3)游戏目标:在限定时间内,获取最高分数。

2. 硬件电路搭建(1)单片机:选用STC89C52单片机作为游戏的核心控制单元。

(2)显示屏:选用88点阵屏作为游戏画面的显示载体。

(3)按键:选用4个独立按键,分别控制蛇的上下左右移动。

(4)电源:选用5V直流电源为电路供电。

3. 软件编程(1)编程环境:使用Keil C51进行软件编程。

(2)编程语言:采用C语言进行编程。

(3)主要功能模块:a. 初始化模块:初始化单片机、显示屏、按键等硬件资源。

b. 游戏主循环模块:实现蛇的移动、豆子的生成、分数计算等功能。

c. 显示模块:将蛇、豆子、分数等信息显示在88点阵屏上。

d. 检测模块:检测按键状态,控制蛇的移动。

e. 结束模块:游戏结束后,自动复位并显示最终分数。

三、实训过程1. 设计阶段(1)分析游戏规则,确定游戏功能模块。

(2)选择合适的硬件设备,绘制电路原理图。

(3)编写软件需求规格说明书。

2. 搭建电路阶段(1)根据电路原理图,搭建硬件电路。

(2)连接单片机、显示屏、按键等硬件设备。

3. 编程阶段(1)在Keil C51环境中编写程序。

(2)编译、调试程序,确保程序正常运行。

4. 调试阶段(1)检查硬件电路连接是否正确。

(2)调试程序,优化游戏性能。

(3)测试游戏功能,确保游戏流畅、稳定。

四、实训成果1. 成功设计并实现了一款基于单片机的贪吃蛇游戏。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于单片机的贪吃蛇游戏机设计与实现
1设计的背景及目的
随着社会的发展,人们生活的步调日益加快,越来越多的人加入了全球化的世界。

人们不再拘泥于一块天地,加班,出差成了现代人不可避免的公务。

而此时一款可以随时随地娱乐的游戏成了必需品。

贪吃蛇这一游戏简单易行,操作方便,娱乐性较强,吸引了不少人。

这一款游戏紧紧地抓住了人们的心理,虽然简单,却其乐无穷,在人们不断追求更多的欲望下,该游戏给人们带来了追逐的快感,以及成功后的满足感,对于一直处于高压下的现代人是很好的放松工具。

如今,游戏机风行的程度,是第一台电子游戏机的研制者诺兰-布什纳尔先生始料不及的。

在全世界最大的城市,直至最小的村庄,从纽约最辉煌的游乐场,到高加索最小的乡镇儿童娱乐点,在千家万户,正在进行着千千万万这样的“战斗”,伴随着无数成功与失败,兴奋与懊丧。

游戏机带来了一个全球性的疯狂症,其他任何娱乐与之相比都望尘莫及。

然而,究竟是什么原因使游戏机如此风行呢?在回顾了游戏机发展简史之后,我们不难悟出,技术进步在游戏机发展过程中起到了极大的促进作用。

当前科学技术飞速发展,特别是微电子技术,计算机软件与应用技术的发展,使得人们的日常生活丰富多彩。

单片微型计算机(简称单片机)作为微型计算机家族的一员,以其独特的结构,良好的稳定性,便宜的价格在嵌入式领域广泛应用。

与传统的PC上设计的贪吃蛇游戏不同,本次作者利用Proteus硬件仿真软件,采用单片机、液晶显示屏、扬声器、按键等搭建硬件平台,C语言编程,实现便携地贪吃蛇游戏。

随着深蓝计算机与人的棋类对决,到现在的PSP游戏机或者是家庭用的X-BOX游戏机,游戏机的技术是日益的发展、进步。

但是,技术进步绝不是游戏机风行的唯一因素。

随着终端设备开发能力的加强,作为娱乐终端的游戏机也得到了很大程度的发展。

只有得到了游戏终端技术的支持,才能做出更新、更高难的游戏。

这也加速了游戏机在全球风行程度,所以对于游戏机的研究和设计具有很重要的意义,这也是本课题研究的来源。

传统的贪吃蛇游戏只有单纯的吃豆子,得分,升级以后蛇运动的速度加快等功能。

本次作者对贪吃蛇游戏进行了升级,出上述基本功能外,针对现有硬件条件,加入地图选择,游戏中途暂停与退出,各种背景音的播放(包括吃豆子背景音、错误提示背景音、升级背景音、游戏结束背景音、游戏通关背景音等),背景音静音与否的选择
等,使玩家的游戏体验更上一层楼。

2设计方案
2.1主要任务
组建遥控器控制电路,要求通过遥控器的方向键控制贪吃蛇游戏。

(类似于贪吃蛇游戏)
2.2设计思路
①此实验我们采用38k的红外对LCD控制,通过红外接收模块对遥控数据进行采集,MCU中心模块主要对采集数据进行判断,并相应的去控制LCD的显示模块。

②软件设计流程:
2.2.1主控制器的选择
STC90C51是标准的40引脚双列直插式集成电路芯如图2-1所示,AT89C51是一种带64K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

STC90C51具有以下标准功能:64K 字节Flash,1280 字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,2个16 位定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口,片内晶振及时钟电路。

另外,STC90C51 可降至0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。

空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

图2-1 AT89S52的引脚图
(1)管脚功能
①输入/输出口
P0.0~P0.7 P0口8位双向口
P1.0~P1.7 P1口8位双向口
P2.0~P2.7 P2口8位双向口
P3.0~P3.7 P3口8位双向口
②ALE 地址锁存控制信号
在系统扩展时,ALE用于控制把P0口输出的低8位地址送入锁存器锁存起来,以实现低位地址和数据的分时传送。

此外由于ALE是以六分之一晶振频率的固定频率输出的正脉冲,因此可作为外部时钟或外部定时脉冲使用。

③PSEN 外部程序存储器读选通信号
在读外部ROM时PSEN有效(低电平),以实现外部ROM单元的读操作。

④EA 访问程序存储器控制信号
当EA 信号为低电平时,对ROM的读操作限定在外部程序存储器;而当EA
信号为高电平时,则对ROM的读操作是从内部程序存储器开始,并可延续至外部程序存储器。

⑤RST 复位信号
当输入的复位信号延续2个机器周期以上高电平时即为有效,用以完成单片机的复位操作。

⑥XTAL1和XTAL2 外接晶体引线端
当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。

⑦Vss地线
Vcc +5V电源
(2)常见的第二功能信号
①P3口线的第二功能
P3的8条口线都定义有第二功能如表2-1所示
表2-1 端口第二功能
(3)EPROM存储器程序固化所需要的信号
有内部EPROM的单片机芯片(例如80C51),为写入程序需提供专门的编程脉冲和编程电源,它们也是由信号引脚以第二功能的形式提供的,即:编程脉冲:30脚(ALE/ PROG)
编程电压(25V):31脚(EA/Vpp)
2.2.2 液晶屏的选择
采用320*240LCD,根据CPU的指令进行输出。

320*240的分辨率对于小游戏来讲已经是非常高的分辨率了,足以满足小游戏的显示要求,使图像清晰,色彩丰富!
2.2.3红外的选择
采用38K的红外遥控和接收,红外遥控的特点是不影响周边环境、不干扰其它电器设备。

由于其无法穿透墙壁,故不同房间的家用电器可使用通用的遥控而不会产生相互干扰;电路调试简单,只要按给定电路连接无误,一般不需任何调试即可投入工作;编解码容易,可进行多路遥控。

2.3软硬件设计
硬件:主要实现红外的发射与接收,单片机最小系统使红外接受管工作及实现彩屏的输出;
软件:实现红外的解码,实现按键映射到游戏屏幕的动作,实现游戏规则的判定等等。

3设计的预期效果
贪吃蛇在封闭围墙里,通过按键盘控制贪吃蛇的向上、下、左、右及加速运动。

游戏过程中的食物随机产生,如果蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记1 分;达到一定长度时会晋级,同时贪吃蛇运动速度加快;如果蛇在移动中撞到墙或者蛇头撞倒自己身体,则游戏结束,游戏结束后输出得分及英雄榜。

4设计的工作进度安排
毕业设计工作进度安排如表4.1所示。

表4.1 设计进度安排
参考文献
[1] 李建忠.单片机原理及应用.西安:西安电子科技大学出版社,2002
[2] 李广弟.单片机基础.北京:北京航空航天大学出版社,1994
[3] 刘云,罗永能.基于51单片机的贪食蛇游戏机开发[J].福建:福建电脑. 2009(07)
[4] 高凌琴,陈青华.俄罗斯方块游戏关键技术探讨[J].浙江:信息技术与信息化. 2008(02)
[5] 周润景.Proteus在MCS-51&ARM7系统中的应用百例[M]. 电子工业出版社 , 2006
[6] 李华主.MCS-51系列单片机实用接口技术[M]. 北京航空航天大学出版社. 1993 基于无线传输的游戏机操控系统设计[J]. 张昊晔. 信息技术. 2008(07)
[7]基于单片机的“乒乓球”游戏机智能控制系统[J]. 王仁宝,欧阳名三,齐娟. 微计算机信息. 2007(20)
[8] 可荣硕,可荣博.单片机控制的扫雷游戏[J]. 网络与信息. 2007(10)
[9] 王晓威,唐叔进,邢瑞.基于单片机和液晶显示器的游戏开发[J]. 电子世界. 2005(07)
[10] 史良.LCD12864显示模块与微处理器的接口设计[J]. 矿业安全与环保. 1999(05)
[11] 秦海港,苏杭,于复生,耿宗亮,刘玉梅.基于STC89C51的电磁比例阀控制系统的设计[J]. 山东建筑大学学报. 2008(03)
[12] 胡代弟,齐公博.用SPCE061A单片机实现俄罗斯方块游戏[J]. 电子制作. 2008(10)。

相关文档
最新文档