基于51单片机的打地鼠游戏机1602和led显示模拟(源码齐全)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1目录一、摘要……………………………3二、流程图…………………………4三、电路原理………………………5四、操作说明………………………7五、演示图片………………………8六、程序代码………………………112一、摘要本作品采用STC89C52单片机作为主控芯片,选取LCD1602液晶作为显示屏,选用24C02芯片作为外部EEPROM存储得分等数据。游戏程序应用C语言编译,主要使用函数为显示主界面函数,选择模式函数,随机函数,键盘扫描函数和众多界面函数。系统配有开机音乐和led短暂特效;以及关闭游戏音乐效果。目前配有三个难度等级,可以随时添加。游戏中可以实时显示得分、时间等数据。能够通过led显示和LCD1602同时显示地鼠的出现。题目要求中所有内容均已完成,且加入了很多额外显示环节。3二、流程图4三、电路原理1、主控芯片2、地鼠led和3*3键盘53、蜂鸣器和buzzer4、1602环节5、24C02芯片67四、操作说明1.插上电源后,打开作品左下角的自锁开关启动。2.系统启动后,会次显示“welcome”字样,以及本队伍的名称,并伴随着短暂的旋律,led闪烁效果。紧接着便进入游戏选择界面,分别是:1.start2.score3.exit分别对应着开始游戏,进入历史分数菜单,以及结束的功能。通过button1和button2键可以进行功能选择的切换和选取,button1用于切换,button2用于确认。3.选择start选项之后会有5秒钟的准备时间,之后即可进入游戏,游戏分为3个关卡,难度依次上升,具体表现为地鼠产生的时间间隔依次减少,第一次为3秒间隔,往后依次递减。以9个灯泡作为地鼠,每次随机亮一个灯泡,游戏者需要在另一个3*3的矩阵上在灯泡亮的时间内按下相应的按钮即代表击打相应位置,从而实现打地鼠的模拟功能。4.游戏界面的上方有左右两行,分别对应显示剩余时间(每次游戏的时间为30秒),以及所获得的分数。下方也有左右两行,分别对应当前所示洞的序数,5.若击中地鼠:正常情况下分数加1,播放提示音1;6.每关有(30/地鼠实现时间)个地鼠(或地雷),击打完成后若分数大于等于level*10则进入下一关。7.游戏失败时,显示“GAMEOVER”。8.顺利通过3关或游戏失败后均导致游戏结束,此时显示你的得分并检测,若比存储的纪录分数高,则刷新纪录并存储。9.显示作者信息及其他相关信息后回到游戏开始的等待画面。补充说明:1.本版本中进入游戏后只能用按键控制,在下一版本中会添加红外遥控控制。2.液晶显示屏背光环节设置为接电即启用的状态,可以换增电池模块。3.LCD1602显示图片上略有难度,下一环节将使用12864或者触屏板进行设计。4.蜂鸣器声音过于单调,下一环节将启用PM50100语音芯片进行播报。8五、演示图片仿真图片9实际图片1011六、程序代码#includereg52.h#includestdlib.hsbitRS=P2^0;sbitEN=P2^1;sbitSpeak=P2^2;sbitbutton1=P2^3;//选择模式键sbitbutton2=P2^4;//确认键、返回键、暂停键、下一关开始键sbitBuzzer=P2^6;sbithole1=P2^7;//1号洞sbitSDA=P1^1;//24c02数据线sbitSCL=P1^0;//24c02时钟线unsignedcharCount;//Play_Song使用unsignedchari,j;unsignedchartemp;//随机数种子unsignedcharresult;//随机数临时变量unsignedcharscore;//保存临时分数unsignedchartempname[2];//保存临时分数的名字unsignedchartime;//保存时间(30秒倒计时)unsignedcharnum;//1秒钟判断变量unsignedcharflag1;//1标识得分,led全灭,不进行scankey操作unsignedcharflag2;//1标识得分Buzzer响方式1unsignedcharflag3;//1标识地鼠出洞时间到,开始下一轮地鼠出洞unsignedcharflag4;//1标识关卡时间到unsignedcharflag5;//1标志暂停unsignedcharlevel;//关卡等级unsignedcharholenum;//保存随机生成的洞号unsignedchartopscore[3]={0};//保存3个最高分unsignedcharname[3][2]={AA,BB,CC};//保存3个最高分名字12unsignedcharcodehole[]={0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//P3口控制的洞unsignedcharcodestr1[]={Welcome!};//欢迎标语unsignedcharcodestr2[]={1.start2.score};unsignedcharcodestr3[]={3.exit};unsignedcharcodestr4[]={SeeYou!};//exit界面unsignedcharcodestr5[]={Ready?};unsignedcharcodestr6[]={GO!};unsignedcharcodestr7[]={YourSoccer:};//查看分数unsignedcharcodestr8[]={Time:Score:};unsignedcharcodestr9[]={Team:SONGE};//队名unsignedcharcodestr10[]={GameOver!};unsignedcharcodestr11[]={YouWin!GO?};unsignedcharcodestr12[]={YouLose!};unsignedcharcodestr13[]={top1:};unsignedcharcodestr14[]={Congratulations};unsignedcharcodestr15[]={hole:level:};unsignedcharcodestr16[]={top2:};unsignedcharcodestr17[]={top3:};unsignedcharcodestr18[]={YourName:};//记录姓名//*************************1602函数声明*******************************//voiddisplayWelcome();//显示欢迎界面voiddisplayPrepare();//显示选项voidGame();//游戏真正进行voiddisplayGame();//开始游戏voiddisplayExit();//显示退出界面voiddisplaytime();voiddisplayChoose();//显示选择界面voiddisplayover();voidscankey();13voidpause();voiddisplayScoreNext();//***************************基础函数*****************************//voiddelayms(unsignedintxms)//延时xms毫秒{unsignedinti,j;for(i=xms;i0;i--)for(j=110;j0;j--);}voiddelayus(unsignedintums)//延时ums个3微秒{unsignedinti,j;for(i=0;iums;i++)for(j=0;j3;j++);}voidTime_init()//定时器初始化,11.0592MZ晶振初始选择:定时器0用于播放音乐,定时器1关闭{//进入游戏:定时器1用于LCD显示分数TMOD=0x11;//16位定时器退出游戏:定时器0播放音乐,定时器1关闭TH0=0xDC;TL0=0x00;TH1=(65536-45872)/256;TL1=(65536-45872)%256;EA=1;//开总中断ET0=1;//开定时器0中断ET1=1;//开定时器1中断}14voidTime0()interrupt1//定时器0中断播放音乐{TH0=0xDC;TL0=0x00;Count++;//长度加1}voidTime1()interrupt3//定时器1中断游戏中显示分数{TH1=(65536-45872)/256;TL1=(65536-45872)%256;//每50ms中断一次num++;if(num%20==0)//近似1秒钟{time--;}if(num==(60-20*level))//出洞结束,level1:3s;level2:2s;level3:1s{num=0;flag3=1;}if(time==0)//一关结束{time=30;flag4=1;}}//***********************播放音乐*********************************//15unsignedcharcodeSONG[]={//祝你平安0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x00,//27个数字//0x20,0x20,0x20,0x20,0x1c,0x20,0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,//0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,//0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,//0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,//0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,//0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,//0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,//0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,//0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,//0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,//0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,//0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,//0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,//第217个数字//路边的野花不要采//160x30,0x

1 / 45
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功