《基于8052單片機和8X16點陣屏俄羅斯方塊游戲板》開發(fā)介紹課件_第1頁
《基于8052單片機和8X16點陣屏俄羅斯方塊游戲板》開發(fā)介紹課件_第2頁
《基于8052單片機和8X16點陣屏俄羅斯方塊游戲板》開發(fā)介紹課件_第3頁
《基于8052單片機和8X16點陣屏俄羅斯方塊游戲板》開發(fā)介紹課件_第4頁
《基于8052單片機和8X16點陣屏俄羅斯方塊游戲板》開發(fā)介紹課件_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

基于8052單片機和8×16點陣屏電子1003班俄羅斯方塊游戲板Step1.硬件構(gòu)成—介紹游戲板所用主要器件及其要實現(xiàn)的功能1.1核心處理器-STC80C52RC1.28x8單色點陣-LG12088BH-W1.34-to-16LineDecoder-MM74HC1541.4四位八段共陽數(shù)碼管-LG5641BH1.5同向鎖存器-SN74HC573AN1.6開關(guān)按鍵1.7焊接實物圖:Step2.仿真軟件輔助設(shè)計—Proteus7.10仿真模塊展示Step3.C程序模塊簡要說明開發(fā)概覽Step1.硬件構(gòu)成及功能簡介1.核心處理器

STC80C52RC

8051-basedFulllyStatic24MHzCMOScontrollerwith32I/OLines3Timers/Counters8Interrupts/2PriorityLevelsUARTThree-LevelProgramMemoryLock8KBytesFlashMemory128BytesOn-chipRAM功能:整個游戲板的控制中心

2.8x8單色點陣

LG12088BH-W

主要參數(shù)驅(qū)動電流:20±5mA顏色:紅色規(guī)格:8×8黑底數(shù)量:2信號源:由譯碼器提供16行掃描信號,由鎖存器提供8位 顯示信號和驅(qū)動電流。功能:提供8×16個像素點的顯示屏,為游戲提供必要的 圖形顯示模塊。

Step1.硬件構(gòu)成及功能簡介3.4-to-16LineDecoder MM74HC154 關(guān)鍵參數(shù)真值表引腳圖Step1.硬件構(gòu)成及功能簡介3.4-to-16LineDecoder 信號源:P2低四位(P1.0至P1.3),使能E1接P2.7,E2接地 功能:為8×16點陣提供16行低電平掃描信號。Step1.硬件構(gòu)成及功能簡介5.同向鎖存器 SN74HC573AN 關(guān)鍵參數(shù)真值表:引腳圖:驅(qū)動性:可驅(qū)動數(shù)碼管和點陣正常點亮數(shù)量:3塊Step1.硬件構(gòu)成及功能簡介5.同向鎖存器 Ⅰ.作為點陣顯示信號輸送和驅(qū)動的鎖存器(一塊)

信號源:單片機P3I/O 功能:給點陣送顯示信號并提供驅(qū)動電流。(LE接地)Step1.硬件構(gòu)成及功能簡介5.同向鎖存器

Ⅱ.作為P0口拓展和數(shù)碼管位選、段選信號輸送以及驅(qū)動 電流提供鎖存器(兩塊)。

信號源:單片機P0口(已上拉10K電阻)。 兩個鎖存控制端接在單片機P2口。 功能:為數(shù)碼管送入段選信號和位選信號,提供電流驅(qū)動

