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

下载本文档

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

文档简介

.word.zl..word.zl.课程设计论文题目:基于16*16LED点阵贪食蛇游戏学 校:XX大学院系:物理科学与工程技术学院学号:120姓名:小空心木专业:电子科学与技术指导教师:周教师2021年6月5日第一章理论篇摘要单片机以极其高的性价比受到人们的重视和关注,所以应用很广,开展很快。单片机的优点是体积小、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易。是工业控制中非常不错的芯片,同时也是各高校开设的专业课程。现代LED的开展很快,很多研究领域已经非常深刻,LED之所以受到广泛重视而得到迅速开展,是与它本身所具有的优点分不开的。这些优点概括起来是:亮度高、工作电压低、功耗小、小型化、寿命长、耐冲击和性能稳定。LED的开展前景极为广阔,目前正朝着更高亮度、更高耐气候性、更高的发光密度、更高的发光均匀性,可靠性、全色化方向开展。用LED点阵作为图形或文字的显示,是非常灵活的,非常具有感染力的。对于在校生来说,课堂上的知识永远都是理论,如果不实践就完全荒废了知识的学习。在本设计中虽然只是简单的研究一下用单片机驱动的LED显示的贪食蛇游戏,其主要目的是复习和稳固单片机知识。关键词:LED,单片机,点阵,驱动,矩阵1.1设计的目的1.1设计的目的〔1〕本设计是基于16*16LED点阵的贪食蛇游戏设计,主控芯片是STC51单片机。本设计的目的是为了稳固单片机知识,提高学生的实践动手能力,发现问题、分析问题、解决问题的能力。1.2设计的任务与根本要求〔1〕.熟练掌握并应用单片机的理论、技术;〔2〕.熟悉、了解并且学会使用16X16点阵;〔3〕.熟悉、掌握芯片的知识;〔4〕.能够实现设计任务的根本功能;〔5〕.撰写课程设计论文;第二章——硬件篇2.1 主要元件说明〔1〕74HC595驱动芯片74HC595串行输入8位并行输出的锁存器,是一款漏极开路输出的CMOS移位存放器,输出端口为可控的三态输出端,亦能串行输出控制下一个级联的芯片。管脚说明:管脚编号管脚名说明1.3九4、5、6、7、15QA—QH三态输出管脚.一8一GND电源地9 ]SQH串行数据输出管脚10SCLR移位寄存器清零端11SCK数据输入时伸线12RCK输出存砧器锁存时钟统130E输出使能14SI数据线15VCC电源端当串行数据输入脚SCK来一个脉冲时,数据从芯片的51端口串行输入;当输出存储器锁存时钟信号RCK有脉冲时,数据从8位输出端口并行输出。这样,应用4片74HC595级联就可以控制16*16=256个LED发光二极管的16行和16列。〔四片级联控制对取模有影响,建议行列控制的锁存器分开控制〕

Qu口0固VCC0C叵国0AQDLx回SI叵71HC5950]OEQF叵回K臼SCKQ”叵回SCLRGND叵亘|SQH2.16*16LED显示模块本设计应用的是4片8*8共阳LED点阵,将4片LED的行和列级联在一起形成了16*16的LED点阵。2片74HC595控制点阵的行另外两片控制列,当控制驱动芯片的横纵坐标的数据分别给出“1〃和“0〃时那么该坐标点上的LED发亮。

3.主控芯片STC12C5A60S2STC12C5A60S2是一款高速、高可靠;低功耗、超低价;强抗静电、强抗干扰的芯片,比起普通的C51系列单片机速度更快。为了提高速度在本设计中主控系统板使用了24MHz的外部晶振,刷屏速度更快,显示效果更明显。〔STC12C5A60S2单片机具体介绍使用手册上更全面〕uiu

32Io-C

o.0.0.o.八

ppppV>/CCP0/P4.S/ADCO/PI.OC2ADCLPI.IC=,uiu

