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

  • 格式:doc
  • 大小:1.69 MB
  • 文档页数:45

下载文档原格式

  / 45
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

一、摘要 (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();