基于16x16LED点阵的贪食蛇游戏设计_第1页
基于16x16LED点阵的贪食蛇游戏设计_第2页
基于16x16LED点阵的贪食蛇游戏设计_第3页
基于16x16LED点阵的贪食蛇游戏设计_第4页
基于16x16LED点阵的贪食蛇游戏设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计基于16*16 LED贪食蛇游戏课 程 设 计 论 文题目 :基于16*16 LED点阵贪食蛇游戏 学 校: 广西大学 院 系: 物理科学与工程技术学院 学 号: 120 姓 名: 小空心木 专 业: 电子科学与技术 指导老师: 周老师 2013 年 6 月 5 日 第一章理论篇 摘要 单片机以极其高的性价比受到人们的重视和关注,所以应用很广,发展很快。单片机的优点是体积小、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易。是工业控制中非常不错的芯片,同时也是各高校开设的专业课程。 现代LED的发展很快,很多研究领域已经非常深刻,LED之所以受到广泛重视而得到迅速发展,是与它本身所具有的优点分不开的。这些优点概括起来是:亮度高、工作电压低、功耗小、小型化、寿命长、耐冲击和性能稳定。LED的发展前景极为广阔,目前正朝着更高亮度、更高耐气候性、更高的发光密度、更高的发光均匀性,可靠性、全色化方向发展。用LED点阵作为图形或文字的显示,是非常灵活的,非常具有感染力的。对于在校生来说,课堂上的知识永远都是理论,如果不实践就完全荒废了知识的学习。在本设计中虽然只是简单的研究一下用单片机驱动的LED显示的贪食蛇游戏,其主要目的是复习和巩固单片机知识。关键词:LED, 单片机, 点阵, 驱动, 矩阵1.1 设计的目的(1)本设计是基于16*16 LED点阵的贪食蛇游戏设计,主控芯片是STC51单片机。本设计的目的是为了巩固单片机知识,提高学生的实践动手能力,发现问题、分析问题、解决问题的能力。1.2 设计的任务与基本要求(1). 熟练掌握并应用单片机的理论、技术;(2). 熟悉、了解并且学会使用1616点阵;(3). 熟悉、掌握芯片的知识;(4). 能够实现设计任务的基本功能;(5). 撰写课程设计论文; 第二章硬件篇2.1 主要元件说明 (1) 74HC595驱动芯片74HC595串行输入8位并行输出的锁存器,是一款漏极开路输出的CMOS移位寄存器,输出端口为可控的三态输出端,亦能串行输出控制下一个级联的芯片。当串行数据输入脚SCK来一个脉冲时,数据从芯片的SI端口串行输入;当输出存储器锁存时钟信号RCK有脉冲时,数据从8位输出端口并行输出。这样,应用4片74HC595级联就可以控制16*16=256个LED发光二极管的16行和16列。(四片级联控制对取模有影响,建议行列控制的锁存器分开控制) 2. 16*16LED显示模块 本设计应用的是4片8*8共阳LED点阵,将4片LED的行和列级联在一起形成了16*16的LED点阵。2片74HC595控制点阵的行另外两片控制列,当控制驱动芯片的横纵坐标的数据分别给出“1”和“0”时则该坐标点上的LED发亮。3. 主控芯片STC12C5A60S2STC12C5A60S2是一款高速、高可靠;低功耗、超低价;强抗静电、强抗干扰的芯片,比起普通的C51系列单片机速度更快。为了提高速度在本设计中主控系统板使用了24MHz的外部晶振,刷屏速度更快,显示效果更明显。(STC12C5A60S2单片机具体介绍使用手册上更全面)自主设计的小系统,在网上买一个USB串口下载器,成本大大降低,同时也积累了很多丰富的经验。 第三章软件篇3.1 硬件系统设计软件altium designer 10PCB设计软件有很多版本,但相对于protel99 se 而言,altium designer 10的操作更灵活,所以操作起来更方便而且节约了很大部分的时间。同时altium designer 10也是作者青睐的一款软件。16*16LED点阵原理图STC12C5A60S2小系统原理图(小系统PCB) 小系统 (该小系统很多外围电路是为其他学习所用,其中立式电池座没买 到 ,所以时钟芯片没有加上去,电位器是嵌套小功放电路调节音量的)3.2 编程软件keil uVision 4最新的Keil uVision4 IDE,旨在提高开发人员的生产力,实现更快,更有效的程序开发。uVision4引入了灵活的窗口管理系统,能够拖放到视图内的任何地方,包括支持多显示器窗口。uVision4在Vision3 IDE的基础上,增加了更多大众化的功能。 多显示器和灵活的窗口管理系统 系统浏览器窗口的显示设备外设寄存器信息 调试还原视图创建并保存多个调试窗口布局 多项目工作区简化与众多的项程序:#include#include #include #define uint unsigned int #define uchar unsigned char#define Snake 15 /最大长度,蛇吃满多少就自动结束程序sbit DS=P10; /595串口数据输入端sbit OE=P11; /使能端,低电平有效sbit ST=P12; /移位寄存器的时钟输入SCKsbit SH=P13; /存储器的时钟输入 RCKchar length,Level;char addx,addy; /位移偏移量char x_food,y_food; /食物坐标uchar xSnake-1; /x坐标uchar ySnake-1; /y坐标 uchar time,n,i,e; uchar SPEED; /速度char Play_en; /开始游戏标志char Sad_flag;sbit Key_EN=P20; /方向使能,默认是低电平sbit up=P23; /定义方向键sbit down=P22;sbit left=P21;sbit right=P24;sbit Mode=P25;char temp;char Init_Snake_flag;char Mode_flag;char Mode_1,Mode_2;uint Wait_Time;char Eat_Food_super(char i);void Game_play_super();void Init_Snake();void Display(uchar x,uchar y);void delay() char j,i; for (i=0;i25;i+) for (j=0;j10;j+); /*判断碰撞*/char Knock() temp=0; if(xlength-1=(-1)|(xlength-1=16)|(ylength-1=(-1)|(ylength-1=16) temp=1; /撞墙for(i=0;ilength-1;i+) if(xlength-1=xi)&(ylength-1=yi)/撞自己 temp=1;break; return temp;/*方向处理*/void Key_Scan() P2=0xff; if (Mode=0) /模式转换处理按键 delay(); while (Mode=0); Mode_flag=!Mode_flag; if (Key_EN=0) Play_en=1; if(Play_en=1) if(right=0) addy=0; if (addx!=-1) addx=1;else addx=-1; if(left=0) addy=0;if (addx!=1) addx=-1;else addx=1; if(up=0) addx=0; if (addy!=-1) addy=1;else addy=-1; if(down=0) addx=0; if (addy!=1) addy=-1;else addy=1; void Transmit_Data(unsigned long Data) uchar i; unsigned long Num; OE=0; Num=Data; for(i=0;i32;i+) if(Num&0x80000000) DS=1; else DS=0; SH=1; /上升沿,数据送入寄存器 SH=0; Num=1; ST=1; /上升沿,数据推出端口 ST=0; void Display(uchar x,uchar y) /显示点函数 unsigned int L,H; unsigned long point; L=1(15-x); H=(1y); point=L; point=16; point+=H; Transmit_Data(point); /*碰撞表情 “囧”*/void Sad()uchar i,j,k,n,m,a,b; char g=2;unsigned long Count;if(Sad_flag=1) for (i=0;i3;i+) Display(i+2,i+11); for (i=11;i14;i+) Display(i,11+g);g-; for (i=0;i16;i+) Display(0,i); for (j=0;j16;j+) Display(15,j); for (k=0;k16;k+) Display(k,0); for (n=0;n16;n+) Display(n,15); for (n=4;n12;n+) Display(n,3);Display(n,8); for (n=4;n8;n+) Display(4,n);Display(11,n); void Put_food()Display(x_food,y_food);void Snake_Body()uchar i;for(i=0;ilength;i+) Display(xi,yi);/*/是否吃东西/*/char Eat_Food(char i)char j;if(xlength-1=x_food)&(ylength-1=y_food)|i) length+;if (length=0&j=0&j=15) y_food=j; else y_food=y0;return 1;return 0;/*蛇初始化*/ void Init_Snake() char i;Wait_Time=0;length=3;x_food=7;y_food=8;addx=addy=0; for(i=0; i= SPEED) Wait_Time = 0; for(i=0;ilength-1;i+) xi=xi+1; yi=yi+1; if(!Eat_Food(0) xlength-1=xlength-1+addx;ylength-1=ylength-1+addy; void main() char n;Init_Snake_flag=0; Init_Snake(); SPEED=50;Level=1;temp=0;P0=0xff;Init_Time();stop_play();Mode_flag=0; while(1) if (Mode_flag=0) P0=0xfe; else P0=0xf7; if(addx!=0|addy!=0) start_play(); else stop_play(); Key_Scan(); if (Init_Snake_flag=1) Init_Snake(); Init_Snake_flag=0; Snake_Body(); Put_food(); if (Mode_flag=0) if(temp=1) Play_en=0; P0=0x0c; Init_Snake_flag=1; if (Level=2) /判断是否碰撞,如果碰撞了则降一个级别 Level=1;SPEED = 50; else if (Level=3) Level=2;SPEED = 30; else Level=1; SPEED = 50;Sad_flag=1; temp=0; if(Sad_flag=1) Sad(); if(Play_en=1) P0=0xff; Sad_flag=0; void Timer0() interrupt 1 TH0 = 0xd8; TL0 = 0xF0;Wait_Time+;Key_Scan();if (Mode_flag=0) Game_play(); Knock();else Game_play_super(); /*超级无敌版模式 /模式二 (此模式下撞墙和撞到蛇身都不会结束游戏)*/char Eat_Food_super(char i)char j;if(xlength-1=x_food)&(ylength-1=y_food)|i) length+;if (length=0&j=0&j= SPEED) Wait_Time = 0; for(i=0;ilength-1;i+) xi=xi+1; yi=yi+1; if(!Eat_Food_super(0)if(xlength-1=0&(addx=(-1) xlength-1=15;else if(xlength-1=15&(addx=1) xlength-1=0;else if(ylength-1=0&(addy=(-1) ylength-1=15;else if(ylength-1=15&(addy=1) ylength-1=0;else xlength-1=xlength-1+addx; ylength-1=ylength-1+addy; 第四章总结篇1. 存在的问题总的来说,没什么经验的基础下做出来的硬件毛病很多。(1) 在画PCB的时候在网上找了一个8*8LED点阵的封装,后来拿到实物的时候发现封装错了。抛开浪费材料不说,重新画图做板可是白白耗掉了很多冤枉的时间。从此得到了深刻的教训是画图前必须拿到确保的实物参数。(2) 单面板与双面板的比较 首先我做的16*16LED点阵是单面板的,问题多多。第一,8*8点阵的管脚的行和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论