基于51單片機(jī)的打地鼠游戲機(jī)1602和led顯示模擬源碼齊全
《基于51單片機(jī)的打地鼠游戲機(jī)1602和led顯示模擬源碼齊全》由會(huì)員分享,可在線閱讀,更多相關(guān)《基于51單片機(jī)的打地鼠游戲機(jī)1602和led顯示模擬源碼齊全(46頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 目錄 一、摘要……………………………3 二、流程圖…………………………4 三、電路原理………………………5 四、操作說明………………………7 五、演示圖片………………………8 六、程序代碼………………………11一、摘要 本作品采用STC89C52單片機(jī)作為主控芯片,選取LCD1602液晶作為顯示屏,選用24C02芯片作為外部EEPROM存儲(chǔ)得分等數(shù)據(jù)。 游戲程序應(yīng)用C語言編譯,主要使用函數(shù)為顯示主界面函數(shù),選擇模式函數(shù),隨機(jī)函數(shù),鍵盤掃描函數(shù)和眾多界面函數(shù)。 系統(tǒng)配有開機(jī)音樂和led短暫特效;以及關(guān)閉游戲音樂效果。目前配有三個(gè)難度等級(jí),可以隨時(shí)添加。游戲中可以實(shí)時(shí)
2、顯示得分、時(shí)間等數(shù)據(jù)。能夠通過led顯示和LCD1602同時(shí)顯示地鼠的出現(xiàn)。題目要求中所有內(nèi)容均已完成,且加入了很多額外顯示環(huán)節(jié)。 二、流程圖 三、電路原理 1、主控芯片 2、地鼠led和3*3鍵盤 3、蜂鳴器和buzzer 4、1602環(huán)節(jié) 5、24C02芯片 四、操作說明 1. 插上電源后,打開作品左下角的自鎖開關(guān)啟動(dòng)。 2. 系統(tǒng)啟動(dòng)后,會(huì)次顯示“welcome”字樣,以及本隊(duì)伍的名稱,并伴隨著短暫的旋律,led閃爍效果。緊接著便進(jìn)入游戲選擇界面,分別是:1.start 2.score 3.exit分別對(duì)應(yīng)著開始游
3、戲,進(jìn)入歷史分?jǐn)?shù)菜單,以及結(jié)束的功能。通過button1 和button2鍵可以進(jìn)行功能選擇的切換和選取,button1用于切換,button2用于確認(rèn)。 3. 選擇start選項(xiàng)之后會(huì)有5秒鐘的準(zhǔn)備時(shí)間,之后即可進(jìn)入游戲,游戲分為3個(gè)關(guān)卡,難度依次上升,具體表現(xiàn)為地鼠產(chǎn)生的時(shí)間間隔依次減少,第一次為3秒間隔,往后依次遞減。以9個(gè)燈泡作為地鼠,每次隨機(jī)亮一個(gè)燈泡,游戲者需要在另一個(gè)3*3的矩陣上在燈泡亮的時(shí)間內(nèi)按下相應(yīng)的按鈕即代表擊打相應(yīng)位置,從而實(shí)現(xiàn)打地鼠的模擬功能。 4. 游戲界面的上方有左右兩行,分別對(duì)應(yīng)顯示剩余時(shí)間(每次游戲的時(shí)間為30秒),以及所獲得的分?jǐn)?shù)。下方也有左右兩行,分別
4、對(duì)應(yīng)當(dāng)前所示洞的序數(shù), 5. 若擊中地鼠:正常情況下分?jǐn)?shù)加1,播放提示音1; 6. 每關(guān)有(30/地鼠實(shí)現(xiàn)時(shí)間) 個(gè)地鼠(或地雷),擊打完成后若分?jǐn)?shù)大于等于 level*10則進(jìn)入下一關(guān)。 7. 游戲失敗時(shí),顯示“GAME OVER”。 8. 順利通過3關(guān)或游戲失敗后均導(dǎo)致游戲結(jié)束,此時(shí)顯示你的得分并檢測(cè),若比存儲(chǔ)的紀(jì)錄分?jǐn)?shù)高,則刷新紀(jì)錄并存儲(chǔ)。 9. 顯示作者信息及其他相關(guān)信息后回到游戲開始的等待畫面。 補(bǔ)充說明: 1. 本版本中進(jìn)入游戲后只能用按鍵控制,在下一版本中會(huì)添加紅外遙控控制。 2. 液晶顯示屏背光環(huán)節(jié)設(shè)置為接電即啟用的狀態(tài),可以換增電池模塊。 3. LCD
5、1602顯示圖片上略有難度,下一環(huán)節(jié)將使用12864或者觸屏板進(jìn)行設(shè)計(jì)。
4. 蜂鳴器聲音過于單調(diào),下一環(huán)節(jié)將啟用PM50100語音芯片進(jìn)行播報(bào)。
五、演示圖片
仿真圖片
實(shí)際圖片
六、程序代碼
#include
6、=P2^7; //1號(hào)洞 sbit SDA=P1^1; //24c02數(shù)據(jù)線 sbit SCL=P1^0; //24c02時(shí)鐘線 unsigned char Count; //Play_Song使用 unsigned char i,j; unsigned char temp; //隨機(jī)數(shù)種子 unsigned char result; //隨機(jī)數(shù)臨時(shí)變量 unsigned char score; //保存臨時(shí)分?jǐn)?shù) unsigned char tempname[2];//保存臨時(shí)分?jǐn)?shù)的名字 unsigned char time; //保存時(shí)間(30秒倒計(jì)時(shí)) unsi
7、gned char num; //1秒鐘判斷變量 unsigned char flag1; //1標(biāo)識(shí)得分,led全滅,不進(jìn)行scankey操作 unsigned char flag2; //1標(biāo)識(shí)得分Buzzer響方式1 unsigned char flag3; //1標(biāo)識(shí)地鼠出洞時(shí)間到,開始下一輪地鼠出洞 unsigned char flag4; //1標(biāo)識(shí)關(guān)卡時(shí)間到 unsigned char flag5; //1標(biāo)志暫停 unsigned char level; //關(guān)卡等級(jí) unsigned char holenum; //保存隨機(jī)生成的洞號(hào) unsigned ch
8、ar topscore[3]={0}; //保存3個(gè)最高分 unsigned char name[3][2]={"AA","BB","CC"}; //保存3個(gè)最高分名字 unsigned char code hole[]={0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//P3口控制的洞 unsigned char code str1[]={"Welcome!"}; //歡迎標(biāo)語 unsigned char code str2[]={"1.start 2.score"}; unsigned char code
9、 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: "}; //查看分?jǐn)?shù) unsigned char code str8[]={"Time: Score: "}; unsigned char code str9[]={" Team: SONGE "
10、}; //隊(duì)名 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
11、 str16[]={"top2:"}; unsigned char code str17[]={"top3:"}; unsigned char code str18[]={"Your Name:"}; //記錄姓名 //*************************1602函數(shù)聲明*******************************// void displayWelcome(); //顯示歡迎界面 void displayPrepare(); //顯示選項(xiàng) void Game(); //游戲真正進(jìn)行 void displayGame
12、(); //開始游戲 void displayExit(); //顯示退出界面 void displaytime(); void displayChoose(); //顯示選擇界面 void displayover(); void scankey(); void pause(); void displayScoreNext(); //***************************基礎(chǔ)函數(shù)*****************************// void delayms(unsigned int xms) //延時(shí)xms 毫秒
13、
{
unsigned int i,j;
for(i=xms; i>0; i--)
for(j=110; j>0; j--);
}
void delayus(unsigned int ums) //延時(shí)ums 個(gè)3微秒
{
unsigned int i,j;
for(i=0; i 14、TMOD = 0x11; //16位定時(shí)器 退出游戲:定時(shí)器0播放音樂,定時(shí)器1關(guān)閉
TH0 = 0xDC;
TL0 = 0x00;
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
EA=1; //開總中斷
ET0=1; //開定時(shí)器0中斷
ET1=1; //開定時(shí)器1中斷
}
void Time0() interrupt 1 //定時(shí)器0中斷 播放音樂
{
TH0 = 0xDC;
TL0 = 0x00;
Count++; //長(zhǎng)度加1
}
void T 15、ime1() interrupt 3 //定時(shí)器1中斷 游戲中顯示分?jǐn)?shù)
{
TH1=(65536-45872)/256;
TL1=(65536-45872)%256; //每50ms中斷一次
num++;
if(num%20==0) //近似1秒鐘
{
time--;
}
if(num==(60-20*level)) //出洞結(jié)束,level1:3s; level2:2s; level3:1s
{
num=0;
flag3=1;
}
if(time==0) //一關(guān)結(jié)束
{
time=30;
f 16、lag4=1;
}
}
//***********************播放音樂*********************************//
unsigned char code SONG[] ={ //祝你平安
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個(gè)數(shù)字
//0x20,0x20,0 17、x20,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,0x3 18、0,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,0x 19、30,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 20、,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,
//0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,//第217個(gè)數(shù)字
//路邊的野花不要采
// 0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0x1C,
// 0x20,0x20,0x20,0x1C,0x2 21、0,0x18,0x20,0x20,0x80,0xFF,
0x20,0x30,0x1C,0x10,0x18,0x20,
0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,
0x30,0x80,0xFF,0x20,0x20,0x00,
//0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,
//0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20 22、,0x20,0x26,0x20,0x2B,0x20,0x30,
//0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,
//0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,0x10,0x20,
//0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0x1F,
//0 23、x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,
//0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,
//0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20,
//0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15, 24、0x40,0x13,0x40,0x18,0x80,
};
void Play_Song(unsigned char i) //i=1 播放 路邊的野花不要采
{ //i=0 播放 祝你平安
unsigned char Temp1,Temp2;
unsigned int Addr;
Count = 0; //中斷計(jì)數(shù)器清0
Addr = i * 27; //音樂地址
TR0=1; //開啟定時(shí)器0
while(1)
{
Temp1 = SONG[Addr++];
if (Temp1 == 0xFF) 25、 //休止符
{
TR0 = 0; //關(guān)閉定時(shí)器0
delayus(100);
}
else if (Temp1 == 0x00) //歌曲結(jié)束符
{
TR0=0; //關(guān)閉定時(shí)器0
return;
}
else //正常播放歌曲
{
Temp2 = SONG[Addr++];
TR0 = 1;
while(1)
{
Speak = ~Spe 26、ak;
delayus(Temp1);
if(Temp2 == Count)
{
Count = 0;
break;
}
}
}
}
}
void playBuzzer()
{
if(flag2==1) //得分響
{
Buzzer=0;
delayms(30);
Buzzer=1;
}else
{
}
}
//******************************24C02環(huán)節(jié)****** 27、*******************************//
void init()
{
SDA=1;
delayms(5);
SCL=1;
delayms(5);
}
void start() //開始信號(hào)
{
SDA=1;
delayms(5);
SCL=1;
delayms(5);
SDA=0;
delayms(5);
}
void stop() //停止信號(hào)
{
SDA=0;
delayms(5);
SCL=1;
delayms(5);
SDA=1;
delayms(5);
}
void re 28、spons() //應(yīng)答
{
unsigned char i;
SCL=1;
delayms(5);
while((SDA==1)&&(i<250))
i++;
SCL=0;
delayms(5);
}
void write_byte(unsigned char date)//寫字節(jié)
{
unsigned char i,temp,j;
temp=date;
for(i=0; i<8; i++)
{
j=0x80&temp;
temp=temp<<1;
SCL=0;
delayms(5);
SDA=(bit) 29、j;
delayms(5);
SCL=1;
delayms(5);
}
SCL=0;
delayms(5);
SDA=1;
delayms(5);
}
unsigned char read_byte()//讀字節(jié)
{
unsigned char i,k;
SCL=0;
delayms(2);
SDA=1;
for(i=0; i<8; i++)
{
SCL=1;
delayms(5);
k=(k<<1)|SDA;
SCL=0;
delayms(5);
}
return k;
}
void 30、 write_add(unsigned char address,unsigned char date)//往地址寫數(shù)據(jù)
{
start();
write_byte(0xa0); //控制字寫1010 000 0(寫操作)
respons();
write_byte(address);//存儲(chǔ)單元地址
respons();
write_byte(date);
respons();
stop();
}
unsigned char read_add(unsigned char address) //往地址中讀數(shù)據(jù)
{
unsigned char da 31、te;
start();
write_byte(0xa0); //控制字 寫
respons();
write_byte(address); //單元地址
respons();
start();
write_byte(0xa1); //控制字讀1010 000 1(讀操作)
respons();
date=read_byte(); //數(shù)據(jù)
SDA=1; //非應(yīng)答
delayus(5);
SCL=1;
delayus(5);
stop();
return date;
}
void getRecord() 32、//讀取前三名分?jǐn)?shù)
{
topscore[0]=read_add(0);//第一名
name[0][0]=read_add(1);
name[0][1]=read_add(2);
topscore[1]=read_add(3);//第二名
name[1][0]=read_add(4);
name[1][1]=read_add(5);
topscore[2]=read_add(6);//第三名
name[2][0]=read_add(7);
name[2][1]=read_add(8);
}
void Record() //更新前三并 33、記錄分?jǐn)?shù)
{
write_add(0,topscore[0]);//第一名
write_add(1,name[0][0]);
write_add(2,name[0][1]);
write_add(3,topscore[1]);//第二名
write_add(4,name[1][0]);
write_add(5,name[1][1]);
write_add(6,topscore[2]);//第三名
write_add(7,name[2][0]);
write_add(8,name[2][1]);
}
void Judge() //判斷分?jǐn)?shù)高低
34、
{
if(score>topscore[0])
{
topscore[2]=topscore[1];//第二名賦給第三名
name[2][0]=name[1][0];
name[2][1]=name[1][1];
topscore[1]=topscore[0];//第一名賦給第二名
name[1][0]=name[0][0];
name[1][1]=name[0][1];
topscore[0]=score; //臨時(shí)變量賦給第一名
name[0][0]=tempname[0];
name[0][1]=tempname[1];
35、
}else if(score>topscore[1])
{
topscore[2]=topscore[1];//第二名賦給第三名
name[2][0]=name[1][0];
name[2][1]=name[1][1];
topscore[1]=score; //臨時(shí)變量賦給第二名
name[1][0]=tempname[0];
name[1][1]=tempname[1];
}else if(score>topscore[2])
{
topscore[2]=score; //臨時(shí)變量賦給第三名
name[2] 36、[0]=tempname[0];
name[2][1]=tempname[1];
}
}
//*******************************1602環(huán)節(jié)*************************************//
void wr_com(unsigned char com) //寫指令
{
delayms(5);
RS=0;
EN=0;
P0=com;
delayms(5);
EN=1;
delayms(5);
EN=0;
}
void wr_dat(unsigned char 37、dat) //寫數(shù)據(jù)
{
delayms(5);
RS=1;
EN=0;
P0=dat;
delayms(5);
EN=1;
delayms(5);
EN=0;
}
void lcd_init() //1602初始化設(shè)置//
{
delayms(25);
wr_com(0x38); //設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
wr_com(0x01); //顯示清0,數(shù)據(jù)指針清0
wr_com(0x06); //寫一個(gè)字符后地址加一
wr_com(0x0c); //設(shè)置開顯示,不顯示光標(biāo)
38、
getRecord();
}
void displayWelcome() //顯示歡迎界面
{
wr_com(0x80+0x03);
delayms(5);
for(i=0; i<9; i++)
{
wr_dat(str1[i]);
delayus(5);
}
wr_com(0xc0+0x01);
delayms(5);
for(i=0; i<13; i++)
{
wr_dat(str9[i]);
delayus(5);
}
for(i=0; i<10; i++) //開關(guān)顯示完成閃爍
{
39、 if(j==0)
{
wr_com(0x08); //關(guān)顯示
delayms(100);
}else
{
wr_com(0x0c); //開顯示
delayms(100);
}
j=~j;
}
Play_Song(0);
delayms(100);
}
void displayPrepare() //顯示選項(xiàng)
{
wr_com(0x01); //清屏
delayms(5);
wr_com(0x80);
delayms(5);
for(i=0; i<15; i++)
{
40、 wr_dat(str2[i]);
delayus(5);
}
wr_com(0x80+0x40);
delayms(5);
for(i=0; i<6; i++)
{
wr_dat(str3[i]);
delayus(5);
}
for(i=0; i<9; i++)
{
switch(i%3)
{
case 0:hole1=0;P3=0x00;delayms(100);
case 1:hole1=0;P3=0x55;delayms(100);
case 2:hole1=1;P3=0xaa;delayms( 41、100);
}
}
hole1=0;
P3=0x00;
}
void displaytime() //游戲過程中刷新顯示時(shí)間、分?jǐn)?shù)
{
wr_com(0x80+0x05); //顯示倒計(jì)時(shí)
delayus(5);
wr_dat(0x30+time/10);
delayus(5);
wr_dat(0x30+time%10);
delayus(5);
wr_com(0x80+0x0e); //顯示分?jǐn)?shù)
delayus(5);
wr_dat(0x30+score/10);
delayus(5);
wr_dat( 42、0x30+score%10);
delayus(5);
wr_com(0xc0+0x0e); //顯示關(guān)卡
delayus(5);
wr_dat(0x30+(level+1));
delayus(5);
}
void recordName() //記錄姓名
{
wr_com(0x01);
delayus(5);
wr_com(0x80);
delayus(5);
for(i=0; i<10; i++) //Your Name:
{
wr_dat(str18[i]);
delayus(5);
}
i=A;
43、 wr_dat(i);
delayus(5);
wr_com(0x10); //光標(biāo)左移
delayus(5);
wr_com(0x0f); //光標(biāo)閃爍
delayus(5);
while(1) //輸入第一個(gè)字母
{
wr_com(0x80+0x0a);
delayus(5);
wr_dat(i);
delayus(5);
if(button1==0)
{
delayms(10);
if(button1==0)
{
while(!button1);
i++;
44、
if(i>Z)
i=A;
}
}
if(button2==0)//確認(rèn),開始輸入第二個(gè)字母
{
tempname[0]=i;
break;
}
}
i=A; //輸入第二個(gè)字母
wr_dat(i);
delayus(5);
while(1)
{
wr_com(0x80+0x0b);
delayus(5);
wr_dat(i);
delayus(5);
if(button1==0)
{
delayms(10);
if(button1==0)
45、
{
while(!button1);
i++;
if(i>Z)
i=A;
}
}
if(button2==0)//確認(rèn),輸入完畢
{
tempname[1]=i;
break;
}
}
wr_com(0x0c); //關(guān)閉光標(biāo)
delayus(5);
displayChoose();
}
void displayover() //顯示一輪游戲結(jié)束畫面
{
TR1=0; //關(guān)閉定時(shí)器1
wr_com(0x01);
delayms(5);
w 46、r_com(0x80);
delayms(5);
for(i=0; i<10; i++) //Game Over
{
wr_dat(str10[i]);
delayus(5);
}
wr_com(0xc0);
delayus(5);
if(score>=(10*(1+level))) //不同level分?jǐn)?shù)要求不同,win了
{
if(level==3) //通關(guān)了
{
level=0;
wr_com(0x80);
delayus(5);
for(i=0; i<15; i++)
{
47、wr_dat(str14[i]);
delayus(5);
}
wr_com(0xc0);
delayus(5);
for(i=0; i<8; i++)
{
wr_dat(str11[i]);
delayus(5);
}
while(1)
{
if(button2==0)
{
delayms(10);
if(button2==0)
{
while(!button2);
recordName();
48、 }
}
}
}
else //升級(jí)了
{
for(i=0; i<12; i++) //You Win!
{
wr_dat(str11[i]);
delayus(5);
}
while(1)
{
if(button2==0)
{
delayms(10);
if(button2==0)
{
while(!button2);
level++;
displayGa 49、me();
}
}
}
}
}
else //You Lose!
{
for(i=0; i<9; i++)
{
wr_dat(str12[i]);
delayus(5);
}
}
while(1) //失敗了
{
if(button2==0)
{
delayms(10);
if(button2==0)
{
while(!button2);
if(score!=0) //0分不記錄
recordName();
dis 50、playChoose();
}
}
}
}
void scankey() //掃描按鍵,判斷是否得分
{
if((hole1==0) && (P3==0x00))//打中地鼠
{
delayms(5);
if((hole1==0) && (P3==0x00))
{
while(((hole1==0) && (P3==0x00)));
flag1=1; //標(biāo)志得分不進(jìn)行scankey
flag2=1; //標(biāo)識(shí)得分buzzer
score++;
playBuzzer() 51、;
hole1=0;
P3=0x00;
}
}
}
unsigned char random() //隨機(jī)數(shù)
{
temp++;
result=rand()%9+1;
return result;
}
void displayhole() //hole地鼠顯示
{
holenum=random();
if(holenum==0)
holenum++;
wr_com(0xc0+0x06);
delayus(5);
wr_dat(0x30+holenum);
delayus(5);
switch 52、(holenum)
{
case 0: break;
case 1: //1號(hào)洞亮
hole1=1;
P3=hole[1];
break;
case 2: //2號(hào)洞亮
hole1=0;
P3=hole[2];
break;
case 3: //3號(hào)洞亮
hole1=0;
P3=hole[3];
break;
case 4: //4號(hào)洞亮
hole1=0;
P3=hole[4];
bre 53、ak;
case 5: //5號(hào)洞亮
hole1=0;
P3=hole[5];
break;
case 6: //6號(hào)洞亮
hole1=0;
P3=hole[6];
break;
case 7: //7號(hào)洞亮
hole1=0;
P3=hole[7];
break;
case 8: //8號(hào)洞亮
hole1=0;
P3=hole[8];
break;
case 9: / 54、/9號(hào)洞亮
hole1=0;
P3=hole[9];
break;
}
}
void pause() //暫停/恢復(fù)游戲
{
if(button2==0) //暫停鍵
{
delayms(5); //去抖動(dòng)
if(button2==0)
{
while(!button2);
TR1=~TR1;
flag5=~flag5;
return;
}
}
}
void Gameinit() //游戲開始時(shí)數(shù)據(jù)初始化
{
flag1=0;// 55、scankey標(biāo)識(shí)
flag2=0;//蜂鳴器標(biāo)志位
flag3=0;//出洞結(jié)束標(biāo)識(shí)
flag4=0;//timeover標(biāo)識(shí)
time=30;
if(level==0) //重新開始闖關(guān),則清零得分
score=0;
wr_com(0x01); //清屏
delayus(5);
wr_com(0x80);
delayus(5);
for(i=0; i<15; i++) //固定內(nèi)容顯示
{
wr_dat(str8[i]);
delayus(5);
}
wr_com(0xc0);
delayus(5);
f 56、or(i=0; i<14; i++)
{
wr_dat(str15[i]);
delayus(5);
}
}
void Game() //游戲真正進(jìn)行?。。。。。。。。。?
{
Gameinit();
displaytime(); //顯示時(shí)間、分?jǐn)?shù)、洞、關(guān)卡
TR1=1; //開啟定時(shí)器1
while(1)
{
displayhole(); //地鼠出洞
while(!flag3)//地鼠出洞時(shí)間 level:3s; level2:2s; level3:1s
{
if(flag5==0)
57、 {
if(flag1==0)
scankey();
displaytime();
}
pause(); //暫停鍵判斷
};
if(flag2==0)//沒有打中地鼠
{
playBuzzer();
}
if(flag4==1)//時(shí)間到,結(jié)束game
{
displayover();
}
flag1=0;//scankey標(biāo)識(shí)
flag2=0;//蜂鳴器標(biāo)志位
flag3=0;//出洞結(jié)束標(biāo)識(shí)
flag4=0;//timeover標(biāo)識(shí)
}
}
vo 58、id displayGame() //開始游戲
{
wr_com(0x01); //清屏
delayms(5);
wr_com(0x80+0x04);
delayms(5);
for(i=0; i<6; i++) //顯示Ready
{
wr_dat(str5[i]);
delayus(5);
}
wr_com(0xc0+0x06);
delayms(5);
for(i=5; i>0; i--) //顯示倒數(shù)5秒
{
wr_dat(0x30+i);
for(j=0; j<10; j++)
dela 59、yms(100);
wr_com(0xc0+0x06);
delayms(5);
}
wr_com(0xc0+0x06);
delayms(5);
for(i=0; i<3; i++) //顯示GO
{
wr_dat(str6[i]);
delayus(5);
}
delayms(200);
Game(); //開始游戲!
}
void displayScore() //顯示得分記錄
{
getRecord();//從24C02中獲取數(shù)據(jù)
wr_com(0x01);
delayms(5);
wr_ 60、com(0x80);
delayms(5);
for(i=0; i<12; i++) //顯示當(dāng)前得分
{
wr_dat(str7[i]);
delayus(5);
}
wr_dat(0x30+score/10);
delayms(5);
wr_dat(0x30+score%10);
delayms(5);
wr_com(0xc0);
delayus(5);
for(i=0; i<5; i++) //第二行顯示top1
{
wr_dat(str13[i]);
delayus(5);
}
wr_c 61、om(0xc0+0x06); //top1
delayus(5);
wr_dat(0x30+topscore[0]/10);
delayus(5);
wr_dat(0x30+topscore[0]%10);
delayus(5);
wr_com(0xc0+0x09);
delayus(5);
wr_dat(name[0][0]);
delayus(5);
wr_dat(name[0][1]);
delayus(5);
while(1) //進(jìn)入第二頁鍵
{
if(button2==0)
{
delayms 62、(10); //去抖動(dòng)
if(button2==0)
{
while(!button2);
displayScoreNext();
break;
}
}
}
}
void displayScoreNext() //顯示分?jǐn)?shù)第二頁
{
wr_com(0x01);
delayms(5);
wr_com(0x80);
delayus(5);
for(i=0; i<5; i++) //第一行顯示top2
{
wr_dat(str16[i]);
delayus(5); 63、
}
wr_com(0x80+0x06);
delayus(5);
wr_dat(0x30+topscore[3]/10);
delayus(5);
wr_dat(0x30+topscore[3]%10);
delayus(5);
wr_com(0x80+0x09);
delayus(5);
wr_dat(name[1][0]);
delayus(5);
wr_dat(name[1][1]);
delayus(5);
wr_com(0xc0);
delayus(5);
for(i=0; i<5; i++) 64、//第二行顯示top3
{
wr_dat(str17[i]);
delayus(5);
}
wr_com(0xc0+0x06);
delayus(5);
wr_dat(0x30+topscore[6]/10);
delayus(5);
wr_dat(0x30+topscore[6]%10);
delayus(5);
wr_com(0xc0+0x09);
delayus(5);
wr_dat(name[2][0]);
delayus(5);
wr_dat(name[2][1]);
delayus(5);
w 65、hile(1) //返回鍵
{
if(button2==0)
{
delayms(10); //去抖動(dòng)
if(button2==0)
{
while(!button2);
break;
}
}
}
}
void displayExit() //顯示退出界面
{
wr_com(0x01); //清屏
delayms(5);
wr_com(0x80+0x01);
delayms(5);
for(i=0; i<8; i++)
{
w 66、r_dat(str4[i]);
delayus(5);
}
wr_com(0xc0+0x01);
delayms(5);
for(i=0; i<13; i++)
{
wr_dat(str9[i]);
delayus(5);
}
while(1)
{
Play_Song(1);
delayms(200);
}
}
void displayChoose() //顯示選擇界面
{
if(score!=0)//0分不記錄
{
Judge();//判斷并重新排序
Record();//記錄到24C02中
}
displayPrepare();
wr_com(0x80);
delayms(5);
wr_com(0x0f); //光標(biāo)閃爍
delayms(5);
i=0;
while(1)
{
if(button1==0) //選擇模式鍵
{
delayms(10); //去抖動(dòng)
if(button1=
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運(yùn)動(dòng)會(huì)安全工作預(yù)案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個(gè)人工作總結(jié)(可編輯)
- 2024年xx村兩委涉案資金退還保證書
- 2024年憲法宣傳周活動(dòng)總結(jié)+在機(jī)關(guān)“弘揚(yáng)憲法精神推動(dòng)發(fā)改工作高質(zhì)量發(fā)展”專題宣講報(bào)告會(huì)上的講話
- 2024年XX村合作社年報(bào)總結(jié)
- 2024-2025年秋季第一學(xué)期初中歷史上冊(cè)教研組工作總結(jié)
- 2024年小學(xué)高級(jí)教師年終工作總結(jié)匯報(bào)
- 2024-2025年秋季第一學(xué)期初中物理上冊(cè)教研組工作總結(jié)
- 2024年xx鎮(zhèn)交通年度總結(jié)
- 2024-2025年秋季第一學(xué)期小學(xué)語文教師工作總結(jié)
- 2024年XX村陳規(guī)陋習(xí)整治報(bào)告
- 2025年學(xué)校元旦迎新盛典活動(dòng)策劃方案
- 2024年學(xué)校周邊安全隱患自查報(bào)告
- 2024年XX鎮(zhèn)農(nóng)村規(guī)劃管控述職報(bào)告