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

下載本文檔

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

文檔簡介

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

STC80C52RC

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

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)的顯示屏,為游戲提供必要的 圖形顯示模塊。

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點(diǎn)陣提供16行低電平掃描信號。Step1.硬件構(gòu)成及功能簡介5.同向鎖存器 SN74HC573AN 關(guān)鍵參數(shù)真值表:引腳圖:驅(qū)動(dòng)性:可驅(qū)動(dòng)數(shù)碼管和點(diǎn)陣正常點(diǎn)亮數(shù)量:3塊Step1.硬件構(gòu)成及功能簡介5.同向鎖存器 Ⅰ.作為點(diǎn)陣顯示信號輸送和驅(qū)動(dòng)的鎖存器(一塊)

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

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

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

Step1.硬件構(gòu)成及功能簡介焊接實(shí)物圖:Step1.硬件構(gòu)成及功能簡介點(diǎn)陣和單片機(jī)正面點(diǎn)陣和單片機(jī)反面焊接實(shí)物圖:Step1.硬件構(gòu)成及功能簡介數(shù)碼管正面數(shù)碼管反面焊接實(shí)物圖:Step1.硬件構(gòu)成及功能簡介程序運(yùn)行時(shí)狀態(tài)Proteus7.10仿真模塊展示 點(diǎn)陣顯示模塊Step2.仿真軟件輔助設(shè)計(jì)Proteus7.10仿真模塊展示 四位數(shù)字顯示模塊Step2.仿真軟件輔助設(shè)計(jì)Proteus7.10仿真模塊展示 仿真運(yùn)行時(shí)[Proteus設(shè)計(jì)文件][視頻文件]Step2.仿真軟件輔助設(shè)計(jì)視頻文件資料\簡單的操作示意.aviProteus設(shè)計(jì)文件俄羅斯方塊-高度仿真版.DSN/*****************************************************************************************名稱:《基于8052單片機(jī)和8X16點(diǎn)陣屏俄羅斯方塊游戲板》時(shí)間:2012年05月23日17時(shí)單位:武漢理工大學(xué)信息學(xué)院電子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程序模塊簡要說明/***********************************圖形編碼機(jī)制介紹**************************************1.由于俄羅斯方塊圖形的寬度和高度最多只有四位,所以要以4X4為基本單元。2.硬件采用16行掃描、8位送顯示信號3.各個(gè)圖形的寬度不一致,所以要人為給圖形設(shè)定居中位置。若圖形寬度為偶數(shù)可直接將其居中,若為奇數(shù)則靠左居中。4.由于圖形需要旋轉(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)為該圖形的編號*****************************************************************************************/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};//各個(gè)圖形的寬度屬性,用于判斷左移和右移的步格數(shù)上限 charshapewidth[19]={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)圖形的切換 charshaperotate[19]={0,2,1,4,3,6,5,8,9,10,7,12,13,14,11,16,17,18,15};//用于存儲(chǔ)方塊降落后固定顯示的圖形信息ucharstaticdata[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xff};//規(guī)定一次性消掉的行數(shù)的分?jǐn)?shù)獎(jiǎng)勵(lì)機(jī)制ucharrate[5]={0,1,3,6,10};/****************************************************************************************/ Step3.C程序模塊簡要說明/****************************************函數(shù)聲明****************************************/voiddelayms(int); //粗略延時(shí)函數(shù)ucharmove(uchar,int);//對二進(jìn)制碼實(shí)行移位,可為負(fù)值voidshapedisplay(); //對點(diǎn)陣掃描一場,對數(shù)碼管掃描一場,用于顯示圖形和數(shù)字voidkeyscan();//對所有鍵盤掃描一次,并執(zhí)行相應(yīng)運(yùn)算和操作ucharcheck(char,int);//用于檢查方塊將要下落的位置或是將要旋轉(zhuǎn)的位置是否有障礙ucharshapedisappear();//用于消行,返回一次性消掉的行數(shù)numberdisplay(intamark);//用于四位數(shù)字顯示voidstartimage();//游戲等待開始畫面函數(shù)voidoverimage();//游戲結(jié)束后的畫面voiddataset();//對數(shù)據(jù)初始化,為游戲重新開始做準(zhǔn)備/****************************************************************************************/Step3.C程序模塊簡要說明/*****************************************主函數(shù)*****************************************/voidmain(){ charj; 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++; //圖形下落一格Step3.C程序模塊簡要說明/***************************************自定義函數(shù)***************************************/voiddelayms(intxms) //粗略的延時(shí)函數(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++){ //顯示動(dòng)態(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); //分?jǐn)?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.進(jìn)入暫停界面 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)進(jìn)入快速下降狀態(tài);2.處在歡迎界面;3.進(jìn)入暫停界面 if(downkey==0){ speed=fastspeed;//按鍵命令:將方塊下落速度加快 k=speed; while(!downkey){ shapedisplay(); } } } if(startsuspendkey==0&&startcontrol==1&&suspendcontrol==0){ delayms(10);//按鍵有效條件:1.處在開始?xì)g迎界面;2.處在暫停界面 if(startsuspendkey==0){ startcontrol=0; suspendcontrol=0; //按鍵命令:使進(jìn)入繼續(xù)游戲狀態(tài) while(!startsuspendkey){ } } }Step3.C程序模塊簡要說明 if(startsuspendkey==0&&startcontrol==0&&suspendcontrol==0){ delayms(10); //按鍵無效條件:1.處在開始?xì)g迎界面;2.處在暫停狀態(tài) if(startsuspendkey==0){ suspendcontrol=1; startcontrol=0; //按鍵命令:狀態(tài)切換,使進(jìn)入暫停狀態(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)切換,使進(jìn)入繼續(xù)游戲狀態(tài) while(!startsuspendkey){ shapedisplay(); } } }}/****************************************************************************************/Step3.C程序模塊簡要說明ucharcheck(charashapenum,intaleft) //判斷方塊是否會(huì)遇到障礙物{ 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()//方塊落定后消掉拼滿的行,并使沒有拼滿的行整體下移填補(bǔ)空缺行{ 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() //開機(jī)歡迎畫面,在沒有按鍵作用的時(shí)候會(huì)不斷執(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)容里面會(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論