單片機(jī)應(yīng)用進(jìn)階--俄羅斯方塊游戲板--開發(fā)詳細(xì)介紹-經(jīng)典開發(fā)流程.ppt

上傳人:w****2 文檔編號(hào):17806219 上傳時(shí)間:2020-12-07 格式:PPT 頁數(shù):46 大小:2.95MB
收藏 版權(quán)申訴 舉報(bào) 下載
單片機(jī)應(yīng)用進(jìn)階--俄羅斯方塊游戲板--開發(fā)詳細(xì)介紹-經(jīng)典開發(fā)流程.ppt_第1頁
第1頁 / 共46頁
單片機(jī)應(yīng)用進(jìn)階--俄羅斯方塊游戲板--開發(fā)詳細(xì)介紹-經(jīng)典開發(fā)流程.ppt_第2頁
第2頁 / 共46頁
單片機(jī)應(yīng)用進(jìn)階--俄羅斯方塊游戲板--開發(fā)詳細(xì)介紹-經(jīng)典開發(fā)流程.ppt_第3頁
第3頁 / 共46頁

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《單片機(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頁珍藏版)》請(qǐng)?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 信號(hào)源:由譯碼器提供 16行掃描信號(hào),由鎖存器提供 8位 顯示信號(hào)和驅(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 信號(hào)源: P2低四位 (

4、P1.0至 P1.3),使能 E1接 P2.7, E2接地 功能:為 8 16點(diǎn)陣提供 16行低電平掃描信號(hào)。 Step 1.硬件構(gòu)成及功能簡介 4.四位八段共陽數(shù)碼管 LG5641BH 主要參數(shù): 驅(qū)動(dòng)電流: 10mA左右 信號(hào)源:用兩塊鎖存器分別控制位選信號(hào)和段選信號(hào)。 功能:為游戲板提供必要的分?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)陣顯示信號(hào)輸送和驅(qū)動(dòng)

5、的鎖存器 (一塊 ) 信號(hào)源:單片機(jī) P3I/O 功能:給點(diǎn)陣送顯示信號(hào)并提供驅(qū)動(dòng)電流。 (LE接地 ) Step 1.硬件構(gòu)成及功能簡介 5.同向鎖存器 . 作為 P0口拓展和數(shù)碼管位選、段選信號(hào)輸送以及驅(qū)動(dòng) 電流提供鎖存器 (兩塊 )。 信號(hào)源:單片機(jī) P0口 (已上拉 10K電阻 )。 兩個(gè)鎖存控制端接在單片機(jī) P2口。 功能:為數(shù)碼管送入段選信號(hào)和位選信號(hào),提供電流驅(qū)動(dòng) Step 1.硬件構(gòu)成及功能簡介 6.開關(guān)按鍵 一個(gè)自鎖開關(guān):用作整個(gè)游戲板的開關(guān) (帶發(fā)光二極管 )。 六個(gè)按鍵:一個(gè)用作復(fù)位鍵,其余五個(gè)用作人為

6、控制輸入。 信號(hào)源:人為擊按。 功能: 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)事(新浪微博賬號(hào),歡迎關(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ù)碼管段選信號(hào)所用鎖存器的鎖存允許端 sbit wei=P26; //數(shù)

10、碼管位選信號(hào)所用鎖存器的鎖存允許端 sbit startsuspendkey=P24; //“開始 /暫停 /繼續(xù) ” 多功能切換按鍵 Step 3.C程序模塊簡要說明 /***********************************圖形編碼機(jī)制介紹 ************************************** 1.由于俄羅斯方塊圖形的寬度和高度最多只有四位,所以要以 4X4為基本單元。 2.硬件采用 16行掃描、 8位送顯示信號(hào) 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)為該圖形的編號(hà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; //位選信號(hào)編碼,方便寫循環(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í),用于改變圖形的編號(hào)以實(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);//對(duì)二進(jìn)制碼實(shí)行移位,可為負(fù)值 void shapedisplay(); //對(duì)點(diǎn)陣掃描一場,對(duì)數(shù)碼管掃描一場,用于顯示圖形和數(shù)字 void keyscan();//對(duì)所有鍵盤掃描一次,并執(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();//對(duì)數(shù)據(jù)初始化,為游戲重新開始做準(zhǔn)備 /****************************************************************************************/ Step 3.C程序模塊簡要說明 /*****************************************主函數(shù) ****************

20、*************************/ void main() char j; startimage(); //進(jìn)入開機(jī),函數(shù)內(nèi)有鍵盤掃描,只有按下 “ 開始 ” 鍵會(huì)退出函數(shù),否則不退 出 dataset(); //對(duì)數(shù)據(jù)進(jìn)行初始化 while(1) //進(jìn)入大循環(huán) k=speed; //確定顯示的幀數(shù) while(k--) keyscan(); //掃描鍵盤,放入高速循環(huán)語句中提高鍵盤的響應(yīng)速度, 并檢測此時(shí)用戶是否有相應(yīng)請(qǐ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(); //對(duì)數(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等.壓縮文件請(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!