畢業(yè)設(shè)計(jì)-基于單片機(jī)實(shí)現(xiàn)的俄羅斯方塊游戲_第1頁
畢業(yè)設(shè)計(jì)-基于單片機(jī)實(shí)現(xiàn)的俄羅斯方塊游戲_第2頁
畢業(yè)設(shè)計(jì)-基于單片機(jī)實(shí)現(xiàn)的俄羅斯方塊游戲_第3頁
畢業(yè)設(shè)計(jì)-基于單片機(jī)實(shí)現(xiàn)的俄羅斯方塊游戲_第4頁
畢業(yè)設(shè)計(jì)-基于單片機(jī)實(shí)現(xiàn)的俄羅斯方塊游戲_第5頁
已閱讀5頁,還剩80頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

畢業(yè)設(shè)計(jì)開題報(bào)告基于單片機(jī)實(shí)現(xiàn)的俄羅斯方塊游戲系別:班級(jí):學(xué)生姓名:指導(dǎo)教師:20141218開題報(bào)告填寫要求1.開題報(bào)告作為畢業(yè)設(shè)計(jì)答辯委員會(huì)對(duì)學(xué)生答辯資格審查的依據(jù)材料之一,應(yīng)在指導(dǎo)教師指導(dǎo)下,由學(xué)生在畢業(yè)設(shè)計(jì)工作前期完成,經(jīng)指導(dǎo)教師簽署意見、專家組及系主任審查后生效;(可從教務(wù)處網(wǎng)頁上下載)打印,禁止打印在其它紙上后剪貼;3.畢業(yè)設(shè)計(jì)的開題報(bào)告應(yīng)包括以下內(nèi)容:(1)主要技術(shù)指標(biāo);(2)工作思路;(3)課題的準(zhǔn)備情況及進(jìn)度計(jì)劃;(4)參考文獻(xiàn)。4.開題報(bào)告的撰寫應(yīng)符合科技文獻(xiàn)規(guī)范,且不少于2000字;參考文獻(xiàn)應(yīng)不少于15篇,包括中外文科技期刊、教科書、專著等。5A42cm2.5cm倍行距。6一欄:理工類:A.理論研究B.應(yīng)用研究C工程設(shè)計(jì)D.軟件開發(fā)E.其它經(jīng)管文教類:A.理論研究B.應(yīng)用研究C.實(shí)證研究D.藝術(shù)創(chuàng)作E.其它“課題來源”一欄:A.科研立項(xiàng)B.社會(huì)生產(chǎn)實(shí)踐C.教師自擬D.學(xué)生自選“成果形式”一欄:A.論文B.設(shè)計(jì)說明書C.實(shí)物D.軟件E.作品畢業(yè)設(shè)計(jì)開題報(bào)告課題題目

基于單片機(jī)實(shí)現(xiàn)的俄羅斯方塊游戲□A□A■B□C□D□E■□■□□

A B C D E

課題來源同組同學(xué)

