單片機(jī)應(yīng)用進(jìn)階--俄羅斯方塊游戲板--開發(fā)詳細(xì)介紹-經(jīng)典開發(fā)流程.ppt
《單片機(jī)應(yīng)用進(jìn)階--俄羅斯方塊游戲板--開發(fā)詳細(xì)介紹-經(jīng)典開發(fā)流程.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《單片機(jī)應(yīng)用進(jìn)階--俄羅斯方塊游戲板--開發(fā)詳細(xì)介紹-經(jīng)典開發(fā)流程.ppt(46頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、基于 8052單片機(jī)和 8 16點(diǎn)陣屏 俄羅斯方塊游戲板 點(diǎn)擊圖片進(jìn)入 Step 1.硬件構(gòu)成 介紹游戲板所用主要器件及其要實(shí)現(xiàn)的功能 1.1 核心處理器 -STC80C52RC 1.2 8x8單色點(diǎn)陣 -LG12088BH-W 1.3 4-to-16 Line Decoder-MM74HC154 1.4 四位八段共陽數(shù)碼管 -LG5641BH 1.5 同向鎖存器 -SN74HC573AN 1.6 開關(guān)按鍵 1.7 焊接實(shí)物圖: Step 2.仿真軟件輔助設(shè)計(jì) Proteus 7.10仿真模塊展示 Step 3.C程序模塊簡要說明 開發(fā)概覽 Step 1.硬件構(gòu)
2、成及功能簡介 1.核心處理器 STC80C52RC 8051-based Fullly Static 24MHz CMOS controller with 32 I/O Lines 3 Timers/Counters 8 Interrupts/2 Priority Levels UART Three-Level Program Memory Lock 8K Bytes Flash Memory 128 Bytes On-chip RAM 功能:整個(gè)游戲板的控制中心 1.核心處理器 最小系統(tǒng)電路 12MHz晶振 RC復(fù)位電路 5V直流電源
3、Step 1.硬件構(gòu)成及功能簡介 2.8x8單色點(diǎn)陣 LG12088BH-W 主要參數(shù) 驅(qū)動(dòng)電流: 20 5mA 顏色:紅色 規(guī)格: 8 8黑底 數(shù)量: 2 信號源:由譯碼器提供 16行掃描信號,由鎖存器提供 8位 顯示信號和驅(qū)動(dòng)電流。 功能:提供 8 16個(gè)像素點(diǎn)的顯示屏,為游戲提供必要的 圖形顯示模塊。 Step 1.硬件構(gòu)成及功能簡介 3.4-to-16 Line Decoder MM74HC154 關(guān)鍵參數(shù) 真值表 引腳圖 Step 1.硬件構(gòu)成及功能簡介 3.4-to-16 Line Decoder 信號源: P2低四位 (
4、P1.0至 P1.3),使能 E1接 P2.7, E2接地 功能:為 8 16點(diǎn)陣提供 16行低電平掃描信號。 Step 1.硬件構(gòu)成及功能簡介 4.四位八段共陽數(shù)碼管 LG5641BH 主要參數(shù): 驅(qū)動(dòng)電流: 10mA左右 信號源:用兩塊鎖存器分別控制位選信號和段選信號。 功能:為游戲板提供必要的分?jǐn)?shù)顯示模塊。 Step 1.硬件構(gòu)成及功能簡介 5.同向鎖存器 SN74HC573AN 關(guān)鍵參數(shù) 真值表: 引腳圖: 驅(qū)動(dòng)性:可驅(qū)動(dòng)數(shù)碼管和點(diǎn)陣正常點(diǎn)亮 數(shù)量: 3塊 Step 1.硬件構(gòu)成及功能簡介 5.同向鎖存器 . 作為點(diǎn)陣顯示信號輸送和驅(qū)動(dòng)
5、的鎖存器 (一塊 ) 信號源:單片機(jī) P3I/O 功能:給點(diǎn)陣送顯示信號并提供驅(qū)動(dòng)電流。 (LE接地 ) Step 1.硬件構(gòu)成及功能簡介 5.同向鎖存器 . 作為 P0口拓展和數(shù)碼管位選、段選信號輸送以及驅(qū)動(dòng) 電流提供鎖存器 (兩塊 )。 信號源:單片機(jī) P0口 (已上拉 10K電阻 )。 兩個(gè)鎖存控制端接在單片機(jī) P2口。 功能:為數(shù)碼管送入段選信號和位選信號,提供電流驅(qū)動(dòng) Step 1.硬件構(gòu)成及功能簡介 6.開關(guān)按鍵 一個(gè)自鎖開關(guān):用作整個(gè)游戲板的開關(guān) (帶發(fā)光二極管 )。 六個(gè)按鍵:一個(gè)用作復(fù)位鍵,其余五個(gè)用作人為
6、控制輸入。 信號源:人為擊按。 功能: Start/Suspend鍵:游戲開始和暫??刂? Up鍵:控制形狀逆時(shí)針旋轉(zhuǎn) Left和 Right鍵:控制形狀左右移動(dòng)一格 Down鍵:控制形狀快速下降 Step 1.硬件構(gòu)成及功能簡介 焊接實(shí)物圖: Step 1.硬件構(gòu)成及功能簡介 點(diǎn)陣和單片機(jī)正面 點(diǎn)陣和單片機(jī)反面 焊接實(shí)物圖: Step 1.硬件構(gòu)成及功能簡介 數(shù)碼管正面 數(shù)碼管反面 焊接實(shí)物圖: Step 1.硬件構(gòu)成及功能簡介 程 序 運(yùn) 行 時(shí) 狀 態(tài) Proteus 7.10仿真模塊展示 單片機(jī)最小系統(tǒng)模塊 按鍵模塊 St
7、ep 2.仿真軟件輔助設(shè)計(jì) Proteus 7.10仿真模塊展示 點(diǎn)陣顯示模塊 Step 2.仿真軟件輔助設(shè)計(jì) Proteus 7.10仿真模塊展示 四位數(shù)字顯示模塊 Step 2.仿真軟件輔助設(shè)計(jì) Proteus 7.10仿真模塊展示 仿真運(yùn)行時(shí) Proteus設(shè)計(jì)文件 視頻文件 Step 2.仿真軟件輔助設(shè)計(jì) 視頻文件 資料 簡單的操作示意 .avi Proteus設(shè)計(jì)文件 俄羅斯方塊 -高度仿真版 .DSN 詳細(xì)內(nèi)容見附件 Step 3.C程序模塊簡要說明 附件 1:Keil工程文件夾 俄羅斯方塊 keil文件 附件 2:C51程序文件 elsfk
8、.c 附件 3:C51程序文件 word版 俄羅斯方塊 C程序 .doc /***************************************************************************************** 名稱: 基于 8052單片機(jī)和 8X16點(diǎn)陣屏俄羅斯方塊游戲板 時(shí)間: 2012年 05月 23日 17時(shí) 單位:武漢理工大學(xué)信息學(xué)院電子 1003班 作者:電子那點(diǎn)事(新浪微博賬號,歡迎關(guān)注) *******************************************************************
9、**********************/ #include #include #include #define uchar unsigned char sbit slock=P27; //譯碼器輸出使能端 sbit upkey=P23; //“旋轉(zhuǎn)圖形 /向上 ” 按鍵 sbit leftkey=P21; //“左移 /向左 ” 按鍵 sbit rightkey=P22; //“右移 /向右 ” 按鍵 sbit downkey=P20; //“快速下移 /向下 ” 按鍵 sbit duan=P25; //數(shù)碼管段選信號所用鎖存器的鎖存允許端 sbit wei=P26; //數(shù)
10、碼管位選信號所用鎖存器的鎖存允許端 sbit startsuspendkey=P24; //“開始 /暫停 /繼續(xù) ” 多功能切換按鍵 Step 3.C程序模塊簡要說明 /***********************************圖形編碼機(jī)制介紹 ************************************** 1.由于俄羅斯方塊圖形的寬度和高度最多只有四位,所以要以 4X4為基本單元。 2.硬件采用 16行掃描、 8位送顯示信號 3.各個(gè)圖形的寬度不一致,所以要人為給圖形設(shè)定居中位置。 若圖形寬度為偶數(shù)可直接將其居中,若為奇數(shù)則靠左居中。 4.由于圖形
11、需要旋轉(zhuǎn),所以由基本的圖形會(huì)衍生出另外 3種圖形。 5.因此每個(gè)圖形應(yīng)該給定 4個(gè) 8位的二進(jìn)制碼,并放入一個(gè)二維數(shù)組里。 6.經(jīng)典俄羅斯方塊游戲里有 19種不同形狀的方塊,包括旋轉(zhuǎn)得到的。 7.數(shù)組的第一個(gè)下標(biāo)為該圖形的編號 *****************************************************************************************/ uchar code allshape194= 0 x00,0 x00,0 x18,0 x18,0 x10,0 x10,0 x10,0 x10,0 x00,0 x00,0 x00,0
12、 x3c, 0 x00,0 x08,0 x18,0 x10,0 x00,0 x00,0 x30,0 x18,0 x00,0 x10,0 x18,0 x08, 0 x00,0 x00,0 x18,0 x30,0 x00,0 x08,0 x08,0 x18,0 x00,0 x00,0 x38,0 x08, 0 x00,0 x18,0 x10,0 x10,0 x00,0 x00,0 x20,0 x38,0 x00,0 x10,0 x10,0 x18, 0 x00,0 x00,0 x08,0 x38,0 x00,0 x18,0 x08,0 x08,0 x00,0 x00,0 x38,0 x20
13、, 0 x00,0 x00,0 x10,0 x38,0 x00,0 x08,0 x18,0 x08,0 x00,0 x00,0 x38,0 x10, 0 x00,0 x10,0 x18,0 x10; /****************************************************************************************/ Step 3.C程序模塊簡要說明 //數(shù)碼管數(shù)形顯示編碼 uchar code number10=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0
14、x90; //位選信號編碼,方便寫循環(huán)使用 uchar code weima4=0 x01,0 x02,0 x04,0 x08; //各個(gè)圖形的寬度屬性,用于判斷左移和右移的步格數(shù)上限 char shapewidth19=2,1,4,2,3,2,3,2,3,2,3,2,3,2,3,3,2,3,2; //旋轉(zhuǎn)圖形時(shí),用于改變圖形的編號以實(shí)現(xiàn)圖形的切換 char shaperotate19=0,2,1,4,3,6,5,8,9,10,7,12,13,14,11,16,17,18,15; //用于存儲(chǔ)方塊降落后固定顯示的圖形信息 uchar staticdata20=0,0,0,0,0,0,
15、0,0,0,0,0,0,0,0,0,0,0,0,0,0 xff; //規(guī)定一次性消掉的行數(shù)的分?jǐn)?shù)獎(jiǎng)勵(lì)機(jī)制 uchar rate5=0,1,3,6,10; /****************************************************************************************/ Step 3.C程序模塊簡要說明 /*************************************全局變量聲明 ***************************************/ char y;//方塊位置屬性:底部
16、下落的高度, y=0時(shí):剛剛出現(xiàn), y=15時(shí):下落到屏幕最底部 char shapenum;//方塊形狀屬性:從 0到 18 int left; //方塊位置屬性:方塊偏離居中位置的格數(shù),不同的方塊 left值的上限不同 int mark; //玩家分?jǐn)?shù)變量 int speed; //方塊下落速度變量 int initialspeed;//方塊下落的初始速度 int systemspeed;//系統(tǒng)下落速度,此值會(huì)隨著玩家分?jǐn)?shù)的增加而減小,相應(yīng)的下落速度會(huì)增大 int fastspeed;//當(dāng)用戶按下 down鍵時(shí),方塊下落速度為此值 int k;//一個(gè)全局循環(huán)變量, “
17、幀數(shù) ” 變量 int startcontrol=1;//開始畫面狀態(tài)指示變量,為 1時(shí)說明程序進(jìn)入開機(jī)歡迎界面 int suspendcontrol=0;//游戲暫停與游戲繼續(xù)畫面狀態(tài)指示變量,為 1說明處在暫停界面。 int randnum;//隨機(jī)數(shù)變量,用于產(chǎn)生隨機(jī)方塊 /****************************************************************************************/ Step 3.C程序模塊簡要說明 /****************************************函數(shù)聲明 *
18、***************************************/ void delayms(int); //粗略延時(shí)函數(shù) uchar move(uchar,int);//對二進(jìn)制碼實(shí)行移位,可為負(fù)值 void shapedisplay(); //對點(diǎn)陣掃描一場,對數(shù)碼管掃描一場,用于顯示圖形和數(shù)字 void keyscan();//對所有鍵盤掃描一次,并執(zhí)行相應(yīng)運(yùn)算和操作 uchar check(char,int);//用于檢查方塊將要下落的位置或是將要旋轉(zhuǎn)的位置是否有障礙 uchar shapedisappear();//用于消行,返回一次性消掉的行數(shù) numbe
19、rdisplay(int amark);//用于四位數(shù)字顯示 void startimage();//游戲等待開始畫面函數(shù) void overimage();//游戲結(jié)束后的畫面 void dataset();//對數(shù)據(jù)初始化,為游戲重新開始做準(zhǔn)備 /****************************************************************************************/ Step 3.C程序模塊簡要說明 /*****************************************主函數(shù) ****************
20、*************************/ void main() char j; startimage(); //進(jìn)入開機(jī),函數(shù)內(nèi)有鍵盤掃描,只有按下 “ 開始 ” 鍵會(huì)退出函數(shù),否則不退 出 dataset(); //對數(shù)據(jù)進(jìn)行初始化 while(1) //進(jìn)入大循環(huán) k=speed; //確定顯示的幀數(shù) while(k--) keyscan(); //掃描鍵盤,放入高速循環(huán)語句中提高鍵盤的響應(yīng)速度, 并檢測此時(shí)用戶是否有相應(yīng)請求 shapedisplay(); //顯示圖形和數(shù)字 y++; //圖形下落一格 Step 3.C程序模塊簡要說明
21、 if(check(shapenum,left)) //在沒有顯示之前判斷將要下落的位置是否 有障礙物,如果有障礙就進(jìn)入到 if語句中 if(y==1) //如果 y=1;說明方塊剛出現(xiàn)就遇到障礙物了, 這時(shí)游戲需結(jié)束 overimage(); //進(jìn)入游戲結(jié)束畫面,此函數(shù)內(nèi)沒有鍵盤掃 描,運(yùn)行一段時(shí)間會(huì)自動(dòng)退出 startimage(); //又進(jìn)入開機(jī)畫面 dataset(); //對數(shù)據(jù)進(jìn)行初始化,將前一用戶數(shù)據(jù)清零 else //遇到障礙物,但還不至于圖形不能出現(xiàn) for(j=0;j0;i--) for(j=110;j0;j--); /*
22、***************************************************************************************/ uchar move(uchar aa,int anum) //移位函數(shù) if(anum=0) aa<=(-anum); return aa; /****************************************************************************************/ Step 3.C程序模塊簡要說明 void shapedisplay()
23、//顯示函數(shù) uchar j; for(j=y<3?3-y:0;j<4;j++) //顯示動(dòng)態(tài)方塊 slock=1;P1=j+y-3;P3=move(allshapeshapenumj,left); slock=0;delayms(1);P3=0 x00; for(j=0;j<16;j++) //顯示靜態(tài)方塊 slock=1;P1=j;P3=staticdataj+3; slock=0;delayms(1);P3=0 x00; numberdisplay(mark); //分?jǐn)?shù)顯示 /************************************
24、****************************************************/ Step 3.C程序模塊簡要說明 numberdisplay(int amark) //大數(shù)拆分并顯示,帶去無效零功能 char i; uchar num4; num0=amark/1000%10;num1=amark/100%10;num2=amark/10%10;num3=amark%10; if(amark<10) //顯示一位數(shù) for(i=3;i<4;i++) P0=0 xff; duan=1; P0=numbernumi; duan=0;
25、 P0=0 x00; wei=1; P0=weimai; wei=0; delayms(1); wei=1; P0=0 x00; wei=0; Step 3.C程序模塊簡要說明 else if(amark<100) //顯示兩位數(shù) for(i=2;i<4;i++) P0=0 xff; duan=1; P0=numbernumi; duan=0; P0=0 x00; wei=1; P0=weimai; wei=0; delayms(1); wei=1; P0=0 x00; wei=0; St
26、ep 3.C程序模塊簡要說明 else if(amark<1000) //顯示三位數(shù) for(i=1;i<4;i++) P0=0 xff; duan=1; P0=numbernumi; duan=0; P0=0 x00; wei=1; P0=weimai; wei=0; delayms(1); wei=1; P0=0 x00; wei=0; Step 3.C程序模塊簡要說明 else //顯示四位數(shù) for(i=0;i<4;i++) P0=0 xff; duan=1; P0=numbernumi; dua
27、n=0; P0=0 x00; wei=1; P0=weimai; wei=0; delayms(1); wei=1; P0=0 x00; wei=0; return 0; /****************************************************************************************/ Step 3.C程序模塊簡要說明 void keyscan() //鍵盤掃錨并執(zhí)行用戶輸入的指令 //按鍵無效條件: 1.左移超邊緣; 2.左移遇障礙; 3.處在歡迎界面; 4.處在暫停界面
28、if(leftkey==0 if(rightkey==0) left--; //按鍵命令:方塊右移一位 speed=systemspeed; while(!rightkey) shapedisplay(); Step 3.C程序模塊簡要說明 //按鍵無效條件: 1.翻轉(zhuǎn)超左右邊緣; 2.翻轉(zhuǎn)遇障礙; 3.處在歡迎界面; 4.進(jìn)入暫停界面 if(upkey==0 i--; return j; //返回 0,說明沒有障礙 /*****************************************************
29、***********************************/ Step 3.C程序模塊簡要說明 uchar shapedisappear()//方塊落定后消掉拼滿的行,并使沒有拼滿的行整體下移填補(bǔ)空缺行 char i,j,r=4; for(i=0;i0;j--) staticdataj=staticdataj-1; i--,r--; return 4-r; //函數(shù)返回一次性消掉的行的數(shù)目 /*****************************************************************************
30、***********/ Step 3.C程序模塊簡要說明 void startimage() //開機(jī)歡迎畫面,在沒有按鍵作用的時(shí)候會(huì)不斷執(zhí)行 uchar i,j; startcontrol=1; while(startcontrol) for(i=10;i0;i--) for(j=0;j<16;j+=2) slock=1;P1=j;P3=0 xaa; slock=0;delayms(1);P3=0 x00; for(j=1;j0;i--) for(j=1;j<16;j+=2) slock=1;P1=j;P3=0 xaa; slock=0;d
31、elayms(1);P3=0 x00; for(j=0;j<16;j+=2) slock=1;P1=j;P3=0 x55; slock=0;delayms(1);P3=0 x00; keyscan(); //隨時(shí)響應(yīng)用戶輸入 /****************************************************************************************/ Step 3.C程序模塊簡要說明 void overimage() //游戲結(jié)束畫面,分?jǐn)?shù)會(huì)強(qiáng)制閃爍 8次,并自動(dòng)結(jié)束 int i,j; f
32、or(j=0;j<8;j++) for(i=0;i<200;i++) numberdisplay(mark); delayms(500); /****************************************************************************************/ Step 3.C程序模塊簡要說明 void dataset() //數(shù)據(jù)全部清零,重新開始游戲 char j; startcontrol=1; suspendcontrol=0; y=0; left=0; shapenum=0; initialspeed=100; speed=initialspeed; systemspeed=initialspeed; fastspeed=5; randnum=rand()%19; shapenum=randnum; mark=0; for(j=0;j<19;j++) //清除點(diǎn)陣上的顯示數(shù)據(jù) staticdataj=0; /****************************************************************************************/ Step 3.C程序模塊簡要說明
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 外研版(一起)英語一年級上冊Module-5課件
- 外研版(一起)五上Module-10《Unit-1-You-should-tidy-your課件
- 認(rèn)識線段課件
- 患者病情評估培訓(xùn)完整
- 早產(chǎn)兒的護(hù)理教學(xué)
- 我們吃的食物安全嗎
- 鹽酸硫酸—浙教版九級科學(xué)上冊課件1
- 人工智能遺傳算法
- 硬質(zhì)景觀的細(xì)部處理龍湖
- 人教版小學(xué)二年級上冊數(shù)學(xué)8的乘法口訣
- 郵輪旅游世界郵輪產(chǎn)業(yè)經(jīng)濟(jì)的發(fā)展
- 如何繪制出高品質(zhì)的學(xué)科思維導(dǎo)圖
- 美國癲癇學(xué)會(huì)驚厥性癲癇持續(xù)狀態(tài)治療指南解讀
- 城市公共空間設(shè)計(jì)理論及方法課件
- (課件)正弦定理公開課