单片机贪吃蛇课程设计报告
工程设计课题报告 贪吃蛇游戏机

工程设计课题报告基于STC89C51单片机+LCD12864的贪吃蛇游戏机姓名:学号:电话: Mail:年月号基于STC89C51单片机+LCD12864的贪吃蛇游戏机一、需求分析随着社会的发展,人们生活的步调日益加快,越来越多的人加入了全球化的世界。
人们不再拘泥于一小块天地,加班,出差成了现代人不可避免的公务。
而此时一款可以随时随地娱乐放松的游戏成了必需品。
贪吃蛇这一游戏简单易行,操作方便,娱乐性较强,吸引了不少人。
这一款游戏紧紧地抓住了人们的心理,虽然简单,却其乐无穷,在人们不断追求更多的欲望下,该游戏给人们带来了追逐的快感和成功后的满足感,对于一直处于高压下的现代人是很好的放松工具。
当前科学技术飞速发展,特别是微电子技术,计算机软件与应用技术的发展,使得人们的日常生活丰富多彩。
单片微型计算机(简称单片机)作为微型计算机家族的一员,以其独特的结构,良好的稳定性,便宜的价格在嵌入式领域广泛应用。
在实际设计过程中,首先是查询资料拟定题目,然后利用protel进行电路仿真,在仿真无误之后,采用单片机、液晶显示屏、按键等搭建硬件平台,C语言编程,实现便携地贪吃蛇游戏。
单片微型计算机(Single.Chip Microcomputer)简称单片机(MCU)。
一块小小的单片机芯片,就相当于一台微型计算机,它具有体积小、重量轻、单一电源、低功耗、功能强、价格低廉、运算速度快、抗干扰能力强、可靠性高等特点。
单片机发展很快,硬件方面日趋多样化,4位、8位、16位、32位等型号共同并存,在不同的领域存在,每一种单片都有它所擅长的领域,如PIC系列较多用于电话机、玩具,51系列较多用于设备控制和仪器,DSP较多用于DVD、通讯等。
软件方面发展主要为汇编语言、C语言、嵌入式操作系统。
速度、稳定性特别要求的场合较多采用汇编语言和C语言,如电机控制,UPS控制、信号处理等。
功能复杂、内容较多的系统多采用嵌入式操作系统,如PDA、电子词典、游戏机等。
基于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第一章绪论第一章绪论“贪食蛇”又称为“贪吃蛇”,是一种益智小游戏。
基于STM32--μCOS-II贪吃蛇的设计课程设计

邯郸学院课程设计题目基于STM32--μC/OS-II贪吃蛇的设计基于STM32--μC/OS-II贪吃蛇的设计摘要进入新世纪的TFT液晶显示屏的技术和产业都取得了长足的发展,作为重要的现代信息,发布媒体之一TFT液晶显示屏在证券交易、金融、交通、体育、广告等领域被广泛的应用。
伴随社会化信息的推进,TFT液晶屏技术也在不断地推陈出新,应用领域愈加广泛。
现基于STM32的TFT液晶显示可以更好的满足各种需求,也更便于操作和实现。
基于STM32在TFT液晶屏幕上可显示文本及图形,包括汉字和时钟显示。
关键词:TFT液晶显示 STM32开发板μC/OS-II 贪吃蛇目录摘要 (2)前言 (4)1背景介绍 (4)1.1选题背景 (4)1.2 MiniSTM32开发板介绍 (4)2系统硬件设计 (5)2.1开发板简介 (5)2.2 LED 灯 (7)2.3按键 (11)2.4 TFTLCD 模块 (12)3系统软件设计 (16)3.1 LED驱动 (16)3.2按键驱动 (16)3.3 TFT-LCD驱动 (18)3.4贪吃蛇实现C语言代码 (20)3.5 uC/OS-II软件设计 (26)结论 (30)参考文献 (31)前言目前已有超过85%的无线通信设备采用了ARM技术,ARM以其高性能和低成本,在该领域的地位日益巩固。
ARM在此方面的应用如:手提式计算机、移动电话、PDA等。
随着宽带技术的推广,采用ARM技术的ADSL芯片正逐步获得竞争优势。
此外,ARM在语音及视频处理上进行了优化,并获得广泛支持。
UC/OS-II由Micrium公司提供,是一个可移植、可固化的、可裁剪的、占先式多任务实时内核,它适用于多种微处理器,微控制器和数字处理芯片(已经移植到超过100种以上的微处理器应用中)。
同时,该系统源代码开放、整洁、一致,注释详尽,适合系统开发。
UC/OS-II已经通过联邦航空局(FAA)商用航行器认证,符合航空无线电技术委员会(RTCA)DO-178B标准。
单片机课程设计贪吃蛇说明书

