




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單片機(jī)課程實(shí)訓(xùn)作品說(shuō)明書(shū) 姓名:武躍忠 完成時(shí)間: 2016年 7 月 4 日 作品說(shuō)明介紹 1作品名稱(chēng):掌上游戲機(jī)(俄羅斯方塊) 2作品實(shí)現(xiàn)功能: a)按下、左、右鍵控制圖形改變位置; b)圖形在落到底部和障礙物上時(shí),把圖形變?yōu)檎系K物; c)復(fù)位鍵使游戲重新開(kāi)始; d)暫停/繼續(xù)鍵可以暫停、繼續(xù)游戲 3.選擇目的:實(shí)踐單片機(jī)課程所學(xué)到的知識(shí)。 作品操作介紹 1作品外觀圖 點(diǎn)陣屏:顯示障礙物以及圖形 零歐電阻,用作飛線 16個(gè)1K歐電阻,用來(lái)限制電流大小 STC12C5A60S單片機(jī),用來(lái)燒錄燒錄主控程序,是整個(gè)作品的控 制器 74LS154N芯片(4-16)譯碼器,用來(lái)產(chǎn)生列選信號(hào) 電源指示
2、燈:通電時(shí)點(diǎn)亮 微動(dòng)開(kāi)關(guān) 1:向上的按鍵,用于改變圖形 排針:用于連接電源正負(fù)極以及 RXD和TXD 10K 歐電阻,用來(lái)限制通過(guò)電源指示燈的電流 微動(dòng)開(kāi)關(guān) 2:功能按鍵,用于游戲的復(fù)位操作 ? 自鎖開(kāi)關(guān) : 實(shí)現(xiàn)整體的電源總控制(斷負(fù)) ? 微動(dòng)開(kāi)關(guān) 3:功能按鍵,用于游戲的暫停 / 繼續(xù) ? 微動(dòng)開(kāi)關(guān) 4:向右的按鍵,用于圖形右移 ? 微動(dòng)開(kāi)關(guān) 5:向下的按鍵,用于圖形下移 ? 微動(dòng)開(kāi)關(guān) 6:向左的按鍵,用于圖形左移 2. 作品功能介紹及操作說(shuō)明 a) 給游戲機(jī)上電 將電源正極接在排針處標(biāo)有 VCC 的位置 將電源負(fù)極接在排針處標(biāo)有 GND 的位置 按下自鎖開(kāi)關(guān)完成上電 b) 讓圖形移動(dòng)或
3、改變圖形朝向 按向上鍵:改變圖形的朝向 按向下鍵:讓圖形瞬間落到可以下落的最下方 按向左鍵:圖形向左移動(dòng)一位 按向右鍵:圖形向右移動(dòng)一位 c) 游戲暫停 /繼續(xù)、復(fù)位 按暫停 / 繼續(xù)鍵:游戲暫停 / 繼續(xù) 按復(fù)位鍵:游戲復(fù)位,重新開(kāi)始 三、作品制作說(shuō)明 1.電路原理圖 PETJ fR40 AXHFM j EX /FM.i Pi T 3ND PJ l.AP POCUiCO KI1JM71 用蓉 PQ WC6 冃0 3EM po POWAtSB 因丁加口7 叭mi PI 1EEX P12 M 3 PI 4 Ri.e ph p? aiMi P7 4I7 P25JA13 PJ sbit key_ri
4、ght=P3A7; sbit key_up=P3A5; sbit key_dow n=P3A6; sbit key_start=P3A3; sbit key_reset=P3A2; /方向按鍵左 /方向按鍵右 /方向按鍵上 /方向按鍵下 /功能按鍵暫停,開(kāi)始 /功能按鍵復(fù)位 /圖形落地之前 障礙物圖形落地之后 shape In dex用來(lái)記錄當(dāng)前形狀,shapex un sig ned char shape162; un sig ned char map162; /line用來(lái)在顯示時(shí)候標(biāo)記列數(shù), shapey用來(lái)記錄圖形所在位置 unsigned char line,shapeIndex,s
5、hapex,shapey; unsigned char code fk22=1,1,/ 方塊 1,1; unsigned char code sx144=0,1,0,0, / 豎線 0,1,0,0, 0,1,0,0, 0,1,0,0; unsigned char code sx244=0,0,0,0, 0,0,0,0, 1,1,1,1, 0,0,0,0; unsigned char code zl133=1,0,0,/ 正 L 形 1,0,0, 1,1,0; unsigned char code zl233=0,0,1, 1,1,1, 0,0,0; unsigned char code zl3
6、33=0,1,1, 0,0,1, 0,0,1; unsigned char code zl433=1,1,1, 1,0,0, 0,0,0; unsigned char code fl133=0,1,0,/ 反 L 形 0,1,0, 1,1,0; unsigned char code fl233=1,1,1, 0,0,1, 0,0,0; unsigned char code fl333=0,1,1, 0,1,0, 0,1,0; unsigned char code fl433=1,0,0, 1,1,1, 0,0,0; unsigned char code zz133=1,0,0,/ 正 Z 形
7、1,1,0, 0,1,0; unsigned char code zz233=0,1,1, 1,1,0, 0,0,0; unsigned char code fz133=0,1,0,/ 反 Z 形 1,1,0, 1,0,0; unsigned char code fz233=1,1,0, 0,1,1, 0,0,0; unsigned char code txz133=0,1,0, 1,1,1, 0,0,0; unsigned char code txz233=0,0,1, 0,1,1, 0,0,1; unsigned char code txz333=1,1,1, 0,1,0, 0,0,0;
8、unsigned char code txz433=1,0,0, 1,1,0, 1,0,0; bit game_reset; void shapeLeft(bit flag); void delay(unsigned int i) unsigned int j; while(i-) for(j=600;j0;j-); /T 形 /用來(lái)標(biāo)記游戲是否被重置 /聲明圖形左移的函數(shù) /軟件延時(shí)函數(shù) void mapClear(void) unsigned int i,j; for(i=0;i16;i+) for(j=0;j2;j+) mapij=0; /清除背景數(shù)組函數(shù) /清除圖形數(shù)組函數(shù) void
9、shapeClear(void) unsigned int i,j; for(i=0;i16;i+) for(j=0;j2;j+) shapeij=0; void shapeToMap(void) /把圖形變?yōu)楸尘暗暮瘮?shù) unsigned int i,j; for(i=0;i16;i+) for(j=0;j2;j+) mapij|=shapeij; void txToShape()把圖形載入到shape數(shù)組 /i,j 為循環(huán)變量, t,k 為臨時(shí)變量,其他為指向各種大小的二位數(shù)組的指 針 unsigned char i,j,t,k,(*tx2)2,(*tx3)3,(*tx4)4; shapeC
10、lear(); switch(shapeIndex)/根據(jù)需要的圖形的標(biāo)號(hào),找到對(duì)應(yīng)的圖形數(shù)組 case 0: tx2=fk; k=2; break; case 1: tx4=sx1; k=4; break; case 2: tx4=sx2; k=4; break; case 3: tx3=zl1; k=3; break; case 4: tx3=zl2; k=3; break; case 5: tx3=zl3; k=3; break; case 6: tx3=zl4; k=3; break; case 7: tx3=fl1; k=3; break; case 8: tx3=fl2; k=3;
11、 break; case 9: tx3=fl3; k=3; break; case 10: tx3=fl4; k=3; break; case 11: tx3=zz1; k=3; break; case 12: tx3=zz2; k=3; break; case 13: tx3=fz1; k=3; break; case 14: tx3=fz2; k=3; break; case 15: tx3=txz1; k=3; break; case 16: tx3=txz2; k=3; break; case 17: tx3=txz3; k=3; break; case 18: tx3=txz4; s
12、hape數(shù)組中 switch(k)/ 把找到的圖形數(shù)組放入 case 2: for(i=0;ik;i+) for(j=0;j7) t=(0 x01(i+shapex-8); shape15-shapey-j+11|=t; else t=(0 x01(i+shapex); shape15-shapey-j+10|=t; break; case 3: for(i=0;ik;i+) for(j=0;j7) t=(0 x01(i+shapex-8); shape15-shapey-j+11|=t; else t=(0 x01(i+shapex); shape15-shapey-j+10|=t; bre
13、ak; case 4: for(i=0;ik;i+) for(j=0;j7) t=(0 x01(i+shapex-8); shape15-shapey-j+11|=t; else t=(0 x01(i+shapex); shape15-shapey-j+10|=t; break; void shapeCreat(void)/創(chuàng)建一個(gè)新圖形的函數(shù) shapex=0; shapey=7; shapeIndex=rand()%19; txToShape(); bit shapeAndMap()/檢測(cè)是否與障礙物重疊 unsigned char i,j,t; for(i=0;i16;i+) for(j
14、=0;j0) return 0; return 1; bit shapeDown(void) unsigned char i,t; bit flag; flag=1; for(i=0;i=0 x80) shapeToMap(); flag=0; break; if(flag) for(i=0;i=0 x80)?1:0; shapei0=1; shapei1=1; shapei1|=t; shapex+; flag=shapeAndMap(); if(!flag) for(i=0;i=1; shapei1=1; shapei0|=t; shapeToMap(); return flag; /將圖
15、形轉(zhuǎn)換為障礙物 /圖形右移函數(shù) /沒(méi)移動(dòng)到墻體則右移 /檢測(cè)移動(dòng)是否合法,非法則撤銷(xiāo) /* 圖形左右移函數(shù) ,參數(shù) flag 表示移動(dòng)模式 為0 時(shí)無(wú)條件移動(dòng),為 1 時(shí)會(huì)檢測(cè)是否可移動(dòng) */ void shapeRight(bit flag) unsigned char i,t; if(shape00=0i15;i+) shapei0=shapei+10; shapei1=shapei+11; shape150=0; shape151=0; shapey+; else flag=0; if(flag) for(i=0;i0;i-) shapei0=shapei-10; shapei1=sha
16、pei-11; shape00=0; shape01=0; shapey-; else flag=0; if(flag) for(i=0;i16;i+)/檢測(cè)移動(dòng)是否合法,非法則撤銷(xiāo) t=shapei0 if(t!=0 x00) shapeRight(0); break; t=shapei1 if(t!=0 x00) shapeRight(0); break; void shapeChange(unsigned char oldShape) bit flag;/ 標(biāo)記圖形是否在合理范圍 /i,j 為循環(huán)變量 ,k 為臨時(shí)變量 ,存儲(chǔ)需要數(shù)組的大小,其他為指向各種大 小的數(shù)組的指針 unsign
17、ed char i,j,k,(*tx2)2,(*tx3)3,(*tx4)4; switch(shapeIndex)/根據(jù)圖形當(dāng)前狀態(tài)得出圖形下一個(gè)狀 態(tài) case 0: return; break; case 1: shapeIndex=2; tx4=sx2; k=4; break; case 2: shapeIndex=1; tx4=sx1; k=4; break; case 3: shapeIndex=4; tx3=zl2; k=3; break; case 4: shapeIndex=5; tx3=zl3; k=3; break; case 5: shapeIndex=6; tx3=zl
18、4; k=3; break; case 6: shapeIndex=3; tx3=zl1; k=3; break; case 7: shapeIndex=8; tx3=fl2; k=3; break; case 8: shapeIndex=9; tx3=fl3; k=3; break; case 9: shapeIndex=10; tx3=fl4; k=3; break; case 10: shapeIndex=7; tx3=fl1; k=3; break; case 11: shapeIndex=12; tx3=zz2; k=3; break; case 12: shapeIndex=11;
19、 tx3=zz1; k=3; break; case 13: shapeIndex=14; tx3=fz2; k=3; break; case 14: shapeIndex=13; tx3=fz1; k=3; break; case 15: shapeIndex=16; tx3=txz2; k=3; break; case 16: shapeIndex=17; tx3=txz3; k=3; break; case 17: shapeIndex=18; tx3=txz4; k=3; break; case 18: shapeIndex=15; tx3=txz1; k=3; break; flag
20、=1; /判斷變形后圖形有沒(méi)有移動(dòng)出規(guī) for(i=0;iki+) 定范圍 for(j=0;j16) break; case 3: if(shapey=0|shapey+j16) break; case 4: if(shapey=0|shapey+j16) break; if(flag)txToShape(); /如果沒(méi)有移動(dòng)出范圍則變形 if(!shapeAndMap() /如果變形后與障礙重疊則撤銷(xiāo)操 /刪除某行函數(shù) / 判斷某行是否全為 1 shapeIndex=oldShape; txToShape(); void deleteLine(void) unsigned char t,i,
21、j,k,t1; for(j=0;j2;j+) for(k=0;k8;k+) for(i=0;ik; t if(t!=0 x80k)break; if(i=16)/全為 1 則消除 for(i=0;ik); /保存不需要消除的行 t1 t=(mapi0=0 x80)?1:0; mapi0=1; /障礙全體下移 mapi1k;/把不需要消除的行放回原處 mapi1 mapi1|=t1; else t1=(0 xffk); /保存不需要消除的行 t1 t=(mapi0=0 x80)?1:0;/ 上部障礙下移 mapi0k;/把不需要消除的行放回原處 mapi0 mapi0|=t1; /圖形直接移動(dòng)到
22、底部 void shapeMoveDown(void) while(shapeDown(); void shapeMove(void) /圖形移動(dòng)的主控函數(shù) unsigned char i; bit isStart; isStart=1; /用來(lái)標(biāo)記游戲是否在運(yùn)行 1 為在運(yùn)行 0 為暫停 do /延時(shí)且檢測(cè)按鍵狀態(tài) for(i=0;i70;i+) if(!key_right if(!key_right) shapeRight(1); while(!key_right); delay(20); if(!key_left if(!key_left) shapeLeft(1); while(!ke
23、y_left); delay(20); if(!key_down if(!key_down) shapeMoveDown(); while(!key_down); delay(20); if(!key_up if(!key_up) shapeChange(shapeIndex); while(!key_up); delay(20); if(!key_start)/功能鍵暫停繼續(xù) delay(20); if(!key_start) isStart=isStart; while(!key_start); delay(20); if(!key_reset) delay(20); if(!key_re
24、set) game_reset=1; while(!key_reset); delay(20); if(game_reset)return; if(!isStart)i-; delay(10); while(shapeDown(); deleteLine(); deleteLine(); deleteLine(); deleteLine(); bit gameOver(void) unsigned int i; bit game_over; game_over=0; for(i=0;i16;i+) if(mapi0%2=1) game_over=1; break; return game_ov
25、er; void init(void) /功能鍵復(fù)位 /判斷游戲是否結(jié)束 /如果頂端有障礙則游戲結(jié)束 /初始化函數(shù) P0M1=0 x00;/設(shè)置 IO 口為強(qiáng)推模式 P0M0=0 xff; P2M1=0 x00; P2M0=0 xff; TMOD=0X01;/開(kāi)啟定時(shí)計(jì)數(shù)器 EA=1; ET0=1; TH0=(65536-1000)/256; TL0=(65536-1000)%256; /初始化地圖數(shù)組 /初始化圖形數(shù)組 /初始化游戲結(jié)束標(biāo)志 /游戲載入動(dòng)畫(huà) TR0=1; mapClear(); shapeClear(); game_reset=0; void loadGame() unsigned char i; for(i=0;i16;i+) if(i * * I I I I I I i i i i | ;,小,山 3d aEoso5un | E6Sdv| nd 乩:m 朝爛蜜 W3 i *-* * 1 * * * * a W wr * 4 00000000000000 0000000000000 *eeGereeeeoGeeeeeeeeo6G6e006GGe ceooooeeGOOOOGeeee OOGO
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 商家短視頻推廣合同協(xié)議
- 員工放假工資協(xié)議書(shū)范本
- 模特拍攝協(xié)議書(shū)范本
- 吳江區(qū)合同補(bǔ)充協(xié)議范本
- 品牌戰(zhàn)略合同協(xié)議
- 和香港非貿(mào)易合同協(xié)議
- 品牌授權(quán)生產(chǎn)合同協(xié)議
- 武漢夫妻離婚協(xié)議書(shū)模板
- 戀愛(ài)忠誠(chéng)協(xié)議書(shū)模板
- 商務(wù)用車(chē)包車(chē)合同協(xié)議
- 醫(yī)學(xué)課件:糖尿病(英文版)完整版
- 休閑度假地產(chǎn)新模式的探討與實(shí)踐-阿那亞
- 臺(tái)球廳滅火和應(yīng)急疏散預(yù)案建議9篇
- mRNA差別顯示技術(shù)解讀課件
- 2023統(tǒng)編版高中歷史必修中外歷史綱要上重點(diǎn)知識(shí)點(diǎn)歸納總結(jié)(復(fù)習(xí)必背)
- 礦山基礎(chǔ)安全管理課件
- 早產(chǎn)兒喂養(yǎng)問(wèn)題課件
- 變電站萬(wàn)能鑰匙管理制度
- 高壓配電安裝工程施工組織設(shè)計(jì)
- 小學(xué)數(shù)學(xué)-課前三分鐘.ppt
- 鋼纖維混凝土檢查井蓋J
評(píng)論
0/150
提交評(píng)論