32Io-C

o.0.0.o.八

ppppV>/CCP0/P4.S/ADCO/PI.OC2ADCLPI.IC=,ADC2PI.2二,ADC3P13=ADC4/P1.4二3333334444E-V^zdn寸一<石zdns-vszdntdaqv口乏QH<1S口亡UA,「xxnEodngodnnodnInem-o◎hkgin守中EEE召OJCJL4CI4-Mr-JCJ2221.LQFP-44;;STC12C5A60S2居17增加了P4口16井可位寻址;;13t=lP14.'A12Z3P23/A11口P22A10EP2J/A9P2.0/A8P4.0/SSnGndnXTALl—IXTAL2P3J/RDP3.6.WRugmli-mU寸京HE回占,二一u『wmuNsjlalLIglU-sdorutdrldnyxxLu04%dxm/iniUS^.E——UZJd/zxwb」)uqL」R3QW05号自主设计的小系统,在网上买一个USB串口下载器,本钱大大降低,同时也积累了很多丰富的经历。第三章软件篇3.1硬件系统设计软件altiumdesigner10PCB设计软件有很多版本,但相对于protel99se而言,altiumdesigner10的操作更灵活,所以操作起来更方便而且节约了很大局部的时间。同时altiumdesigner10也是作者青睐的一款软件。16*16LED点阵原理图LI1D-TL44L55L-56L3~L?1Llfl2□TTLJ241155LI-6LITTLJ6S]34■]:1KEs1j62:53244135™26mi7沌8916L211514L3213L4312L5413L651C-L7S9LE?GKD31615LIO114Lil213L12312LL541]L1453L*1丘ND3116.215314413E11710-397^HC5fl5?S11611710315LI14SL13EN,2RCK11兜£3-0VCC9Sil36VCC55L9)4SLi13EN-工ECK51总CK1-0VC£16VCCH211 36■2 153 )44 232 326 31.710a9H3215H±314B41.35INEi?6事,UWGND3呼■+HC595vccHlSTIKJECK£CKVCCS1391] 162 Tj3 :44J32 32&J17 303 916Fill21.5H12314Hi34iarli+512LI15613H1&71<GQRg?11VCC1■j34567g>id112EliKCKSCKMl7L&L7HlQlHl£eL4H5期HIB捶LSL7riZLlH4L6L+HlUE]法]虹工11nLE丽目LEDS^S-gT♦门二60EjE2二电二Hl11::.E:Q区二LILi二壬STC12C5A60S2小系统原理图〔小系统PCB〕■>.:1!$c:O4,JH4)"!«,■,-,■STBmJuJ44!::lJLtlILIIJ_lI;JI1LI1J!ul:LIM:l1■l:."l.E!M0:1---_■■.■■_-1dK-TR:rrkkkEkLeM.Qg--TI?EEk-L::什heJUh-000OQQQO00©9QQ40口OO0auJl□o0口Q4QQQQQQ。2。。0。口 ftjPQ9OOQoo「❾口;◎<3一二。:■:◎❸:口口Z□匚O-to□◎口。00400000OOOOC00Q。口tsr\小系统〔该小系统很多外围电路是为其他学习所用,其中立式电池座没买到,所以时钟芯片没有加上去,电位器是嵌套小功放电路调节音量的〕3.2编程软件keiluVision4最新的KeiluVision41口日,旨在提高开发人员的生产力,实现更快,更有效的程序开发。口%五。口4引入了灵活的窗口管理系统,能够拖放到视图的任何地方,包括支持多显示器窗口。uVision4在以^五。口3IDE的根底上,增加了更多群众化的功能。•多显示器和灵活的窗口管理系统•系统浏览器窗口的显示设备外设存放器信息•调试复原视图创立并保存多个调试窗口布局•多工程工作区简化与众多的项程序:#include<reg52.h>#include<stdlib.h>#include<stdio.h>#defineuintunsignedint#defineucharunsignedchar#defineSnake15sbitDS=Pi0;sbitOE=P1A1;sbitST=Pi2;sbitSH=Pi3;charlength,Level;charaddx,addy;charx_food,y_food;ucharx[Snake-1];uchary[Snake-1];uchartime,n,i,e;ucharSPEED;charPlay_en;charSad_flag;sbitKey_EN=P2人0;sbitup=P2人3;sbitdown=P2A2;sbitleft=P2人1;sbitright=P2人4;sbitMode=P2殁chartemp;charInit_Snake_flag;charMode_flag;charMode_1,Mode_2;uintWait_Time;charEat_Food_super(chari);voidGame_play_super();voidInit_Snake();voidDisplay(ucharx,uchary);voiddelay(){charj,i;//最大长度,蛇吃满多少就自动完毕程序//595串口数据输入端//使能端,低电平有效//移位存放器的时钟输入SCK//存储器的时钟输入RCK//位移偏移量//食物坐标//x坐标//y坐标//速度//开场游戏标志//方向使能,默认是低电平//定义方向键for(i=0;i<25;i++)for(j=0;j<10;j++);判断碰撞charKnock(){temp=0;if((x[length-1]==(-1))||(x[length-1]==16)||(y[length-1]==(-1))||(y[length-1]==16))temp=1; //撞墙for(i=0;i<length-1;i++){if((x[length-1]==x[i])&&(y[length-1]==y[i])) //撞自己{temp=1;break;}}returntemp;}方向处理voidKey_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;elseaddx=-1;}if(left==0){addy=0;if(addx!=1)addx=-1;elseaddx=1;}if(up==0){addx=0;if(addy!=-1)addy=1;elseaddy=-1;}if(down==0){addx=0;if(addy!=1)addy=-1;elseaddy=1;}}}voidTransmit_Data(unsignedlongData){uchari;unsignedlongNum;OE=0;Num=Data;for(i=0;i<32;i++){if(Num&0x80000000)DS=1;elseDS=0;SH=1;SH=0;Num<<=1;}ST=1;ST=0;}voidDisplay(ucharx,uchary){unsignedintL,H;unsignedlongpoint;L=1<<(15-x);//上升沿,数据送入存放器//上升沿,数据推出端口//显示点函数H=~(1<<y);point=L;point<<=16;point+=H;Transmit_Data(point);}碰撞表情冏〃voidSad(){uchari,j,k,n,m,a,b;charg=2;unsignedlongCount;if(Sad_flag==1){for(i=0;i<3;i++){Display(i+2,i+11);}for(i=11;i<14;i++){Display(i,11+g);g--;}for(i=0;i<16;i++){Display(0,i);}for(j=0;j<16;j++){Display(15,j);}for(k=0;k<16;k++){Display(k,0);}for(n=0;n<16;n++){Display(n,15);}

