【電氣設(shè)計(jì)自動(dòng)化論文】貪吃蛇游戲的設(shè)計(jì)
【電氣設(shè)計(jì)自動(dòng)化論文】貪吃蛇游戲的設(shè)計(jì),電氣設(shè)計(jì),自動(dòng)化,論文,貪吃,游戲,設(shè)計(jì)
本科畢業(yè)論文(設(shè)計(jì))(2015 屆)貪吃蛇游戲的設(shè)計(jì)院 系 電子信息工程學(xué)院 專(zhuān) 業(yè) 電氣工程及其自動(dòng)化 姓 名 指導(dǎo)教師 副教授 年 4 月學(xué)號(hào):I摘 要本篇論文主要是設(shè)計(jì)并且著手致力于實(shí)現(xiàn)一種基于 51 單片機(jī)的經(jīng)典的貪吃蛇游戲,主要是研究該游戲的硬件電路和軟件編程的設(shè)計(jì),同時(shí)也簡(jiǎn)單介紹了應(yīng)該如何使用Proteus 軟件進(jìn)行仿真。借助仿真軟件進(jìn)行實(shí)驗(yàn)測(cè)試,可以基本實(shí)現(xiàn)游戲一些簡(jiǎn)單的基本功能。直至現(xiàn)在,大家都知道且明白了 51 系列的單片機(jī)技術(shù)相對(duì)而言比較成熟,功能也十分強(qiáng)大,應(yīng)用較為廣泛。將單片機(jī)作為本設(shè)計(jì)的控制核心,能夠使硬件電路大大地簡(jiǎn)化,用軟件來(lái)編程控制單片機(jī),來(lái)加以實(shí)現(xiàn)硬件電路的功能,可以降低能耗,同時(shí)也節(jié)約成本。選用 C 語(yǔ)言編程,比較方便靈活,極大地加快了軟件開(kāi)發(fā)的速度,使開(kāi)發(fā)周期縮短了,同時(shí)方便移植。本篇論文比較詳細(xì)的的介紹了各種硬件的基本特性,貪吃蛇游戲?qū)崿F(xiàn)的基本功能與詳細(xì)設(shè)計(jì),軟件設(shè)計(jì)的具體說(shuō)明,每一個(gè)模塊的細(xì)節(jié)要求,還有一些功能模塊的程序流程圖和關(guān)鍵部分代碼的詳細(xì)講解等。關(guān)鍵詞:Proteus 軟件仿真;51 單片機(jī);Keil;貪吃蛇;LED 點(diǎn)陣屏IIAbstractThis 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;III目 錄摘 要 .IAbstractII目錄 Ⅲ1 緒論 .11.1 研究背景及意義 .11.2 單片機(jī)發(fā)展?fàn)顩r .11.3 LED 發(fā)展?fàn)顩r .31.4 設(shè)計(jì)特點(diǎn) 32 系統(tǒng)總體設(shè)計(jì) 42.1 設(shè)計(jì)要求 .42.2 系統(tǒng)設(shè)計(jì)方案 42.2.1 硬件設(shè)計(jì) 42.2.2 軟件設(shè)計(jì) 43 系統(tǒng)硬件設(shè)計(jì) .53.18*8LED 點(diǎn)陣的原理說(shuō)明 .53.2 LED 陣列驅(qū)動(dòng)電路 .54 系統(tǒng)軟件設(shè)計(jì) .64.1 系統(tǒng)主要模塊介紹 .64.1.1 主函數(shù)模塊 .64.1.2 按鍵模塊 .74.1.3 蛇運(yùn)動(dòng)控制模塊 .74.2 主程序工作流程 .74.3 游戲設(shè)計(jì)思想 84.4 LED 點(diǎn)陣初始化 .94.5 貪吃蛇的移動(dòng) 94.6 食物的隨機(jī)出現(xiàn) 95 聯(lián)調(diào)與測(cè)試 10IV5.1 軟件調(diào)試 105.2 硬件調(diào)試 11結(jié)論與展望 .13致謝 14參考文獻(xiàn) 15附錄 A:系統(tǒng)原理圖 .16附錄 B:系統(tǒng) PCB 圖 .17附錄 C:系統(tǒng)仿真圖 .18附錄 D:系統(tǒng)實(shí)物圖 .18附錄 E:系統(tǒng)源程序 .2011 緒論1.1 研究背景及意義時(shí)代在不斷的進(jìn)步,人們的生活節(jié)奏也因此不斷加快,越來(lái)越多的人加入了經(jīng)濟(jì)化全球化的世界。人們不再只需要保持自己的小世界,加班、旅游已逐漸代替了人們的正常工作,成為我們必然的公務(wù)。同時(shí),我們可以供隨時(shí)隨地的休閑娛樂(lè),因而休閑類(lèi)的小游戲已經(jīng)逐漸成為生活的必需品,漸漸得變得無(wú)所不在,滲入我們?nèi)粘I畹母鱾€(gè)部分。貪食蛇這款經(jīng)典的小游戲具有可塑性強(qiáng)、簡(jiǎn)單易行、通俗易懂、操作方便、娛樂(lè)性強(qiáng)等特點(diǎn),因此引來(lái)了不少人們的青睞。這款小游戲牢牢地把握住了人們追求娛樂(lè)的心理,看起來(lái)很簡(jiǎn)單,但真正接觸的時(shí)候毫無(wú)違和感,甚至?xí)杏X(jué)到其樂(lè)無(wú)窮,在人們不斷尋求探索更多的開(kāi)心和樂(lè)趣下,游戲的到來(lái)給了追逐快樂(lè)的人,和現(xiàn)代人滿(mǎn)意的成功后,在巨大的壓力之下是一種很好的放松工具。當(dāng)今的世界,科技在不斷地發(fā)展,尤其是微電子技術(shù)方面,計(jì)算機(jī)軟件技術(shù)和其應(yīng)用技術(shù)的發(fā)展,將人們的生活變得多姿多彩,不在單調(diào)無(wú)趣。單片作為微型計(jì)算機(jī)大家族中不可或缺的一員,微型計(jì)算機(jī)以其良好的穩(wěn)定性,獨(dú)特的構(gòu)造,較低的成本在嵌入式領(lǐng)域中得到了廣泛應(yīng)用。我希望可以通過(guò)這些年來(lái)所學(xué)的知識(shí)將它剖析出來(lái),使它立體的呈現(xiàn)在面前,真正意義上的了解它的實(shí)質(zhì),明白它的精髓所在。在編程方面,能力不強(qiáng)的我,更應(yīng)該努力地借助這次機(jī)會(huì),通過(guò)研究,從實(shí)踐中提升自己的編程能力。故而,我選定了這個(gè)比較有意思的課題。1.2 單片機(jī)發(fā)展?fàn)顩r單片微型計(jì)算機(jī),簡(jiǎn)稱(chēng)單片機(jī)(MCU)。它是在一塊半導(dǎo)體硅片上集成了振蕩器電路、中央處理單元、隨機(jī)存取存儲(chǔ)器、只讀存儲(chǔ)器、可編程定時(shí)器/計(jì)數(shù)器、并/ 串行I/O接口等,有的還包含了A/D轉(zhuǎn)換器??傃灾?,一個(gè)巴掌大小的單片機(jī),具有一臺(tái)計(jì)算機(jī)的所有屬性,直接相當(dāng)于一臺(tái)微型計(jì)算機(jī)。由于使用單片機(jī)時(shí)其通常在測(cè)控系統(tǒng)的核心部分并嵌入其中。所以,單片機(jī)也被稱(chēng)作為嵌入式控制器EMCU (Embedded MicroController Unit)。單片機(jī)擁有集成度高、體積小、重量輕、處理功能強(qiáng)、電源簡(jiǎn)單、低功耗、可靠性高、價(jià)格低廉、運(yùn)算速度快、易擴(kuò)展、易于使用、抗干擾能力強(qiáng)等特點(diǎn)。因此,在工業(yè)控制、通信系統(tǒng)等涉及到的一些領(lǐng)域,基本是到處都可以見(jiàn)到單片機(jī)的蹤影,其技術(shù)的開(kāi)發(fā)和高水平的應(yīng)用已逐漸變成一個(gè)國(guó)家工業(yè)化成就取得高低的關(guān)鍵。早在 1974 年,世界上第一塊單片機(jī)被美國(guó)的仙童公司研究生產(chǎn)出來(lái),歷經(jīng)短短數(shù)幾十年的光陰,單片機(jī)便與日俱增,成批地涌現(xiàn)出來(lái)。截至現(xiàn)在,4 位、8 位、16 位單片機(jī)都已經(jīng)被研究出現(xiàn)了,甚至 32 位的超大規(guī)模集成電路單的片機(jī)也已經(jīng)問(wèn)世了,其性能也2在不斷的升高,不斷被改善。在國(guó)內(nèi)的單片機(jī),起步雖然比較晚,但其潛力已經(jīng)受到越來(lái)越多人的關(guān)注,特別是在工業(yè)控制、自動(dòng)化儀器儀表、計(jì)算機(jī)系統(tǒng)接口、智能化外設(shè)等應(yīng)用領(lǐng)域發(fā)展較為快速。單片機(jī)的應(yīng)用,對(duì)于產(chǎn)品的升級(jí),還有機(jī)電一體化都有重要的意義。在工業(yè)控制中的應(yīng)用也十分廣泛,例如,用單片機(jī)可以構(gòu)成形式多樣的控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng),各種報(bào)警系統(tǒng),工廠流水線的智能化管芯片理與計(jì)算機(jī)聯(lián)網(wǎng)構(gòu)成的二級(jí)控制系統(tǒng)等。單片機(jī)在醫(yī)用設(shè)備中的用途亦相當(dāng)廣泛,例如醫(yī)用呼吸機(jī),各種分析儀,監(jiān)護(hù)儀,超聲診斷設(shè)備及病床呼叫系統(tǒng)等等。在通信行業(yè),這種應(yīng)用顯得更加廣泛,手機(jī)從最初的只能實(shí)現(xiàn)基本通話(huà),沒(méi)有其他任何功能,到現(xiàn)在任何一部手機(jī)都擁有各種強(qiáng)大的功能,含有各種不同的應(yīng)用,單片機(jī)的功效被發(fā)揮的淋漓盡致。可以用手機(jī)來(lái)聽(tīng)音樂(lè),玩游戲,攝影等等,而手機(jī)游戲上貪吃蛇游戲就可以利用單片機(jī) 來(lái)實(shí)現(xiàn)。即使最新型 MCS-51 單片機(jī)各種基本的內(nèi)核核心擴(kuò)張和持續(xù)改進(jìn),但是 51 系列的單片機(jī)的應(yīng)用依舊是我們國(guó)家的主流模式??v觀幾十年的單片機(jī)發(fā)展歷程,它的未來(lái)將向高性能,高速度,低電壓,低價(jià)格和閃存的方向發(fā)展。我們可以預(yù)見(jiàn)的是,單片機(jī)的未來(lái)將變得更加強(qiáng)大、集成度更高、可靠性更高、功耗更低、使用更方便,總之,它的未來(lái)是無(wú)可限量的。1.3 LED 發(fā)展?fàn)顩rLED,也就是發(fā)光二極管的英文縮寫(xiě),是一種固態(tài)的,能夠直接地把電轉(zhuǎn)變成光的半導(dǎo)體電子元件。這種電子元件最早出現(xiàn)在 1962 年,剛開(kāi)始的時(shí)候只能發(fā)出低光度的紅光,之后慢慢地發(fā)展出其他的單色光,到現(xiàn)在,能發(fā)出的光已經(jīng)遍及可見(jiàn)光、紅外線還有紫外線,光度也得到了較大地提高。而其用途從最開(kāi)始的作為指示燈、顯示板等,到現(xiàn)在被廣泛地應(yīng)用于顯示器、電視機(jī)采光裝飾和照明等。它由含鎵(Ga)、砷(As)、磷(P)、氮 (N )等的化合物制成。半導(dǎo)體晶片由兩部分組成,一部分是 P 型半導(dǎo)體,在它里面空穴占主導(dǎo)地位,另一端是 N 型半導(dǎo)體, 在這邊主要是電子。 但這兩種半導(dǎo)體連接起來(lái)的時(shí)候, 它們之間就形成一個(gè)“ P-N”結(jié)。當(dāng)電流通過(guò)導(dǎo)線作用于這個(gè)晶片的時(shí)候,電子就會(huì)被推向 P 區(qū),在 P 區(qū)里 電子跟空穴復(fù)合,然后就會(huì)以光子的形式發(fā)出能量,這就是 LED 發(fā)光的原理。 半導(dǎo)體照明具有綠色環(huán)保的特點(diǎn),使用壽命長(zhǎng),效率高,節(jié)能,抗惡劣環(huán)境,結(jié)構(gòu)簡(jiǎn)單 ,體積小,重量輕,響應(yīng)速度快, 工作電壓低,安全性好的特點(diǎn)。因此,LED 成為白熾燈、日光燈和節(jié)能燈后的第四代照明電光源,同時(shí)也被稱(chēng)為 21 世紀(jì)綠色光源。由于 LED 具有單向?qū)щ娦裕虼怂荒芡粋€(gè)方向?qū)?,這種現(xiàn)象被稱(chēng)為正向偏置,也叫正向偏壓。LED 的優(yōu)點(diǎn)是:節(jié)能、壽命長(zhǎng)、防水、不易破損、低功耗、開(kāi)關(guān)具有高速度、微型、高可靠性、光束集中等。它的不足是:顯色性較差、需要專(zhuān)門(mén)的驅(qū)動(dòng)電路、起始的成本較高等,因此,傳統(tǒng)的照明也相對(duì)存在一些不足。近年來(lái)白光 LED 的發(fā)光效率有了顯著提高。31.4 設(shè)計(jì)特點(diǎn)以下是課程設(shè)計(jì)的主要特點(diǎn):1.功能定義,顧名思義是很重要的,尤其是對(duì)于讀程序的人來(lái)說(shuō),它顯得更為重要,在不斷地修改和完善該程序的過(guò)程中,也能清楚地明白程序中各個(gè)模塊的所起到的作用,從而大大地提高了程序的可讀性。2.主要從 main()函數(shù)的功能入手。Main()函數(shù)的主要功能是啟動(dòng) C 源程序編譯,主要從 main()函數(shù)開(kāi)始讀函數(shù),可以將其他功能的函數(shù)理解的更加透徹。3.在源程序列表的第一幀,來(lái)分析程序所要達(dá)到的功能,選擇合適的數(shù)據(jù)結(jié)構(gòu),然后在模塊化程序,根據(jù)模塊的功能更加簡(jiǎn)單合理地編寫(xiě)函數(shù)。4.我也學(xué)到了很多的庫(kù)函數(shù)的作用,如很多對(duì)字符串進(jìn)行處理的函數(shù),還有一些基本的功能我都有了一定的理解。5.它是獨(dú)立于特定的 C 語(yǔ)言教科書(shū),重點(diǎn)是C 語(yǔ)言的基本特征,以“不變“應(yīng)“萬(wàn)變“,C 語(yǔ)言覆蓋的重要基礎(chǔ)知識(shí)的實(shí)際運(yùn)用,我們需要熟練地掌握 C 語(yǔ)言。6.根據(jù)實(shí)際出發(fā),本設(shè)計(jì)可以覆蓋所學(xué)的知識(shí)點(diǎn),而且它比較能夠滿(mǎn)足工程的實(shí)際需求。再者,本次設(shè)計(jì)能夠激發(fā)我們學(xué)習(xí)的熱情,調(diào)動(dòng)學(xué)習(xí)的積極性,可以根據(jù)實(shí)際編程的要求,提升實(shí)際分析問(wèn)題的能力和編程能力,而且還可以使我們逐步養(yǎng)成良好的編程習(xí)慣。7.提供綜合實(shí)踐能力的的課程設(shè)計(jì),以進(jìn)一步鍛煉學(xué)生。同時(shí),讓學(xué)生完成實(shí)驗(yàn)的過(guò)程中,可以鍛煉相互合作的精神,取長(zhǎng)補(bǔ)短,培養(yǎng)團(tuán)隊(duì)意識(shí)。8.通過(guò)觀察網(wǎng)絡(luò)實(shí)例,循序漸進(jìn)地幫助學(xué)生完成畢業(yè)設(shè)計(jì)。本次課程設(shè)計(jì)將要求、算法還有源程序單獨(dú)分開(kāi),給學(xué)生營(yíng)造獨(dú)立思考問(wèn)題的條件。在足夠理解要求和算法的前提下,充分了解學(xué)生的要求和算法,再設(shè)計(jì)自己的應(yīng)用。同時(shí),我也獲得了很多寶貴的經(jīng)驗(yàn):1) 在設(shè)計(jì)之前,要確保對(duì)所設(shè)計(jì)的主題和內(nèi)容有一個(gè)系統(tǒng)的認(rèn)識(shí),了解設(shè)計(jì)的主題和內(nèi)容包含哪些資源。2) 對(duì)于設(shè)計(jì)程序而言,在采用什么編程語(yǔ)言這方面并不是特別重要,核心在于思路要清晰和軟件流程圖要完整。所以,第一步是要搞清楚設(shè)計(jì)原理與思路,然后再畫(huà)出軟件流程圖,按這樣的步驟,設(shè)計(jì)起來(lái)就比較方便快捷了。2 系統(tǒng)總體設(shè)計(jì)2.1 設(shè)計(jì)要求作為最為經(jīng)典和最具有代表性的休閑小游戲之一的貪吃蛇,其玩法準(zhǔn)則是:玩家想要控制蛇移動(dòng)的方向,必須熟練地掌握上、下、左、右四個(gè)方向鍵,在一個(gè)個(gè)的小方格上吃掉出現(xiàn)的食物。蛇每吃完一次食物后,蛇身變相應(yīng)地增長(zhǎng)一節(jié),一節(jié)即為一個(gè)單位距離,蛇在游動(dòng)時(shí),碰到蛇身或者是屏幕框,都表示該游戲結(jié)束。42.2 系統(tǒng)設(shè)計(jì)方案2.2.1 硬件設(shè)計(jì)系統(tǒng)采用的硬件設(shè)備主要包括51系列單片機(jī),8*8點(diǎn)陣屏等。本次課程設(shè)計(jì)單片機(jī)選擇的是由飛利浦公司生產(chǎn)的低功耗高性能的CMOS型8位單片機(jī)。之所以選擇它,是因?yàn)樗鼡碛袃?nèi)置的一次性可編程只讀存儲(chǔ)器的64K 字節(jié)的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM)和1K 字節(jié)的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),它能夠滿(mǎn)足游戲?qū)Υ鎯?chǔ)空間的要求。8*8點(diǎn)陣屏選擇的是ARK-SZ411288K,它能夠直接與CPU相連接。2.2.2 軟件設(shè)計(jì)軟件方面主要為匯編語(yǔ)言、C 語(yǔ)言、嵌入式操作系統(tǒng)。采用 C 語(yǔ)言編寫(xiě)的程序能夠很容易地在不同類(lèi)型的計(jì)算機(jī)之間進(jìn)行移植 [1]。在以后的發(fā)展中,各類(lèi)型號(hào)的單片機(jī)種類(lèi)會(huì)進(jìn)一步增加,而開(kāi)發(fā)工具和過(guò)程會(huì)逐步趨向于統(tǒng)一,軟件和硬件差別會(huì)更加難以區(qū)分 [2]。本設(shè)計(jì)使用 uVision3 進(jìn)行程序軟件編譯。只要看一下編譯后生成的匯編代碼,就能夠體會(huì)到 Keil C51 生成的目標(biāo)代碼效率非常之高,多數(shù)語(yǔ)句生成的匯編代碼很緊湊,容易理解 [3]。用 uVision3 軟件編寫(xiě)程序時(shí),由于 uVision3 一般只能修改語(yǔ)法上的錯(cuò)誤,不好檢查算法上的問(wèn)題,而且如果直接下到單片機(jī)里,會(huì)因?yàn)殡娐钒宓南拗贫沟谜{(diào)試不方便,所以,在這里,本設(shè)計(jì)選擇使用 Proteus 軟件進(jìn)行電路的仿真。它運(yùn)行與 Windows 操作系統(tǒng)上,可以繪制電路原理圖,仿真、分析各種模擬器件和集成電路,支持主流單片機(jī)系統(tǒng)和多種外圍芯片的仿真,提供軟件調(diào)試功能,支持第三方的軟件編譯和調(diào)試環(huán)境 [4]。3 系統(tǒng)硬件設(shè)計(jì)3.1 8*8LED 點(diǎn)陣的原理說(shuō)明ARK-SZ411288K 是本次課程設(shè)計(jì)所選用的點(diǎn)陣顯示模塊。它是一個(gè) 8*8 的點(diǎn)陣顯示模塊,總共由 64 個(gè)發(fā)光二極管組成,且每個(gè)發(fā)光二極管都處于行線和列線的交點(diǎn)上。當(dāng)相對(duì)應(yīng)的某一列置 1 電平,某一行置 0 電平,則位置所對(duì)應(yīng)的二極管就變亮。值得一說(shuō)的是,ARK-SZ411288K 能夠與 CPU 直接連接,再根據(jù)其引腳說(shuō)明,將其各個(gè)引腳與相對(duì)應(yīng)的 I/O 口相連。 3.2 LED 陣列驅(qū)動(dòng)電路至少需要 10~20mA 的電流才能正向地點(diǎn)亮一顆 LED,如果通過(guò)的電流不足夠大,那么 LED 所發(fā)出的光就比較暗。而無(wú)論是 89C51 單片機(jī)的 I/O 口,或是 TTL、CMOS 的輸出,高輸出電流并不是很高,才不過(guò) 1~2 毫安,故而,很難直接地對(duì) LED 高態(tài)驅(qū)動(dòng)。5在這種時(shí)候,我們就需要增加額外的輔助驅(qū)動(dòng)電路,本次課程設(shè)計(jì)選用的是 74HC595,采用 74HC595 芯片來(lái)驅(qū)動(dòng) LED 可以有以下幾個(gè)優(yōu)點(diǎn):速度快,功耗小,LED 的數(shù)量隨意。既能夠控制 LED 的共陰極顯示器,也可以控制 LED 的共陽(yáng)極顯示器,同時(shí),還可以通過(guò)軟件來(lái)控制 LED 的亮度,并且在需要的時(shí)候,能夠關(guān)斷顯示,從而降低功耗,還能夠隨時(shí)喚醒顯示。采用 74HC595 設(shè)計(jì)的電路,軟硬件設(shè)計(jì)都相對(duì)比較簡(jiǎn)單,而且功耗較低,驅(qū)動(dòng)能力較強(qiáng),所占用的 I/O 口線較少,成本較低,是一種應(yīng)用十分靈活的設(shè)計(jì)方案。系統(tǒng)采用的硬件設(shè)備主要包括51系列單片機(jī),8*8點(diǎn)陣屏等。51系列單片機(jī)采用了飛利浦(PHILIPS )公司生產(chǎn)的型號(hào)為 P87C51RD2的低功耗高性能的CMOS型8位單片機(jī)。選擇它是因?yàn)椋鼉?nèi)置了 64K bytes的OTP只讀程序存儲(chǔ)器(RAM)和1K bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器( RAM),能滿(mǎn)足游戲?qū)Υ鎯?chǔ)空間的要求。另外配備了32個(gè)可編程的I/O端口,3個(gè)16位定時(shí)器 /計(jì)數(shù)器,一個(gè)7中斷源4優(yōu)先級(jí)嵌套中斷結(jié)構(gòu),一個(gè)全雙工串行通信口,片振蕩器及時(shí)鐘電路 [5]74HC595 里含有串/并出移位寄存器和三態(tài)輸出鎖存器。寄存器和鎖存器有著各自的時(shí)鐘輸入(SCLK 和 SLCK),它們有效電平都是上升沿。當(dāng) SCLK 由低電平跳向高電平時(shí),串行輸入數(shù)據(jù)(SDA)移入寄存器;當(dāng) SLCK 由低電平跳變?yōu)楦唠娖綍r(shí),鎖存器將寄存器的數(shù)據(jù)置入。清除端(CLR) 的低電平只對(duì)寄存器復(fù)位 (QS 為低電平),而對(duì)鎖存器無(wú)影響。當(dāng)輸出允許控制(EN)為高電平時(shí), 并行輸出(Q0 ~Q7) 為高阻態(tài),而串行輸出(QS)不受影響。74HC595 最多需要 5 根控制線,即 SDA、SCLK、SLCK 、CLR 和 EN。其中,CLR 能夠直接接到高電平,并且用軟件可以實(shí)現(xiàn)寄存器的清零;若是不需要用軟件改變亮度,則 EN 可以直接接到低電平,使用硬件來(lái)改變亮度。將余的三根線與單片機(jī)的 I/O口相連,能夠控制 LED。數(shù)據(jù) SDA 口送入 74HC595,在每個(gè) SCLK 的上升沿,SDA 口上的數(shù)據(jù)移入寄存器,在 SCLK 的第 9 個(gè)上升沿,數(shù)據(jù)開(kāi)始從 QS 移出。如果把第二個(gè) 74HC595 的 SDA 和第一個(gè) 74HC595 的 QS 連接,數(shù)據(jù)移動(dòng)到第二個(gè) 74HC595 中,按照此方法,逐次接下去,能夠接任意多個(gè)。所有的數(shù)據(jù)發(fā)送完畢后,給 SLCK 一個(gè)上升沿,將寄存器中的數(shù)據(jù)送入鎖存器中。如果 EN 為低電平,數(shù)據(jù)即從并口 Q0~Q7 輸出,把 Q0~Q7 與 LED 的 8段相接,LED 就可以實(shí)現(xiàn)顯示了。要想軟件改變 LED 的亮度,只需改變 EN 的占空比就行了 [6]。其中,點(diǎn)陣的亮度可以使用改變輸入電壓來(lái)改變 [7]。4 系統(tǒng)軟件設(shè)計(jì)4.1 系統(tǒng)主要模塊介紹貪吃蛇操作過(guò)程中有多種狀態(tài),采用宏定義,使各種狀態(tài)一目了然,思路清晰。同時(shí)再編寫(xiě)代碼時(shí),采用匈牙利命名規(guī)則命名宏,變量,函數(shù)名,方便閱讀修改 [8]。64.1.1 主函數(shù)模塊作為程序運(yùn)行時(shí)縮影一般的存在,主函數(shù)是一個(gè)無(wú)限在循環(huán)的程序。它所需要完成的是對(duì)一系列硬件軟件的初始化,并且利用定時(shí)中斷來(lái)控制游戲的時(shí)鐘,還要調(diào)用其他模塊以完成按鍵的處理和蛇的運(yùn)動(dòng)。4.1.2 按鍵模塊按鍵模塊包括兩個(gè)部分:按鍵檢測(cè)模塊和按鍵處理模塊。按鍵檢測(cè)模塊初始化按鍵對(duì)應(yīng)的管腳,利用查詢(xún)方式檢測(cè)按鍵對(duì)應(yīng)的變量值改變。按鍵處理模塊針對(duì)不同狀態(tài)下,對(duì)按鍵做出不同的處理。4.1.3 蛇運(yùn)動(dòng)控制模塊該模塊負(fù)責(zé)控制蛇的運(yùn)動(dòng)和狀態(tài),包括在剛開(kāi)始游戲時(shí)對(duì)蛇進(jìn)行初始化,蛇運(yùn)動(dòng)時(shí)對(duì)蛇移動(dòng)的處理,蛇吃掉出現(xiàn)的食物后的處理。4.2 主程序工作流程系統(tǒng)中的應(yīng)用軟件是根據(jù)系統(tǒng)功能要求設(shè)計(jì)的。按軟件的功能來(lái)分,可分為執(zhí)行軟件和監(jiān)控軟件。執(zhí)行軟件可以完成各種實(shí)質(zhì)性的功能,如測(cè)量、計(jì)算、顯示。打印、輸出、控制等;監(jiān)控軟件是專(zhuān)門(mén)用來(lái)協(xié)調(diào)各執(zhí)行模塊和操作者的關(guān)系,在系統(tǒng)軟件中充當(dāng)組織調(diào)度角色。在軟件設(shè)計(jì)上,通常要考慮如下幾個(gè)方面問(wèn)題:1.根據(jù)軟件的功能要求,將系統(tǒng)軟件分為幾個(gè)相對(duì)獨(dú)立的部分。整體結(jié)構(gòu)設(shè)計(jì)合理,明確,軟件開(kāi)發(fā)簡(jiǎn)單,還有合理的工作流程。2.每個(gè)功能程序要實(shí)現(xiàn)模塊化、子程序化。不僅方便調(diào)試,連接,也能方便移植和修改。3.編寫(xiě)應(yīng)用軟件之前,要先繪制出程序流程圖。4.要合理分配系統(tǒng)資源。C 語(yǔ)言是一種結(jié)構(gòu)化的高級(jí)語(yǔ)言,其優(yōu)點(diǎn)是可讀性好,移植容易 [9],是普遍使用的一種計(jì)算機(jī)語(yǔ)言。具體的實(shí)施步驟為:1.明確控制要求,繪制電路原理圖。2.參考相關(guān)文獻(xiàn),檢查電路圖是否正確。3.根據(jù)電路原理圖焊接電路板,嘗試制作貪吃蛇模型。4.分析操作流程,繪制程序流程圖。5.編寫(xiě)程序代碼,不斷改善。6.運(yùn)用已學(xué)軟件,對(duì)程序進(jìn)行初步調(diào)試。7.配合貪吃蛇硬件部分,并努力完善其功能,以達(dá)到設(shè)計(jì)要求。主程序工作流程如圖 1 所示:7L E D 初始化開(kāi)始定時(shí)器初始化程序主體部分有中斷發(fā)生嗎 ? 調(diào)用中斷服務(wù)程序蛇是否碰壁或舌頭是否跟蛇身相碰游戲結(jié)束NNYY圖 1 貪吃蛇流程圖系統(tǒng)上電后,首先初始化 LED,然后初始化定時(shí)器,同時(shí)啟動(dòng)定時(shí)器,再然后執(zhí)行程序主體邏輯,程序主體邏輯經(jīng)過(guò)一遍執(zhí)行后,立即檢查有無(wú)中斷發(fā)生。該游戲的中斷源有兩個(gè),一個(gè)是定時(shí)器中斷驅(qū)動(dòng)蛇自動(dòng)向前,另一個(gè)是用戶(hù)通過(guò)控制按鍵來(lái)控制貪吃蛇移動(dòng)的中斷,二者中任意一個(gè)中斷的發(fā)生都能夠使蛇的當(dāng)前狀態(tài)發(fā)生改變。如果沒(méi)有中斷產(chǎn)生,主程序則繼續(xù)判斷蛇身是否相撞或者蛇頭是否碰到主屏幕;只要滿(mǎn)足以上所說(shuō)任意條件,則表示結(jié)束游戲,不然游戲繼續(xù)執(zhí)行主體循環(huán)。該程序的入口地址是 Main()函數(shù),從執(zhí)行程序的功能開(kāi)始,將各個(gè)模塊串聯(lián)起來(lái),以實(shí)現(xiàn)游戲的各種功能。首先完成軟件硬件的初始化任務(wù)然后進(jìn)入一個(gè)循環(huán),反復(fù)檢測(cè)有無(wú)按鍵、處理按鍵、處理蛇運(yùn)動(dòng)、處理時(shí)鐘節(jié)拍這四件事情 [10]。84.3 游戲設(shè)計(jì)思想按設(shè)計(jì)要求可以得出,游戲的核心是解決 LED 顯示屏的顯示和蛇身的運(yùn)動(dòng)處理的問(wèn)題。將貪吃蛇的每一節(jié)蛇身大小定義為一個(gè)單位矩陣,食物大小與一節(jié)蛇身大小相同,也是一個(gè)單位矩陣。當(dāng)蛇開(kāi)始運(yùn)動(dòng)時(shí),需要解決以下幾個(gè)問(wèn)題:1.蛇身的運(yùn)動(dòng)處理。用戶(hù)每按下一個(gè)鍵,蛇身都將開(kāi)始進(jìn)行柔體運(yùn)動(dòng)。所謂的柔體運(yùn)動(dòng),就是指蛇的運(yùn)動(dòng)并不與整條蛇的運(yùn)動(dòng)方向一致,而是指在每個(gè)時(shí)鐘到來(lái)時(shí),由蛇頭帶動(dòng)每一個(gè)點(diǎn)陣的方向向下一個(gè)點(diǎn)陣傳播,然后自己向新的方向運(yùn)動(dòng)一步。運(yùn)動(dòng)之后,下一個(gè)點(diǎn)陣就得到了上一個(gè)點(diǎn)陣的方向,然后按照上一個(gè)方向運(yùn)動(dòng)同樣的一步。因此,它能夠立即填補(bǔ)上一點(diǎn)的位置,如此類(lèi)推。在實(shí)際設(shè)計(jì)蛇運(yùn)動(dòng)的時(shí)候,我們需要把貪吃蛇蛇尾的那個(gè)點(diǎn)陣給去掉,然后在蛇頭的新方向上放一個(gè)點(diǎn)陣。所以,一個(gè)函數(shù)的定義是用來(lái)更新一個(gè)點(diǎn)的坐標(biāo),只要確定蛇頭或蛇尾的坐標(biāo)還有其運(yùn)動(dòng)的方向,我們就可以調(diào)用此函數(shù)來(lái)更新蛇頭或蛇尾的坐標(biāo)。與此同時(shí),調(diào)用有關(guān)的顯示函數(shù)來(lái)達(dá)到對(duì)蛇運(yùn)動(dòng)處理的效果。2.在吃到食物后對(duì)蛇的處理。蛇頭和食物坐標(biāo)相同時(shí),則表示貪吃蛇吃到食物。如果吃到了食物,那么就在蛇頭的位置加上一個(gè)單位點(diǎn)陣,同時(shí)需要立即再更新下一個(gè)食物的坐標(biāo)。3.隨機(jī)放置新的食物。貪吃蛇吃掉食物后,我們通過(guò)更新食物的坐標(biāo)來(lái)產(chǎn)生新的食物。在放置食物時(shí),我們需要調(diào)用一個(gè)判斷函數(shù)來(lái)判斷產(chǎn)生的新食物的坐標(biāo)與蛇身是否重疊,如果重疊了,那么則需要重新放置,然后再重新判斷,直到產(chǎn)生的新的食物和蛇身坐標(biāo)不相互重疊為止。4.死亡處理。蛇在運(yùn)動(dòng)時(shí),如果蛇頭碰到顯示屏邊框或是蛇身,那就表示游戲結(jié)束了。4.4 LED 點(diǎn)陣初始化初始化 LED 點(diǎn)陣,就是把點(diǎn)陣內(nèi)所含有的全部信息清除,讓其沒(méi)有任何信息,內(nèi)部變空,然后在事先所指定的位置處顯示蛇的初始位置和食物的初始位置。初始化程序如下:void Init(){for (i = 3; i #define uchar unsigned char#define SNAKE 20 //最大長(zhǎng)度#define TIME 50 //顯示延時(shí)時(shí)間#define SPEED 40 //速度控制//#define keyenable 1sbit keyenable=P3^6; //方向使能/*sbit keyx=P0^1; //左右sbit keyy=P0^2; //上下 *///sbit up=P0^0;sbit up=P3^1; //downsbit down=P3^3;sbit right=P3^4;sbit left=P3^2;uchar x[SNAKE+1];uchar y[SNAKE+1]; uchar time,n,i,e; //延時(shí)時(shí)間,當(dāng)前蛇長(zhǎng),通用循環(huán)變量,當(dāng)前速度char addx,addy; //位移偏移量/********************延時(shí)程序*********************/void delay(char MS){char us,usn;while(MS!=0){usn = 0;while(usn!=0){us=0xff;while (us!=0){us--;};usn--;}MS--;}}/*******************************************判斷碰撞*******************************************/bit knock(){bit k;k=0;if(x[1]7||y[1]7)k=1; //撞墻for(i=2;i1;i--){x[i]=x[i-1];y[i]=y[i-1];} //x[n-1]=x[2];y[n-1]=y[2];x[1]=x[2]+addx;y[1]=y[2]+addy; //移動(dòng)}}}
收藏
編號(hào):596319
類(lèi)型:共享資源
大?。?span id="hr5fbtz" class="font-tahoma">9.63MB
格式:ZIP
上傳時(shí)間:2019-07-01
20
積分
- 關(guān) 鍵 詞:
-
電氣設(shè)計(jì)
自動(dòng)化
論文
貪吃
游戲
設(shè)計(jì)
- 資源描述:
-
【電氣設(shè)計(jì)自動(dòng)化論文】貪吃蛇游戲的設(shè)計(jì),電氣設(shè)計(jì),自動(dòng)化,論文,貪吃,游戲,設(shè)計(jì)
展開(kāi)閱讀全文
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
裝配圖網(wǎng)所有資源均是用戶(hù)自行上傳分享,僅供網(wǎng)友學(xué)習(xí)交流,未經(jīng)上傳用戶(hù)書(shū)面授權(quán),請(qǐng)勿作他用。