A B C D□□□■開題報(bào)告內(nèi)容(可另附頁)見附頁指導(dǎo)教師意見(指導(dǎo)教師簽名:月 日專家組及系里意見(選題是否適宜、各項(xiàng)內(nèi)容是否達(dá)到畢業(yè)設(shè)計(jì)(論文)大綱要求、整改專家組及系里意見(選題是否適宜、各項(xiàng)內(nèi)容是否達(dá)到畢業(yè)設(shè)計(jì)(論文)大綱要求、整改意見等)專家組成員簽字:教學(xué)主任(月日附頁:一、設(shè)計(jì)的目的與意義

開題報(bào)告AlexPajitnov制作的,它看似簡單但卻變化無窮,令人上癮。相信大多數(shù)用戶都還記得為它癡迷得茶不思飯不想的那個(gè)俄羅斯方塊時(shí)代。二、工作思路1.實(shí)現(xiàn)的功能:俄羅斯方塊游戲規(guī)則的實(shí)現(xiàn)2.特點(diǎn):采用單片機(jī)實(shí)現(xiàn)具有便攜性與易用性三、計(jì)劃進(jìn)度序號(hào)序號(hào)畢業(yè)設(shè)計(jì)階段性工作及成果時(shí)間安排1收集資料確定設(shè)計(jì)方案1~3周2程序設(shè)計(jì)設(shè)計(jì)4~6周3電路系統(tǒng)設(shè)計(jì)7~9周4焊接與調(diào)試10周5總體校核完成畢業(yè)設(shè)計(jì)11~13周四、參考文獻(xiàn)C[M]2004.Apress. Introduction to Visual Basic Programming [M].ProfessionalComputingandWebDesign,2006.楊元強(qiáng)??岜缺@獎(jiǎng)作品選登《LEGO俄羅斯》[J]?!翱岜缺庇螒虿邉澊筚悾?007.周潤景著.ProteusMCS-51&ARM7[M].北京:電子工業(yè)出版2006.JavaBean[R].技術(shù)及應(yīng)用學(xué)術(shù)會(huì)議,2001.JasonLam.J2ME&Gaming[M].AddisonWesley,2004.高凌琴,陳青華.俄羅斯方塊游戲關(guān)鍵技術(shù)探討[J].信息技術(shù)與信息化.2008.Java2游戲設(shè)計(jì)》[M].北京:清華大學(xué)出版社,2004.JAVA[M].北京:中國2005-5.[10]譚浩強(qiáng).C程序設(shè)計(jì).[M]北京:清華大學(xué)出版社,2003.基于單片機(jī)實(shí)現(xiàn)的俄羅斯方塊游戲MCUbasedRussiablockgame摘 要AT89S52CProteusLCDProtuesAT89S52關(guān)鍵詞:AT89S52;C語言;Proteus仿真;LCD液晶ABSTRACTThisdesignisachievedthroughtheAT89S52microcontrollerTetrisgamedesign,programmingusingClanguage,andcarriedoutbyproteussimulation.ThisdesignisachievedthroughtheAT89S52microcontrollerTetrisgamedesign,programmingusingClanguage,andcarriedoutbyproteussimulation.Thedesigntoachievethebasicfunctionsare:applicationbuttonstocontrolthebox,changeandmovement;eliminatelineandscoring;eliminatemulti-lineincentivepoints,thegameendswhentheboxfilledwithbasicfunctionssuchasTetris.MCUintheapplicationofhandheldentertainmentdeviceshavegreatpotential,itcanbebroughttoanewstage.Inordertosolvetheexternalcircuit,wemustfullyunderstandtheliquidcrystaldisplaymethodandexternalinterfaceMCUfeatures,andtheneedtoaddressthelogicalrelationship;alsounderstandthattheprincipleofLCDliquidcrystalcontroltoadataportandcontrolporttoachievetheabovetheLCDscreendisplay.Programrequiresknowledgeoftheexternalcircuitwheretheyneedtocompletethefunctionandthefunctiontobecompletedintheformofprogramminglanguageusedtoachieve.Simulationthenprotuesbuttonstocontrolanexternalboxtoplayavarietyofgraphicalgames,andachieverecordnumberofscoresandtherelationshiphadtochangethespeedofthemoduledown.Finally,theprogramdownloadedtoAT89S52MCUandtheactualoperation,theactualoperationindicatethatthisdesigncanachievebasicgamenewstage.Inordertosolvetheexternalcircuit,wemustfullyunderstandtheliquidcrystaldisplaymethodandexternalinterfaceMCUfeatures,andtheneedtoaddressthelogicalrelationship;alsounderstandthattheprincipleofLCDliquidcrystalcontroltoadataportandcontrolporttoachievetheabovetheLCDscreendisplay.Programrequiresknowledgeoftheexternalcircuitwheretheyneedtocompletethefunctionandthefunctiontobecompletedintheformofprogramminglanguageusedtoachieve.Simulationthenprotuesbuttonstocontrolanexternalboxtoplayavarietyofgraphicalgames,andachieverecordnumberofscoresandtherelationshiphadtochangethespeedofthemoduledown.Finally,theprogramdownloadedtoAT89S52MCUandtheactualoperation,theactualoperationindicatethatthisdesigncanachievebasicgamefunctions,toachievethedesiredpurpose.PAGE\*ROMANPAGE\*ROMANII目 錄緒 論 1課題背景 1電子游戲及其分類 1電子游戲發(fā)展現(xiàn)狀 2電子游戲國外發(fā)展現(xiàn)狀 2電子游戲國內(nèi)發(fā)展現(xiàn)狀 3整體設(shè)計(jì)方案 5系統(tǒng)的核心部分單片機(jī) 5單片機(jī)的選擇 5AT89S52引腳功能描述 7晶振特性 9液晶顯示模塊 10液晶顯示控制驅(qū)動(dòng)器HD61202的特點(diǎn) 10液晶顯示控制驅(qū)動(dòng)器HD61202的引腳功能 10液晶顯示控制驅(qū)動(dòng)器HD61202的指令系統(tǒng) 112.2.4 HD61202的軟件設(shè)計(jì) 122.2.5 JM12864J的電路結(jié)構(gòu)特點(diǎn) 152.2.6 JM12864J的應(yīng)用 162.2.7 鍵盤電路 17系統(tǒng)程序的設(shè)計(jì) 18俄羅斯方塊驅(qū)動(dòng)流程圖 18俄羅斯方塊所有繪圖工作流程圖 19俄羅斯方塊中按下鍵的流程圖 20俄羅斯方塊所有繪圖工作流程圖 21系統(tǒng)仿真 22PROTUES軟件介紹 22Keil軟件介紹 22俄羅斯方塊系統(tǒng)PROTUES仿真 24實(shí)物的制作與調(diào)試 26電路的焊接 26系統(tǒng)性能測試與功能說明 27結(jié) 論 28參考文獻(xiàn) 29附錄1:C語言程序 30附錄2:電路原理圖 59附錄3:英文資料及中文翻譯 60致 謝 76PAGEPAGE51 緒 論,D/A,Watchdog,LCD課題背景AlexPajitnov制作的,它看似簡單但卻變化無窮,令人上癮。相信大多數(shù)用戶都還記得為它癡迷得茶不思飯不想的那個(gè)俄羅斯方塊時(shí)代。2005年,以計(jì)算機(jī)技術(shù)、通信技術(shù)和軟件技術(shù)為核心的信息技術(shù)取得了更加迅計(jì)算機(jī)、通訊、消費(fèi)電子)3G電子游戲及其分類電子游戲,也就是運(yùn)行在家用電腦、家用電子游戲機(jī)或是掌中寶游戲機(jī)及街機(jī)上的電子游戲程序。電子游戲是一種結(jié)合劇情故事、美術(shù)、音樂、動(dòng)畫、程序等技術(shù)于一身的互動(dòng)型娛樂軟件,涉及到多個(gè)行業(yè)。從電子游戲的分類來看,有著多種分類方式。傳統(tǒng)的游戲分類是按照游戲類型,將其分為即時(shí)戰(zhàn)略游戲、第一人稱射擊游戲、角色扮演游戲、策略型游戲等類別。根據(jù)游戲運(yùn)行平臺(tái)的不同,可將電子游戲分為游戲機(jī)游戲、單機(jī)版PC游戲、互動(dòng)電視游戲、在線游戲和手機(jī)游戲。此外,韓國政府將電子游戲業(yè)分為家用游戲機(jī)游戲、單PC游戲、網(wǎng)絡(luò)游戲和街機(jī)游戲四大類??紤]到中韓游戲業(yè)比較接近,論文采用(局域網(wǎng))技術(shù)出現(xiàn)之前,電子游戲都可以歸于單機(jī)版游戲,即“人機(jī)對(duì)戰(zhàn)”游戲,或最多是雙人對(duì)戰(zhàn)游戲。而隨著互聯(lián)網(wǎng)技術(shù)的出現(xiàn),通過連接游戲服務(wù)器,上百、上千、乃至上萬的游戲玩家同時(shí)連線娛樂成為了現(xiàn)實(shí),這就大大增加了游戲的互動(dòng)性、電子游戲發(fā)展現(xiàn)狀電子游戲國外發(fā)展現(xiàn)狀電子游戲是最初產(chǎn)生于美國,1971年,一個(gè)還在MIT就讀的學(xué)生設(shè)計(jì)了世界上第一個(gè)業(yè)務(wù)用游戲機(jī),這個(gè)街機(jī)游戲的名字叫《電腦空間》??梢哉f時(shí)至今日,電子游戲仍然是外國的天下。美國至今仍是世界第一大游戲市場,它遵循的是以發(fā)行商為主的產(chǎn)業(yè)開發(fā)鏈模NPDGroup2004(包括家用、掌上型主機(jī)及軟件)9945%。其中游戲軟52(1.6),PC11(450010(423020042.48220603010GDP1/5199890%以上,50%以上。韓國號(hào)稱世界上網(wǎng)絡(luò)游戲產(chǎn)業(yè)最發(fā)達(dá)國家之一。迄今為止,國內(nèi)網(wǎng)絡(luò)游戲市場有超過60%的產(chǎn)品來自韓國游戲軟件開發(fā)商,韓國網(wǎng)絡(luò)游戲使國內(nèi)很多游戲運(yùn)營公司在游戲營銷市場或股票資本市場上獲得了巨大的成功。 韓國游戲市場的發(fā)展不是偶然,韓國政府不僅給游戲產(chǎn)業(yè)以正確的定位和引導(dǎo),更是將其和本國經(jīng)濟(jì)發(fā)展緊密地聯(lián)系到一起,做了很多市場培育方面的工作。韓國政府認(rèn)識(shí)到,靠重型工業(yè)來支撐全國經(jīng)濟(jì)的做法是片面的,于是將、娛樂產(chǎn)業(yè)視為新的經(jīng)濟(jì)增長點(diǎn),開始大力扶持。從那時(shí)起,科技含量極高而能源消耗極低的游戲制作及相關(guān)產(chǎn)業(yè)擔(dān)負(fù)起了“富國興邦”的重?fù)?dān)。由文化觀光部出面組建韓國游戲支援中心,向韓國游戲產(chǎn)業(yè)提供從資金到技術(shù)上的多方面支援;成立游戲投資聯(lián)盟,政府每年向游戲產(chǎn)業(yè)投入的資金多達(dá)500電子游戲國內(nèi)發(fā)展現(xiàn)狀與電子游戲發(fā)達(dá)的國家相比,我國在電子游戲方面還存在比較大的差距。目前,中國的游戲產(chǎn)業(yè)經(jīng)過80年代初期臺(tái)灣廠商的探索至90年代,開始了自己的研1983年,智冠科技有限公司在中國臺(tái)灣成立,為全球第一家簽訂授權(quán)重制中文版產(chǎn)品代理20021996,UBISOFTEA19971997III》(TombRaiderIII)1999501999(正版)約1.52000《萬王之王》正式推1999(Lager)2000《萬王之王》、《石器時(shí)代》、《網(wǎng)絡(luò)三國》在臺(tái)灣上市之后,游戲桔子推出了《天1995,1999Ncsoft200119932001年,天人互動(dòng)軟件技術(shù)有限公司在北京成立。當(dāng)年SEGAPC200153171800200111200392520102010屆本科生畢業(yè)設(shè)計(jì)2 整體設(shè)計(jì)方案系統(tǒng)的核心部分單片機(jī)單片機(jī)的選擇I/O20世紀(jì)末,電子技術(shù)獲得了飛速的發(fā)展,在其推動(dòng)下,現(xiàn)代電子產(chǎn)品幾乎滲透CMOS3I/O1.多功能I/OA/D、PWM、PCA(可編程計(jì)數(shù)器陣列)、WDT(監(jiān)視定時(shí)器看家狗)I/O/比較邏輯等。51USBSMARTCARDMP3CANI*I*CLCDVFD82.高效率和高性能RISCDSPROM(FLASH)RAM(C來開發(fā)單3.低電壓和低功耗CMOS0.9V),功耗已經(jīng)降低uA4.低價(jià)格AT89S52AT89S52CMOS88KFlashAtmel80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPUFlash,AT89S52與MCS-51單片機(jī)產(chǎn)品兼容、8K字節(jié)在系統(tǒng)可編程Flash存儲(chǔ)器、1000次擦寫周32個(gè)可編程I/O16位定時(shí)器/計(jì)數(shù)器八個(gè)中斷源、全雙工UART串行通道、低功耗空閑和掉電模式、掉AT89S52具有以下標(biāo)準(zhǔn)功能:8K字節(jié)Flash,256字節(jié)RAM,32位I/O口線,看門狗16位定時(shí)器/6向量2級(jí)中斷結(jié)構(gòu),全雙工串可降至0Hz2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。AT89S52單片機(jī)有PDIPPLCCTQFPDPIP也就是雙列直插封裝的單片機(jī)此種封裝有如下特點(diǎn):適合PCB的穿孔安裝;易于對(duì)PCB布線;操作方便;AT89S52AT89S52單片機(jī)的管腳說明如圖2-1所示:11234567891011121314151617181920P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RSTP3.0(RXD)P3.1(TXD)P3.2(INT0)P3.3(INT1)P3.4(T0)P3.5(T1)P3.6(WR)P3.7(RD)XTAL2XTAL1GNDVCC 40P0.0(AD0) 39P0.1(AD1) 38P0.2(AD2) 37P0.3(AD3) 36P0.4(AD4) 35P0.5(AD5) 34P0.6(AD6) 33P0.7(AD7) 32EA/VPP 31ALE/PROG 30PSEN 29P2.7(A15) 28P2.6(A14) 27P2.5(A13) 26P2.4(A12) 25P2.3(A11) 24P2.2(A10) 23P2.1(A9) 22P2.0(A8) 21圖2-1DIP封裝AT89S52單片機(jī)引腳結(jié)構(gòu)圖1.VCC:電源。2.GND:接地端。3.P0口(P0.0~P0.7):P0口是一個(gè)8位漏極開路的雙向I/O口。作為輸出口,每位能驅(qū)動(dòng)8個(gè)TTL邏輯電平。對(duì)P0端口寫“1”時(shí),引腳用作高阻抗輸入。當(dāng)訪問外口也被作為低8/具有內(nèi)部上拉電阻。在Flash編程時(shí),P0口也用來接收指令字節(jié);在程序校驗(yàn)時(shí),輸出指令字節(jié)。程序校驗(yàn)時(shí),需要外部上拉電阻。4.P1口(P1.0~P1.7):P1口是一個(gè)具有內(nèi)部上拉電阻的8位雙向I/O口,P1輸出緩沖器能驅(qū)動(dòng)4個(gè)TTL邏輯電平。對(duì)P1端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)P1.0和P1.2/計(jì)數(shù)器2的外部計(jì)數(shù)輸入(P1.0/T2)和時(shí)器/計(jì)數(shù)器2的觸發(fā)輸入(P1.1/T2EX),具體如表2-1所示:在Flash編程和校驗(yàn)時(shí),P1口接收低8位地址字節(jié)。引腳號(hào)第二功能P1.0T2(定時(shí)器/計(jì)數(shù)器T2的外部計(jì)數(shù)輸入),時(shí)鐘輸出引腳號(hào)第二功能P1.0T2(定時(shí)器/計(jì)數(shù)器T2的外部計(jì)數(shù)輸入),時(shí)鐘輸出P1.1T2EX(定時(shí)器/計(jì)數(shù)器T2的捕捉/重載觸發(fā)信號(hào)和方向控制)P1.5MOSI(在系統(tǒng)編程用)P1.6MISO(在系統(tǒng)編程用)P1.7SCK(在系統(tǒng)編程用)5.P2口(P2.0~P2.7):P2口是一個(gè)具有內(nèi)部上拉電阻的8位雙向I/O口,P2輸出緩沖器能驅(qū)動(dòng)4個(gè)TTL邏輯電平。對(duì)P2端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,16位地址讀取外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行MOVX@DPTR)口使用很強(qiáng)的內(nèi)部上拉發(fā)送18位地址(MOVX@RI)口輸出P26.P3口(P3.0~P3.7):P38位雙向I/O口,P2輸出緩沖器能驅(qū)動(dòng)4個(gè)TTLP3時(shí),內(nèi)部上拉電阻把端口拉高,引腳號(hào)第二功能P3.0RXD(串行輸入)引腳號(hào)第二功能P3.0RXD(串行輸入)P3.1TXD(串行輸出)P3.2P3.3INT0(外部中斷0)INT0(外部中斷0)P3.4T0(定時(shí)器0外部輸入)P3.5P3.6T1(定時(shí)器1外部輸入)WRP3.7RD(外部數(shù)據(jù)存儲(chǔ)器寫選通)在flashRST:RST腳輸出96地址上的DISRTO位可以使此功能無DISRTO默認(rèn)狀態(tài)下,復(fù)位高電平有效。ALE/PROG:地址鎖存控制信號(hào)8位地址的輸出脈沖。在flash編程時(shí),此引腳(PROG)也用作編程輸入脈沖。在一般情況下,ALE以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時(shí)器或時(shí)鐘使用。脈沖將會(huì)跳過。如果需要,通過將地址為8EH的SFR的第0僅在執(zhí)行MOVX或MOVCALE(地址為8EHSFR的第0位)的設(shè)置對(duì)微控制器處于外部執(zhí)行模式下無效。PSEN :外部程序存儲(chǔ)器選通信號(hào)( PSEN)是外部程序存儲(chǔ)器選通信號(hào)。當(dāng)AT89S52從外部程序存儲(chǔ)器執(zhí)行外部代碼時(shí),PSEN在每個(gè)機(jī)器周期被激活兩次,而在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),PSEN將不被激活。EA/VPP:0000H到FFFFH的外部程序存儲(chǔ)器讀取指令,EA必須接GND。為了執(zhí)行內(nèi)部程序指令,EA應(yīng)該接VCC。在flash編程期間,EA也接收12伏VPP電壓。XTAL1:振蕩器反相放大器和內(nèi)部時(shí)鐘發(fā)生電路的輸入端。XTAL2:振蕩器反相放大器的輸出端。晶振特性AT89S52單片機(jī)有一個(gè)用于構(gòu)成內(nèi)部振蕩器的反相放大器,XTAL1和XTAL2分別是XTAL2可以不接,而從XTAL1接入,如圖2-2所示。由于外2-2所示:2010屆本科生畢業(yè)設(shè)計(jì)圖2-2內(nèi)部振蕩電路連接圖液晶顯示模塊HD61202JM12864JHD61202HD612028HD61203HD61202HD612031.64×64=4096RAM,RAMLCDHD6120264HD6120268684.HD61202的占空比為1/32~1/64。HD61202CS1,CS2,CS3E為讀寫使能信號(hào),它是在下降沿時(shí)HD61202E高電平期間,數(shù)據(jù)被讀出;R/W為讀寫選擇信號(hào),1020102010屆本科生畢業(yè)設(shè)計(jì)PAGEPAGE11RST為復(fù)位信號(hào)復(fù)位信0,RSTMCUMCUVDD,使之不起作用。HD612022-3引腳符號(hào)狀態(tài)引腳符號(hào)狀態(tài)引腳名稱功能CS1,CS2,CS3 輸入芯片片選端CS1CS2E(寫HD61202;E 輸入 讀寫使能信號(hào)在E高電平期間,數(shù)據(jù)被讀出R/W輸入讀寫選擇信號(hào)R/W=1為讀選通,R/W=0為寫選通RS輸入數(shù)據(jù)、指令選擇信號(hào)RS=1為數(shù)據(jù)操作RS=0為寫指令或讀狀態(tài)DB0-DB7三態(tài)數(shù)據(jù)總線復(fù)位信號(hào)有效時(shí),關(guān)閉液晶顯示,使顯示RST輸入復(fù)位信號(hào)MCUMCU制;也可直接接VDD,使之不起作用。HD61202HD61202的指令系統(tǒng)比較簡單,總共只有七種?,F(xiàn)分別介紹如下:顯示開/關(guān)指令R/WRSDB7DB6DB5DB4DB3DB2DB1DB00000111111/0當(dāng)DBO=1時(shí),LCD顯示RAM中的內(nèi)容;DBO=0時(shí),關(guān)閉顯示。顯示起始行(ROW)設(shè)置指令R/WRSR/WRSDB7DB6DB5 DB4 DB3 DB2 DB1 DB00011顯示起始行(0-63)R/WRSR/WRSDB7DB6DB5DB4DB3DB2 DB1 DB00010111頁號(hào)(0-7)RAM6488列地址(YAddress)設(shè)置指令R/WR/WRSDB7DB6DB5 DB4 DB3 DB2 DB1 DB00001顯示列地址(0-63)RAMMCU讀狀態(tài)指令R/WRSDB7DB6DB5DB4DB3DB2DB1DB010BUSY0ON/OFFREST0000該指令用來查詢HD61202的狀態(tài),各參量含義如下:BUSY: 1-內(nèi)部在工作 0-正常狀態(tài)ON/OFF:1-顯示關(guān)閉 0-顯示打開REST: 1-復(fù)位狀態(tài) 0-正常狀態(tài)BUSYRESTHD61202HD61202BUSYHD61202R/WRSR/WRSDB7DB6DB5DB4 DB3DB2DB1DB001寫數(shù)據(jù)讀、寫數(shù)據(jù)指令每執(zhí)行完一次讀、寫操作,列地址就自動(dòng)增一,必須注意的是,R/WRSR/WRSDB7DB6DB5DB4 DB3 DB2DB1DB011讀顯示數(shù)據(jù)HD61202液晶控制器HD61202一共有七條指令,從作用上可分為兩類,顯示狀態(tài)設(shè)置指令和數(shù)據(jù)讀/寫操作指令。詳見指令系統(tǒng)可查看圖形液晶顯示器產(chǎn)品有關(guān)手冊。顯示L5~L00-3FH(1-64P2-P00-7H,1-8頁。列地址設(shè)置中C5-C0Y0-3FH(1-64行)范圍內(nèi)。顯示器上128點(diǎn)×64點(diǎn),每8點(diǎn)為一字節(jié)數(shù)據(jù),都對(duì)應(yīng)著顯示數(shù)據(jù) RAM(在HD61202bit,計(jì)算機(jī)寫入或讀出顯示存儲(chǔ)器的數(shù)據(jù)代表顯示8D0bit=1bit=0時(shí)該LCDdisplayON/OFFONRAM數(shù)據(jù)對(duì)應(yīng)顯示的畫面;displayOFF則畫面消失,RAM點(diǎn)陣字模文件的建立:由于MGLS12864液晶顯示器沒有內(nèi)部字符發(fā)生器,所以在屏幕上顯示的任何字符、漢字等須自己建立點(diǎn)陣字模庫,然后均按圖形方式進(jìn)行顯示。由于HD6120290度后再寫入。點(diǎn)陣字模庫建立包括以下幾個(gè)方面:1.建立8×16點(diǎn)陣常用字符、數(shù)字、符號(hào)字模庫。BIOSASCII8×16ASCII值從小到大升序排列。asm{MOVax,1130h/*AH=11h—功能調(diào)用。裝入字庫至軟字庫*/movbh,6/*AL=30h取點(diǎn)陣信息*/int10h/*BH=6ROM8X16點(diǎn)陣指針(VGA)*/movax,es/*出口:ES:BP指向字庫指針*/movascii_es,axmovax,bpmovascii_bp,ax};ascii_offset=ascii_bp+16*asciicode;for(j=0;j<16;j++)buf[j]=peekb(ascii_es,ascii_offset+j);/*讀16字節(jié)點(diǎn)陣數(shù)據(jù)*/for(m=0;m<16;m++)/*點(diǎn)陣數(shù)據(jù)轉(zhuǎn)換成LCD格式數(shù)據(jù)*/{if(m<8){beginbyte=7;shiftn="7";}else{beginbyte="15";shiftn="15";}for(j=0;j<8;j++)ascii8x16[m]=(ascii8x16[m]+(buf[beginbyte-j]>>(shiftn-m))&0x01)<<1;}UCDOSASC16ASC168×16點(diǎn)陣。所ASCIIASCII碼值×162.16×16UCDOSHZK16文件做HZK1616×161)×94+位碼-1)×32。作者CUCDOS點(diǎn)陣字庫字模程序,完成字模讀取。數(shù)據(jù)重新排列,并按MCS-51匯編程序的要求寫成相應(yīng)格式的文本文件。p=((quma-1)*94+weima-1)*32;cclibfile="fopen"("HZK16","rb");fseek(cclibfile,(long)p,SEEK_SET);fread(buf,sizeof(unsignedchar),32,cclibfile);/*32字節(jié)點(diǎn)陣數(shù)據(jù)*/for(m=0;m<32;m++){/*LCD*/if(m<8){beginbyte="14";shiftn="7";}elseif(m>=8&&m<16){beginbyte="15";shiftn="15";}elseif(m>=16&&m<24){beginbyte="30";shiftn="23";}else{beginbyte="31";shiftn="31";}for(j=0;j<8;j++)hzk16x16[m]=(hzk16x16[m]+(buf[beginbyte-2*j]>>(shiftn-m))&0x01)<<1;}3.(如產(chǎn)品商標(biāo)等BMPMCS-51W78E58的程序存儲(chǔ)器中,如用到的漢字、圖形較多,可選用較大容量的程序存儲(chǔ)器。HD16202BF=1COMM,數(shù)據(jù)寄DATA。(COMMEQU20H/*指令寄存器*/DATAEQU21H/*數(shù)據(jù)寄存器*/)1.左半屏寫指令子程序WR_CMD1:MOVDPTR,#CRADR1;/*讀狀態(tài)字口地址*/WAIT1:MOVXA,@DPTR;/*讀狀態(tài)字*/JBACC.7,WAIT1;/*BF,BF=1*/MOVDPTR,#CWADR1;/*寫指令字口地址*/MOVA,COMM;/*取指令代碼*/MOVX@DPTR,A;/*寫指令代碼*/RET2.左半屏寫數(shù)據(jù)子程序WR_DATA1:MOVDPTR,#CRADR1;/*讀狀態(tài)字口地址*/WAIT11:MOVXA,@DPTR;/*讀狀態(tài)字*/JBACC.7,WAIT11;/*判忙標(biāo)志BF,如BF=1忙,等待*/2010屆本科生畢業(yè)設(shè)計(jì)MOVDPTR,#DWADR1;/*寫數(shù)據(jù)字口地址*/MOVA,DATA;/*取數(shù)據(jù)/MOVX@DPTR,A;/*寫數(shù)據(jù)*/RET3.右半屏寫指令子程序WR_CMD2和右半屏寫數(shù)據(jù)子程序WR_DATA2的編制同左半屏子程序相同,只是對(duì)應(yīng)口地址不同。JM12864JJM12864J是使用HD61202及其兼容控制驅(qū)動(dòng)器作為列驅(qū)動(dòng)器,同時(shí)使用HD61203作為行驅(qū)動(dòng)器的液晶模塊。由于HD6120不與MPU發(fā)生聯(lián)系,只要提供電源就能產(chǎn)生行驅(qū)動(dòng)信號(hào)和各種同步信號(hào),比較簡單,因此這里就不作介紹了。下面主要介紹一下JM12864J的邏輯電路圖。JM12864J共有兩片HD61202及其兼容控制驅(qū)動(dòng)器和一片HD61203,如圖2-3所示:圖2-3 JM12864J的邏輯電路圖JM12864JHD61202ADC,RSTJM12864JCSAHD61202(1)的CS1相連;CSBHD61202(2)CS1CSA、CSB選通組合信號(hào)為CSACSB=01選通1CSACSB=10(2JM12864J,VDD、VSSV0HD61203VDDV0VSS152010屆本科生畢業(yè)設(shè)計(jì)JM12864J89S522-4圖2-4 AT89S52與液晶的接口電路2-52-5VSSVDD+5V;RSP3.2R/WP3.1;DB0~DB7P2.0~P2.712P3.4P3.3RST、LEDA5V;VEELEDK162010屆本科生畢業(yè)設(shè)計(jì)圖2-5液晶模塊電路鍵盤電路3P1.0P3.5P3.6P3.7172010屆本科生畢業(yè)設(shè)計(jì)PAGEPAGE18系統(tǒng)程序的設(shè)計(jì)俄羅斯方塊驅(qū)動(dòng)流程圖開始開始隨機(jī)生成一個(gè)圖形交給當(dāng)前圖形變量隨機(jī)生成一個(gè)圖形交給提示圖形變量根據(jù)變化繪圖(繪提示圖和當(dāng)前圖形)N圖形到底了嗎圖形下降一行Y行滿繪圖一次Y表格滿NN清所有數(shù)據(jù)提示圖形變量給當(dāng)前圖形Y消除行并Y上面的行數(shù)據(jù)下移true、當(dāng)前圖改變false繪圖(清屏)隨機(jī)生成一個(gè)圖形交給提示圖形變量游戲結(jié)束繪圖結(jié)束20102010屆本科生畢業(yè)設(shè)計(jì)俄羅斯方塊所有繪圖工作流程圖開始開始輸出分?jǐn)?shù)清除剛才位置的圖形N當(dāng)前圖形改Y繪當(dāng)前圖的現(xiàn)在位置N提示圖形改變真?Y繪提示圖消行動(dòng)作為NY從消行的那一行的第一列開始N為空數(shù)據(jù)Y繪白色;相當(dāng)于清除色彩表格中對(duì)應(yīng)的色彩行+1NY結(jié)束俄羅斯方塊中按下鍵的流程圖按下鍵按下鍵記下下降圖形時(shí)的位置()直接把圖形下降到底行滿行滿YNN表格滿提示圖形變量給當(dāng)前圖形Y消除行并把上面的行數(shù)據(jù)下移清所有數(shù)據(jù)并置清隨機(jī)生成一個(gè)圖形交給提示圖形變量繪圖(清屏)繪圖游戲結(jié)束結(jié)束結(jié)束俄羅斯方塊所有繪圖工作流程圖開始開始輸出分?jǐn)?shù)清除剛才位置的圖形,包括清除提示圖和當(dāng)前圖N當(dāng)前圖形改變Y繪當(dāng)前圖的現(xiàn)在位置N提示圖形改變真?Y繪提示圖N消行動(dòng)作為真?Y重繪表格游戲結(jié)束NY清除所有數(shù)據(jù)并清屏結(jié)束系統(tǒng)仿真ProteusProteusLabcenterelectronicsEDAProteusEDAPCBProteusSPICE,PCB15PCB—“TheRoutetoPCBCAD”Proteus產(chǎn)VSMLED/LCD、鍵盤、RS232其功能模塊:—個(gè)易用而又功能強(qiáng)大的ISIS原理布圖工具;Proteus混合模型SPICEARESPCBProteusProteusVSM:便于包括LCDCPU1.支持許多通用的微控制器,如PIC,AVR,HC11以及8051;2.交互的裝置模型包括:LEDLCD,RS2323.強(qiáng)大的調(diào)試工具,包括寄存器和存儲(chǔ)器,斷點(diǎn)和單步模式;IARC-SPYKeiluVision35.應(yīng)用特殊模型的DLL界面-提供有關(guān)元件庫的全部文件。KeilKeilC51μVision2KeilSoftware,Inc/KeilElektronikGmbH80C51CC51集成開發(fā)環(huán)境的主要功能有以下幾點(diǎn):1.μVision2forWindows:是一個(gè)集成開發(fā)環(huán)境,它將項(xiàng)目管理、源代碼編輯和程序調(diào)試等組合在一個(gè)功能強(qiáng)大的環(huán)境中;C51CCA5180C51BL51/C51A51LIB51OH51HEXIntelHexRTX-51這個(gè)工具套件是為專業(yè)軟件開發(fā)人員設(shè)計(jì)的,但任何層次的編程人員都可以使80C51KeilSoftware80C51PK5180C5180C51及其所有派生系列進(jìn)行配置使用;DK51DK51PK51RTX51Tiny80C51(3)編譯器套件:如果開發(fā)者只需要一個(gè)CCA51編譯器套件就是最好的選擇。CA51μVision2IDECA51μVision280C51表4-1開發(fā)套件和工具對(duì)照表ComponentsPK51DK51CA51A51FR51uVision2ProjectManagement&Editor√√√√A51Assembler√√√√C51Compiler√√√BL51Liker/locator√√√√LIB51LibraryMagaer√√√√uVision2Debugger/Simulator√√RTX51Tiny√RTX51Full√2010屆本科生畢業(yè)設(shè)計(jì)A5180C51RTX51(FR51:RTX5180C51FullRTX51TinyCAN(6)4-1PROTUES用Proteus軟件,根據(jù)俄羅斯方塊電路原理圖,畫出仿真圖。ProteusKeilKeilμVision3.8Proteus7.4。1.打開PROTEUS的安裝目錄,進(jìn)入help目錄,打開ARM.HLP幫助文檔,點(diǎn)擊聯(lián)接:RemoteDebuggerDrivers/DownloadandInstallremotedebuggerdriverforKeiluVision3,VDMAGDI.EXE,KEILVDM51.dllKEIL\C51\BIN圖4-1Protues仿真2.KEILprojectworkspace“target1”上點(diǎn)右鍵/optionsfortarget'target1'。2420102010屆本科生畢業(yè)設(shè)計(jì)PAGEPAGE25DebugUSEproteusVSMSimulator,Settingsproteus在同一臺(tái)電腦,host:,port:8000,點(diǎn)確定/OK3.proteusDebug/UseRemoteDebugMonitor。4.KEILbuildallproteus4-1Proteus實(shí)物的制作與調(diào)試電路的焊接1.焊前準(zhǔn)備2.焊接順序元器件裝焊順序依次為:電阻器、電容器、二極管、三極管、集成電路、大功率管,其它元器件為先小后大。3.對(duì)元器件焊接要求電阻器焊接電容器焊接二極管的焊接二極管焊接要注意以下幾點(diǎn):第一,注意陽極陰極的極性,不能裝錯(cuò);第二,型號(hào)標(biāo)記要易看可見;第三,焊接立式二極管時(shí),對(duì)最短引線焊接時(shí)間不能超過2S。三極管焊接注意e、b、c三引線位置插接正確;焊接時(shí)間盡可能短,焊接時(shí)用鑷子夾住引線腳,以利散熱。焊接大功率三極管時(shí),若需加裝散熱片,應(yīng)將接觸面平整、打磨集成電路焊接對(duì)于電容器、二極管、三極管露在印制電路板面上多余引腳均需齊根剪去。系統(tǒng)性能測試與功能說明結(jié) 論LCDCAT89S522010屆本科生畢業(yè)設(shè)計(jì)參考文獻(xiàn)C[M]2004.Apress.IntroductiontoVisualBasicProgramming[M].ProfessionalComputingandWebDesign,2006.李華.單片機(jī)原理與接口技術(shù),北京:清華大學(xué)出版社,33-80.周潤景著.ProteusMCS-51&ARM7[M].北京:電子工業(yè)出版2006.JavaBean[R].Java技術(shù)及應(yīng)用學(xué)術(shù)會(huì)議,2001.JasonLam.J2ME&Gaming[M].AddisonWesley,2004.高凌琴,陳青華.俄羅斯方塊游戲關(guān)鍵技術(shù)探討[J].信息技術(shù)與信息化.2008.Java2游戲設(shè)計(jì)》[M].北京:清華大學(xué)出版社,2004.JAVA[M].北京:中國2005-5.譚浩強(qiáng).C.[M]北京:清華大學(xué)出版社,2003.吳金戌,沈慶陽.80512003.[13]李宏,張家田.液晶顯示器件應(yīng)用技術(shù),北京:機(jī)械工業(yè)出版社,2004.公茂法.單片機(jī)人機(jī)接口實(shí)例集,北京:北京航空航天大學(xué)出版社,1998.何立明.單片機(jī)高級(jí)教程——應(yīng)用與設(shè)計(jì),北京:北京航天航空大學(xué)出版社,2000.李廣弟,朱月秀.單片機(jī)基礎(chǔ),北京:北京航空航天大學(xué)出版社,2001.樓然苗,李光飛.MCS-512001.LEGO[J]?!翱岜缺庇螒虿邉澊筚?,2007.附錄1:C語言程序#include<AT89X51.H>#defineucharunsignedchar#defineuint unsignedint#defineDOWNTIME30#defineMAXHANG20#defineMAXLIE16#defineMAXPIX3#definePUSHON#defineLCDP250#defineEN P3_0#defineRW P3_1#defineRS P3_2#defineCS1P3_3#defineCS2P3_4#defineKEYLEFTP3_5#defineKEYDOWNP3_6#defineKEYRIGHP3_7#defineKEYROTATIONP1_0uchargkey=0xff,keystate=0,t0ms1=0,t0ms=0,downtimegap=0;ucharmiao=0,fen=0;uchardownok;bitkeyflag,timeupdate,fashionupdate;ucharidatacubeMap[MAXHANG][2];typedefstruct{ucharcode*box;ucharcube:4;ucharstate:4;charrow;20102010屆本科生畢業(yè)設(shè)計(jì)blockthis;uintscore=0;ucharspeed=1;

charcolumn;}block;ucharcodebittable[8]={1,2,4,8,0x10,0x20,0x40,0x80};ucharcodecube[]={/* ■■■■*/0,4,0xe,0, 0,2,6,2,/*■■■■

0,7,2,0,

4,6,4,0,*/0,8,0xe,0, 0,4,4,0xc,/*■■■■

0,0,0xe,2,

0,6,4,4,*/0,0xe,8,0, 0,4,4,6,/*■■■■

0,1,7,0,

6,2,2,0,*/0,0xc,6,0, 0,2,6,4,/* ■■■■

0,6,3,0,

2,6,4,0,*/0,6,0xc,0,*/0,6,0xc,0,/*■■■■0,4,6,2,0,3,6,0,*/0,0xf,0,0,/*■■4,4,4,4,0,0,0xf,0,2,2,2,2,■■*/0,6,6,0, 0,6,6,0, 0,6,6,0, 0,6,6,0};ucharcodeasii[]={0x3E,0x51,0x49,0x45,0x3E,//-0-0x00,0x42,0x7F,0x40,0x00,//-1-0x62,0x51,0x49,0x49,0x46,//-2-0x21,0x41,0x49,0x4D,0x33,//-3-0x18,0x14,0x12,0x7F,0x10,//-4-0x27,0x45,0x45,0x45,0x39,//-5-0x3C,0x4A,0x49,0x49,0x31,//-6-0x01,0x71,0x09,0x05,0x03,//-7-0x36,0x49,0x49,0x49,0x36,//-8-0x46,0x49,0x49,0x29,0x1E,//-9-0x00,0x36,0x36,0x00,0x00,//-:-10//next0x7F,0x04,0x08,0x10,0x7F,//-N-110x7F,0x49,0x49,0x49,0x41,//-E-120x63,0x14,0x08,0x14,0x63,//-X-130x01,0x01,0x7F,0x01,0x01,//-T-14//speed0x26,0x49,0x49,0x49,0x32,//-S-150x7F,0x09,0x09,0x09,0x06,//-P-160x7F,0x49,0x49,0x49,0x41,//-E-170x7F,0x41,0x41,0x41,0x3E,//-D-18//score0x3E,0x41,0x41,0x41,0x22,//-C-190x3E,0x41,0x41,0x41,0x3E,//-O-200x7F,0x09,0x19,0x29,0x46,//-R-210x00,0x00,0x00,0x00,0x00, //--22//GAMEOVER0x3E,0x41,0x51,0x51,0x72,//-G-230x7C,0x12,0x11,0x12,0x7C,//-A-240x7F,0x02,0x0C,0x02,0x7F,//-M-250x1F,0x20,0x40,0x20,0x1F,//-V-26//TIME// 0x00,0x41,0x7F,0x41,0x00 //-I-27};////////////////////////////////////////////////////////////////////////////////voidlcdCmd(ucharcmd){bitea;ea=EA;EA=0;EN=0;RW=0;RS=0;LCD=cmd;EN=1;EN=1;EN=0;EA=ea;}//voidlcdWriteByte(ucharch){EN=0;RS=1;RW=0;LCD=ch;EN=1;EN=1;EN=0;}//voidlcdSetPage(ucharpage){page&=0x7;page+=0xb8;lcdCmd(page);}//voidlcdSetColumn(ucharcolumn){column&=0x3f;column+=0x40;lcdCmd(column);}////characterfron=5*8voidlcdPlayChar(ucharindex,ucharpage,ucharcolume){uchari,temp;uintp;p=5*index;for(i=colume;i<colume+5;i++){if(i<64){CS1=1;CS2=0;temp=i;}else{CS1=0;CS2=1;temp=i-64;}lcdSetPage(page);lcdSetColumn(temp);lcdWriteByte(asii[p++]);}}////rectangle(3,0,50,60)voidrectangle(void){uchari,page;CS1=1;CS2=0;lcdSetPage(0);lcdSetColumn(2);EN=0;RS=1;RW=0;LCD=0xff;EN=1;EN=1;EN=0;for(i=3;i<51;i++){EN=0;RS=1;RW=0;LCD=0x1;EN=1;EN=1;EN=0;}EN=0;RS=1;RW=0;LCD=0xff;EN=1;EN=1;EN=0;//for(page=1;page<7;page++){lcdSetPage(page);lcdSetColumn(2);EN=0;RS=1;RW=0;LCD=0xff;EN=1;EN=1;EN=0;for(i=3;i<51;i++){EN=0;RS=1;RW=0;LCD=0x0;EN=1;EN=1;EN=0;}EN=0;RS=1;RW=0;LCD=0xff;EN=1;EN=1;EN=0;}//lcdSetPage(7);lcdSetColumn(2);EN=0;RS=1;RW=0;LCD=0x1f;EN=1;EN=1;EN=0;for(i=3;i<51;i++){EN=0;RS=1;RW=0;LCD=0x10;EN=1;EN=1;EN=0;}EN=0;RS=1;RW=0;LCD=0x1f;EN=1;EN=1;EN=0;}////x:列;y行,頁3*3voidlcdPutPix(ucharx,uchary,ucharflag){uchari,dat,bitmask,nextbit;bitbflag,pflag,ea;x=x*MAXPIX;y=y*MAXPIX;bflag=0;pflag=0;i=y%8;if(i==0)bitmask=0x7;elseif(i==1)bitmask=0xe;elseif(i==2)bitmask=0x1c;elseif(i==3)bitmask=0x38;elseif(i==4)bitmask=0x70;elseif(i==5)bitmask=0xe0;elseif(i==6){bflag=1;bitmask=0xc0;nextbit=1;}elseif(i==7){bflag=1;bitmask=0x80;nextbit=3;}if(x<62){CS1=1;CS2=0;}elseif(x>63){x-=64;CS1=0;CS2=1;}elsepflag=1;lcdSetPage(y/8);for(i=x;i<x+MAXPIX;i++){if(pflag){if(i==62||i==63){CS1=1;CS2=0;lcdSetPage(y/8);}elseif(pflag&&i==64){CS1=0;CS2=1;lcdSetPage(y/8);}}lcdSetColumn(i);ea=EA;EA=0;EN=0;LCD=0xff;RS=1;RW=1;EN=1;EN=0;EN=1;dat=LCD;EN=0;if(flag==1)dat|=bitmask;elsedat&=~bitmask;lcdSetColumn(i);EN=0;RW=0;RS=1;LCD=dat;EN=1;EN=1;EN=0;EA=ea;}if(bflag){lcdSetPage(y/8+1);for(i=x;i<x+MAXPIX;i++){if(pflag){if(i==62||i==63){CS1=1;CS2=0;lcdSetPage(y/8+1);}elseif(pflag&&i==64){CS1=0;CS2=1;lcdSetPage(y/8+1);}}lcdSetColumn(i);ea=EA;EA=0;EN=0;LCD=0xff;RS=1;RW=1;EN=1;EN=0;EN=1;dat=LCD;EN=0;if(flag==1)dat|=nextbit;elsedat&=~nextbit;lcdSetColumn(i);EN=0;RW=0;RS=1;LCD=dat;EN=1;EN=1;EN=0;EA=ea;}}}//voidlcdClear(void){uchari,page;CS1=1;CS2=0;for(page=0;page<8;page++){lcdSetPage(page);lcdSetColumn(0);for(i=0;i<64;i++)lcdWriteByte(0);}CS1=0;CS2=1;for(page=0;page<8;page++){lcdSetPage(page);lcdSetColumn(0);for(i=0;i<64;i++)lcdWriteByte(0);}}//#defineSTAR53#defineWIDE6voidlcdIni(void){lcdCmd(0x3f);lcdCmd(0xc0);lcdClear();rectangle();//NEXTlcdPlayChar(11,0,STAR);lcdPlayChar(12,0,STAR+1*WIDE);lcdPlayChar(13,0,STAR+2*WIDE);lcdPlayChar(14,0,STAR+3*WIDE);//SPEEDlcdPlayChar(15,3,STAR);lcdPlayChar(16,3,STAR+1*WIDE);lcdPlayChar(17,3,STAR+2*WIDE);lcdPlayChar(17,3,STAR+3*WIDE);lcdPlayChar(18,3,STAR+4*WIDE);//01lcdPlayChar(0,4,STAR+2*WIDE);lcdPlayChar(1,4,STAR+3*WIDE);//SCORElcdPlayChar(15,5,STAR);lcdPlayChar(19,5,STAR+1*WIDE);lcdPlayChar(20,5,STAR+2*WIDE);lcdPlayChar(21,5,STAR+3*WIDE);lcdPlayChar(12,5,STAR+4*WIDE);lcdPlayChar(0,6,STAR+1*WIDE);lcdPlayChar(0,6,STAR+2*WIDE);lcdPlayChar(0,6,STAR+3*WIDE);lcdPlayChar(0,6,STAR+4*WIDE);//TIMElcdPlayChar(0,7,STAR);lcdPlayChar(0,7,STAR+1*WIDE);lcdPlayChar(10,7,STAR+2*WIDE);lcdPlayChar(0,7,STAR+3*WIDE);lcdPlayChar(0,7,STAR+4*WIDE);}//voidshowScoreSpeed(void){ucharnum[5];chari;uinttemp;temp=score;for(i=0;i<5;i++){num[i]=temp%10;temp=temp/10;}for(i=4;i>0;i--){if(num[i]==0)num[i]=22;elsebreak;}for(i=4;i>-1;i--)lcdPlayChar(num[i],6,STAR+(4-i)*WIDE);lcdPlayChar(speed/10,4,STAR+2*WIDE);lcdPlayChar(speed%10,4,STAR+3*WIDE);}//voidtimeServer(void){if(timeupdate){timeupdate=0;lcdPlayChar(fen/10,7,STAR);lcdPlayChar(fen%10,7,STAR+1*WIDE);lcdPlayChar(10,7,STAR+2*WIDE);lcdPlayChar(miao/10,7,STAR+3*WIDE);lcdPlayChar(miao%10,7,STAR+4*WIDE);}if(fashionupdate){fashionupdate=0;lcdPlayChar(22,7,STAR+2*WIDE);}}//===================================================================voidt0isr(void)interrupt1{ucharkey;TH0=(65536-10000)/256;TL0=(65536-10000)%256;downtimegap++;t0ms=++t0ms%100;if(t0ms==0){timeupdate=1;miao=++miao%60;if(miao==0)fen=++fen%60;}if(t0ms==50)fashionupdate=1;//key=0xff;KEYLEFT=1;KEYRIGH=1;KEYROTATION=1;KEYDOWN=1;if(!KEYLEFT)key=0;if(!KEYRIGH)key=1;if(!KEYROTATION)key=2;if(!KEYDOWN)key=3;switch(keystate){case0:if(key!=gkey){gkey=key;keystate=1;}break;case1:if(key==gkey){}else

t0ms1=0;keystate=2;if(key!=0xff)keyflag=1;keystate=0;break;case2:if(key==gkey){}else{

if(t0ms1<PUSHON)t0ms1++;keystate=0;keyflag=0;gkey=0xff;}break;}}//===================================================================voidshowNextCube(ucharcode*p,ucharx,uchary){uchari,j,temp;for(i=0;i<4;i++){temp=1;for(j=0;j<4;j++){if(p[i]&temp)lcdPutPix(x+j,y+i,1);elselcdPutPix(x+j,y+i,0);temp<<=1;}}}//voidcreateCube(void){staticucharnext;this.cube=next;next=TL0%7;this.row=0;this.column=6;this.state=0;this.box=cube+16*this.cube;showNextCube(cube+16*next,19,3);}//voidshowCubeMap(void){unsignedcharhang,lie,temp;for(hang=MAXHANG-1;hang>0;hang--){if(cubeMap[hang][0]==0&&cubeMap[hang][1]==0)break;for(lie=0;lie<(MAXLIE/8);lie++){temp=8*lie;if(cubeMap[hang][lie]&0x01)lcdPutPix(temp+1,hang,1);if(cubeMap[hang][lie]&0x02)lcdPutPix(temp+2,hang,1);if(cubeMap[hang][lie]&0x04)lcdPutPix(temp+3,hang,1);if(cubeMap[hang][lie]&0x08)lcdPutPix(temp+4,hang,1);if(cubeMap[hang][lie]&0x10)lcdPutPix(temp+5,hang,1);if(cubeMap[hang][lie]&0x20)lcdPutPix(temp+6,hang,1);if(cubeMap[hang][lie]&0x40)lcdPutPix(temp+7,hang,1);if(cubeMap[hang][lie]&0x80)lcdPutPix(temp+8,hang,1);}}}//voidwriteCubeToMap(void){ucharrow,column,temp;ucharhang,lie;for(row=0;row<4;row++){temp=1;for(column=0;column<4;column++){if(this.box[row]&temp){hang=this.row+row;lie=this.column+column;cubeMap[hang][lie/8]|=bittable[lie%8];lcdPutPix(lie+1,hang,1);}temp<<=1;}}}//voidclearCubeFromMap(void){ucharrow,column,temp;ucharhang,lie;for(row=0;row<4;row++){temp=1;for(column=0;column<4;column++){if(this.box[row]&temp){hang=this.row+row;lie=this.column+column;cubeMap[hang][lie/8]&=~bittable[lie%8];lcdPutPix(lie+1,hang,0);}temp<<=1;}}}//ucharcheckBorder(void){if(this.box[3]!=0&&this.row>(MAXHANG-4))return1;elseif(this.box[2]!=0&&this.row>(MAXHANG-3))return1;elseif(this.box[1]!=0&&this.row>(MAXHANG-2))return1;elseif(this.box[0]!=0&&this.row>(MAXHANG-1))return1;//if((this.box[0]&0x01)||(this.box[1]&0x01)||(this.box[2]&0x01)||(this.box[3]&0x01)){if(this.column<0)return1;}0x02))