for(n=4;n<12;n++){Display(n,3);Display(n,8);}for(n=4;n<8;n++){Display(4,n);Display(11,n);}}}voidPut_food(){Display(x_food,y_food);}voidSnake_Body(){uchari;for(i=0;i<length;i++){Display(x[i],y[i]);}}//是否吃东西charEat_Food(chari){charj;if(((x[length-1]==x_food)&&(y[length-1]==y_food))||i){length++;if(length<Snake){//等级以及速度的处理if(Level==1&&Init_Snake_flag==0)//等级以及速度的处理{switch(length){SPEED=40;break;SPEED=40;break;case8:SPEED=35;break;case10:SPEED=30;break;case14:{Init_Snake_flag=1;SPEED=30;Level=2;Play_en=0;}break;default:break;}}if(Level==2&&Init_Snake_flag==0){switch(length){case6:SPEED=25;break;case8:SPEED=20;break;case10:SPEED=15;break;case14:{Init_Snake_flag=1;SPEED=15;Level=3;Play_en=0;}break;default:break;}}if(Level==3&&Init_Snake_flag==0){switch(length){case6:SPEED=15;break;case8:SPEED=10;break;case10:SPEED=7;break;case14:{Init_Snake_flag=1;SPEED=50;Level=1;Play_en=0;}break;