单片机课程实训作品说明书姓名:李兆基完成时间:2016年7月3日一、 作品说明介绍1. 作品名称:贪吃蛇简易游戏机2. 作品实现功能:a) 按上、下、左、右键控制蛇身改变方向;b) 蛇头与食物碰撞时“吃掉”食物,使蛇身变长; c) 复位键使游戏重新开始;d) 暂停/继续键可以暂停、继续游戏3. 选择目的:巩固单片机课程所学知识,真正做到学有所用二、 作品操作介绍1. 作品外观图① ②点阵屏:显示地图、蛇以及食物③STC12C5A60S2单片机:控制整个作品,可以烧录不同的程序 ④微动开关1:向上的按键,用于改变蛇的方向 ⑤微动开关2:向下的按键,用于改变蛇的方向 ⑥微动开关3:向左的按键,用于改变蛇的方向①②③④⑤⑥⑦ ⑧ ⑨⑩ ⑪⑫⑬⑭⑮⑦微动开关4:向右的按键,用于改变蛇的方向⑧微动开关5:复位按键,按下后游戏复位,重新开始⑨微动开关6:暂停/继续按键,控制游戏暂停/继续⑩自锁开关:实现整体的电源总控制(断负)⑪晶振、电容:用于单片机起振,单片机的最小时钟电路⑫排针:用于连接电源正负极以及RXD和TXD⑬电源指示灯:通电时点亮⑭8个1KΩ电阻:限制电流大小⑮10个0Ω电阻:做跳线用2.作品功能介绍及操作说明a)给游戏机上电①将电源正极接在排针处标有VCC的位置②将电源负极接在排针处标有GND的位置③按下自锁开关完成上电b)让贪吃蛇改变方向①按向上键:蛇身向上②按向下键:蛇身向下③按向左键:蛇身向左④按向右键:蛇身向右c)游戏暂停/继续、复位①按暂停/继续键:游戏暂停/继续②按复位键:游戏复位,重新开使三、作品制作说明1.电路原理图2.元件名称型号数量(个)单片机STC12C5A60S2 1单片机底座40引脚 1点阵屏8*8 2微动开关5*5 6晶振12MHz 1电容30pf 2电阻1KΩ8电阻10KΩ 1电阻0Ω10自锁开关3*3 1排针直针4(根)LED 红色 1杜邦线1组4(根)单面挂锡玻纤板1洞洞板10CM*14CM电池盒 1 3.PCBa)正面图(见附录1)b)F5图(见附录2)c)F6图(见附录3)四、产品控制顺序/*******************************************名称:贪吃蛇简易游戏机制作人:李兆基制作时间:2016.6.28修改时间:2016.7.1 (加入吃食物蛇身变长功能)2016.7.3 (处理程序兼容细节)*******************************************/#include<stc12c5a60s2.h>#include<stdlib.h>unsigned char map[16]; //定义一个MAP地图unsigned char line; //列unsigned char snake[45][2]; //定义蛇的大小unsigned char game_reset; //游戏复位unsigned char foodx,foody; //食物的位置sbit Key_left=P3^2; //左sbit Key_up=P3^3; //上sbit Key_down=P3^4; //下sbit Key_right=P3^5; //右sbit Key_start=P3^7; //开始/暂停sbit Key_reset=P3^6; //复位/****************按键所对应的位置***************/void CreateFood(){unsigned char i;i=0;RESET:foodx=rand()%6+1;//rand()函数随即产生食物的横坐标(1~6)foody=rand()%14+1;//rand()函数随即产生食物的纵坐标(1~14)while(!(snake[i][0]==snake[i][1]&&snake[i][0]==44)) //找蛇尾(遍历蛇){if(snake[i][0]==foodx&&snake[i][1]==foody)goto RESET;//如果产生的食物在蛇的节点上,则重新生成食物i++;}}/*********构造食物********/void ClearMap(){unsigned char i;for(i=0;i<16;i++)map[i]=0x81; //清空地图map[0]=map[15]=0xff; //构造墙}/**********初始化地图**********/void ClearSnake(){unsigned char i;for(i=0;i<45;i++)snake[i][0]=snake[i][1]=0x00; //清空蛇节点snake[0][0]=5;snake[0][1]=10; //构造蛇头snake[1][0]=5;snake[1][1]=11;snake[2][0]=5;snake[2][1]=12; //构造蛇身snake[3][0]=44;snake[3][1]=44; //构造蛇尾}/************初始化蛇节点************/void SnakeToMap(void){unsigned int i;ClearMap();i=0x80>>foodx; //获取食物的横坐标map[foody]|=i; //将其横坐标和纵坐标对应的点显示在地图上i=0;while(!(snake[i][0]==snake[i][1]&&snake[i][0]==44)){map[snake[i][1]]|=0x80>>snake[i][0];i++;} //将蛇节点全部显示在地图上}/**********************将蛇以及食物显示在地图上***********************/void Move(unsigned char fx)//fx参数(0为上,1为下,2为左,3右){unsigned char i,snakewx,snakewy;snakewx=snakewy=i=0;while(!(snake[i][0]==snake[i][1]&&snake[i][0]==44))i++;snakewx=snake[i-1][0];snakewy=snake[i-1][1]; //扫描蛇节点并且得到尾巴的位置(横纵坐标)switch(fx){case 0:while(!(snake[i][0]==snake[i][1]&&snake[i][0]==44))i++; //扫描蛇节点得到节点数for(i--;i>0;i--){snake[i][0]=snake[i-1][0];snake[i][1]=snake[i-1][1];} //后节点朝着前节点方向移动snake[0][0]--; //移动蛇头break;case 1:while(!(snake[i][0]==snake[i][1]&&snake[i][0]==44))i++; //扫描蛇节点得到节点数for(i--;i>0;i--){snake[i][0]=snake[i-1][0];snake[i][1]=snake[i-1][1]; //后节点朝着前节点方向移动}snake[0][0]++; //移动蛇头break;case 2:while(!(snake[i][0]==snake[i][1]&&snake[i][0]==44))i++;for(i--;i>0;i--){snake[i][0]=snake[i-1][0];snake[i][1]=snake[i-1][1];}snake[0][1]--;break;case 3:while(!(snake[i][0]==snake[i][1]&&snake[i][0]==44))i++;for(i--;i>0;i--){snake[i][0]=snake[i-1][0];snake[i][1]=snake[i-1][1];}snake[0][1]++;break;}if(snake[0][0]==foodx&&snake[0][1]==foody) //蛇吃食物(蛇头的坐标与食物坐标重合){while(!(snake[i][0]==snake[i][1]&&snake[i][0]==44))i++;snake[i][0]=snakewx;snake[i][1]=snakewy;snake[i+1][0]=snake[i+1][1]=44; //重新添加(定义)蛇尾CreateFood(); //创建食物}}/************************蛇的移动(按键的方向改变)************************/void delay(unsigned int i){unsigned int j;while(i--)for(j=600;j>0;j--);}/*********************延时函数(接近与1毫秒)*********************/void donghua(void){unsigned int i;for(i=0;i<16;i++){if(i<8){P2=0xff;P1=~(0x80>>i);}else{P1=0xff; //第一块点阵屏亮P2=~(0x80>>(i-8));}P0=0xff;delay(20);}P1=P2=P0=0x00;for(i=0;i<16;i++){if(i<8){P1=0xff;P2=~(0x01<<i);}else{P2=0xff;P1=~(0x01<<(i-8));} //第二块点阵屏亮P0=0xff;delay(20);}}/********开机动画********/bit IsOver(){unsigned char i;game_reset=0;i=0;while(!(snake[i][0]==snake[i][1]&&snake[i][0]==44))i++;for(i--;i>0;i--){if(snake[0][0]==snake[i][0]&&snake[0][1]==snake[i][1]){game_reset=1;break;} //遍历蛇节点是否蛇头和蛇身重合}if(snake[0][0]==0||snake[0][0]==7||snake[0][1]==0||snake[0][1]==15) //判断蛇头是否撞墙game_reset=1;return game_reset;}/*********************判断蛇的状态(死亡条件)**********************/void init(void){P0M0=0xff;P0M1=0x00;//PO为强推模式TMOD=0X01;//设定时/计数器方式EA=1; //开启中断ET0=1; //开启定时计数器0TH0=(65536-1000)/256;TL0=(65536-1000)%256; //设置计数初值为1毫秒TR0=1; //开启定时/计数软开关ClearMap(); //初始化地图ClearSnake(); //初始化蛇}/**********初始化函数**********/void main(void){unsigned char fx,i,newfx; //定义方向,新方向,以及变量iunsigned char isStart; //开始/暂停变量newfx=fx=2; //初始化方向donghua();delay(100);i=0;isStart=1;init();CreateFood();while(1){for(i=0;i<20;i++){delay(10);if(fx!=1&&!Key_up&&isStart)//蛇向下移动则向上按键无效{newfx=0;}if(fx!=0&&!Key_down&&isStart) //蛇向上移动则向下按键无效{newfx=1;}if(fx!=3&&!Key_left&&isStart) //蛇向左移动则向右按键无效{newfx=2;}if(fx!=2&&!Key_right&&isStart) //蛇向右移动则向左按键无效{newfx=3;} //按键改变newfx,默认向fx移动if(!Key_start){delay(20);if(!Key_start)if(isStart==1)isStart=0;else if(isStart==0)isStart=1; //暂停/继续改变isStart状态while(!Key_start);delay(20);}if(!Key_reset){delay(20);if(!Key_reset)game_reset=1;while(!Key_reset);delay(20);if(game_reset)return; //复位}if(!isStart)i--; //暂停状态时所执行的死循环delay(10);}if(fx==0&&newfx==1||fx==2&&newfx==3)newfx=fx;elsefx=newfx; //方向冲突时按新方向移动,避免按的太快Move(fx); //移动while(IsOver()){if(!Key_reset){delay(20);if(!Key_reset)game_reset=1;while(!Key_reset);delay(20);if(game_reset)return;}if(!isStart)i--;delay(10);} //当蛇死亡只能激活复位按钮SnakeToMap(); //将蛇显示在地图}}/******主函数******/void display(void) interrupt 1{TR0=0; //关闭软开关TH0=(65536-1000)/256;TL0=(65536-1000)%256; //计数赋值if(line<8){P2=0xff;P1=~(0x80>>line); //选列}else{P1=0xff;P2=~(0x80>>(line-8)); //选列} //两块点阵屏的对接P0=map[line]; //送行line++;if(line==16)line=0;TR0=1; //开启软开关}/********显示函数********/。
基于51单片机8x8点阵贪吃蛇综合课程设计报告-图文