elseif((this.box[0]&0x02)||(this.box[1]&0x02)||(this.box[2]&0x02)||(this.box[3]&{if(this.column<-1)return1;}0x04))

elseif((this.box[0]&0x04)||(this.box[1]&0x04)||(this.box[2]&0x04)||(this.box[3]&{if(this.column<-2)return1;0x08))

}elseif((this.box[0]&0x08)||(this.box[1]&0x08)||(this.box[2]&0x08)||(this.box[3]&{if(this.column<-3)return1;}//if((this.box[0]&0x08)||(this.box[1]&0x08)||(this.box[2]&0x08)||(this.box[3]&0x08)){if(this.column>(MAXLIE-4))return1;}0x04))

elseif((this.box[0]&0x04)||(this.box[1]&0x04)||(this.box[2]&0x04)||(this.box[3]&{if(this.column>(MAXLIE-3))return1;0x02))

}elseif((this.box[0]&0x02)||(this.box[1]&0x02)||(this.box[2]&0x02)||(this.box[3]&{if(this.column>(MAXLIE-2))return1;0x08))

}elseif((this.box[0]&0x08)||(this.box[1]&0x08)||(this.box[2]&0x08)||(this.box[3]&{if(this.column>(MAXLIE-1))return1;}//return0;}//ucharcheckClask(void){ucharrow,column,temp;ucharhang,lie;for(row=0;row<4;row++){temp=1;for(column=0;column<4;column++){if(this.box[row]&temp){hang=this.row+row;lie=this.column+column;if(cubeMap[hang][lie/8]&bittable[lie%8])return1;}temp<<=1;}}return0;}//voidcheckMap(void){uchari,j,delete;bitfull;full=0;delete=0;for(i=MAXHANG-1;i>0;i--){if(cubeMap[i][0]==0&&cubeMap[i][1]==0)break;if(cubeMap[i][0]==0xff&&cubeMap[i][1]==0xff){delete++;full=1;for(j=i;j>0;j--){cubeMap[j][0]=cubeMap[j-1][0];cubeMap[j][1]=cubeMap[j-1][1];}}}if(full){

i++;cubeMap[0][0]=0;cubeMap[0][1]=0;if(delete==1)score++;elseif(delete==2)score+=4;elseif(delete==3)score+=9;elseif(delete==4)score+=16;rectangle();showCubeMap();if(score<50)speed=1;elseif(score<100)speed=2;elseif(score<500)speed=3;elseif(score<1000)speed=4;elseif(score<5000)speed=5;elseif(score<10000)speed=6;elseif(score<20000)speed=7;elseif(score<30000)speed=8;elseif(score<40000)speed=9;elseif(score<50000)speed=10;elseif(score<60000)speed=11;elsespeed=12;showScoreSpeed();}}//voidmoveLeft(void){clearCubeFromMap();this.column--;if(checkBorder()||checkClask())this.column++;writeCubeToMap();}//voidmoveRigh(void){clearCubeFromMap();this.column++;if(checkBorder()||checkClask())this.column--;writ

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論