CMOS高速鎖相環(huán)的研究和設(shè)計(jì)_第1頁(yè)
CMOS高速鎖相環(huán)的研究和設(shè)計(jì)_第2頁(yè)
CMOS高速鎖相環(huán)的研究和設(shè)計(jì)_第3頁(yè)
CMOS高速鎖相環(huán)的研究和設(shè)計(jì)_第4頁(yè)
CMOS高速鎖相環(huán)的研究和設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩79頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

./WORD格式整理版畢業(yè)設(shè)計(jì)設(shè)計(jì)題目:CMOS高速鎖相環(huán)的研究與設(shè)計(jì)系別:信息工程系班級(jí):電子信息工程姓名:指導(dǎo)教師:年6.CMOS高速鎖相環(huán)的研究與設(shè)計(jì)摘要在現(xiàn)今電子信息高速發(fā)展的時(shí)代,通信等技術(shù)變得越來(lái)越重要。鎖相環(huán)作為一種能夠跟蹤輸入信號(hào)的閉環(huán)自動(dòng)相位控制系統(tǒng),因其電路結(jié)構(gòu)簡(jiǎn)單,性能優(yōu)越等特點(diǎn),現(xiàn)在被廣泛應(yīng)用于無(wú)線電通信、雷達(dá)、流體力學(xué)等眾多領(lǐng)域。本文介紹了一種高速鎖相環(huán)的設(shè)計(jì)方法。本文設(shè)計(jì)的鎖相環(huán)采用當(dāng)前主流的電路結(jié)構(gòu)—數(shù)?;旌辖Y(jié)構(gòu)的電荷泵鎖相環(huán)。鎖相環(huán)路中的鑒頻鑒相器采用RS鎖存器實(shí)現(xiàn)鑒頻/鑒相功能,有效地提高了整個(gè)電荷泵鎖相環(huán)對(duì)相位變化的靈敏度。電荷泵電路也做了一定的改進(jìn),性能更為優(yōu)越。壓控振蕩器采用常用的環(huán)形振蕩器結(jié)構(gòu),采用電流驅(qū)動(dòng)邏輯〔CSL電路作為緩沖單元。分頻器采用單相時(shí)鐘TSPC邏輯實(shí)現(xiàn)。論文從系統(tǒng)設(shè)計(jì)角度出發(fā)對(duì)電荷泵鎖相環(huán)的工作原理、數(shù)學(xué)模型及基本性能多做了詳細(xì)的分析。該電荷泵鎖相環(huán)采用0.13μmCMOS工藝實(shí)現(xiàn)。利用Tanner軟件進(jìn)行各模塊、整體電路的設(shè)計(jì),及版圖的繪制與驗(yàn)證。從鎖相環(huán)的仿真結(jié)果可知,我們的實(shí)驗(yàn)結(jié)果和理論結(jié)果相符。關(guān)鍵詞:電荷泵鎖相環(huán)電荷泵壓控振蕩器鑒頻鑒相器AbstractCommunicationstechnologyisbecomingincreasinglyimportantintoday'seraofrapiddevelopmentofelectronicinformation.AtetrisgamesdesignmethodhasbeenintroducedinthisthesisbasedonSTC89C53MCU.ThissystemischieflyconstitutedofSTC89C53MCU,KXM12864JLCD,independentkeysandbuzzer.MCUisthecorecontrollerinthisdesign.Tomakerelatedinformationofthegameseenbyplayers,anareaisdifferentiatedshowingshapeofnextgraph,score,gametime,speedandlevelinthescreen.Whenplayingthisgame,wecancontrolthegraphshowntomoveleftandright,fallquicklyandtransformintoanotheroneflexiblybypressingkeys.Afterpassingonelevel,thescreenshowsus"GOODJOB",orweget"GAMEOVER".Thebuzzergivesoutdifferentsoundsmeanwhiletowarngame-playersofthecurrentstate.Inthisdesign,thesimulationisdoneinProteussimulativesoftware.Codecompiling,debuggingandmodificationofhardwarecircuitaredonewiththehelpofKielC51tool.Thenitisdebugedagainaftercircuitboardwelded.Finally,thesystemraslizesallthefunctionsofaminitypetetrismachine.Keywords:MCU;KXM12864J;Tetris;Keil目錄1引言12芯片簡(jiǎn)介22.1單片機(jī)簡(jiǎn)介22.2KXM12864J簡(jiǎn)介43系統(tǒng)硬件的設(shè)計(jì)93.1單片機(jī)最小系統(tǒng)的設(shè)計(jì)93.1.1電源電路的設(shè)計(jì)93.1.2振蕩電路的設(shè)計(jì)113.1.3復(fù)位電路的設(shè)計(jì)123.1.4下載電路的設(shè)計(jì)133.2LCD顯示電路的設(shè)計(jì)163.3按鍵電路的設(shè)計(jì)173.4聲音電路的設(shè)計(jì)184系統(tǒng)軟件的設(shè)計(jì)194.1LCD顯示子程序204.1.1顯示字符子程序204.1.2顯示圖形子程序214.1.3設(shè)定游戲顯示區(qū)域子程序224.1.4清屏子程序224.1.5顯示計(jì)時(shí)子程序234.1.6消行積分子程序244.1.7闖關(guān)設(shè)置子程序254.2按鍵操作子程序264.3聲音子程序285系統(tǒng)調(diào)試與仿真295.1KEIL軟件和PROTEUS軟件簡(jiǎn)介295.2系統(tǒng)調(diào)試與仿真315.3仿真過(guò)程中的問(wèn)題336硬件焊接與調(diào)試366.1電路板焊接366.2硬件調(diào)試376.2.1LCD顯示的調(diào)試376.2.2按鍵調(diào)試396.2.3聲音調(diào)試397結(jié)論40謝辭41參考文獻(xiàn)42附錄43附錄一總體設(shè)計(jì)電路原理圖43附錄二程序清單80附錄三器件清單80外文資料81.1引言1.1鎖相技術(shù)的發(fā)展鎖相技術(shù)是一門實(shí)現(xiàn)相位自動(dòng)控制的學(xué)科,是專門研究系統(tǒng)相位的技術(shù)。利用鎖相技術(shù)而成的鎖相環(huán)PLL<Phase-LockedLoop>是一個(gè)閉環(huán)的相位自動(dòng)控制系統(tǒng),它的輸出信號(hào)能夠自動(dòng)跟蹤輸入信號(hào)的相位變化,也可以將之稱為一個(gè)相位差自動(dòng)跟蹤系統(tǒng),它能夠自動(dòng)跟蹤兩個(gè)信號(hào)的相位差,并且靠反饋控制來(lái)達(dá)到自動(dòng)調(diào)節(jié)輸出信號(hào)相位的目的。"鎖相"的起源可以追溯到17世紀(jì),荷蘭天文學(xué)家、物理學(xué)家ChristianaHuygens,通過(guò)觀察首次提出了"同步振蕩器"〔synehronizedoseillator>的概念,但因?yàn)楫?dāng)時(shí)科學(xué)技術(shù)條件的限制,并沒(méi)有引起重視,得到應(yīng)有的發(fā)展。1932年法國(guó)科學(xué)家DeBelleseize在"LaReceptionSynehrone"一文中,首先公開(kāi)發(fā)表了對(duì)鎖相環(huán)路的數(shù)學(xué)描述,明確提出了"鎖相"的概念,且運(yùn)用此概念論述了無(wú)線電信號(hào)的同步接收。但是他的同步檢波理論在當(dāng)時(shí)并沒(méi)有引起普遍的重視。直到1940年鎖相環(huán)技術(shù)才得到了第一次成功的應(yīng)用,在電視機(jī)水平掃描行同步裝置中,有效的抑制外界噪聲對(duì)同步信號(hào)的干擾,使電視圖像的同步性能得到很大的改善。同時(shí),在此期間的第二次世界大戰(zhàn)中,各種武器裝備對(duì)鎖相環(huán)提出了更多的要求,也極大地推動(dòng)了鎖相技術(shù)的發(fā)展。為了滿足這些極具挑戰(zhàn)性的要求,很多先進(jìn)的反饋控制理論在此期間得到發(fā)展。隨著對(duì)鎖相技術(shù)理論以及應(yīng)用的廣泛而深入的研究,鎖相技術(shù)己經(jīng)成為一門比較系統(tǒng)的理論科學(xué)。但是,研究的不斷深入,科技技術(shù)的不斷前進(jìn),新的物理現(xiàn)象和問(wèn)題還是層出不窮,得不到解釋。因此直到現(xiàn)在,世界各國(guó)科技工作者對(duì)鎖相環(huán)的理論和應(yīng)用進(jìn)行還在繼續(xù)的進(jìn)行研究,而且鎖相環(huán)原理的應(yīng)用已經(jīng)深入到許多其他學(xué)科中去了,如氣象學(xué)、海洋學(xué)、生物物理學(xué)、原子物理學(xué)等等。在鎖相環(huán)發(fā)展的最初階段,PLL都是由分立元器件組成的,電路復(fù)雜,調(diào)整困難。隨著半導(dǎo)體集成技術(shù)的日趨成熟,鎖相環(huán)技術(shù)成為模擬集成電路設(shè)計(jì)中一個(gè)重要的研究方向[3]。之后的幾年內(nèi)就出現(xiàn)了數(shù)?;旌系逆i相環(huán)電路,以及后來(lái)的全數(shù)字鎖相環(huán)電路。這三種鎖相環(huán)電路各有千秋,相互彌補(bǔ),分別存在于各類電子產(chǎn)品中。模擬鎖相環(huán)在穩(wěn)定工作時(shí),各模塊都可以認(rèn)為是線性工作的,所以也稱為線性鎖相環(huán)。模擬鎖相環(huán)對(duì)正弦特性信號(hào)的相位跟蹤非常好,環(huán)路特性主要由鑒相器的特性決定,主要用于對(duì)信號(hào)的調(diào)制解調(diào)。模擬鎖相環(huán)的優(yōu)點(diǎn)是電路簡(jiǎn)單有效,低通濾波器設(shè)計(jì)良好時(shí),輸出頻率純凈穩(wěn)定,跟隨性能好,理想情況下輸出頻率完全等于同步頻率,對(duì)晶振壓控特性的線性要求不高。缺點(diǎn)是一旦失去基準(zhǔn)頻率,輸出頻率立刻跳回晶振本身的頻率。全數(shù)字鎖相環(huán)的英文全稱是AllDigitalPhase-LockedLoop,簡(jiǎn)稱是ADPLL。ADPLL的經(jīng)典結(jié)構(gòu)為鑒相器用過(guò)零檢測(cè)數(shù)字鑒相器,環(huán)路濾波器一般用可逆計(jì)數(shù)器來(lái)實(shí)現(xiàn),振蕩器則用數(shù)控振蕩器實(shí)現(xiàn)。全數(shù)字鎖相環(huán)具有精度高且不受溫度和電壓影響,環(huán)路帶寬和中心頻率編程可調(diào),易于構(gòu)建高階鎖相環(huán)等優(yōu)點(diǎn),缺點(diǎn)是不能過(guò)濾時(shí)鐘源的抖動(dòng),會(huì)引入固有抖動(dòng),造成抖動(dòng)的累積。數(shù)?;旌湘i相環(huán)的部分環(huán)路部件為數(shù)字電路,但是環(huán)路控制仍是模擬形式。數(shù)模混合鎖相環(huán)的優(yōu)點(diǎn)是相位誤差、溫度誤差等較小,電路結(jié)構(gòu)較簡(jiǎn)單,且噪聲較小,具有高速低功耗等優(yōu)越特性。電荷泵鎖相環(huán)CPPLL<Charge-PumpPhase-LockedLoop>是數(shù)模混合鎖相環(huán)中的典型代表。數(shù)?;旌湘i相環(huán)主要用于頻率綜合,時(shí)鐘處理等領(lǐng)域。雖然PLL技術(shù)已經(jīng)發(fā)展了半個(gè)多世紀(jì),但是由于其應(yīng)用領(lǐng)域的擴(kuò)展,而且高新科技的發(fā)展對(duì)它的性能又不斷提出新的要求,所以一直以來(lái)PLL的設(shè)計(jì)與分析都是集成電路設(shè)計(jì)者的熱點(diǎn)。設(shè)計(jì)者們也不斷的提出新的結(jié)構(gòu)和新的分析方法,以滿足不同應(yīng)用的需要。本文設(shè)計(jì)了一種高速電荷泵鎖相環(huán),并用0.13μmCMOS工藝實(shí)現(xiàn)。利用Tanner軟件進(jìn)行仿真,并進(jìn)行版圖的繪制與驗(yàn)證。2芯片簡(jiǎn)介2.1單片機(jī)簡(jiǎn)介單片微型計(jì)算機(jī)簡(jiǎn)稱單片微機(jī)或單片機(jī),又稱微控制器〔MCU。它是在一塊半導(dǎo)體芯片上,集成了CPU、ROM、RAM、I/O接口、定時(shí)器/計(jì)數(shù)器、中斷系統(tǒng)等功能部件,構(gòu)成了一臺(tái)完整的數(shù)字電子計(jì)算機(jī)。該器件采用高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,STC89C51是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性好且性價(jià)比高的設(shè)計(jì)方案。隨著集成電路技術(shù)的發(fā)展,單片機(jī)功能逐漸增強(qiáng),由單片機(jī)構(gòu)成的計(jì)算機(jī)應(yīng)用系統(tǒng)的功能也日益增強(qiáng),進(jìn)一步深化了單片機(jī)在工業(yè)控制、自動(dòng)檢測(cè)、智能儀器儀表、家用電器等領(lǐng)域的突出地位[2]。STC系列單片機(jī)功能基本相同,在此以STC89C51為代表進(jìn)行簡(jiǎn)單介紹。1.STC89C51單片機(jī)引腳STC89C51單片機(jī)封裝引腳如圖2-1所示。T2/P1.0T2EX/P1.1P1.2P1.3P1.4P1.5P1.6P1.7RSTRXD/P3.0TXD/P3.1T2/P1.0T2EX/P1.1P1.2P1.3P1.4P1.5P1.6P1.7RSTRXD/P3.0TXD/P3.1INT0/P3.2INT1/P3.3T0/P3.4WR/P3.6RD/P3.7XTAL2XTAL1T1/P3.5VSSVCCP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7EAALE/PROGPSENP2.7/A15P2.6/A14P2.5/A13P2.4/A12P2.3/A11P2.2/A10P2.1/A9P2.0/A81234567891011121314151617181920212223242526272829303111323334353637383940DIP—40圖2-1STC89C51單片機(jī)封裝引腳圖STC89C51有4個(gè)8位可編程并行I/O口〔P0、P1、P2、P3,1個(gè)全雙工串行口,2個(gè)定時(shí)器/計(jì)數(shù)器,2個(gè)外部中斷輸入口。各個(gè)引腳的功能說(shuō)明如下:GND:接地端。VCC:電源端,接+5V。XTAL1:接外部石英晶體的一端。在單片機(jī)內(nèi)部,它是反相放大器的輸入端,這個(gè)放大器構(gòu)成了片內(nèi)振蕩器。當(dāng)采用外部時(shí)鐘時(shí),該引腳作為外部振蕩的輸入端。XTAL2:接外部石英晶體的另外一端。在單片機(jī)內(nèi)部,它是反相放大器的輸出端。RST:該引腳為單片機(jī)的上電復(fù)位引腳,高電平有效。當(dāng)單片機(jī)電源電壓達(dá)到單片機(jī)工作電壓、同時(shí)單片機(jī)振蕩器正常工作后,該引腳上必須持續(xù)兩個(gè)機(jī)器周期的高電平,才可能實(shí)現(xiàn)復(fù)位操作,使單片機(jī)回到初始狀態(tài)。ALE/PROG:地址鎖存允許。PSEN:外部程序存儲(chǔ)器讀允許。:為0時(shí),單片機(jī)只訪問(wèn)外部程序存儲(chǔ)器。P0口:P0數(shù)據(jù)/低八位地址復(fù)用總線端口。P1口:P1靜態(tài)通用端口。P2口:P2高八位地址總線動(dòng)態(tài)端口。P3口:P3雙功能靜態(tài)端口。P3口也可作為STC89C51的一些特殊功能口。如:P3.0為串行輸入口〔RXD,P3.1為串行輸出口〔TXD,P3.2為外部中斷0〔INT0,P3.3為外部中斷1〔INT1,P3.4為定時(shí)/計(jì)數(shù)器0的外部輸入口〔T0,P3.5為定時(shí)/計(jì)數(shù)器1的外部輸入口〔T1,P3.6為外部數(shù)據(jù)存儲(chǔ)器寫選通〔WR,P3.7為外部數(shù)據(jù)存儲(chǔ)器讀選通〔RD。由于本設(shè)計(jì)中定時(shí)器的應(yīng)用很多而且很重要,在此對(duì)定時(shí)器/計(jì)數(shù)器T1、T0的使用方法進(jìn)行簡(jiǎn)單說(shuō)明:STC89C51單片機(jī)內(nèi)有兩個(gè)可編程的定時(shí)器/計(jì)數(shù)器T1、T0。兩個(gè)定時(shí)器都具有定時(shí)器和計(jì)數(shù)器兩種工作模式,四種工作方式〔方式0、方式1、方式2和方式3,其控制字均在相應(yīng)的特殊功能存儲(chǔ)器中,通過(guò)對(duì)它的特殊功能寄存器編程,用戶可方便地選擇定時(shí)器/計(jì)數(shù)器的兩種工作模式和四種工作方式。定時(shí)器/計(jì)數(shù)器T0由特殊功能寄存器TH0、TL0構(gòu)成,定時(shí)器/計(jì)數(shù)器T1由特殊功能寄存器TH1、TL1構(gòu)成。特殊功能寄存器TMOD用于選擇定時(shí)器/計(jì)數(shù)器T1、T0的工作模式和工作方式。特殊功能寄存器TCON用于控制T1、T0的啟動(dòng)和停止計(jì)數(shù),同時(shí)包含了T1、T0的狀態(tài)。TMOD、TCON這兩個(gè)寄存器的內(nèi)容由軟件設(shè)置[3]。2.STC89C51單片機(jī)特點(diǎn)STC89C51單片機(jī)是宏晶科技推出的新一代超強(qiáng)抗干擾/高速/低功耗的單片機(jī),指令代碼完全兼容傳統(tǒng)8051單片機(jī),其主要特點(diǎn):<1>增強(qiáng)型6時(shí)鐘/機(jī)器周期,12時(shí)鐘/機(jī)器周期,8051CPU。<2>工作電壓:3.4~5.5V。<3>工作頻率0~40MHZ,實(shí)際工作頻率可達(dá)48MHZ。<4>應(yīng)用程序空間8K字節(jié)。<5>RAM存儲(chǔ)容量為128B,可擴(kuò)展至64KB。<6>I/O口有32個(gè),P0口開(kāi)漏輸出,作為I/O口需要上拉;P1、P2、P3口是準(zhǔn)雙向/弱上拉。<7>ISP,無(wú)需專用編程器/仿真器,可通過(guò)串口〔P3.0/P3.1直接下載用戶程序,8K程序3秒即可完成。<8>具有看門狗,冷啟動(dòng)后為關(guān)閉狀態(tài)。<9>工作溫度范圍:0~75。<10>STC89C51單片機(jī)的抗干擾與抗EMI輻射能力。2.2KXM12864J簡(jiǎn)介型的液晶顯示模塊種類繁多,而且大部分液晶顯示模塊都自帶驅(qū)動(dòng),使用時(shí)直接連接控制器件即可。型的液晶顯示模塊分為帶字庫(kù)的和不帶字庫(kù)的。帶字庫(kù)的液晶顯示模塊可以直接從字庫(kù)中調(diào)用漢字或字符,減少了代碼長(zhǎng)度,方便用戶使用。不帶字庫(kù)的液晶顯示模塊,每個(gè)字符要逐個(gè)按一定的規(guī)則送出顯示,但掌握一定的使用方法后使用會(huì)很方便,可以顯示漢字、字符和圖形。不帶字庫(kù)的液晶顯示模塊價(jià)格相對(duì)便宜又是其一大優(yōu)勢(shì)。本次設(shè)計(jì)選用KXM12864J顯示模塊。KXM12864J是一種不帶字庫(kù)的圖形點(diǎn)陣液晶顯示器。它主要采用動(dòng)態(tài)驅(qū)動(dòng)原理由行驅(qū)動(dòng)—控制器和列驅(qū)動(dòng)器兩部分組成了128〔列×64〔行的全點(diǎn)陣液晶顯示。此顯示器采用了COD的軟封裝方式〔COD:英文全稱為CacheonDie,芯片內(nèi)集成緩存,通過(guò)導(dǎo)電橡膠和壓框連接LCD,使其壽命長(zhǎng),連接可靠。1.KXM12864J的特點(diǎn)<1>工作電壓為5V10%,可自帶驅(qū)動(dòng)LCD所需的負(fù)電壓。<2>全屏幕點(diǎn)陣,點(diǎn)陣數(shù)為128〔列64〔行,可顯示8〔行4〔行個(gè)〔1616點(diǎn)陣漢字,也可完成圖形,字符的顯示。<3>與CPU接口采用5條位控制總線和8位并行數(shù)據(jù)總線輸入輸出,適配M系列時(shí)序。<4>內(nèi)部有顯示數(shù)據(jù)鎖存器。<5>簡(jiǎn)單的操作指令。如顯示開(kāi)關(guān)設(shè)置,顯示起始行設(shè)置,地址指針設(shè)置和數(shù)據(jù)讀/寫等指令。2.KXM12864J的內(nèi)部結(jié)構(gòu)KXM12864J內(nèi)部主要包括以下部分:數(shù)據(jù)顯示RAM<DDRAM>、I/O緩沖器〔DB0~DB7、輸入寄存器、輸出寄存器、指令寄存器、狀態(tài)字寄存器、地址寄存器、Y地址計(jì)數(shù)器、Z地址計(jì)數(shù)器、顯示起始行寄存器、顯示開(kāi)/關(guān)觸發(fā)器、復(fù)位端RES、背光接線[4]。KXM12864J的內(nèi)部原理圖如圖2-1所示。圖2-1KXM12864J原理圖3.KXM12864J的軟件應(yīng)用規(guī)則KXM12864J的指令功能:<1>讀狀態(tài)字狀態(tài)字是MPU了解LCM〔液晶顯示模塊當(dāng)前狀態(tài),或LCM向MPU提供其內(nèi)部狀態(tài)的唯一的信息渠道。BUSY表示當(dāng)前LCM接口控制電路運(yùn)行狀態(tài)。BUSY=1表示LCM正在處理MPU發(fā)過(guò)來(lái)的指令或數(shù)據(jù)。此時(shí)接口電路被封鎖,不能接受除讀狀態(tài)字以外的任何操作。BUSY=0表示LCM接口控制電路已外于"準(zhǔn)備好"狀態(tài),等待MPU的訪問(wèn)。ON/OFF表示當(dāng)前的顯示狀態(tài)。ON/OFF=1表示關(guān)顯示狀態(tài),ON/OFF=0表示開(kāi)顯示狀態(tài)。RESET表示當(dāng)前LCM的工作狀態(tài),即反映RES端的電平狀態(tài)。當(dāng)RES為低電平狀態(tài)時(shí),LCM處于復(fù)位工作狀態(tài),標(biāo)志位RESET=1。當(dāng)RES為高電平狀態(tài)時(shí),LCM為正常工作狀態(tài),標(biāo)志位RESET=0。在指令設(shè)置和數(shù)據(jù)讀寫時(shí)要注意狀態(tài)字中的BUSY標(biāo)志。只有在BUSY=0時(shí),MPU對(duì)LCM的操作才能有效。因此MPU在每次對(duì)LCM操作之前,都要讀出狀態(tài)字判斷BUSY是否為"0"。若不為"0",則MPU需要等待,直至BUSY=0為止。<2>顯示開(kāi)關(guān)設(shè)置該指令設(shè)置顯示開(kāi)/關(guān)觸發(fā)器的狀態(tài),由此控制顯示數(shù)據(jù)鎖存器的工作方式,從而控制顯示屏上的顯示狀態(tài)。D位為顯示開(kāi)/關(guān)的控制位。當(dāng)D=1為開(kāi)顯示設(shè)置,顯示數(shù)據(jù)鎖存器正常工作,顯示屏上呈現(xiàn)所需的顯示效果。此時(shí)在狀態(tài)字中ON/OFF=0。當(dāng)D=0為關(guān)顯示設(shè)置,顯示數(shù)據(jù)鎖存器被置零,顯示屏呈不顯示狀態(tài),但顯示存儲(chǔ)器并沒(méi)有被破壞,在狀態(tài)字中ON/OFF=1。<3>顯示起始行設(shè)置該指令設(shè)置了顯示起始行寄存器的內(nèi)容。LCM通過(guò)CS的選擇分別具有64行顯示的管理能力,該指令中L5~L0為顯示起始行的地址,取值在0~3FH〔1~64行范圍內(nèi),它規(guī)定了顯示屏上最頂一行所對(duì)應(yīng)的顯示存儲(chǔ)器的行地址。如果定時(shí)間隔地,等間距地修改〔如加一或減一顯示起始行寄存器的內(nèi)容,則顯示屏將呈現(xiàn)顯示內(nèi)容向上或向下平滑滾動(dòng)的顯示效果。<4>頁(yè)面地址設(shè)置該指令設(shè)置了頁(yè)面地址—X地址寄存器的內(nèi)容。LCM將顯示存儲(chǔ)器分成8頁(yè),指令代碼中P2~P0就是要確定當(dāng)前所要選擇的頁(yè)面地址,取值范圍為0~7H,代表第1~8頁(yè)。該指令規(guī)定了以后的讀/寫操作將在哪一個(gè)頁(yè)面上進(jìn)行。<5>列地址設(shè)置該指令設(shè)置了Y地址數(shù)計(jì)數(shù)器的內(nèi)容,LCM通過(guò)CS的選擇分別具有64列顯示的管理能力,C5~C0=0~3FH〔1~64代表某一頁(yè)面上的某一單元地址,隨后的一次讀或?qū)憯?shù)據(jù)將在這個(gè)單元上進(jìn)行。Y地址計(jì)數(shù)器具有自動(dòng)加一功能,在每一次讀/寫數(shù)據(jù)后它將自動(dòng)加一,所以在連續(xù)進(jìn)行讀/寫數(shù)據(jù)時(shí),Y地址計(jì)數(shù)器不必每次都設(shè)置一次。頁(yè)面地址的設(shè)置和列地址的設(shè)置將顯示存儲(chǔ)器單元唯一地確定下來(lái),為后來(lái)的顯示數(shù)據(jù)的讀/寫作了地址的選通。KXM12864J的接口時(shí)序:<1>寫操作將8位數(shù)據(jù)寫入先前已確定的顯示存儲(chǔ)器的單元內(nèi)。操作完成后列地址計(jì)數(shù)器自動(dòng)加一。時(shí)序如圖2-2所示。圖2-2寫操作時(shí)序圖<2>讀操作該操作將LCM接口部的輸出寄存器內(nèi)容讀出,然后列地址計(jì)數(shù)器自動(dòng)加一。時(shí)序如圖2-3所示。圖2-3讀操作時(shí)序圖4.KXM12864J的顯示方法點(diǎn)陣式LCD的取模方式有逐列式、逐行式、列行式、行列式等。本設(shè)計(jì)中選用列行式。列行式就是:先選擇點(diǎn)陣的第一頁(yè),逐列查表顯示一個(gè)漢字的上半部分,再選擇第二頁(yè),逐列查表顯示一個(gè)漢字的下半部分。顯示字符,一頁(yè)就可以顯示完整一個(gè)。每次顯示要先通過(guò)指令選中顯示位置的頁(yè)和列,然后將字模逐個(gè)送入。<1>漢字取模應(yīng)用51單片機(jī)工具箱取漢字字模。取字模的方法以漢字"唐"為例進(jìn)行介紹。設(shè)定每個(gè)漢字大小為1616。首先將漢字"唐"寫入漢字字模生成工具1616的點(diǎn)陣中,如圖2-4所示。圖2-4漢字1616點(diǎn)陣圖然后就可以生成"唐"字字模,"0xFF,0xFF,0xBF,0xBB,0xD8,0x1B,0xDB,0xAB,0x7A,0xAB,0x9A,0xAB,0xDA,0xAB,0xF2,0xAB,0xEA,0xAB,0xDA,0xAB,0x1A,0xAB,0xDE,0xFB,0xDD,0x7B,0xDB,0xBB,0xD7,0xAB,0xDF,0xF7”。<2>字符取模51單片機(jī)工具箱不可以實(shí)現(xiàn)字符取模,沒(méi)有找到相應(yīng)的取模工具,使用了一種比較傳統(tǒng)的取模方式。以字符"T"為例進(jìn)行介紹。設(shè)定每個(gè)字符大小為58。首先將字符"T"寫入58的點(diǎn)陣中,如圖2-5所示。圖2-5字符58點(diǎn)陣圖然后每列從下往上讀,亮的點(diǎn)為"1”,暗的點(diǎn)為"0”。讀出"T"的二進(jìn)制字模"00000001,00000001,01111111,00000001,最后轉(zhuǎn)換為十六進(jìn)制字模"0x01,0x01,0x7F,0x01,0x01”3系統(tǒng)硬件的設(shè)計(jì)俄羅斯方塊游戲系統(tǒng)硬件電路的設(shè)計(jì)分為四大模塊,分別是單片機(jī)最小系統(tǒng)模塊、LCD顯示模塊、獨(dú)立按鍵模塊和聲音模塊。單片機(jī)最小系統(tǒng)顯示模塊按鍵模塊PC機(jī)聲音模塊單片機(jī)最小系統(tǒng)顯示模塊按鍵模塊PC機(jī)聲音模塊圖3-1硬件電路整體框圖1.單片機(jī)最小系統(tǒng)模塊,包括電源電路、復(fù)位電路、振蕩電路和下載接口電路。2.LCD顯示模塊,采用KXM12864J型液晶顯示器顯示圖形的形狀、游戲得分游戲時(shí)間、游戲速度和游戲等級(jí)等信息。3.獨(dú)立按鍵模塊,設(shè)定六個(gè)獨(dú)立按鍵進(jìn)行游戲操作,功能分別為左移、右移、快速下移、翻轉(zhuǎn)、變形、確定和暫停,其中確定和暫停功能由一個(gè)獨(dú)立按鍵來(lái)實(shí)現(xiàn)。4.聲音模塊,主要由蜂鳴器構(gòu)成,可以在不同的游戲進(jìn)程發(fā)出不同的音樂(lè),增加了游戲的娛樂(lè)性。系統(tǒng)總體設(shè)計(jì)電路原理圖見(jiàn)附錄一。3.1單片機(jī)最小系統(tǒng)的設(shè)計(jì)單片機(jī)最小系統(tǒng)包括:V直流電源電路、振蕩電路、復(fù)位電路和下載電路。下面分模塊進(jìn)行介紹。3.1.1電源電路的設(shè)計(jì)設(shè)計(jì)中單片機(jī)和LCD顯示屏所需電源均為V直流電。一般將220V交流電轉(zhuǎn)化為穩(wěn)定的V直流電的電路設(shè)計(jì)流程是把單相交流電經(jīng)過(guò)電源變壓器、整流電路、濾波電路和穩(wěn)壓電路轉(zhuǎn)換成穩(wěn)定的直流電[5],其框圖如圖3-2所示?!?20V50HZ整流電路濾波電路電源變壓器穩(wěn)壓電路+5v圖3-2電源電路框圖由于上述供電方法需要220V到12V的電源變壓器,這種變壓器相對(duì)系統(tǒng)來(lái)說(shuō)體積偏大,而且偏重。本次設(shè)計(jì)選擇USB供電和外部供電。電路圖如圖3-3所示。圖3-3電源電路圖USB供電在很多情況下使用USB供電比較方便,不必?cái)y帶不方便的AC適配器。在設(shè)計(jì)過(guò)程中電路板直接和筆記本電腦連接就可以供電。所有主機(jī)USB設(shè)備〔如PC和筆記本電腦至少可以供出500mA電流或每個(gè)USB插口提供5個(gè)"單元負(fù)載"。在USB述語(yǔ)中,"一個(gè)單元負(fù)載"是100mA。自供電USB插孔也可以提供5個(gè)單元負(fù)載。總線供電USB插孔保證提供一個(gè)單元負(fù)載〔100mA。所有USB設(shè)備在連接主機(jī)時(shí)需要主機(jī)對(duì)其加以識(shí)別。在識(shí)別過(guò)程中,主機(jī)決定USB設(shè)備的電源以及是否為其供電,對(duì)于被認(rèn)可的設(shè)備將負(fù)載電流從100mA增大到500mA。USB供電方式,可以選擇比較簡(jiǎn)單的電路來(lái)實(shí)現(xiàn)。如圖3-3所示,在電路板上只需要有一個(gè)USB接口,傳輸過(guò)來(lái)的電流經(jīng)過(guò)濾波后接電源開(kāi)關(guān)。最后連接上熔斷器,在電流過(guò)大時(shí)熔斷器首先被燒壞使主板斷電,可以有效的保護(hù)電路主板[6]。2.外部電源供電USB供電可能出現(xiàn)供電不足,在此又設(shè)計(jì)了外部供電。外部供電方式,首先需要用電源變壓器將220V交流電轉(zhuǎn)變?yōu)橹绷麟?然后經(jīng)過(guò)濾波和7805穩(wěn)壓后與USB供電電路重合。7805的引腳1是輸入腳,接+8~+20V直流電源。引腳2是接地腳,接直流電源的負(fù)極。引腳3是輸出腳,輸出+5V的穩(wěn)定電壓,確保在輸入交流電壓波動(dòng)或負(fù)載和溫度變化時(shí)輸出電壓的穩(wěn)定。后面電路與USB供電電路重合,如圖3-3所示。電源指示燈電路為了可以直觀的觀測(cè)到電源接通情況,在電源設(shè)計(jì)部分增加了電源指示燈電路,如圖3-4所示。圖3-4電源指示燈電路圖此電路由一個(gè)發(fā)光二極管和一個(gè)1KΩ的限流電阻構(gòu)成,兩端連接電路板電源的正負(fù)極。當(dāng)按下電源開(kāi)關(guān)時(shí),電路板得電,同時(shí)指示燈亮。3.1.2振蕩電路的設(shè)計(jì)單片機(jī)以晶體振蕩器的振蕩周期為最小的時(shí)序單位,片內(nèi)的各種微操作都以此周期為時(shí)序基準(zhǔn)。STC89C53可以選用外部振蕩方式和內(nèi)部振蕩方式。內(nèi)部振蕩方式所得的時(shí)鐘信號(hào)比較穩(wěn)定,實(shí)用電路中實(shí)用較多,本設(shè)計(jì)選用內(nèi)部振蕩方式。STC89C53中有一個(gè)用于構(gòu)成內(nèi)部振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是該放大器的輸入端和輸出端。這個(gè)放大器與作為反饋元件的片外晶振一起構(gòu)成自激振蕩器,振蕩電路如圖3-5所示。圖3-5振蕩電路圖外接晶振及電容C2、C3接在放大器的反饋回路中構(gòu)成并聯(lián)振蕩電路。外接電容C2、C3起穩(wěn)定振蕩頻率,快速起振的作用。對(duì)外接電容C2、C3雖然沒(méi)有十分嚴(yán)格的要求,但電容容量的大小會(huì)輕微影響振蕩頻率的高低、振蕩器工作的穩(wěn)定性、起振的難易程度及溫度穩(wěn)定性,如果使用石英晶體,電容使用30pF10pF,而如果使用陶瓷諧振器則選擇30pF10pF[7]。在此選用石英晶體,電容使用30pF。3.1.3STC89C53單片機(jī)的復(fù)位引腳RST出現(xiàn)2個(gè)機(jī)器周期〔1個(gè)機(jī)器周期為12個(gè)振蕩周期以上的高電平時(shí),單片機(jī)就執(zhí)行復(fù)位操作。如果RST持續(xù)為高電平,單片機(jī)將處于循環(huán)復(fù)位狀態(tài)不在執(zhí)行程序。復(fù)位操作分可分為上電復(fù)位和開(kāi)關(guān)復(fù)位兩種方式。上電復(fù)位要求接通電源后,自動(dòng)實(shí)現(xiàn)復(fù)位操作。開(kāi)關(guān)復(fù)位要求在電源接通的條件下,單片機(jī)運(yùn)行期間,如果發(fā)生死機(jī),用按下復(fù)位按鈕操作使單片機(jī)復(fù)位。本設(shè)計(jì)中選用上電復(fù)位和開(kāi)關(guān)復(fù)位并存的復(fù)位方式,如圖3-6所示?;驹硎牵荷想姾?由于電容充電,使RST持續(xù)一段高電平時(shí)間。當(dāng)單片機(jī)已在運(yùn)行之中時(shí),按下復(fù)位鍵也能使RST持續(xù)一段時(shí)間的高電平,從而實(shí)現(xiàn)上電且開(kāi)關(guān)復(fù)位的操作。通常選擇C=10~30uF,R=10~1kΩ。本設(shè)計(jì)中選擇C=30uF,R=10kΩ。圖3-6復(fù)位電路圖如果不僅要使單片機(jī)復(fù)位,而且還要使單片機(jī)的外圍芯片也同時(shí)復(fù)位,上述電路中應(yīng)進(jìn)行少許調(diào)整。單片機(jī)的復(fù)位操作使單片機(jī)進(jìn)入初始化過(guò)程,其中包括使程序計(jì)數(shù)器PC=0000H,P0~P3=FFH,SP=07H,其他寄存器從H地址單元開(kāi)始執(zhí)行[8]。單片機(jī)復(fù)位后不改變片內(nèi)RAM區(qū)中的內(nèi)容,特殊功能寄存器復(fù)位后的狀態(tài)見(jiàn)表3-1所示。表3-1特殊工作寄存器復(fù)位狀態(tài)表特殊功能寄存器初始狀態(tài)特殊功能寄存器初始狀態(tài)A00HTMOD00HB00HTCON00HPSW00HTH000HSP07HTL000HDPL00HTH100HDPH00HTL100HP0~P3FFHSBUF不定IE***00000BSCON00HIP0**00000BPCON0*******B值得指出的是,記住一些特殊功能寄存器復(fù)位后的主要狀態(tài),對(duì)于了解單片機(jī)的初態(tài),減少應(yīng)用程序中的初始化部分是十分必要的。說(shuō)明:表中符號(hào)*為隨機(jī)狀態(tài);A=00H,表明累加器已被清零;PSW=00H,表明選寄存器0組為工作寄存器組;SP=07H,表明堆棧指針指向片內(nèi)RAM的H字節(jié)單元,根據(jù)堆棧操作的先加后壓法則,第一個(gè)被壓入的內(nèi)容寫入到08H單元中;P0~P3=FFH,表明已向各端口線寫入1,此時(shí),各端口既可用于輸入又可用于輸出;IP=×××00000B,表明各個(gè)中斷源處于低優(yōu)先級(jí);IE=0××00000B,表明各個(gè)中斷均被關(guān)斷。3.1.4下載本次設(shè)計(jì),軟件程序是通過(guò)串行編程方式寫入單片機(jī)Flash存儲(chǔ)器的,即ISP編程方式,需要電平轉(zhuǎn)換芯片MAX232。同時(shí)上位機(jī)與系統(tǒng)的連接需要一條下載線,下載線的一端是USB口接PC機(jī),另一端是九針的串行口接系統(tǒng)電路板。1.ISP簡(jiǎn)介STC系列單片機(jī)提供ISP在線系統(tǒng)可編程,可方便使用RS232接口直接下載程序。ISP的好處是:不用購(gòu)買通用編程器,單片機(jī)在系統(tǒng)上即可下載/燒錄用戶程序,而無(wú)須將單片機(jī)從已生產(chǎn)好的產(chǎn)品上拆下,再用通用編程器將程序代碼燒錄進(jìn)單片機(jī)內(nèi)部。這種方法極大地方便了軟件編寫過(guò)程中的調(diào)試工作。STC89系列單片機(jī)在出廠之前已在單片機(jī)內(nèi)部固化有ISP系統(tǒng)引導(dǎo)程序,配合ISP端的控制程序即可將用戶的程序代碼下載進(jìn)單片機(jī)內(nèi)部,故無(wú)需編程器,而且速度比通用編程器快。2.MAX232簡(jiǎn)介MAX232芯片〔如圖3-7所示是美信公司專門為電腦的RS-232標(biāo)準(zhǔn)串口設(shè)計(jì)的接口電路,使用V電源供電。內(nèi)部結(jié)構(gòu)基本可分三個(gè)部分:第一部分是電荷泵電路。由芯片的1、2、3、4、5、6腳和4只電容構(gòu)成。功能是產(chǎn)生V和V兩個(gè)電源,提供給RS-232串口電平的需要。第二部分是數(shù)據(jù)轉(zhuǎn)換通道。由芯片的7、8、9、10、11、12、13、14腳構(gòu)成兩個(gè)數(shù)據(jù)通道。其中13腳〔R1IN、12腳〔R1OUT、11腳〔T1IN、14腳〔T1OUT為第一數(shù)據(jù)通道。8腳〔R2IN、9腳〔R2OUT、10腳〔T2IN、7腳TTL/CMOS數(shù)據(jù)從T1IN、T2IN輸入轉(zhuǎn)換成RS-232數(shù)據(jù)從T1OUT、T2OUT送到電腦DB9插頭;DB9插頭的RS-232數(shù)據(jù)從R1IN、R2IN輸入轉(zhuǎn)換成TTL/CMOS數(shù)據(jù)后從R1OUT、R2第三部分是供電。15腳GND、16腳VCC〔V。161615141312111091121314151617181C1+V+C1-C2++C2-V-T2OUTR2INVCCGNDT1OUTR1INR1OUTT1INT2INR2OUT圖3-7MAX232芯片引腳圖3.ISP下載電路圖3-8下載電路圖如圖3-8所示STC系列單片機(jī)下載電路需要一片MAX232及五只電容即可,電路簡(jiǎn)單易行。兩個(gè)發(fā)光二極管在下載程序時(shí)會(huì)不斷閃爍,方便用戶觀察。下載程序時(shí)還需要使用STC提供的下載軟件STC_ISP.exe,軟件界面如圖3-9所示。圖3-9軟件界面圖下載步驟:<1>選擇MCU類型:STC89C53RC。<2>將編譯鏈接代碼文件形成的為擴(kuò)展的文件調(diào)入緩沖區(qū),每次調(diào)入,都會(huì)使校驗(yàn)和改變。<3>選擇PC串口,若沒(méi)有串口,則需要USB轉(zhuǎn)串口轉(zhuǎn)換器。波特率可以使用默認(rèn)值;若通信不正常,可以將波特率值降低后再試,知道通信正常。<4>不要改動(dòng)無(wú)關(guān)的一些默認(rèn)值。<5>點(diǎn)擊"Download/下載"按鈕,屏幕提示單片機(jī)上電,這時(shí)PC等待單片機(jī)冷啟動(dòng)〔給單片機(jī)通電,隨后就可以看到HEX文件寫入單片機(jī)。給單片機(jī)斷電,點(diǎn)擊"Donload/下載"按鈕,單片機(jī)上電,消息框提示握手成功,幾秒種后程序下載完畢,單片機(jī)自動(dòng)開(kāi)始運(yùn)行下載的程序[9]。3.2LCD顯示電路的設(shè)計(jì)LCD顯示電路部分為該設(shè)計(jì)系統(tǒng)的主要部分。在前面已經(jīng)介紹了LCD顯示模塊KXM12864J的顯示原理,在此不再重復(fù)敘述。KXM12864J的D0~D7端口與單片機(jī)P0口相連,用于數(shù)據(jù)傳輸〔單片機(jī)的P0口連接了10K的排阻,用于拉高電平。E、R/W、RS、CS1、CS2分別與單片機(jī)的P2.0~P2.4相連,用于控制。顯示電路圖如圖3-10所示。圖3-10顯示電路圖KXM12864J的接線需要注意以下幾點(diǎn):1.在KXM12864J和單片機(jī)連接。不同的12864LCD部分引腳功能不同,而且不對(duì)應(yīng)。連接時(shí)應(yīng)對(duì)應(yīng)所用型號(hào)LCD的引腳圖逐個(gè)接線,以免因接線錯(cuò)誤燒壞LCD。2.KXM12864J背光的連接。KXM12864J的19、20引腳分別為L(zhǎng)ED+和LED-,是背光電源引腳。在接線時(shí),LED+要接V電源,LED-接系統(tǒng)的地,如圖3-11所示。LCMLCMLCM20195V圖3-11背光電路圖3.KXM12864J亮度調(diào)節(jié)的電路連接。KXM12864J的18引腳為VEE,輸出-10V的負(fù)電壓〔單電源供電,3引腳為VLCD是LCD的驅(qū)動(dòng)負(fù)電壓。KXM12864J需要連接一個(gè)電位器,用于調(diào)節(jié)背光的亮度。設(shè)計(jì)中選用電位器的可調(diào)范圍為0~20KΩ。線路連接方式如圖3-12所示。LCD-VLCDLCD-VLCDLCD-VEER320KΩVCC圖3-12亮度調(diào)節(jié)電阻連接圖3.3按鍵電路的設(shè)計(jì)電路板的功能鍵可以使用矩陣鍵盤,也可以使用獨(dú)立按鍵,在本設(shè)計(jì)中采用獨(dú)立按鍵。根據(jù)系統(tǒng)功能需要,使用了六個(gè)獨(dú)立按鍵。四個(gè)操作按鍵的功能分別為左移、快速下移、右移、翻轉(zhuǎn),分別與單片機(jī)的P1.0~P1.3口相接;變形鍵和確定/暫停鍵分別與單片機(jī)的P1.4~P1.5口相接。當(dāng)有鍵按下時(shí),則對(duì)應(yīng)端口電平被拉低。系統(tǒng)中設(shè)置了定時(shí)器中斷,定時(shí)對(duì)按鍵進(jìn)行掃描,當(dāng)掃描到有鍵按下時(shí),執(zhí)行相應(yīng)程序完成相應(yīng)功能。鍵盤接口電路如圖3-13所示。圖3-13鍵盤接口電路3.4聲音電路的設(shè)計(jì)為了增加游戲的娛樂(lè)性系統(tǒng)中增設(shè)由蜂鳴器產(chǎn)生的游戲聲音,通過(guò)編程控制蜂鳴器在游戲進(jìn)程中發(fā)出不同的音調(diào)。這部分電路設(shè)計(jì)比較簡(jiǎn)單,由一個(gè)蜂鳴器,一個(gè)三極管驅(qū)動(dòng)和一個(gè)200Ω的限流電阻組成。當(dāng)向蜂鳴器送入脈沖時(shí),蜂鳴器就會(huì)發(fā)出聲音[10]。改變輸入脈沖頻率蜂鳴器所發(fā)聲音的音調(diào)就會(huì)發(fā)生變化。蜂鳴器電路圖如圖3-14所示。圖3-14蜂鳴器電路4系統(tǒng)軟件的設(shè)計(jì)本系統(tǒng)軟件設(shè)計(jì)主要分為三部分:LCD顯示部分、功能按鍵部分和音樂(lè)部分。主程序中有兩個(gè)循環(huán):在一個(gè)圖形下落到底時(shí)將下一個(gè)圖形設(shè)定為當(dāng)前圖形并產(chǎn)生新的下一個(gè)圖形為大循環(huán),當(dāng)前下落圖形的狀態(tài)檢測(cè)和自動(dòng)下移為小循環(huán)換。本設(shè)計(jì)軟件編程主程序流程圖如圖4-1所示。程序清單見(jiàn)附錄二。開(kāi)始開(kāi)始給定時(shí)器0賦初值開(kāi)定時(shí)器初始化否計(jì)時(shí)顯示按鍵操作下落到底?是否音樂(lè)闖關(guān)成功?闖關(guān)失敗?產(chǎn)生圖形否否有滿行?消行積分是圖形下移一行是是圖4-1主程序流程圖4.1LCD顯示子程序顯示分為兩部分:左半屏顯示游戲;右半屏顯示游戲進(jìn)程的相關(guān)信息,包括下一個(gè)圖形形狀、當(dāng)前速度、游戲積分、游戲時(shí)間和游戲等級(jí)。本設(shè)計(jì)選用的KXM12864J型LCD,為128列、8頁(yè)〔每頁(yè)8行的點(diǎn)陣顯示屏。它的使用有兩個(gè)基本操作:送指令和送數(shù)據(jù)。通過(guò)"page0x7;page0xb8;lcdCmd<page>;"語(yǔ)句選定顯示屏的頁(yè);"column0x40;column0x3f;lcdCmd<column>;"語(yǔ)句選定顯示屏的列。主要用于顯示字符、顯示圖形、設(shè)定游戲顯示區(qū)域和清屏。4.1.1顯示字符子程序否否開(kāi)始選取字模首位置設(shè)定顯示起始列colume,i=5+columei<64?是選擇右屏選擇左屏選擇頁(yè)、列寫入字模++i,i<5+colume?否是結(jié)束圖4-2LCD顯示流程圖顯示流程圖如圖4-2所示。每個(gè)字符為58點(diǎn)陣,即字符占5列、8行的點(diǎn)陣,采用列行式的輸入方法。每個(gè)字符有五個(gè)字模,字符取字模后存入asii[]數(shù)組。通過(guò)選擇asii[]的腳標(biāo)選擇需要輸出字符的字?!踩∧7绞揭言贚CD簡(jiǎn)介中介紹。顯示圖形子程序本設(shè)計(jì)定義了七個(gè)圖形,每個(gè)圖形由四個(gè)小方塊構(gòu)成,小方塊為33的點(diǎn)陣。圖形定義在cube[]數(shù)組中[13]。七個(gè)圖形的形狀如圖4-3所示。圖4-3七種顯示圖形每個(gè)圖形的顯示,是將小方塊寫入指定區(qū)域。圖形顯示流程圖如圖4-4所示。開(kāi)始開(kāi)始i<4?是否寫入圖形的模選擇行、列i=0i=i-1結(jié)束圖4-4中斷程序流程圖4.1.3設(shè)定游戲顯示區(qū)域子程序本設(shè)計(jì)將游戲顯示區(qū)設(shè)定在左半屏,顯示區(qū)寬度為48列,高度為62行。可以容納33的小方塊16列,21行。按照所用顯示屏的列行式顯示方法,將左半屏的最頂行和最底行寫入高電平,顯示屏左起第2列和第51列送入高電平,其它位置寫入"0",這樣就可以在藍(lán)色顯示屏上顯示出一個(gè)白框。清屏子程序清屏包括整體清屏和部分清屏,在程序除的位置再寫入"0"即可。清屏的應(yīng)用,可使圖形和字符清晰顯示,使顯示界面更加中選擇要清整潔。部分程序如下所示。voidlcdClear<void>{uchari,page;CS1=0;CS2=1;for<page=0;page<8;page++>{lcdSetPage<page>;lcdSetColumn<0>;for<i=0;i<64;i++>lcdWriteByte<0>;}CS1=1;CS2=0;for<page=0;page<8;page++>{lcdSetPage<page>;lcdSetColumn<0>;for<i=0;i<64;i++>lcdWriteByte<0>;}}顯示計(jì)時(shí)子程序計(jì)時(shí)流程圖如圖4-5所示。中斷入口t0ms=50?中斷入口t0ms=50?downtimegapdowntimegap=50?產(chǎn)生中斷?++s20=20?是是否否t0ms=0?是是是否否按鍵掃描downtimegap++,t0ms=++t0ms%100++m++s=60?結(jié)束否改變":"狀態(tài)圖形下移一行設(shè)置中斷初值,開(kāi)中斷本設(shè)計(jì)在按鍵掃描、游戲計(jì)時(shí)、圖形自動(dòng)下移中均應(yīng)用到時(shí)間。在此利用單片機(jī)的定時(shí)器T0使用方式1來(lái)實(shí)現(xiàn)所有的計(jì)時(shí)和定時(shí)。所用的定時(shí)器方式在每次中斷后要重新載入初值,設(shè)置每次中斷的時(shí)間為10ms。按鍵每次中斷掃描一次。變量t0ms每次中斷加一,計(jì)時(shí)時(shí)間每1s改變一次,在變量t0ms=100時(shí)改變時(shí)間顯示值;分與秒之間的":"每0.5ms改變一次狀態(tài),在變量t0ms=50時(shí)改變狀態(tài)。在沒(méi)有任何按鍵操作時(shí)當(dāng)前圖形每隔一段時(shí)間自動(dòng)下移一行,變量downtimegap每次中斷加一,當(dāng)downtimegap=50時(shí)圖形下移,并將downtimegap清零。消行積分子程序俄羅斯方塊游戲系統(tǒng)的設(shè)計(jì)每當(dāng)一個(gè)圖形下落到設(shè)定區(qū)域底部就會(huì)檢測(cè)是否有滿行。如果有滿行則將此行逐行下移,移至最低端時(shí)將其消除,每消除一行就獲得一分,一次消除delete行,可獲得deletedelete分,由于圖形最長(zhǎng)由四個(gè)小方塊組成所以最多一次只可以消除四行。若未有滿行則圖形仍會(huì)繼續(xù)下落,每個(gè)圖形的擺放都會(huì)對(duì)下一個(gè)圖形造成影響,當(dāng)圖形累積到最頂行時(shí)游戲結(jié)束。開(kāi)始i開(kāi)始i=0?第i〔j行滿行?j=0?是是否否將i行內(nèi)容下移一行i=i-1score=score+deletedelete是否清除第0行,++delete,--j結(jié)束圖4-6消行積分流程圖闖關(guān)設(shè)置子程序本游戲共設(shè)置10個(gè)關(guān)卡,每20分闖一關(guān)。打開(kāi)游戲提示是否開(kāi)始游戲,界面顯示"NEWGAME"按確定鍵就可以開(kāi)始游戲。游戲每上升一關(guān)圖形的下落速度就會(huì)加快一級(jí),當(dāng)玩家闖入第六關(guān)時(shí)變量"cdoor=1"有效〔開(kāi)始游戲是cdoor初始化為0變形鍵可以使用。當(dāng)玩家闖關(guān)失敗時(shí),界面將顯示"GAMEOVER",延時(shí)后提示玩家是否開(kāi)始新游戲,界面顯示"NEWGAME",再次按確定鍵就可以重新開(kāi)始游戲。當(dāng)玩家闖關(guān)成功時(shí),界面將顯示"GOODJOB",延時(shí)后提示玩家是否再次闖關(guān),界面顯示"AGAIN",按下確定鍵界面顯示"NEWGAME"再次按確定鍵就可以開(kāi)始新游戲。開(kāi)始score開(kāi)始score<40?score<20?是是否否speed=1,level=1顯示Score、Speed、level是否speed=10,level=10speed=2,level=2score<200?score<120?結(jié)束否是speed=6,level=6,cdoor=1,圖4-7闖關(guān)設(shè)置流程圖4.2按鍵操作子程序本設(shè)計(jì)使用的按鍵包括左移鍵、右移鍵、快速下移鍵、變形鍵、翻轉(zhuǎn)鍵、確定鍵和暫停鍵。確定鍵和暫停鍵為復(fù)用鍵,該鍵在游戲進(jìn)行過(guò)程中為暫停功能,在游戲開(kāi)始前或結(jié)束一場(chǎng)游戲時(shí)為確定鍵功能。按鍵掃描部分位于中斷子程序中,每10ms掃描一次。每個(gè)按鍵按下10ms后若此按鍵仍然按下則變量keyflag=1有效,在主函數(shù)的循環(huán)中執(zhí)行相應(yīng)的按鍵操作,否則當(dāng)做按鍵抖動(dòng)不執(zhí)行操作。左移鍵、右移鍵、快速下移鍵每按下一次圖形向相應(yīng)方向移動(dòng)一行,若按下0.5s后〔此時(shí)t0ms1=PUSHON此鍵仍持續(xù)按下則每100ms使圖形向相應(yīng)方向移動(dòng)一次。翻轉(zhuǎn)鍵每按下一次圖形將按順時(shí)針?lè)较蛐D(zhuǎn)。變形鍵在玩家闖入第六關(guān)時(shí)才可以使用,每按下一次,系統(tǒng)將重新選擇一個(gè)圖形賦給當(dāng)前下落圖形。確定鍵是用于游戲開(kāi)始或結(jié)束時(shí)游戲玩家進(jìn)行確認(rèn)的按鍵。為方便玩家,增設(shè)了暫停鍵。當(dāng)按下一次暫停鍵時(shí)變量zt取反,當(dāng)zt=0時(shí)游戲處于暫停狀態(tài),zt=1時(shí)繼續(xù)游戲。下面以左移操作為例說(shuō)明按鍵的操作流程,如圖4-8所示。否否開(kāi)始清除圖形列減一是列加一結(jié)束寫入原圖形是否到達(dá)邊界?圖4-8左移操作流程圖開(kāi)始cdoor=開(kāi)始cdoor=1?是否有鍵按下?是是否否是否變形左移右移翻轉(zhuǎn)下移暫停10ms后是否仍按下?key=5??key=3??key=2??key=1??key=0??key=5??是是是是是是否否否否否結(jié)束圖4-9按鍵掃描流程圖4.3聲音子程序本設(shè)計(jì)利用蜂鳴器設(shè)置了聲音部分。程序中定義蜂鳴器為BEEP,它對(duì)應(yīng)著端口P3.6。當(dāng)向BEEP送入脈沖時(shí),蜂鳴器響;向BEEP持續(xù)送入高電平時(shí),關(guān)蜂鳴器[14]。要想使蜂鳴器發(fā)出不同的音調(diào)就要改變送入BEEP脈沖的頻率。部分程序如下所示:voidbeeping<>{unsignedchari;for<i=0;i<100;i++>{Delay1ms<4>; BEEP=!BEEP;//BEEP取反}BEEP=1;//關(guān)閉蜂鳴器} 由程序可以看出能夠通過(guò)對(duì)BEEP取反實(shí)現(xiàn)對(duì)蜂鳴器送脈沖。脈沖寬度由延時(shí)函數(shù)Delay1ms<>決定,延時(shí)越長(zhǎng)頻率越低,蜂鳴器發(fā)出的音調(diào)也越低,反之音調(diào)越高。聲音子程序主要應(yīng)用:每下落一個(gè)圖形,蜂鳴器響一下;闖關(guān)成功,蜂鳴器發(fā)出歡快的音調(diào);闖關(guān)失敗,蜂鳴器發(fā)出低沉的音調(diào)。5系統(tǒng)調(diào)試與仿真本設(shè)計(jì)的代碼編寫是在KeilC51軟件中完成的,經(jīng)過(guò)編譯后生成"HEX"文件。在Proteus軟件中選擇所需要的器件繪制電路圖。將"HEX"文件下載到電路圖中的單片機(jī)內(nèi),進(jìn)行仿真。觀察仿真界面可以查找系統(tǒng)功能存在的問(wèn)題。5.1KEIL軟件和PROTEUS軟件簡(jiǎn)介1.Keil軟件簡(jiǎn)介隨著單片機(jī)開(kāi)發(fā)技術(shù)的不斷發(fā)展,從普遍使用匯編語(yǔ)言到逐漸使用高級(jí)語(yǔ)言開(kāi)發(fā),單片機(jī)的開(kāi)發(fā)軟件也在不斷發(fā)展,目前流行的51系列單片機(jī)開(kāi)發(fā)軟件是德國(guó)Keil公司推出的KeilC51軟件,它是一個(gè)基于32位Windows環(huán)境的應(yīng)用程序,支持C語(yǔ)言和匯編語(yǔ)言編程,其6.0以上的版本將編譯和仿真軟件統(tǒng)一為uVision〔通常稱為uV3。Keil提供包括C編譯器、宏匯編、連接器、庫(kù)管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開(kāi)發(fā)方案,由以下幾部分組成:uVisionIDE集成開(kāi)發(fā)環(huán)境〔包括工程管理器、源程序編輯器、程序調(diào)試器、C51編譯器、A51匯編器、LIB51庫(kù)管理器、BL51連接/定位器、OH51目標(biāo)文件生成器以及Monitor-51、RTX51實(shí)時(shí)操作系統(tǒng)[15]。Keil軟件開(kāi)發(fā)流程:<1>建立工程。<2>為工程選擇目標(biāo)器件。<3>設(shè)置工程的配置參數(shù)。<4>打開(kāi)/建立程序文件。<5>編譯和連接工程。<6>糾正程序中的書(shū)寫和語(yǔ)法錯(cuò)誤并重新編譯連接。<7>對(duì)程序中的某些純軟件的部分使用軟件仿真驗(yàn)證。<8>使用Proteus對(duì)應(yīng)用程序進(jìn)行硬件仿真。2.Proteus軟件簡(jiǎn)介ProteusISIS是英國(guó)Labcenter公司開(kāi)發(fā)的電路分析與實(shí)物仿真軟件。它運(yùn)行于Windows操作系統(tǒng)上,可以仿真、分析〔SPICE各種模擬器件和集成電路。本次設(shè)計(jì)使用的版本為ProteusVersion7.4。Proteus軟件開(kāi)發(fā)流程:運(yùn)行Proteus的ISIS程序后,進(jìn)入該仿真軟件的主界面。在工作前,要設(shè)置view菜單下的捕捉對(duì)齊和system下的顏色、圖形界面大小等項(xiàng)目。通過(guò)工具欄中的"P"〔從庫(kù)中選擇元件命令命令,在"pickdevices窗口"中選擇電路所需的元件,放置元件并調(diào)整其相對(duì)位置,元件參數(shù)設(shè)置,元器件間連線,編寫程序;在"source菜單"的Definecodegenerationtools菜單命令下,選擇程序編譯的工具、路徑、擴(kuò)展名等項(xiàng)目;在"source菜單"的Add/removesourcefiles命令下,加入單片機(jī)硬件電路的對(duì)應(yīng)程序;通過(guò)debug菜單的相應(yīng)命令仿真程序和電路的運(yùn)行情況[16]。3.Keil和Proteus的連接<1>Keil軟件中編譯程序成功,打開(kāi)"OptionsforTarget‘Target1’對(duì)話框",點(diǎn)擊"Output按鈕",然后選中"CreateHEXFi"。如圖5-1所示。圖5-1OptionsforTarget‘Target1’對(duì)話框確定后關(guān)閉窗口,再次執(zhí)行編譯程序,此時(shí)就生成了"HEX"文件。<2>利用Proteus畫好電路圖后,右擊單片機(jī),當(dāng)單片機(jī)變?yōu)榧t色后,再左擊單片機(jī)則會(huì)出現(xiàn)如圖5-2所示對(duì)話框。圖5-2HEX文件加載圖單擊ProgramFile所對(duì)應(yīng)的文件夾圖標(biāo),將HEX文件選中加入即可。單擊運(yùn)行按鈕,就可以看到仿真結(jié)果[17]。5.2系統(tǒng)調(diào)試與仿真通過(guò)Keil和Proteus結(jié)合調(diào)試仿真可以控制系統(tǒng)觀察游戲進(jìn)程和顯示情況,從而發(fā)現(xiàn)軟件編程中語(yǔ)法之外的問(wèn)題,更方便于設(shè)計(jì)的改進(jìn)。仿真選用的是AMPIRE12864,它的各個(gè)引腳功能和KXM12864J完全一致,并且都是不帶字庫(kù)的顯示器。游戲開(kāi)始時(shí),顯示屏先初始化。顯示屏右側(cè)顯示"NEXT";"PEED"初始值為"1";"SCORE"初始值為"0000";計(jì)時(shí)時(shí)間初始值"00:00";"LEVEL"初始值為"1"。1.顯示屏左側(cè)顯示"NEWGAME"。仿真圖如圖5-3所示。圖5-3仿真結(jié)果圖<1>2.游戲過(guò)程中,當(dāng)前圖形下落的同時(shí)顯示下一個(gè)圖形形狀,如圖5-4所示。圖5-4仿真結(jié)果圖<2>3.闖關(guān)失敗界面上顯示"GAMEOVER",如圖5-5所示。圖5-5仿真結(jié)果圖<3>經(jīng)過(guò)一段延時(shí)間后可以重新開(kāi)始游戲,界面顯示"NEWGAME",如圖5-6所示。圖5-6仿真結(jié)果圖<4>5.闖關(guān)成功后界面上左側(cè)顯示"GOODJOB",右屏可以看到得分、等級(jí)和用時(shí),如圖5-7所示。延時(shí)一段延時(shí)間后顯示"NEWGAME",點(diǎn)擊確定從新開(kāi)始游戲。圖5-7仿真結(jié)果圖<5>5.3仿真過(guò)程中的問(wèn)題1.仿真過(guò)程中曾出現(xiàn)過(guò)圖5-8所示顯示界面。圖5-8仿真結(jié)果圖<6>在游戲開(kāi)始一分二十八秒后仍不見(jiàn)有圖形下落,只有時(shí)間在累計(jì),"NEXT"處顯示的圖形在不斷變換。檢查軟件,有寫圖形到顯示界面部分,并且邏輯沒(méi)有錯(cuò)誤。經(jīng)仔細(xì)查找發(fā)下,在控制圖形下落部分的代碼中將圖形擦除,使行減一后沒(méi)有將圖形寫入。修改后代碼如下:voidmoveDown<void>{clearCubeFromMap<>;this.row++;if<checkBorder<>||checkClask<>>{this.row--;downok=1;}elsedownok=0;rectangle<>;showCubeMap<>;writeCubeToMap<>;if<downok>checkMap<>;}其中clearCubeFromMap<>為清除圖形函數(shù),showCubeMap<>為寫入圖形函數(shù)。2.仿真時(shí)發(fā)現(xiàn)暫停鍵不可用。在仿真時(shí)暫停鍵無(wú)法實(shí)現(xiàn)暫停功能,即使在持續(xù)按下暫停鍵期間游戲依然進(jìn)行。多次檢查代碼,都沒(méi)有發(fā)現(xiàn)邏輯和語(yǔ)法錯(cuò)誤,后來(lái)嘗試將控制暫停的變量zt改變?cè)诖a中的位置。修改前:if<stop==1>{if<!OKOK>key=5;zt=~zt;}修改后:case0:if<key!=gkey>//執(zhí)行case0后10ms才執(zhí)行case1,相當(dāng)于按鍵延時(shí)去抖{ gkey=key; zt=~zt; keystate=1; } break;修改成功后分析原因,發(fā)現(xiàn)是延時(shí)問(wèn)題。修改后和修改前的差別在于暫停鍵的執(zhí)行多了一個(gè)10ms的延時(shí)。在以后的設(shè)計(jì)中應(yīng)注意此類問(wèn)題。6硬件焊接與調(diào)試6.1電路板焊接任何電子產(chǎn)品,從幾個(gè)零件構(gòu)成的整流器到成千上萬(wàn)個(gè)零部件組成的計(jì)算機(jī)系統(tǒng),都是由基本的電子元器件按電路工作原理,用一定的工藝方法連接而成。雖然連接方法有多種〔例如繞接、壓接、粘接等,但使用最廣泛的方法是錫焊。錫焊,就是用電烙鐵和焊錫使焊件與電路板上的銅箔連接在一起。本設(shè)計(jì)的電路板顯示部分和按鍵部分是手動(dòng)焊接。系統(tǒng)所用器件清單見(jiàn)附錄三。1.焊接流程<1>器件布局。盡量將發(fā)熱多的部分〔如電源部分安放在通用板的角落。<2>畫布線圖。畫布線圖時(shí)應(yīng)盡量減少接線交叉,可以根據(jù)需要再適當(dāng)調(diào)整器件位置。<3>焊接器件。焊接有多個(gè)引腳的器件時(shí)應(yīng)先固定幾個(gè)端點(diǎn)然后再將每個(gè)引腳焊接好。<4>焊接連線。在焊接連線時(shí)可以適當(dāng)將線拉緊,這樣不僅節(jié)約用線,更重要的是可以使焊接線路清晰整潔,而且方便檢查線路。<5>調(diào)試。焊接過(guò)程中最好每完成一個(gè)模塊就測(cè)試一個(gè)模塊,如果遇到問(wèn)題就縮小了檢查范圍。這種方法可以提高焊接質(zhì)量,同時(shí)提升焊接速度。2.焊接質(zhì)量焊接時(shí),要保證每個(gè)焊點(diǎn)焊接牢固、接觸良好。焊點(diǎn)光亮、圓滑而無(wú)毛刺,錫量適中,錫和被焊物融合牢固。手工焊接步驟:<1>右手持電烙鐵,左手用鑷子夾持元件或?qū)Ь€。焊接前,電烙鐵要充分預(yù)熱。烙鐵頭刃面上要吃錫,即帶上一定量焊錫。<2>將烙鐵頭刃面緊貼在焊點(diǎn)處。電烙鐵與水平面大約成角,以便熔化的錫從烙鐵頭上流到焊點(diǎn)上。烙鐵頭在焊點(diǎn)處停留時(shí)間控制在2~3秒。<3>抬開(kāi)烙鐵頭,左手仍持元件不動(dòng)。待焊點(diǎn)處的焊錫冷卻凝固后,松開(kāi)左手。<4>用鑷子轉(zhuǎn)動(dòng)引線,確認(rèn)不松動(dòng),然后用偏口鉗剪去多余的引線[18]。手工焊接注意事項(xiàng):<1>烙鐵在使用前先通電"上錫"。<2>掌握好加熱時(shí)間,在保證焊料潤(rùn)濕焊件的前提下時(shí)間越短越好。<3>保持合適的溫度,一般經(jīng)驗(yàn)是烙鐵頭溫度比焊料熔化溫度高較為適宜。<4>烙鐵不用時(shí)要及時(shí)斷電,防止烙鐵芯加速氧化而燒斷[19]。6.2硬件調(diào)試整體硬件電路如圖6-1所示。圖6-1硬件電路板LCD顯示的調(diào)試1.將程序下載到系統(tǒng)中,在系統(tǒng)供電的情況下觀察LCD顯示屏[20]。顯示屏顯示"NEXT";"PEED"初始值為"1”;"SCORE"初始值為"0000”;計(jì)時(shí)時(shí)間初始值"00:00”;"LEVEL"初始值為"1”。經(jīng)檢查發(fā)現(xiàn)程序中的選屏設(shè)置與硬件接線不對(duì)應(yīng)〔CS1=1,CS2=0時(shí)選擇左屏;CS1=0,CS2=1時(shí)選擇右屏。將CS1和CS2引腳的接線交換位置,選屏顯示就正常了。如圖6-2所示。圖6-2LCD顯示屏<1>按提示按下確定鍵顯示下一個(gè)新圖形的形狀,當(dāng)前圖形開(kāi)始按一定速度逐行下移。左右移動(dòng)圖形,圖形移動(dòng)過(guò)的位置顯示屏上留下許多亮點(diǎn),而且隨著時(shí)間的延續(xù)亮點(diǎn)越來(lái)越多,只有在重新開(kāi)始游戲時(shí)才能將亮點(diǎn)全部清除一次。如圖6-3所示。圖6-3LCD顯示屏<2>開(kāi)始懷疑是延時(shí)問(wèn)題,經(jīng)過(guò)反復(fù)修改嘗試排除了延時(shí)問(wèn)題。在清屏上作修改后,顯示界面清晰度有所改善。當(dāng)有滿行時(shí)可以實(shí)現(xiàn)消行加分。當(dāng)圖形堆積到設(shè)定區(qū)域頂部時(shí),界面顯示"GAMEOVER",全部闖關(guān)成功后顯示"GOODJOB"。此時(shí)按下確定鍵可以重新開(kāi)始新游戲。如圖6-4、6-5所示。圖6-4LCD顯示屏<4>圖6-5LCD顯示屏<5>綜上,在不斷調(diào)試修改后,顯示屏顯示基本達(dá)到預(yù)期效果。按鍵調(diào)試在硬件系統(tǒng)中進(jìn)行按鍵調(diào)試,各按鍵均可以很好的實(shí)現(xiàn)各自的功能。不過(guò)存在一個(gè)問(wèn)題:按鍵過(guò)多,不便于操作。在原來(lái)的設(shè)計(jì)中使用了七個(gè)獨(dú)立按鍵,功能分別為確定、翻轉(zhuǎn)、左移、右移、快速下移、變形、暫停。按鍵過(guò)多使得玩家在進(jìn)行操作時(shí)容易誤用。為了減少按鍵,將確定功能和暫停功能設(shè)置在同一個(gè)按鍵上,形成復(fù)用鍵。在程序中增設(shè)了變量stop,將stop的初始值設(shè)置為"0",當(dāng)stop=0時(shí)復(fù)用鍵執(zhí)行確定功能,在游戲開(kāi)始前或結(jié)束一場(chǎng)游戲時(shí)使用;當(dāng)stop=1時(shí)復(fù)用鍵執(zhí)行暫停功能,在游戲進(jìn)行過(guò)程中可以使用。聲音調(diào)試這部分在硬件測(cè)試中基本沒(méi)有出現(xiàn)問(wèn)題。每下落一個(gè)圖形,蜂鳴器可以響一下;闖關(guān)成功時(shí),蜂鳴器發(fā)出歡快的音調(diào);闖關(guān)失敗時(shí),蜂鳴器發(fā)出低沉的音調(diào)。蜂鳴器發(fā)出聲音的同時(shí)用手觸摸蜂鳴器,能夠感覺(jué)到蜂鳴器在震動(dòng)。調(diào)試結(jié)束。7結(jié)論本設(shè)計(jì)實(shí)現(xiàn)了俄羅斯方塊游戲系統(tǒng)設(shè)計(jì)。設(shè)計(jì)以STC89C53單片機(jī)作為主控芯片,以LCD為顯示界面,使用獨(dú)立按鍵進(jìn)行操作,實(shí)現(xiàn)功能如下:通過(guò)預(yù)先設(shè)置的隨機(jī)發(fā)生器不斷輸出單個(gè)圖形到顯示界面頂部,通過(guò)按鍵操作可以控制圖形的左右移動(dòng)、快速下落和變形,如果下落的某個(gè)圖形使界面上的一行或多行完全填滿,則組成這些行的所有小方塊被消除,以此換取積分;未被消除的方塊會(huì)一直積累,并對(duì)后來(lái)的方塊造成一定的影響,如果未被消除的方塊堆放的高度超過(guò)界面所規(guī)定的最大高度,則游戲結(jié)束。系統(tǒng)顯示器左側(cè)為方塊存放區(qū),右側(cè)可顯示下一個(gè)方塊形狀、當(dāng)前得分、速度和游戲時(shí)間等。在設(shè)計(jì)過(guò)程中,我遇到了很多問(wèn)題,比如按鍵功能問(wèn)題、顯示問(wèn)題和聲音控制問(wèn)題等。經(jīng)過(guò)查閱資料和不斷嘗試這些問(wèn)題都逐一解決,在這一過(guò)程中我提高了獨(dú)立思考的能力和解決實(shí)際問(wèn)題的能力。本設(shè)計(jì)實(shí)現(xiàn)了俄羅斯方塊游戲的基本功能,同時(shí)也存在很多不足。比如在顯示方面,游戲顯示圖形的區(qū)域較小,如果將這個(gè)區(qū)域適當(dāng)增大顯示效果將會(huì)更好。又如在按鍵方面,本設(shè)計(jì)采用的是非自鎖式的獨(dú)立按鍵,這種按鍵雖然價(jià)格相對(duì)便宜但使用不太方便,以后可以嘗試將按鍵換成游戲手柄。還有在聲音方面,由于現(xiàn)在知識(shí)和能力有限,相對(duì)來(lái)說(shuō)本設(shè)計(jì)在聲音方面做得是比較粗糙的。如果在設(shè)計(jì)中應(yīng)用專用芯片和器件使游戲進(jìn)行的同時(shí)加上背景音樂(lè),就更具有吸引力了。謝辭本設(shè)計(jì)能夠順利地完成,首先要感謝學(xué)院給我提供了這樣一個(gè)平臺(tái),讓我在畢業(yè)之前可以將所學(xué)知識(shí)付諸實(shí)踐,完成了我的畢業(yè)設(shè)計(jì);感謝系領(lǐng)導(dǎo)給予的大力支持和幫助。然后要感謝樊艷老師對(duì)我的指導(dǎo)。從設(shè)計(jì)題目的選取,到方案的設(shè)定老師都給予了細(xì)心的指導(dǎo)同時(shí)在此要感謝同學(xué)和朋友給予的幫助。這次畢設(shè)的完成離不開(kāi)各位老師和同學(xué),再次致以深深的謝意。參考文獻(xiàn)[1]徐璐,唐勇波.基于VC的俄羅斯方塊游戲設(shè)計(jì)與實(shí)現(xiàn)[J].軟件導(dǎo)刊,2009,8[2]胡代弟,齊公博.用SPCE061A單片機(jī)實(shí)現(xiàn)俄羅斯方塊游戲[J].電子制作,2008,10[3]張毅剛,彭喜元.單片機(jī)原理與應(yīng)用設(shè)計(jì)[M],北京:電子工業(yè)出版社,2008,4[4]胡代弟,齊公博.用SPCE061A單片機(jī)實(shí)現(xiàn)俄羅斯方塊游戲[J].電子制作,2008,10[5]童師白,華成英.模擬電子技術(shù)基礎(chǔ)[M],北京:高等教育出版社,2007,7<3>:502-520[6]樊永顯,許勇.基于STC89C54RC/RD+單片機(jī)的游戲機(jī)系統(tǒng)設(shè)計(jì)[J].XX工業(yè)大學(xué)學(xué)報(bào),2007〔21:66-69[7]AT89C51DATASHEEPPhilipsSemiconductors[J],1999[8]STC89C52RCDataSheet[OL].[9]趙建領(lǐng).51系列單片機(jī)開(kāi)發(fā)寶典[M],北京:電子工業(yè)出版社,2007:123-125[10]劉同法,陳忠平.單片機(jī)外圍接口電路與工程實(shí)踐[M],北京:北京航天航空大學(xué)出版,2001:53-62[11]夏易路.單片機(jī)技術(shù)基礎(chǔ)教程與實(shí)現(xiàn)[M],北京:電子工業(yè)出版社,2008,1:152-164[12]王為青,程國(guó)鋼.單片機(jī)KeilCx51應(yīng)用開(kāi)發(fā)技術(shù)[M],北京:人民郵電出版社,2006,12:197-202[13]馬俊偉.利用VC開(kāi)發(fā)的俄羅斯方塊游戲[J].電腦編程技巧與維護(hù),2009,21[14]謝維成,楊家國(guó).單片機(jī)原理與應(yīng)用及C51程序設(shè)計(jì)[M],北京:清華大學(xué)出版社,2009,7:323-342[15]杜樹(shù)春.單片機(jī)C語(yǔ)言和匯編語(yǔ)言混合編程實(shí)踐[J],北京:航空航天大學(xué)出版社,2008:22-24[16]馬忠梅,籍順心,張凱,馬巖.單片機(jī)的C語(yǔ)言應(yīng)用程序設(shè)計(jì)[M],北京:北京航空航天大學(xué)出版社,1999,1:143-149[17]I.ScottMackKenzie.THE8051MICROCONTROLLER[M].USA.Prentice-Hall.Inc,1995[18]劉同法,陳忠平.單片機(jī)外圍接口電路與工程實(shí)踐[M],北京:北京航天航空大學(xué)出版社,2009,3:299-310[19]付家才.電子工程設(shè)計(jì)與實(shí)踐[M],北京:化學(xué)工業(yè)出版社,2003,6[20]LCDDesignGuide[OL].附錄附錄一總體設(shè)計(jì)電路原理圖附錄二程序清單#include<AT89X51.H>#defineucharunsignedchar#defineuintunsignedint#defineDOWNTIME50 //用于控制圖形下降時(shí)間的變量#defineMAXHANG21 //游戲顯示區(qū)可容納21行3*3的小方塊#defineMAXLIE16 //游戲顯示區(qū)可容納18列3*3的小方塊#defineMAXPIX3 //每個(gè)小方塊是3*3的#definePUSHON50 //按鍵操作連續(xù)執(zhí)行相關(guān)量#defineLCDP1//液晶屏的與C51之間的引腳連接定義〔顯示數(shù)據(jù)線接C51的P0口#defineENP2_0//液晶屏的使能端#defineRWP2_1//選擇讀/寫操作;RW=0為寫操作,RW=1為讀操作#defineRSP2_2//寄存器的選擇;RS=0為寫命令,RS=1為寫數(shù)據(jù)#defineCS1P2_3#defineCS2P2_4//CS1、CS2用于選屏,低電平有效;CS1=0,CS2=1時(shí)選中左半屏;CS1=1,CS2=0時(shí)選中右半屏#defineKEYROTATIONP3_0//翻轉(zhuǎn)#defineKEYDOWNP3_1//快速下落 #defineKEYLEFTP3_2//左移#defineKEYRIGHP3_3//右移#defineCHANGEP3_4 //變形#defineOKOKP3_7//確定/暫停--復(fù)用#defineBEEPP3_6//定義蜂鳴器 */#defineSTAR58 //右屏字符顯示的起始列#defineWIDE6 //每個(gè)字符寬5列,字符間隔為1列,用于右屏中設(shè)置字符位置#defineSHOWSTAR12 //左屏框中字符顯示的起始列#defineGAP8 //每個(gè)字符寬5列,字符間隔為3列,用于左屏中設(shè)置字符位置ucharg=0; //闖關(guān)預(yù)設(shè)為第1關(guān)uchargkey=0xff,keystate=0,t0ms1=0,t0ms=0,downtimegap=0;//gkey、keystate按鍵相關(guān)標(biāo)志符//t0ms中斷計(jì)時(shí)相關(guān)變量//t0ms1按鍵操作連續(xù)執(zhí)行相關(guān)量//downtimegap用于圖形自動(dòng)下移的變量,每次中斷〔10ms加1,當(dāng)downtimegap=DOWNTIME-5*speed時(shí)圖形自動(dòng)下移1次ucharmiao=0,fen=0,shi=0;uchardownok;//為1時(shí),一個(gè)圖形下落到底,開(kāi)始新一個(gè)圖形下落的標(biāo)志位ucharstop=0; //控制復(fù)用鍵的變量bitkeyflag,timeupdate,fashionupdate,zt=1;//keyflag按鍵操作執(zhí)行標(biāo)志位//每1S使timeupdate置1,改變計(jì)時(shí)顯示輸出的標(biāo)志位;//改變fashionupdate值使":"閃爍,fashionupdate=1":"消失;//zt用于暫停的中間變量;keyflag=1時(shí)有效,此時(shí)執(zhí)行相應(yīng)按鍵操作ucharidatacubeMap[MAXHANG][2]; typedefstruct{ucharcode*box; ucharcube:4;ucharstate:4; charrow; charcolumn; }block;//圖形各屬性的集合:row、column下降圖形的初始位置//cube圖形形狀//state圖形翻轉(zhuǎn)的4個(gè)狀態(tài)blockthis;uintscore=0;ucharspeed=1;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,4,6,2,0,3,6,0,4,6,2,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-170x

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論