基于51单片机8x8点阵贪吃蛇综合课程设计报告-图文基于51单片机8x8点阵贪吃蛇综合课程设计报告-图文《电子线路综合》课程设计报告设计课题:贪吃蛇掌上游戏机毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:日期:年月日导师签名:日期:年月日注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
基于51单片机实现的贪吃蛇游戏机开题报告

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

基于51单片机贪吃蛇游戏设计贪吃蛇游戏是一种经典的游戏,也是很多人小时候玩过的游戏,其玩法简单,但却能够让人沉迷其中。
本文将介绍如何基于51单片机设计贪吃蛇游戏。
一、功能需求1. 界面设计贪吃蛇游戏的界面应简洁美观,可以利用点阵或LCD显示屏来呈现。
应包括游戏画面、分数、游戏难度等。
2. 操作方式游戏的操作主要包括上下左右移动贪吃蛇头部,进行输入、开始游戏、结束游戏等操作。
游戏可以使用按键、遥控器或者手柄等方式进行控制。
3. 游戏规则游戏正常进行时,贪吃蛇必须不断吃到食物,同时不能碰到墙壁或自己的身体。
每吃到一个食物,分数就会增加一点。
当贪吃蛇碰到墙壁或自己的身体时,游戏结束。
4. 难度等级游戏可以设置不同的难度等级,难度等级越高,贪吃蛇的速度就会越快,游戏难度也会相应提高。
二、设计思路本设计采用51单片机作为控制器,通过点阵或者LCD显示屏实现游戏界面的显示,通过按键、遥控器或手柄等方式进行游戏的操作。
具体设计思路如下:LCD显示屏:同样可以实现游戏画面的显示,但是可以显示更丰富的内容,如文字、动画等。
2. 游戏逻辑处理游戏逻辑处理主要包括游戏规则的实现和贪吃蛇的移动控制。
在实现游戏规则时,需要判断贪吃蛇是否碰到墙壁或自己的身体,同时需要计算分数;在实现贪吃蛇的移动控制时,需要通过按键、遥控器或者手柄等方式实现上下左右的移动。
可以通过按键或者遥控器等方式设置游戏难度等级,从而实现游戏难度的调整。
4. 硬件设计硬件设计包括主控芯片的选择、显示屏的选择、按键、遥控器或手柄等外设的选择。
主控芯片可以选择51单片机,同时可以选择点阵或LCD显示屏,按键、遥控器和手柄等外设可以根据需要进行选择。
三、实现步骤1. 硬件搭建搭建硬件时需要将主控芯片、显示屏、按键、遥控器或手柄等外设连接起来,并进行电路调试。
2. 程序设计程序设计包括游戏界面的设计、游戏逻辑的实现和难度等级的设置。
其中游戏界面的设计可以根据实际需要进行调整,游戏逻辑的实现需要考虑到游戏规则和贪吃蛇的移动控制,难度等级的设置可以通过按键或遥控器等方式实现。
单片机贪食蛇课程设计报告