default:break;}}}x[length-1]=x_food+addx;//产生随机数y[length-1]=y_food+addy;j=x[0]+rand()%10;//产生随机数if(j>=0&&j<=15)x_food=j;elsex_food=x[0];j=y[0]+rand()%10;if(j>=0&&j<=15)y_food=j;elsey_food=y[0];return1;}return0;}/***蛇初始化**/voidInit_Snake(){chari;Wait_Time=0;length=3;x_food=7;y_food=8;addx=addy=0;for(i=0;i<length;i++){x[i]=5+i;y[i]=3;}}voidInit_Time(void){TMOD=0x01;TH0=0xd8;TL0=0xF0;ET0=1;EA=1;voidstart_play(){TR0=1;}voidstop_play(){TR0=0;}voidGame_play(){if(Wait_Time>=SPEED){Wait_Time=0;for(i=0;i<length-1;i++){x[i]=x[i+1];y[i]=y[i+1];}if(!Eat_Food(0)){x[length-1]=x[length-1]+addx;y[length-1]=y[length-1]+addy;}}}voidmain(){charn;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;elseP0=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;}elseif(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;}}}}voidTimer0()interrupt1{TH0=0xd8;TL0=0xF0;Wait_Time++;Key_Scan();if(Mode_flag==0){Game_play();Knock();}else{Game_play_super();}}超级无敌版模式//模式二 〔此模式下撞墙和撞到蛇身都不会完毕游戏〕超级无敌版模式charEat_Food_super(chari){charj;if(((x[length-1]==x_food)&&(y[length-1]==y_food))||i){length++;if(length<Snake)if(Level==1&&Init_Snake_flag==0){switch(length){case6:SPEED=40;break;case8:SPEED=35;break;case10:SPEED=30;break;case14:{Init_Snake_flag=1;SPEED=30;Level=2;Play_en=0;}break;default:break;}}if(Level==2&&Init_Snake_flag==0){switch(length){case6:SPEED=25;break;case8:SPEED=20;break;case10:SPEED=15;break;case14:{Init_Snake_flag=1;SPEED=15;Level=3;Play_en=0;}break;default:break;}}if(Level==3&&Init_Snake_flag==0){switch(length){case6:SPEED=15;break;case8:SPEED=10;break;case10:SPEED=7;break;case14:{Init_Snake_flag=1;SPEED=50;Level=1;Play_en=0;}break;

default:break;}}}if(((x_food+addx)==(-1))&&(addx==(-1))){x[length-1]=15;y[length-1]=y_food;}elseif(((x_food+addx)==16)&&(addx==1)){x[length-1]=0;y[length-1]=y_food;}elseif(((y_food+addy)==(-1))&&(addy==(-1))){y[length-1]=15;x[length-1]=x_food;}elseif(((y_food+addy)==16)&&(addy==1)){y[length-1]=0;x[length-1]=x_food;}else{x[length-1]=x_food+addx;y[length-1]=y_food+addy;}j=x[0]+rand()%10; //产生随机数if(j>=0&&j<=15)x_food=j;elsex_food=x[0];j=y[0]+rand()%10;if(j>=0&&j<=15)y_food=j;elsey_food=y[0];return1;}return0;}voidGame_play_super(){if(Wait_Time>=SPEED){Wait_Time=0;for(i=0;i<length-1;i++){x[i]=x[i+1];y[i]=y[i+1];}if(!Eat_Food_super(0)){if(x[length-1]==0&&(addx==(-1))){x[length-1]=15;}elseif(x[len

温馨提示

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

评论

0/150

提交评论