基于51单片机的打地鼠游戏机1602和led显示模拟(源码齐全)
- 格式:doc
- 大小:1.69 MB
- 文档页数:45
目录
一、摘要 (3)
二、流程图 (4)
三、电路原理 (5)
四、操作说明 (7)
五、演示图片 (8)
六、程序代码 (11)
一、摘要
本作品采用STC89C52单片机作为主控芯片,选取LCD1602液晶作为显示屏,选用24C02芯片作为外部EEPROM存储得分等数据。
游戏程序应用C语言编译,主要使用函数为显示主界面函数,选择模式函数,随机函数,键盘扫描函数和众多界面函数。
系统配有开机音乐和led短暂特效;以及关闭游戏音乐效果。目前配有三个难度等级,可以随时添加。游戏中可以实时显示得分、时间等数据。能够通过led显示和LCD1602同时显示地鼠的出现。题目要求中所有内容均已完成,且加入了很多额外显示环节。
二、流程图
三、电路原理
1、主控芯片
2、地鼠led和3*3键盘
3、蜂鸣器和buzzer
4、1602环节
5、24C02芯片
四、操作说明
1.插上电源后,打开作品左下角的自锁开关启动。
2.系统启动后,会次显示“welcome”字样,以及本队伍的名称,并伴随着短暂
的旋律,led闪烁效果。紧接着便进入游戏选择界面,分别是:1.start 2.s core 3.exit分别对应着开始游戏,进入历史分数菜单,以及结束的功能。
通过button1 和button2键可以进行功能选择的切换和选取,button1用于切换,button2用于确认。
3.选择start选项之后会有5秒钟的准备时间,之后即可进入游戏,游戏分为
3个关卡,难度依次上升,具体表现为地鼠产生的时间间隔依次减少,第一次为3秒间隔,往后依次递减。以9个灯泡作为地鼠,每次随机亮一个灯泡,游戏者需要在另一个3*3的矩阵上在灯泡亮的时间内按下相应的按钮即代表击打相应位置,从而实现打地鼠的模拟功能。
4.游戏界面的上方有左右两行,分别对应显示剩余时间(每次游戏的时间为30
秒),以及所获得的分数。下方也有左右两行,分别对应当前所示洞的序数,
5.若击中地鼠:正常情况下分数加1,播放提示音1;
6.每关有(30/地鼠实现时间) 个地鼠(或地雷),击打完成后若分数大于等于
level*10则进入下一关。
7.游戏失败时,显示“GAME OVER”。
8.顺利通过3关或游戏失败后均导致游戏结束,此时显示你的得分并检测,若
比存储的纪录分数高,则刷新纪录并存储。
9.显示作者信息及其他相关信息后回到游戏开始的等待画面。
补充说明:
1.本版本中进入游戏后只能用按键控制,在下一版本中会添加红外遥控控制。
2.液晶显示屏背光环节设置为接电即启用的状态,可以换增电池模块。
3. LCD1602显示图片上略有难度,下一环节将使用12864或者触屏板进行设计。
4. 蜂鸣器声音过于单调,下一环节将启用PM50100语音芯片进行播报。
五、演示图片仿真图片
实际图片
六、程序代码
#include
#include
sbit RS=P2^0;
sbit EN=P2^1;
sbit Speak=P2^2;
sbit button1=P2^3; //选择模式键
sbit button2=P2^4; //确认键、返回键、暂停键、下一关开始键sbit Buzzer=P2^6;
sbit hole1=P2^7; //1号洞
sbit SDA=P1^1; //24c02数据线
sbit SCL=P1^0; //24c02时钟线
unsigned char Count; //Play_Song使用
unsigned char i,j;
unsigned char temp; //随机数种子
unsigned char result; //随机数临时变量
unsigned char score; //保存临时分数
unsigned char tempname[2];//保存临时分数的名字
unsigned char time; //保存时间(30秒倒计时)
unsigned char num; //1秒钟判断变量
unsigned char flag1; //1标识得分,led全灭,不进行scankey操作unsigned char flag2; //1标识得分Buzzer响方式1
unsigned char flag3; //1标识地鼠出洞时间到,开始下一轮地鼠出洞unsigned char flag4; //1标识关卡时间到
unsigned char flag5; //1标志暂停
unsigned char level; //关卡等级
unsigned char holenum; //保存随机生成的洞号
unsigned char topscore[3]={0}; //保存3个最高分
unsigned char name[3][2]={"AA","BB","CC"}; //保存3个最高分名字
unsigned char code hole[]={0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//P3口控制的洞
unsigned char code str1[]={"Welcome!"}; //欢迎标语
unsigned char code str2[]={"1.start 2.score"};
unsigned char code str3[]={"3.exit"};
unsigned char code str4[]={"See You! "}; //exit界面
unsigned char code str5[]={"Ready?"};
unsigned char code str6[]={"GO!"};
unsigned char code str7[]={"Your Soccer: "}; //查看分数
unsigned char code str8[]={"Time: Score: "};
unsigned char code str9[]={" Team: SONGE "}; //队名
unsigned char code str10[]={"Game Over!"};
unsigned char code str11[]={"You Win! GO?"};
unsigned char code str12[]={"You Lose!"};
unsigned char code str13[]={"top1:"};
unsigned char code str14[]={"Congratulations"};
unsigned char code str15[]={"hole: level:"};
unsigned char code str16[]={"top2:"};
unsigned char code str17[]={"top3:"};
unsigned char code str18[]={"Your Name:"}; //记录姓名
//*************************1602函数声明*******************************//
void displayWelcome(); //显示欢迎界面
void displayPrepare(); //显示选项
void Game(); //游戏真正进行
void displayGame(); //开始游戏
void displayExit(); //显示退出界面
void displaytime();
void displayChoose(); //显示选择界面
void displayover();
void scankey();