单片机课程设计报告目录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、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电气与信息工程学院单片机课程设计报告一、设计任务及要求基本功能:制作一个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,游戏通关结束。
游戏处理模块为贪吃蛇在游玩过程中遇到的需要被处理的情况,主要实现的功能包括以下四个方面,即移动、食物、死亡和加速。
1、移动游戏开始后,贪吃蛇在固定的周期内会向前移动一格,此时“贪吃蛇”身体从尾巴至头部每一个后序节点会向前序节点移动,后序节点移动完毕后,头部会根据此时按键的方向对相应的横纵坐标进行加减。
2、食物放置贪吃蛇向前移动后,此时要判断蛇头是否与食物的横纵坐标一一对应,如果不是则退出该模块,进入下一模块;如果是,则贪吃蛇的节数增加一。
随后将进入创建新的食物模块,为了避免食物与贪吃蛇的节点坐标重复,食物在创建后要与贪吃蛇的每个节点的坐标一一比较,如果重合则重新创建食物的坐标,直到创建成功为止。
3、加速处理在游戏过程中,贪吃蛇的初始速度很慢,为了提高游戏娱乐性,设置独立按键加速键,当按下加速键,则贪吃蛇的移动速度即时间间隔变短,使游戏更具有挑战性,当再按下则恢复原来的速度。
4、结束N N贪吃蛇在向前移动后,有可能撞到墙壁或自己的身体,也有可能吃到食物,或者只是向前移动一格,移动完毕后如果吃到了食物,如果贪吃蛇的节数达到了最大值,那么玩家将会通关游戏,并且游戏退出,此时需要判断游戏是否结束,一共有三种判别,前两种为失败结局,即撞到了墙壁或自己的身体,最后一种为通关结局,游戏将初始化。
源代码如下:#include <reg51.h>#define uchar unsigned char#define SNAKE 20#define TIME 50#define SPEED 80sbit up=P3^3;sbit down=P3^1;sbit right=P3^2;sbit left=P3^4;sbit speedup=P3^5;sbit LATCH1=P3^6;sbit LATCH2=P3^7;uchar x[SNAKE+1];uchar y[SNAKE+1];uchar time,n,i,e;unsigned char const seg[]={0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81}; unsigned char code wei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; char addx,addy;void delay(char MS){char us,usn;while(MS!=0){usn = 0;while(usn!=0){us=0xff;while (us!=0){us--;};usn--;}MS--;}}bit knock(){bit k;k=0;if(x[1]>7||y[1]>7)k=1; for(i=2;i<n;i++)if((x[1]==x[i])&(y[1]==y[i]))k=1; return k;}void gameOver(){while(!i==8){P2=0x00;P1=0xff;LATCH1=1;LATCH1=0;P2=wei[i];LATCH2=1;LATCH2=0;P1=seg[i];delay(1000);i++;}}void turnkey(){if(!left){addy=0;if(addx!=1)addx=-1; else addx=1;}if(!right){addy=0;if(addx!=-1)addx=1; else addx=-1;} if(!up){addx=0;if(addy!=-1)addy=1; else addy=-1;}if(!down){addx=0;if(addy!=1)addy=-1; else addy=1;}if(!speedup){e=e-40;while(e<=39)e=SPEED;}}uchar mux(uchar temp){if(temp==7)return 128;if(temp==6)return 64;if(temp==5)return 32;if(temp==4)return 16;if(temp==3)return 8;if(temp==2)return 4;if(temp==1)return 2;if(temp==0)return 1;return 0;}void timer0(uchar k){while(k--){for(i=0;i<SNAKE+1;i++){P2=mux(x[i]);P1=255-mux(y[i]);turnkey();delay(TIME);P2=0x00;P1=0xff;}}}void main(void){e=SPEED;P0=0x00;P1=0xff;P2=0x00;P3=0xff;while(1){for(i=3;i<SNAKE+1;i++)x[i]=100;for(i=3;i<SNAKE+1;i++)y[i]=100;x[0]=4;y[0]=4; n=3;x[1]=1;y[1]=0;x[2]=0;y[2]=0;addx=0;addy=0;while(1){if(!left||!right||!up||!down)break;timer0(1);}while(1){timer0(e);if(knock()){gameOver();e=SPEED;break;}if((x[0]==x[1]+addx)&(y[0]==y[1]+addy)){n++;if(n==SNAKE+1){n=3;for(i=3;i<SNAKE+1;i++)x[i]=100;for(i=3;i<SNAKE+1;i++)y[i]=100;}x[0]=x[n-2];y[0]=y[n-2];}for(i=n-1;i>1;i--){x[i]=x[i-1];y[i]=y[i-1];}x[1]=x[2]+addx;y[1]=y[2]+addy;}}}四、调试结果与分析结果:本次设计未能在硬件上调试成功,但在proteus上的仿真可以实现。
程序软件编译器使用uVision4。
在用uVision4编写单片机程序时,因uVisio4往往只能修改语法上的错误,对于算法上的错误不好检查,而直接下载到单片机中又受电路板的限制不方便调试,所以采用Proteus仿真。
先在Proteus上绘制出硬件电路,电路设计完成后就可以进行仿真。
先双击单片机,把用uVision4生成的hex文件指定为下载文件,最后点击play按钮即可进行仿真。
系统上电后首先对LED进行初始化,接着对定时器初始化,并启动定时器,接着执行程序主体逻辑,程序主体逻辑执行一遍后检查是否中断发生,中断源有两个,一个是驱动贪吃蛇自行前进时的定时中断,另一个是用户控制贪吃蛇移动方向的键盘中断,任意中断的发生都会改变贪吃蛇的当前状态。
若中断没有发生,主程序继续判断蛇头是否碰到墙壁或蛇头尾相撞,若是,结束游戏,否则,继续执行主程序循环。
四、总结六、参考文献。