Step1.硬件構(gòu)成及功能簡介焊接實物圖:Step1.硬件構(gòu)成及功能簡介點陣和單片機正面點陣和單片機反面焊接實物圖:Step1.硬件構(gòu)成及功能簡介數(shù)碼管正面數(shù)碼管反面焊接實物圖:Step1.硬件構(gòu)成及功能簡介程序運行時狀態(tài)Proteus7.10仿真模塊展示 點陣顯示模塊Step2.仿真軟件輔助設(shè)計Proteus7.10仿真模塊展示 四位數(shù)字顯示模塊Step2.仿真軟件輔助設(shè)計Proteus7.10仿真模塊展示 仿真運行時[Proteus設(shè)計文件][視頻文件]Step2.仿真軟件輔助設(shè)計視頻文件資料\簡單的操作示意.aviProteus設(shè)計文件俄羅斯方塊-高度仿真版.DSN/*****************************************************************************************名稱:《基于8052單片機和8X16點陣屏俄羅斯方塊游戲板》時間:2012年05月23日17時單位:武漢理工大學信息學院電子1003班作者:顏百千*****************************************************************************************/#include<reg52.h>#include<stdlib.h>#include<math.h>#defineucharunsignedcharsbitslock=P2^7; //譯碼器輸出使能端sbitupkey=P2^3; //“旋轉(zhuǎn)圖形/向上”按鍵sbitleftkey=P2^1; //“左移/向左”按鍵sbitrightkey=P2^2; //“右移/向右”按鍵sbitdownkey=P2^0; //“快速下移/向下”按鍵sbitduan=P2^5; //數(shù)碼管段選信號所用鎖存器的鎖存允許端sbitwei=P2^6; //數(shù)碼管位選信號所用鎖存器的鎖存允許端sbitstartsuspendkey=P2^4; //“開始/暫停/繼續(xù)”多功能切換按鍵Step3.C程序模塊簡要說明/***********************************圖形編碼機制介紹**************************************1.由于俄羅斯方塊圖形的寬度和高度最多只有四位,所以要以4X4為基本單元。2.硬件采用16行掃描、8位送顯示信號3.各個圖形的寬度不一致,所以要人為給圖形設(shè)定居中位置。若圖形寬度為偶數(shù)可直接將其居中,若為奇數(shù)則靠左居中。4.由于圖形需要旋轉(zhuǎn),所以由基本的圖形會衍生出另外3種圖形。5.因此每個圖形應(yīng)該給定4個8位的二進制碼,并放入一個二維數(shù)組里。6.經(jīng)典俄羅斯方塊游戲里有19種不同形狀的方塊,包括旋轉(zhuǎn)得到的。7.數(shù)組的第一個下標為該圖形的編號*****************************************************************************************/ucharcodeallshape[19][4]={0x00,0x00,0x18,0x18,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x3c,0x00,0x08,0x18,0x10,0x00,0x00,0x30,0x18,0x00,0x10,0x18,0x08,0x00,0x00,0x18,0x30,0x00,0x08,0x08,0x18,0x00,0x00,0x38,0x08,0x00,0x18,0x10,0x10,0x00,0x00,0x20,0x38,0x00,0x10,0x10,0x18,0x00,0x00,0x08,0x38,0x00,0x18,0x08,0x08,0x00,0x00,0x38,0x20,0x00,0x00,0x10,0x38,0x00,0x08,0x18,0x08,0x00,0x00,0x38,0x10,0x00,0x10,0x18,0x10};/****************************************************************************************/Step3.C程序模塊簡要說明//數(shù)碼管數(shù)形顯示編碼ucharcodenumber[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//位選信號編碼,方便寫循環(huán)使用ucharcodeweima[4]={0x01,0x02,0x04,0x08};//各個圖形的寬度屬性,用于判斷左移和右移的步格數(shù)上限 charshapewidth[19]={2,1,4,2,3,2,3,2,3,2,3,2,3,2,3,3,2,3,2};//旋轉(zhuǎn)圖形時,用于改變圖形的編號以實現(xiàn)圖形的切換 charshaperotate[19]={0,2,1,4,3,6,5,8,9,10,7,12,13,14,11,16,17,18,15};//用于存儲方塊降落后固定顯示的圖形信息ucharstaticdata[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xff};//規(guī)定一次性消掉的行數(shù)的分數(shù)獎勵機制ucharrate[5]={0,1,3,6,10};/****************************************************************************************/ Step3.C程序模塊簡要說明/****************************************函數(shù)聲明****************************************/voiddelayms(int); //粗略延時函數(shù)ucharmove(uchar,int);//對二進制碼實行移位,可為負值voidshapedisplay(); //對點陣掃描一場,對數(shù)碼管掃描一場,用于顯示圖形和數(shù)字voidkeyscan();//對所有鍵盤掃描一次,并執(zhí)行相應(yīng)運算和操作ucharcheck(char,int);//用于檢查方塊將要下落的位置或是將要旋轉(zhuǎn)的位置是否有障礙ucharshapedisappear();//用于消行,返回一次性消掉的行數(shù)numberdisplay(intamark);//用于四位數(shù)字顯示voidstartimage();//游戲等待開始畫面函數(shù)voidoverimage();//游戲結(jié)束后的畫面voiddataset();//對數(shù)據(jù)初始化,為游戲重新開始做準備/****************************************************************************************/Step3.C程序模塊簡要說明/*****************************************主函數(shù)*****************************************/voidmain(){ charj; startimage(); //進入開機,函數(shù)內(nèi)有鍵盤掃描,只有按下“開始”鍵會退出函數(shù),否則不退出 dataset(); //對數(shù)據(jù)進行初始化 while(1){ //進入大循環(huán) k=speed; //確定顯示的幀數(shù) while(k--){ keyscan(); //掃描鍵盤,放入高速循環(huán)語句中提高鍵盤的響應(yīng)速度,并檢測此時用戶是否有相應(yīng)請求 shapedisplay(); //顯示圖形和數(shù)字 } y++; //圖形下落一格Step3.C程序模塊簡要說明/***************************************自定義函數(shù)***************************************/voiddelayms(intxms) //粗略的延時函數(shù){ inti,j; for(i=xms;i>0;i--) for(j=110;j>0;j--);}/****************************************************************************************/ucharmove(ucharaa,intanum) //移位函數(shù) { if(anum>=0) aa<<=anum; else aa>>=(-anum); returnaa;}/****************************************************************************************/Step3.C程序模塊簡要說明voidshapedisplay() //顯示函數(shù){ ucharj; for(j=y<3?3-y:0;j<4;j++){ //顯示動態(tài)方塊 slock=1;P1=j+y-3;P3=move(allshape[shapenum][j],left); slock=0;delayms(1);P3=0x00; } for(j=0;j<16;j++){ //顯示靜態(tài)方塊 slock=1;P1=j;P3=staticdata[j+3]; slock=0;delayms(1);P3=0x00; } numberdisplay(mark); //分數(shù)顯示 }/****************************************************************************************/Step3.C程序模塊簡要說明numberdisplay(intamark) //大數(shù)拆分并顯示,帶去無效零功能{ chari; ucharnum[4]; num[0]=amark/1000%10;num[1]=amark/100%10;num[2]=amark/10%10;num[3]=amark%10; if(amark<10){ //顯示一位數(shù) for(i=3;i<4;i++){ P0=0xff; duan=1; P0=number[num[i]]; duan=0; P0=0x00; wei=1; P0=weima[i]; wei=0; delayms(1); wei=1; P0=0x00; wei=0; } }Step3.C程序模塊簡要說明 elseif(amark<100){ //顯示兩位數(shù) for(i=2;i<4;i++){ P0=0xff; duan=1; P0=number[num[i]]; duan=0; P0=0x00; wei=1; P0=weima[i]; wei=0; delayms(1); wei=1; P0=0x00; wei=0; } }Step3.C程序模塊簡要說明 elseif(amark<1000){ //顯示三位數(shù) for(i=1;i<4;i++){ P0=0xff; duan=1; P0=number[num[i]]; duan=0; P0=0x00; wei=1; P0=weima[i]; wei=0; delayms(1); wei=1; P0=0x00; wei=0; } }Step3.C程序模塊簡要說明 else{ //顯示四位數(shù) for(i=0;i<4;i++){ P0=0xff; duan=1; P0=number[num[i]]; duan=0; P0=0x00; wei=1; P0=weima[i]; wei=0; delayms(1); wei=1; P0=0x00; wei=0; } } return0;/****************************************************************************************/Step3.C程序模塊簡要說明voidkeyscan() //鍵盤掃錨并執(zhí)行用戶輸入的指令{ //按鍵無效條件:1.左移超邊緣;2.左移遇障礙;3.處在歡迎界面;4.處在暫停界面 if(leftkey==0&&(left<(shapewidth[shapenum]<3?3:2))&&!check(shapenum,left+1)&& startcontrol==0&&suspendcontrol==0){ delayms(10); if(leftkey==0){ left++; //按鍵命令:方塊左移一位 speed=systemspeed; while(!leftkey){ shapedisplay(); } } }Step3.C程序模塊簡要說明 //按鍵無效條件:1.右移超邊緣;2.右移遇障礙;3.處在歡迎界面;4.處在暫停界面 if(rightkey==0 &&(left>(shapewidth[shapenum]<3?shapewidth[shapenum]5:shapewidth[shapenum]-6)) &&!check(shapenum,left-1)&&startcontrol==0&&suspendcontrol==0){ delayms(10); if(rightkey==0){ left--; //按鍵命令:方塊右移一位 speed=systemspeed; while(!rightkey){ shapedisplay(); } } }Step3.C程序模塊簡要說明 //按鍵無效條件:1.翻轉(zhuǎn)超左右邊緣;2.翻轉(zhuǎn)遇障礙;3.處在歡迎界面;4.進入暫停界面 if(upkey==0&&!check(shaperotate[shapenum],left) &&(left<(shapewidth[shaperotate[shapenum]]<3?4:3)) &&(left>(shapewidth[shaperotate[shapenum]]<3? shapewidth[shaperotate[shapenum]]-6:shapewidth[shapenum]-7)) &&startcontrol==0&&suspendcontrol==0){ delayms(10); if(upkey==0){ shapenum=shaperotate[shapenum];//按鍵命令:將翻轉(zhuǎn)后的圖形編號賦給要顯示的圖形編號 speed=systemspeed; while(!upkey){ shapedisplay(); } } }Step3.C程序模塊簡要說明 if(downkey==0&&speed!=fastspeed&&startcontrol==0&&suspendcontrol==0){ delayms(10);//按鍵無效條件:1.已經(jīng)進入快速下降狀態(tài);2.處在歡迎界面;3.進入暫停界面 if(downkey==0){ speed=fastspeed;//按鍵命令:將方塊下落速度加快 k=speed; while(!downkey){ shapedisplay(); } } } if(startsuspendkey==0&&startcontrol==1&&suspendcontrol==0){ delayms(10);//按鍵有效條件:1.處在開始歡迎界面;2.處在暫停界面 if(startsuspendkey==0){ startcontrol=0; suspendcontrol=0; //按鍵命令:使進入繼續(xù)游戲狀態(tài) while(!startsuspendkey){ } } }Step3.C程序模塊簡要說明 if(startsuspendkey==0&&startcontrol==0&&suspendcontrol==0){ delayms(10); //按鍵無效條件:1.處在開始歡迎界面;2.處在暫停狀態(tài) if(startsuspendkey==0){ suspendcontrol=1; startcontrol=0; //按鍵命令:狀態(tài)切換,使進入暫停狀態(tài) while(!startsuspendkey){ shapedisplay(); } while(suspendcontrol){ shapedisplay(); keyscan(); //等待結(jié)束暫停狀態(tài)的命令 } } }Step3.C程序模塊簡要說明 if(startsuspendkey==0&&startcontrol==0&&suspendcontrol==1){ delayms(10); //按鍵有效條件:處在暫停界面 if(startsuspendkey==0){ suspendcontrol=0; startcontrol=0; //按鍵命令:狀態(tài)切換,使進入繼續(xù)游戲狀態(tài) while(!startsuspendkey){ shapedisplay(); } } }}/****************************************************************************************/Step3.C程序模塊簡要說明ucharcheck(charashapenum,intaleft) //判斷方塊是否會遇到障礙物{ chari=3,j=0; while(!j&&i>=0){ if((move(allshape[ashapenum][i],aleft)+staticdata[y+i])!=(move(allshape[ashapenum][i],aleft)|staticdata[y+i])){ j++; } i--; } returnj; //返回0,說明沒有障礙}/****************************************************************************************/Step3.C程序模塊簡要說明ucharshapedisappear()//方塊落定后消掉拼滿的行,并使沒有拼滿的行整體下移填補空缺行{ chari,j,r=4; for(i=0;i<r;i++){ if(staticdata[y+3-i]==0xff){ for(j=y+3-i;j>0;j--){ staticdata[j]=staticdata[j-1]; } i--,r--; } } return4-r; //函數(shù)返回一次性消掉的行的數(shù)目}/****************************************************************************************/Step3.C程序模塊簡要說明voidstartimage() //開機歡迎畫面,在沒有按鍵作用的時候會不斷執(zhí)行{ uchari,j; startcontrol=1; while(startcontrol){ for(i=10;i>0;i--){ for(j=0;j<16;j+=2){ slock=1;P1=j;P3=0xaa; slock=0;delayms(1);P3=0x00; } for(j=1;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論