貪吃蛇游戲的設(shè)計_第1頁
貪吃蛇游戲的設(shè)計_第2頁
貪吃蛇游戲的設(shè)計_第3頁
貪吃蛇游戲的設(shè)計_第4頁
貪吃蛇游戲的設(shè)計_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

學(xué)號:1108441087 本科畢業(yè)論文(設(shè)計)(2014屆)貪吃蛇游戲的設(shè)計 院 系 電子信息工程學(xué)院 專 業(yè) 電氣工程及其自動化 姓 名 羅序敏 指導(dǎo)教師 申遠 副教授 2015年4月合肥師范學(xué)院2015屆本科畢業(yè)論文(設(shè)計)摘 要本篇論文主要是設(shè)計并且著手致力于實現(xiàn)一種基于51單片機的經(jīng)典的貪吃蛇游戲,主要是研究該游戲的硬件電路和軟件編程的設(shè)計,同時也簡單介紹了應(yīng)該如何使用Proteus軟件進行仿真。借助仿真軟件進行實驗測試,可以基本實現(xiàn)游戲一些簡單的基本功能。直至現(xiàn)在,大家都知道且明白了51系列的單片機技術(shù)相對而言比較成熟,功能也十分強大,應(yīng)用較為廣泛。將單片機作為本設(shè)計的控制核心,能夠使硬件電路大大地簡化,用軟件來編程控制單片機,來加以實現(xiàn)硬件電路的功能,可以降低能耗,同時也節(jié)約成本。選用C語言編程,比較方便靈活,極大地加快了軟件開發(fā)的速度,使開發(fā)周期縮短了,同時方便移植。本篇論文比較詳細的的介紹了各種硬件的基本特性,貪吃蛇游戲?qū)崿F(xiàn)的基本功能與詳細設(shè)計,軟件設(shè)計的具體說明,每一個模塊的細節(jié)要求,還有一些功能模塊的程序流程圖和關(guān)鍵部分代碼的詳細講解等。關(guān)鍵詞:Proteus軟件仿真;51單片機;Keil;貪吃蛇;LED點陣屏Abstract 窗體頂端This paper is mainly committed to the design and begin a 51 microcontroller based on the classic Snake game, is to study the hardware circuit design and software programming of the game, but also a brief introduction to how to use Proteus simulation software . With simulation software experimental tests, the basic realization of the game can be some simple basic functions. Until now, we all know and understand the 51 series of single-chip technology is relatively mature, the function is also very powerful, is widely used. The microcontroller as control core of this design, enabling greatly simplify the hardware circuit with microcontroller programming control software, hardware circuitry to be functional, you can reduce energy consumption, but also cost savings. Selection of the C programming language, more convenient and flexible, which greatly accelerated the pace of software development, shorten the development cycle, while convenient for transplant. This paper a more detailed introduction to the basic characteristics of various hardware realization of the basic functions of the Snake game with detailed design, software design, specify the details of the requirements of each module, there are some functional modules of the program flow chart and explain in detail the critical parts of the code and so on.窗體底端Keywords:Proteus software simulation;51 microcontroller;Keil;Snake;LED lattice;I目 錄摘 要IAbstractII目錄1 緒論11.1研究背景及意義11.2單片機發(fā)展?fàn)顩r11.3 LED發(fā)展?fàn)顩r31.4 設(shè)計特點32 系統(tǒng)總體設(shè)計42.1設(shè)計要求42.2 系統(tǒng)設(shè)計方案42.2.1硬件設(shè)計42.2.2軟件設(shè)計43系統(tǒng)硬件設(shè)計53.18*8LED點陣的原理說明53.2 LED陣列驅(qū)動電路54系統(tǒng)軟件設(shè)計64.1系統(tǒng)主要模塊介紹64.1.1 主函數(shù)模塊64.1.2 按鍵模塊74.1.3 蛇運動控制模塊74.2主程序工作流程74.3 游戲設(shè)計思想84.4 LED點陣初始化94.5 貪吃蛇的移動94.6 食物的隨機出現(xiàn)95聯(lián)調(diào)與測試10II5.1軟件調(diào)試105.2硬件調(diào)試11結(jié)論與展望13致謝14參考文獻15附錄A:系統(tǒng)原理圖16附錄B:系統(tǒng)PCB圖17附錄C:系統(tǒng)仿真圖18附錄D:系統(tǒng)實物圖18附錄E:系統(tǒng)源程序20III1 緒論1.1研究背景及意義時代在不斷的進步,人們的生活節(jié)奏也因此不斷加快,越來越多的人加入了經(jīng)濟化全球化的世界。人們不再只需要保持自己的小世界,加班、旅游已逐漸代替了人們的正常工作,成為我們必然的公務(wù)。同時,我們可以供隨時隨地的休閑娛樂,因而休閑類的小游戲已經(jīng)逐漸成為生活的必需品,漸漸得變得無所不在,滲入我們?nèi)粘I畹母鱾€部分。貪食蛇這款經(jīng)典的小游戲具有可塑性強、簡單易行、通俗易懂、操作方便、娛樂性強等特點,因此引來了不少人們的青睞。這款小游戲牢牢地把握住了人們追求娛樂的心理,看起來很簡單,但真正接觸的時候毫無違和感,甚至?xí)杏X到其樂無窮,在人們不斷尋求探索更多的開心和樂趣下,游戲的到來給了追逐快樂的人,和現(xiàn)代人滿意的成功后,在巨大的壓力之下是一種很好的放松工具。當(dāng)今的世界,科技在不斷地發(fā)展,尤其是微電子技術(shù)方面,計算機軟件技術(shù)和其應(yīng)用技術(shù)的發(fā)展,將人們的生活變得多姿多彩,不在單調(diào)無趣。單片作為微型計算機大家族中不可或缺的一員,微型計算機以其良好的穩(wěn)定性,獨特的構(gòu)造,較低的成本在嵌入式領(lǐng)域中得到了廣泛應(yīng)用。我希望可以通過這些年來所學(xué)的知識將它剖析出來,使它立體的呈現(xiàn)在面前,真正意義上的了解它的實質(zhì),明白它的精髓所在。在編程方面,能力不強的我,更應(yīng)該努力地借助這次機會,通過研究,從實踐中提升自己的編程能力。故而,我選定了這個比較有意思的課題。1.2單片機發(fā)展?fàn)顩r單片微型計算機,簡稱單片機(MCU)。它是在一塊半導(dǎo)體硅片上集成了振蕩器電路、中央處理單元、隨機存取存儲器、只讀存儲器、可編程定時器/計數(shù)器、并/串行I/O接口等,有的還包含了A/D轉(zhuǎn)換器??傃灾?,一個巴掌大小的單片機,具有一臺計算機的所有屬性,直接相當(dāng)于一臺微型計算機。由于使用單片機時其通常在測控系統(tǒng)的核心部分并嵌入其中。所以,單片機也被稱作為嵌入式控制器EMCU(Embedded MicroController Unit)。單片機擁有集成度高、體積小、重量輕、處理功能強、電源簡單、低功耗、可靠性高、價格低廉、運算速度快、易擴展、易于使用、抗干擾能力強等特點。因此,在工業(yè)控制、通信系統(tǒng)等涉及到的一些領(lǐng)域,基本是到處都可以見到單片機的蹤影,其技術(shù)的開發(fā)和高水平的應(yīng)用已逐漸變成一個國家工業(yè)化成就取得高低的關(guān)鍵。早在1974年,世界上第一塊單片機被美國的仙童公司研究生產(chǎn)出來,歷經(jīng)短短數(shù)幾十年的光陰,單片機便與日俱增,成批地涌現(xiàn)出來。截至現(xiàn)在,4位、8位、16位單片機都已經(jīng)被研究出現(xiàn)了,甚至32位的超大規(guī)模集成電路單的片機也已經(jīng)問世了,其性能也在不斷的升高,不斷被改善。在國內(nèi)的單片機,起步雖然比較晚,但其潛力已經(jīng)受到越來越多人的關(guān)注,特別是在工業(yè)控制、自動化儀器儀表、計算機系統(tǒng)接口、智能化外設(shè)等應(yīng)用領(lǐng)域發(fā)展較為快速。單片機的應(yīng)用,對于產(chǎn)品的升級,還有機電一體化都有重要的意義。在工業(yè)控制中的應(yīng)用也十分廣泛,例如,用單片機可以構(gòu)成形式多樣的控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng),各種報警系統(tǒng),工廠流水線的智能化管芯片理與計算機聯(lián)網(wǎng)構(gòu)成的二級控制系統(tǒng)等。單片機在醫(yī)用設(shè)備中的用途亦相當(dāng)廣泛,例如醫(yī)用呼吸機,各種分析儀,監(jiān)護儀,超聲診斷設(shè)備及病床呼叫系統(tǒng)等等。在通信行業(yè),這種應(yīng)用顯得更加廣泛,手機從最初的只能實現(xiàn)基本通話,沒有其他任何功能,到現(xiàn)在任何一部手機都擁有各種強大的功能,含有各種不同的應(yīng)用,單片機的功效被發(fā)揮的淋漓盡致??梢杂檬謾C來聽音樂,玩游戲,攝影等等,而手機游戲上貪吃蛇游戲就可以利用單片機來實現(xiàn)。即使最新型MCS-51單片機各種基本的內(nèi)核核心擴張和持續(xù)改進,但是51系列的單片機的應(yīng)用依舊是我們國家的主流模式??v觀幾十年的單片機發(fā)展歷程,它的未來將向高性能,高速度,低電壓,低價格和閃存的方向發(fā)展。我們可以預(yù)見的是,單片機的未來將變得更加強大、集成度更高、可靠性更高、功耗更低、使用更方便,總之,它的未來是無可限量的。1.3 LED發(fā)展?fàn)顩r LED,也就是發(fā)光二極管的英文縮寫,是一種固態(tài)的,能夠直接地把電轉(zhuǎn)變成光的半導(dǎo)體電子元件。這種電子元件最早出現(xiàn)在1962年,剛開始的時候只能發(fā)出低光度的紅光,之后慢慢地發(fā)展出其他的單色光,到現(xiàn)在,能發(fā)出的光已經(jīng)遍及可見光、紅外線還有紫外線,光度也得到了較大地提高。而其用途從最開始的作為指示燈、顯示板等,到現(xiàn)在被廣泛地應(yīng)用于顯示器、電視機采光裝飾和照明等。它由含鎵(Ga)、砷(As)、磷(P)、氮(N)等的化合物制成。半導(dǎo)體晶片由兩部分組成,一部分是P型半導(dǎo)體,在它里面空穴占主導(dǎo)地位,另一端是N型半導(dǎo)體, 在這邊主要是電子。 但這兩種半導(dǎo)體連接起來的時候, 它們之間就形成一個“ P-N”結(jié)。當(dāng)電流通過導(dǎo)線作用于這個晶片的時候,電子就會被推向P 區(qū),在P區(qū)里 電子跟空穴復(fù)合,然后就會以光子的形式發(fā)出能量,這就是LED 發(fā)光的原理。 半導(dǎo)體照明具有綠色環(huán)保的特點,使用壽命長,效率高,節(jié)能,抗惡劣環(huán)境,結(jié)構(gòu)簡單 ,體積小,重量輕,響應(yīng)速度快, 工作電壓低,安全性好的特點。因此,LED成為白熾燈、日光燈和節(jié)能燈后的第四代照明電光源,同時也被稱為21世紀(jì)綠色光源。由于LED具有單向?qū)щ娦?,因此它只能往一個方向?qū)?,這種現(xiàn)象被稱為正向偏置,也叫正向偏壓。LED的優(yōu)點是:節(jié)能、壽命長、防水、不易破損、低功耗、開關(guān)具有高速度、微型、高可靠性、光束集中等。它的不足是:顯色性較差、需要專門的驅(qū)動電路、起始的成本較高等,因此,傳統(tǒng)的照明也相對存在一些不足。近年來白光LED的發(fā)光效率有了顯著提高。1.4 設(shè)計特點以下是課程設(shè)計的主要特點:1功能定義,顧名思義是很重要的,尤其是對于讀程序的人來說,它顯得更為重要,在不斷地修改和完善該程序的過程中,也能清楚地明白程序中各個模塊的所起到的作用,從而大大地提高了程序的可讀性。2主要從main()函數(shù)的功能入手。Main()函數(shù)的主要功能是啟動C源程序編譯,主要從main()函數(shù)開始讀函數(shù),可以將其他功能的函數(shù)理解的更加透徹。3在源程序列表的第一幀,來分析程序所要達到的功能,選擇合適的數(shù)據(jù)結(jié)構(gòu),然后在模塊化程序,根據(jù)模塊的功能更加簡單合理地編寫函數(shù)。4我也學(xué)到了很多的庫函數(shù)的作用,如很多對字符串進行處理的函數(shù),還有一些基本的功能我都有了一定的理解。5它是獨立于特定的C語言教科書,重點是C語言的基本特征,以不變應(yīng)萬變,C語言覆蓋的重要基礎(chǔ)知識的實際運用,我們需要熟練地掌握C語言。6根據(jù)實際出發(fā),本設(shè)計可以覆蓋所學(xué)的知識點,而且它比較能夠滿足工程的實際需求。再者,本次設(shè)計能夠激發(fā)我們學(xué)習(xí)的熱情,調(diào)動學(xué)習(xí)的積極性,可以根據(jù)實際編程的要求,提升實際分析問題的能力和編程能力,而且還可以使我們逐步養(yǎng)成良好的編程習(xí)慣。7提供綜合實踐能力的的課程設(shè)計,以進一步鍛煉學(xué)生。同時,讓學(xué)生完成實驗的過程中,可以鍛煉相互合作的精神,取長補短,培養(yǎng)團隊意識。8通過觀察網(wǎng)絡(luò)實例,循序漸進地幫助學(xué)生完成畢業(yè)設(shè)計。本次課程設(shè)計將要求、算法還有源程序單獨分開,給學(xué)生營造獨立思考問題的條件。在足夠理解要求和算法的前提下,充分了解學(xué)生的要求和算法,再設(shè)計自己的應(yīng)用。同時,我也獲得了很多寶貴的經(jīng)驗:1) 在設(shè)計之前,要確保對所設(shè)計的主題和內(nèi)容有一個系統(tǒng)的認(rèn)識,了解設(shè)計的主題和內(nèi)容包含哪些資源。2) 對于設(shè)計程序而言,在采用什么編程語言這方面并不是特別重要,核心在于思路要清晰和軟件流程圖要完整。所以,第一步是要搞清楚設(shè)計原理與思路,然后再畫出軟件流程圖,按這樣的步驟,設(shè)計起來就比較方便快捷了。2 系統(tǒng)總體設(shè)計2.1設(shè)計要求作為最為經(jīng)典和最具有代表性的休閑小游戲之一的貪吃蛇,其玩法準(zhǔn)則是:玩家想要控制蛇移動的方向,必須熟練地掌握上、下、左、右四個方向鍵,在一個個的小方格上吃掉出現(xiàn)的食物。蛇每吃完一次食物后,蛇身變相應(yīng)地增長一節(jié),一節(jié)即為一個單位距離,蛇在游動時,碰到蛇身或者是屏幕框,都表示該游戲結(jié)束。2.2 系統(tǒng)設(shè)計方案2.2.1硬件設(shè)計 系統(tǒng)采用的硬件設(shè)備主要包括51系列單片機,8*8點陣屏等。本次課程設(shè)計單片機選擇的是由飛利浦公司生產(chǎn)的低功耗高性能的CMOS型8位單片機。之所以選擇它,是因為它擁有內(nèi)置的一次性可編程只讀存儲器的64K 字節(jié)的隨機存取數(shù)據(jù)存儲器(RAM)和1K 字節(jié)的隨機存取數(shù)據(jù)存儲器(RAM),它能夠滿足游戲?qū)Υ鎯臻g的要求。8*8點陣屏選擇的是ARK-SZ411288K,它能夠直接與CPU相連接。2.2.2軟件設(shè)計軟件方面主要為匯編語言、C語言、嵌入式操作系統(tǒng)。采用C語言編寫的程序能夠很容易地在不同類型的計算機之間進行移植1。在以后的發(fā)展中,各類型號的單片機種類會進一步增加,而開發(fā)工具和過程會逐步趨向于統(tǒng)一,軟件和硬件差別會更加難以區(qū)分2。本設(shè)計使用uVision3進行程序軟件編譯。只要看一下編譯后生成的匯編代碼,就能夠體會到Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解3。用uVision3軟件編寫程序時,由于uVision3一般只能修改語法上的錯誤,不好檢查算法上的問題,而且如果直接下到單片機里,會因為電路板的限制而使得調(diào)試不方便,所以,在這里,本設(shè)計選擇使用Proteus軟件進行電路的仿真。它運行與Windows操作系統(tǒng)上,可以繪制電路原理圖,仿真、分析各種模擬器件和集成電路,支持主流單片機系統(tǒng)和多種外圍芯片的仿真,提供軟件調(diào)試功能,支持第三方的軟件編譯和調(diào)試環(huán)境4。3系統(tǒng)硬件設(shè)計3.1 8*8LED點陣的原理說明ARK-SZ411288K是本次課程設(shè)計所選用的點陣顯示模塊。它是一個8*8的點陣顯示模塊,總共由64個發(fā)光二極管組成,且每個發(fā)光二極管都處于行線和列線的交點上。當(dāng)相對應(yīng)的某一列置1電平,某一行置0電平,則位置所對應(yīng)的二極管就變亮。值得一說的是,ARK-SZ411288K能夠與CPU直接連接,再根據(jù)其引腳說明,將其各個引腳與相對應(yīng)的I/O口相連。 3.2 LED陣列驅(qū)動電路 至少需要1020mA的電流才能正向地點亮一顆LED,如果通過的電流不足夠大,那么LED所發(fā)出的光就比較暗。而無論是89C51單片機的I/O口,或是TTL、CMOS的輸出,高輸出電流并不是很高,才不過12毫安,故而,很難直接地對LED高態(tài)驅(qū)動。在這種時候,我們就需要增加額外的輔助驅(qū)動電路,本次課程設(shè)計選用的是74HC595,采用74HC595芯片來驅(qū)動LED可以有以下幾個優(yōu)點:速度快,功耗小,LED的數(shù)量隨意。既能夠控制LED的共陰極顯示器,也可以控制LED的共陽極顯示器,同時,還可以通過軟件來控制LED的亮度,并且在需要的時候,能夠關(guān)斷顯示,從而降低功耗,還能夠隨時喚醒顯示。采用74HC595設(shè)計的電路,軟硬件設(shè)計都相對比較簡單,而且功耗較低,驅(qū)動能力較強,所占用的I/O口線較少,成本較低,是一種應(yīng)用十分靈活的設(shè)計方案。 系統(tǒng)采用的硬件設(shè)備主要包括51系列單片機,8*8點陣屏等。51系列單片機采用了飛利浦(PHILIPS)公司生產(chǎn)的型號為P87C51RD2的低功耗高性能的CMOS型8位單片機。選擇它是因為,它內(nèi)置了64K bytes的OTP只讀程序存儲器(RAM)和1K bytes的隨機存取數(shù)據(jù)存儲器(RAM),能滿足游戲?qū)Υ鎯臻g的要求。另外配備了32個可編程的I/O端口,3個16位定時器/計數(shù)器,一個7中斷源4優(yōu)先級嵌套中斷結(jié)構(gòu),一個全雙工串行通信口,片振蕩器及時鐘電路574HC595里含有串/并出移位寄存器和三態(tài)輸出鎖存器。寄存器和鎖存器有著各自的時鐘輸入(SCLK和SLCK),它們有效電平都是上升沿。當(dāng)SCLK由低電平跳向高電平時,串行輸入數(shù)據(jù)(SDA)移入寄存器;當(dāng)SLCK由低電平跳變?yōu)楦唠娖綍r,鎖存器將寄存器的數(shù)據(jù)置入。清除端(CLR) 的低電平只對寄存器復(fù)位(QS為低電平),而對鎖存器無影響。當(dāng)輸出允許控制(EN)為高電平時, 并行輸出(Q0Q7)為高阻態(tài),而串行輸出(QS)不受影響。74HC595最多需要5根控制線,即SDA、SCLK、SLCK、CLR和EN。其中,CLR能夠直接接到高電平,并且用軟件可以實現(xiàn)寄存器的清零;若是不需要用軟件改變亮度,則EN可以直接接到低電平,使用硬件來改變亮度。將余的三根線與單片機的I/O口相連,能夠控制LED。數(shù)據(jù)SDA口送入74HC595,在每個SCLK的上升沿,SDA口上的數(shù)據(jù)移入寄存器,在 SCLK的第9個上升沿,數(shù)據(jù)開始從QS移出。如果把第二個74HC595的SDA 和第一個74HC595的QS連接,數(shù)據(jù)移動到第二個74HC595中,按照此方法,逐次接下去,能夠接任意多個。所有的數(shù)據(jù)發(fā)送完畢后,給SLCK一個上升沿,將寄存器中的數(shù)據(jù)送入鎖存器中。如果EN為低電平,數(shù)據(jù)即從并口Q0Q7輸出,把Q0Q7與LED的8段相接,LED就可以實現(xiàn)顯示了。要想軟件改變LED的亮度,只需改變EN的占空比就行了6。其中,點陣的亮度可以使用改變輸入電壓來改變7。4系統(tǒng)軟件設(shè)計4.1系統(tǒng)主要模塊介紹貪吃蛇操作過程中有多種狀態(tài),采用宏定義,使各種狀態(tài)一目了然,思路清晰。同時再編寫代碼時,采用匈牙利命名規(guī)則命名宏,變量,函數(shù)名,方便閱讀修改8。4.1.1 主函數(shù)模塊作為程序運行時縮影一般的存在,主函數(shù)是一個無限在循環(huán)的程序。它所需要完成的是對一系列硬件軟件的初始化,并且利用定時中斷來控制游戲的時鐘,還要調(diào)用其他模塊以完成按鍵的處理和蛇的運動。4.1.2 按鍵模塊按鍵模塊包括兩個部分:按鍵檢測模塊和按鍵處理模塊。按鍵檢測模塊初始化按鍵對應(yīng)的管腳,利用查詢方式檢測按鍵對應(yīng)的變量值改變。按鍵處理模塊針對不同狀態(tài)下,對按鍵做出不同的處理。4.1.3 蛇運動控制模塊該模塊負(fù)責(zé)控制蛇的運動和狀態(tài),包括在剛開始游戲時對蛇進行初始化,蛇運動時對蛇移動的處理,蛇吃掉出現(xiàn)的食物后的處理。4.2主程序工作流程 系統(tǒng)中的應(yīng)用軟件是根據(jù)系統(tǒng)功能要求設(shè)計的。按軟件的功能來分,可分為執(zhí)行軟件和監(jiān)控軟件。執(zhí)行軟件可以完成各種實質(zhì)性的功能,如測量、計算、顯示。打印、輸出、控制等;監(jiān)控軟件是專門用來協(xié)調(diào)各執(zhí)行模塊和操作者的關(guān)系,在系統(tǒng)軟件中充當(dāng)組織調(diào)度角色。在軟件設(shè)計上,通常要考慮如下幾個方面問題:1.根據(jù)軟件的功能要求,將系統(tǒng)軟件分為幾個相對獨立的部分。整體結(jié)構(gòu)設(shè)計合理,明確,軟件開發(fā)簡單,還有合理的工作流程。2.每個功能程序要實現(xiàn)模塊化、子程序化。不僅方便調(diào)試,連接,也能方便移植和修改。3.編寫應(yīng)用軟件之前,要先繪制出程序流程圖。4.要合理分配系統(tǒng)資源。C語言是一種結(jié)構(gòu)化的高級語言,其優(yōu)點是可讀性好,移植容易9,是普遍使用的一種計算機語言。具體的實施步驟為:1.明確控制要求,繪制電路原理圖。2.參考相關(guān)文獻,檢查電路圖是否正確。3.根據(jù)電路原理圖焊接電路板,嘗試制作貪吃蛇模型。4.分析操作流程,繪制程序流程圖。5.編寫程序代碼,不斷改善。6.運用已學(xué)軟件,對程序進行初步調(diào)試。7.配合貪吃蛇硬件部分,并努力完善其功能,以達到設(shè)計要求。主程序工作流程如圖1所示:圖1 貪吃蛇流程圖系統(tǒng)上電后,首先初始化LED,然后初始化定時器,同時啟動定時器,再然后執(zhí)行程序主體邏輯,程序主體邏輯經(jīng)過一遍執(zhí)行后,立即檢查有無中斷發(fā)生。該游戲的中斷源有兩個,一個是定時器中斷驅(qū)動蛇自動向前,另一個是用戶通過控制按鍵來控制貪吃蛇移動的中斷,二者中任意一個中斷的發(fā)生都能夠使蛇的當(dāng)前狀態(tài)發(fā)生改變。如果沒有中斷產(chǎn)生,主程序則繼續(xù)判斷蛇身是否相撞或者蛇頭是否碰到主屏幕;只要滿足以上所說任意條件,則表示結(jié)束游戲,不然游戲繼續(xù)執(zhí)行主體循環(huán)。該程序的入口地址是Main()函數(shù),從執(zhí)行程序的功能開始,將各個模塊串聯(lián)起來,以實現(xiàn)游戲的各種功能。首先完成軟件硬件的初始化任務(wù)然后進入一個循環(huán),反復(fù)檢測有無按鍵、處理按鍵、處理蛇運動、處理時鐘節(jié)拍這四件事情10。4.3 游戲設(shè)計思想按設(shè)計要求可以得出,游戲的核心是解決LED顯示屏的顯示和蛇身的運動處理的問題。將貪吃蛇的每一節(jié)蛇身大小定義為一個單位矩陣,食物大小與一節(jié)蛇身大小相同,也是一個單位矩陣。當(dāng)蛇開始運動時,需要解決以下幾個問題:1.蛇身的運動處理。用戶每按下一個鍵,蛇身都將開始進行柔體運動。所謂的柔體運動,就是指蛇的運動并不與整條蛇的運動方向一致,而是指在每個時鐘到來時,由蛇頭帶動每一個點陣的方向向下一個點陣傳播,然后自己向新的方向運動一步。運動之后,下一個點陣就得到了上一個點陣的方向,然后按照上一個方向運動同樣的一步。因此,它能夠立即填補上一點的位置,如此類推。在實際設(shè)計蛇運動的時候,我們需要把貪吃蛇蛇尾的那個點陣給去掉,然后在蛇頭的新方向上放一個點陣。所以,一個函數(shù)的定義是用來更新一個點的坐標(biāo),只要確定蛇頭或蛇尾的坐標(biāo)還有其運動的方向,我們就可以調(diào)用此函數(shù)來更新蛇頭或蛇尾的坐標(biāo)。與此同時,調(diào)用有關(guān)的顯示函數(shù)來達到對蛇運動處理的效果。2.在吃到食物后對蛇的處理。蛇頭和食物坐標(biāo)相同時,則表示貪吃蛇吃到食物。如果吃到了食物,那么就在蛇頭的位置加上一個單位點陣,同時需要立即再更新下一個食物的坐標(biāo)。3.隨機放置新的食物。貪吃蛇吃掉食物后,我們通過更新食物的坐標(biāo)來產(chǎn)生新的食物。在放置食物時,我們需要調(diào)用一個判斷函數(shù)來判斷產(chǎn)生的新食物的坐標(biāo)與蛇身是否重疊,如果重疊了,那么則需要重新放置,然后再重新判斷,直到產(chǎn)生的新的食物和蛇身坐標(biāo)不相互重疊為止。4.死亡處理。蛇在運動時,如果蛇頭碰到顯示屏邊框或是蛇身,那就表示游戲結(jié)束了。4.4 LED點陣初始化初始化LED點陣,就是把點陣內(nèi)所含有的全部信息清除,讓其沒有任何信息,內(nèi)部變空,然后在事先所指定的位置處顯示蛇的初始位置和食物的初始位置。初始化程序如下:void Init()for (i = 3; i SNAKE + 1; i+)/SNAKE是蛇的最大長度xi = 100;for (i = 3; i SNAKE + 1; i+)yi = 100;/初始化x0 = 4; y0 = 4; /果子 n = 3; /蛇長 n=-1x1 = 1; y1 = 0; /蛇頭x2 = 0; y2 = 0; /蛇尾1addx = 0; addy = 0; /位移偏移4.5 貪吃蛇的移動當(dāng)食物沒有被蛇吃掉時,每前進一個單位點陣,蛇頭所要到的下一個單位點陣(即LED燈)變亮,相應(yīng)地,蛇尾的那個LED燈就會熄滅。設(shè)計程序時,我們只需要把蛇尾那個點陣的坐標(biāo)傳給蛇頭下一個點陣的坐標(biāo),然后再改變蛇尾的值就可以了。而蛇頭的下一個位置是根據(jù)蛇頭和偏移量來決定的,每次四個方向按鍵決定了蛇運動的偏移量,將蛇頭的位置加上偏移量的值就能夠得到新的蛇頭地位置。當(dāng)蛇頭碰到周圍的屏幕邊框或者碰到自己的身體時,就表示蛇死了,并且游戲就此結(jié)束。其中游戲暫停的處理是通過關(guān)閉定時器2實現(xiàn)的11-13。4.6 食物的隨機出現(xiàn)我們需要保證食物的出現(xiàn)是隨機的,此時就需要調(diào)用一個隨機函數(shù),而且還要保證食物出現(xiàn)的位與蛇的位置不同,即不能重疊,也不能超出點陣屏外,不然就需要重新確定食物的位置。在這里,我們采用程序中的定時計數(shù)器中的低八位TL0的數(shù)值,因為TL0在不斷地變化,所以在不同的時間點所產(chǎn)生的數(shù)值也不同,在這里使用C+語言中的stdlib.h文件庫,調(diào)用里面的隨機函數(shù)srand(),先用srand(TL0)獲得TL0的數(shù)值,再用rand()%8兩次,分別得到食物出現(xiàn)時的橫坐標(biāo)和縱坐標(biāo)。5聯(lián)調(diào)與測試5.1軟件調(diào)試 使用uVision3作為該程序的軟件編譯器。在打開uVision3來編寫此程序時,由于uVision3通常只能改正語法上的錯誤,不好檢查算法上的問題,直接下到單片機里又會受到電路板的限制使得調(diào)試不方便,因此這里使用Proteus進行電路仿真。在實際操作時,我們可以先用Proteus軟件,在上面畫出硬件電路,當(dāng)設(shè)計完電路后就可以進行下一步地仿真。先用鼠標(biāo)雙擊單片機,再把用uVision3軟件編譯產(chǎn)生的.HEX文件設(shè)定為下載文件,點擊左下方的PLAY鍵就可以開始進行仿真了,按上下左右?guī)讉€方向鍵就可以完全控制蛇的運動方向,注意蛇的運動狀態(tài),保證其不碰觸蛇身還有點陣屏即可。當(dāng)仿真出現(xiàn)ANALYSER ERRORS時,就表示此時的電路有錯誤,下面的列表中詳細說明了是哪有錯誤,然后根據(jù)提示進行排錯,接著再進行仿真。當(dāng)仿真完成后,就標(biāo)志著這次設(shè)計已經(jīng)做的差不多了,大體框架已經(jīng)形成了。本設(shè)計仿真效果如圖2所示。如圖2 仿真圖在Proteus軟件畫出原理圖后,將已編譯好的源代碼文件調(diào)入,可此時我們可以在原理圖中看到實物的模擬運行狀態(tài)和過程。通過實驗我們可以得出,在使用Proteus進行仿真成功后再進行動手操作,可以大大地提高設(shè)計單片機系統(tǒng)的效率。Proteus支持單片機匯編語言的編輯/編譯/源碼級仿真,內(nèi)帶AVR、PIC的匯編編譯器,也可以與第三方集成編譯環(huán)境(如IAR、Keil和Hitech)結(jié)合,進行高級語言的源代碼級仿真和調(diào)試14。因此,Proteus有較高的推廣利用價值15。5.2硬件調(diào)試軟件調(diào)試和Proteus仿真完成后,就可以對硬件進行安裝。該設(shè)計依據(jù)原先設(shè)計好的電路原理圖進行總體上的布置,也可以再畫出其PCB圖,然后用人工搭電路的方法來安裝硬件電路。電路安裝時,要考慮受熱、元件大小等多方面的影響,在使用電烙鐵時,應(yīng)掌握好焊接的時間,電烙鐵停留的時間太短,焊錫不易完全熔化,形成“虛焊”,而焊接時間太長又容易損壞元器件,每一兩秒內(nèi)要焊好一個焊點,若沒完成,寧愿等一會兒再焊一次。其次芯片的擺置要方便連線,焊接時要先把芯片拔出,等線接好了再插上去。在焊接時要考慮電路的抗干擾能力同時要充分考慮電源對單片機的影響。每焊接完一個模塊,要用萬能表根據(jù)電路圖檢查有沒有接錯、短路等現(xiàn)象,確認(rèn)正確后再繼續(xù)下一個模塊16。本實驗采用USB接口供電,通過USB,能夠使單片機更加穩(wěn)定,在正常的工作范圍內(nèi)使得其能夠更好的工作。實物圖如下圖3所示:圖3 貪吃蛇實物圖貪吃蛇實物圖結(jié)論與展望本次設(shè)計是基于51單片機的貪吃蛇游戲,可以挖掘出單片機的性能,使其得到充分的發(fā)揮,而且此次設(shè)計還能體現(xiàn)出嵌入式系統(tǒng)節(jié)能、功耗低、便攜性好的特點,使人們的日常生活變得更加輕松快樂,使身心得到了解放。本論文按照設(shè)計完成了以下工作:根據(jù)實際要求,對系統(tǒng)的硬件電路進行設(shè)計。以AT89C51作為其控制核心,擴展外圍電路,加入8*8LED點陣模塊,還有按鍵模塊等構(gòu)成此款游戲的硬件系統(tǒng)。這款小游戲是所有小游戲中較為簡單的一個,可是我卻花了較長的時間,直到動手時才后悔上課時沒有認(rèn)真聽老師講解,尤其是結(jié)構(gòu)體,還有指針的部分,腦子里完全沒有印象,算是一片空白,還好經(jīng)過這段時間的努力,總體來說,把相關(guān)的一些知識大概看了一遍,也基本都掌握了相關(guān)的知識,接著就開始編程,說實在的,編程真的是一件很枯燥無味的事,但是為了這次設(shè)計,還是不得不堅持,根據(jù)老師所介紹的模塊化思想,分步來編寫。而編程又是一件高精度、高模范化的事,對我來說,這簡直就是鍛煉我的意志,稍微有點疏忽都可能會影響到整個編程,整個牽一發(fā)而動全身,在這個時候認(rèn)真、仔細就顯得十分重要了。剛開始編程的時候,一般都會覺得編程十分無聊,但是當(dāng)程序運行成功時,心底所產(chǎn)生的那種滿足感和喜悅是用語言完全不能表達出來的,直接是無法比擬的。通過這次設(shè)計,充分讓我認(rèn)識到學(xué)習(xí)應(yīng)該要更加著重實踐,不能只是懂得理論,要懂得制定計劃,然后想辦法去實現(xiàn)計劃,最后要及時地克服心理上的不良情緒,保持樂觀積極的態(tài)度去完成自己的任務(wù)。致 謝 經(jīng)過這段時間的努力,這次論文終于在申遠導(dǎo)師的悉心指導(dǎo)下畫上了圓滿的句號。這個項目涉及到軟件和硬件的多方面知識,從開始到最終完成,經(jīng)歷了很多事情,學(xué)到了很多知識,所以在此也要感謝許多人對我的幫助。導(dǎo)師擁有的淵博的專業(yè)知識,還有其嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度,誨人不倦的高尚師德,精益求精的工作作風(fēng),平易近人的人格魅力,都深深地影響了我。不僅如此,還使我樹立了很好的學(xué)習(xí)目標(biāo),對研究方法有了基本的掌握,更使我明白了為人處事的道理。這次論文從選題開始直到結(jié)束,都是在導(dǎo)師的悉心指導(dǎo)下一步步地完成的,里面傾注了導(dǎo)師的心血。在此,我謹(jǐn)向?qū)煴硎疚页绺叩木匆夂椭孕牡母兄x! 本文從準(zhǔn)備階段開始,查閱過無數(shù)的相關(guān)資料,同時也學(xué)習(xí)了較多的編程技巧和思想。編寫硬件電路和軟件時,都不可避免的遇到了很多難題。通過請教導(dǎo)師,還有和同學(xué)們的交流與溝通,一步步地解決了問題,在這當(dāng)中遇到的許多困難使得自己的意志變得更加地頑強。這次的課程設(shè)計是理論與實際相結(jié)合的,對我來說不可謂說是一個考驗,它充分使我明白,作為自動化專業(yè)的一名學(xué)生,紙上談兵是肯定不行的,實際動手能力有的時候比理論知識顯得重要。因此,這次設(shè)計對我來說,不僅是對理論知識的鞏固與提高,也是對實踐能力的鍛煉。在設(shè)計完原理圖后,進行實物的焊接時,才發(fā)現(xiàn)根本無處下手,這時就深刻的體會到了動手實踐和理論設(shè)計的差距如此巨大,碰到的很多問題,盡管在理論設(shè)計時沒有顯示有什么錯誤,可是調(diào)試的過程中,卻經(jīng)常出現(xiàn)問題。在不斷出現(xiàn)問題,然后解決問題的過程中,讓我進一步地明白了的實踐的重要性,使我更加堅定了實踐才是檢驗真理的唯一標(biāo)準(zhǔn)這一信念,這對我以后的工作起著積極的作用。在這充實的四年里,我們所收獲的不單單是豐厚的知識,還有更重要的是在閱讀和實踐中所改善的表達能力和豐富了廣闊的視野。我真的很慶幸,在這四年來我能夠認(rèn)識這么多好朋友,不管是在學(xué)習(xí)上,還是在生活上,你們都給了我數(shù)不清的幫助,還有熱心的照顧,給了我溫暖,讓我在充滿溫馨的大環(huán)境中度過四年愉快的大學(xué)生活。不知道該怎么表達我對你們的感恩之情,只能用我內(nèi)心最真實的話語致向你們表示我最崇高的敬意,謝謝! 作者:羅序敏 2015 年 1 月 10 日參考文獻1普拉塔.C Primer Plus:第5版M.北京:人民郵電出版社,2005.2郭天祥.新概念51單片機C語言教程:入門、提高、開發(fā)、拓展全攻略M.北京:電子工業(yè)出版社,2009.3Keil Software-Cx51編譯器用戶手冊M/OL.2001.4周潤景,張麗娜,劉印群.PROTEUS入門使用教程M.北京:機械工業(yè)出版社,2007.5翟震,張春玲. 用74HC595芯片驅(qū)動LED的電路設(shè)計J. 機床與液壓,2004,NO.12:151-152.6夏路易,石宗義編著.電路原理圖與電路板設(shè)計教程M.北京希望電子出版社,2002.7Specification for LCD Module AG12864CM/OL.晶采光電科技股份有限公司,2003.8林銳,韓永泉.高質(zhì)量程序設(shè)計指南:C+/C語言M.北京:電子工業(yè)出版社,2007.9王守中,聶元銘.51單片機開發(fā)入門與典型實例(第2版)M.北京:人民郵電出版社,2009.10樊永顯,許勇,張向文等.基于STC89C54RC/RD+單片機的游戲機系統(tǒng)設(shè)計J.湖南工業(yè)大學(xué)學(xué)報,2007,21(5):66-69.11金春霞,白秋產(chǎn).基于J2ME技術(shù)手機游戲開發(fā)與實現(xiàn)J.計算機與數(shù)字工程,2008,36(4):177-179.12王宏宇.VF游戲設(shè)計-貪吃蛇J.中國科技信息,2007(7):91-92.13李德建,姚遠程,周東杰.基于SOPC架構(gòu)的貪吃蛇游戲研發(fā)與設(shè)計實現(xiàn)J.科技創(chuàng)新導(dǎo)報,2008(31):26-27.14戴仙金,冼進.51單片機及其C語言程序開發(fā)實例M.北京:清華大學(xué)出版社,2008.15P87C51RA2/RB2/RC2/RD2 DATA SHEETM/OL.2003.16劉云,羅永能. 基于51單片機的貪食蛇游戲機開發(fā)J. 福建電腦,2009,第七期:147-148.附錄A:系統(tǒng)原理圖附錄B:系統(tǒng)PCB圖附錄C:系統(tǒng)仿真圖附錄D:系統(tǒng)實物圖21附錄E:系統(tǒng)源程序#include #define uchar unsigned char#define SNAKE 20 /最大長度#define TIME 50 /顯示延時時間#define SPEED 40 /速度控制/#define keyenable 1sbit keyenable=P36;/方向使能/*sbit keyx=P01;/左右sbit keyy=P02;/上下*/sbit up=P00;sbit up=P31; /downsbit down=P33;sbit right=P34;sbit left=P32;uchar xSNAKE+1;uchar ySNAKE+1; uchar time,n,i,e; /延時時間,當(dāng)前蛇長,通用循環(huán)變量,當(dāng)

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論