畢業(yè)設(shè)計(論文)-基于單片機的微型游戲機--貪吃的蛇.doc
《畢業(yè)設(shè)計(論文)-基于單片機的微型游戲機--貪吃的蛇.doc》由會員分享,可在線閱讀,更多相關(guān)《畢業(yè)設(shè)計(論文)-基于單片機的微型游戲機--貪吃的蛇.doc(3頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、北京理工大學(xué)珠海學(xué)院2006屆本科畢業(yè)生畢業(yè)設(shè)計(論文)基于單片機的微型游戲機貪吃的蛇摘 要 單片微型機簡稱單片機,它是在一片芯片上集成了中央處理部件,存儲器、定時器/計數(shù)器和各種輸入輸出設(shè)備等接口部件。單片機是微機發(fā)展的一個重要的分支,自問世以來,性能不斷地改善和提高,加之單片機具有集成度高、功能強、速度快、體積小、功耗小、使用方便、性能可靠、價格便宜等優(yōu)點,故在工業(yè)控制、數(shù)據(jù)采集和處理、通信系統(tǒng)、家用電器等領(lǐng)域的應(yīng)用日益廣泛。國內(nèi)雖然起步較晚,但單片機的潛力越來越被人們所重視,尤其在工業(yè)控制、自動化儀器儀表、計算機系統(tǒng)接口、智能化外設(shè)等應(yīng)用領(lǐng)域發(fā)展很快。它的應(yīng)用對于產(chǎn)品升級換代、機電一體化
2、都具有重要的意義,在工業(yè)生產(chǎn)中,電流、電壓、溫度、壓力、流量、流速和開關(guān)量都是常用的主要被控參數(shù),被用于各種不同產(chǎn)品的生產(chǎn)。在通信行業(yè)更為廣泛利用,手機從只能基本通話,到現(xiàn)在一臺手機擁有各種不同的功能,單片機得到了廣泛的應(yīng)用。手機可以聽音樂,聽收音機,玩游戲,照相片等等,比較流行的手機游戲貪吃蛇就能用單片機實現(xiàn)。關(guān)鍵詞:51單片機 貪吃蛇 游戲Based on single chip micro-game - greedy snakeABSTRACTSingle-chip microprocessor referred to as microcontrollers, which is inte
3、grated on a chip, a central processing unit, memory, timer / counters and a variety of input and output devices such as Interface Unit. SCM is a microprocessor development, an important branch, since its inception, performance, continuous improvement and increase, coupled with microcontroller with a
4、n integrated high, strong function, high speed, small size, power consumption, easy to use, reliable, cheap, etc. advantages, so in the industrial control, data acquisition and processing, communication systems, home appliances and other fields increasingly wide range of applications. Although the d
5、omestic late start, but the potential of SCM has been growing attention, especially in industrial control, automation instruments and meters, computer system interface, intelligent peripherals and other applications developed rapidly. Its application for the upgrading of products, mechanical and ele
6、ctrical integration, have important significance in industrial production, current, voltage, temperature, pressure, flow, flow rate and switching capacity are commonly used parameters of the main accused, was used for a variety production of different products. More extensive use of the communicatio
7、ns industry, cell phone calls from can only be basic to the present, mobile phones have a variety of functions, single-chip has been widely used. Phone can listen to music, listening to the radio, play games, according to photos, etc., the more popular cell phone game Snake will be able to use SCM.K
8、eyword:51singlechip snake game目 錄1 第一章 緒論11.1概述11.2選題背景11.3課題分析11.4思路設(shè)計12第二章 系統(tǒng)的基本組成和工作原理22.1系統(tǒng)的基本組成22.2系統(tǒng)的工作原理23第三章 顯示電路的選取和設(shè)計23.1游戲顯示的器件選擇23.2顯示功能的硬件電路34第四章 鍵盤掃描的電路設(shè)計44.1鍵盤掃描思路設(shè)計44.2鍵盤硬件電路設(shè)計45第五章 系統(tǒng)程序設(shè)計55.1編譯軟件55.2軟件設(shè)計工具55.3C51 優(yōu)化的 C 語言交叉編譯器105.4系統(tǒng)設(shè)計流程圖11參考文獻(xiàn)15附 錄16謝辭43IV 1 第一章 緒論1.1 概述本設(shè)計采用80C51核
9、心的單片機最小系統(tǒng),80C51是MCS51系列單片機鐘CHMOS工藝的一個典型品種。另外,其他廠商以8051為基核開發(fā)出CHMOS工藝單片機產(chǎn)品統(tǒng)稱為80C51系列。貪吃蛇游戲采用ATS892的80C51系列的芯片,AT89S52具有8KB空間ROM,256B的RAW,4個并行接口,1個串行接口,3個定時計數(shù)器,6個中斷源。擁有大量的程序存儲空間,大大減輕了對程序的編寫和算法的要求。豐富的硬件資源可使外圍電路變得更簡單。1.2 選題背景貪吃蛇是家喻戶曉的益智類小游戲,選擇這個題目一是為了將自己的所學(xué)知識加以運用,二是一直以來貪吃蛇這個游戲就深深地吸引著我,它的制作方法對于以前的我而言都是很神秘
10、的。我希望通過自己的所學(xué)知識把它剖析開來,真真正正的了解它的本質(zhì)和精髓。雖然我的編程能力不是很強,但是我有信心,在這次學(xué)習(xí)中我將從實踐和實際的項目中提高自己的編程能力。因此我選定了這個題目。1.3 課題分析 貪吃蛇游戲設(shè)計主要硬件由單片機最小系統(tǒng),TFT彩屏,4X4矩陣鍵盤,整個的游戲設(shè)計外圍電路比較少,主要核心在于游戲的程序設(shè)計,本設(shè)計的游戲規(guī)則也參照現(xiàn)在手機流行的貪吃蛇游戲的規(guī)則去設(shè)計,當(dāng)蛇吃到食物時,蛇身就會自動增加一格,食物隨機出現(xiàn)在屏幕上,當(dāng)蛇碰到墻壁時,游戲結(jié)束。本設(shè)計需要考慮的問題有以下幾個:1. 顯示彩屏的選擇2. 保證游戲的流暢性和及時響應(yīng)性3. 游戲的設(shè)計應(yīng)該接近人性化4.
11、 電路連接距離應(yīng)盡量短,避免信號線受外界干擾1.4 思路設(shè)計 游戲的運行由矩陣鍵盤去控制,顯示由TFT彩色屏幕完成。本設(shè)計的鍵盤掃描電路不同于以往一般的矩陣鍵盤,而由中斷掃描代替,當(dāng)有按鍵按下時,才執(zhí)行掃描鍵盤,這樣就可以節(jié)省很多CPU資源,同時也可以及時的反應(yīng)出按鍵操作。2 第二章 系統(tǒng)的基本組成和工作原理2.1 系統(tǒng)的基本組成 貪吃蛇游戲設(shè)計由三部分組成,屏幕顯示,最小系統(tǒng)及矩陣鍵盤。最小系統(tǒng)采用Atmel公司的51核的AT89S52芯片,AT89S52芯片具有8K的程序存儲器,256B的數(shù)據(jù)存儲器,已經(jīng)為程序的設(shè)計帶來了很大的方便,解決了因程序容量龐大而導(dǎo)致硬件選擇困難的問題。同時也節(jié)約
12、了設(shè)計成本,一塊AT89S52只需要5塊錢就足夠了,對于一般人來講是可以承受得了的。加上屏幕的應(yīng)用比較簡單,有相應(yīng)的配套應(yīng)用命令子程序,減低了設(shè)計者重新編寫屏幕應(yīng)用子程序的麻煩,同時設(shè)計者可根據(jù)自身設(shè)計需要,增添或修改程序,使得程序更完善。2.2 系統(tǒng)的工作原理 系統(tǒng)的程序設(shè)計分為一個主函數(shù),3個子函數(shù),子函數(shù)分別是鍵盤掃描函數(shù),貪吃蛇運行子程序和TFT屏幕自帶的子程序。在主程序里只對LCD的初始化,中斷設(shè)備的初始化,然后死循環(huán)執(zhí)行貪吃蛇運行程序。3 第三章 顯示電路的選取和設(shè)計3.1 游戲顯示的器件選擇 游戲設(shè)計的顯示屏可以有很多種的選擇,選擇不同的屏幕,程序的編寫也隨之不同。屏幕可以選擇L
13、CD128X64,8X8點陣LED,TFT彩色屏幕等等。 LCD128X64是比較通用,大眾化,容易使用的液晶屏,若采用LCD128X64液晶屏,則要用到8位的I/O口作數(shù)據(jù)傳送,6位I/O口作選通位,一共要用到14個I/O口,占用單片機最小系統(tǒng)的資源比較多,另外,LCD128X64每一個顯示格由8x8像素組成,若使用每一個顯示單元格作為貪吃蛇的蛇身顯示,顯然有點大,不美觀,若利用LCD128X64里可編輯每個單元格的顯示圖案的功能,將會使得編寫程序變得很麻煩,而且CPU要執(zhí)行的程序顯然增加了很多。 8X8點陣LED比LCD128X64結(jié)構(gòu)更簡單,不需要任何的指令集,即對I/O口直接輸出可以使
14、用。若選用8X8點陣LED顯示屏,首先16位的I/O口已經(jīng)被占用,8X8的點陣能使用的范圍很少,對增強游戲的功能方面加以限制。 TFT彩色屏幕具有很強的顯示功能,能顯示262k顏色,屏幕由具有豐富的功能子程序,為使用者節(jié)省了不少時間,而且占用I/O口少,只用到5個I/O口。本設(shè)計將采用SSD1283A型號的彩屏。 SSD1283A的TFT驅(qū)動器是一種智能都在同一個驅(qū)動器,集成了電源電路,門驅(qū)動器,內(nèi)存為單芯片驅(qū)動器和源。它可以驅(qū)動132號決議的RGB 132的一個小組26萬色為a - TFT。 它也集成了控制器的功能和組成132高達(dá)39204個字節(jié)(132 132 18 / 8)圖形顯示數(shù)據(jù)R
15、AM(GDDRAM),6800接口,這樣它與普通單片機通過8/9/16/18-bits系列/ 8080系列兼容的并行接口或串行接口和存儲數(shù)據(jù)的GDDRAM研究。輔助18位視頻接口(垂直同步,HSYNC,DOTCLK,啟用和RR0 - RR5,GG0 - GG5,BB0 - BB5)是SSD1283A納入圖像顯示動畫。 只有外部電容器9只,它嵌入的DC - DC轉(zhuǎn)換器,振蕩器和電壓發(fā)生器提供一切必要的組件所需的電壓由外部的驅(qū)動程序最低限度。通用的電壓產(chǎn)生電路包含驅(qū)動液晶顯示器對電極。伽瑪控制電路的集成,也包括可通過軟件命令調(diào)整,以提供最大的靈活性和最佳的顯示質(zhì)量。3.2 顯示功能的硬件電路圖3-
16、1 游戲顯示硬件電路圖 如圖所示,顯示電路占用了P00-P04口,僅占用了5個接口。P0口的每一位口線可以驅(qū)動8個LSTTL負(fù)載。在作為通用I/O口時,由于輸出驅(qū)動電路是開漏方式,有集電極的開路(OC門)電路或漏極電路驅(qū)動是需外接上拉電阻,本設(shè)計采用4.7K的排電阻做上拉電阻,足以使P0口驅(qū)動TFT液晶顯示屏。4 第四章 鍵盤掃描的電路設(shè)計4.1 鍵盤掃描思路設(shè)計 鍵盤是人機對話的一個重要的橋梁,通過按鍵控制單片機的操作。鍵盤的設(shè)計有兩種方式,一種是獨立鍵盤,就是獨立每一個I/O口單獨連接一個按鈕,這樣的設(shè)計是最簡單的,可是具有很大的局限性,因為單片機的I/O口本身就很有限,而且8個按鍵需要8
17、個I/O口,浪費了單片機的資源。第二種方式是矩陣鍵盤,矩陣鍵盤采用行列式結(jié)構(gòu)按鍵設(shè)置在行列的交點上。當(dāng)口線數(shù)量為8時,可以將4根口線定義為行線,另4根口線的定義為列線,形成4X4鍵盤,可以配置16個按鍵。同樣利用8根口線,矩陣鍵盤可以配置16個鍵,而獨立鍵盤只能配置8個按鍵,從此看出,矩陣鍵盤比獨立鍵盤擁有更豐富的性能。4.2 鍵盤硬件電路設(shè)計圖1-2矩陣鍵盤電路圖 如圖所示,矩陣鍵盤的行線連接P1口的前四位,列線連接P1口的后四位。矩陣鍵盤上某一鍵閉合時,該鍵所對應(yīng)的行線和列線短接。此時該行線電平將由被短接的列線電平所決定。5 第五章 系統(tǒng)程序設(shè)計5.1 編譯軟件 關(guān)于程序的編寫,在C51單
18、片機中,可以用匯編語言編寫程序,也可以用C語言編寫。匯編語言是一種用文字助記符來表示機器指令的符號語言,是最接近機器碼的一種語言,其主要優(yōu)點是占用資源少、程序執(zhí)行效率高,但是不同的CPU,其匯編語言可能有所差異,所以不易移植。C語言是一種結(jié)構(gòu)化的高級語言,其優(yōu)點是可讀性好,移植容易,是普遍使用的一種計算機語言,缺點是占用資源較多,執(zhí)行效率沒有匯編高。對于目前普遍使用的RISC架構(gòu)的8bit MCU來說,其內(nèi)部ROM、RAM、STACK等資源都有限,如果使用C語言編寫,一條C語言指令編譯后,會變成很多條機器碼,很容易出現(xiàn)ROM空間不夠、堆棧溢出等問題。 綜合本設(shè)計的情況,由于編寫程序容量并不是很
19、大,而且對于初學(xué)者更好理解程序的設(shè)計,故采用keilC 編譯器來完成程序的編寫。5.2 軟件設(shè)計工具uVision2 集成開發(fā)環(huán)境 uVision2 IDE是一個基于Window的開發(fā)平臺包含一個高效的編輯器一個項目管理器和一個MAKE工具。uVision2 支持所有的KEIL 8051工具包括C編譯器,宏匯編器,連接/定位器 目標(biāo)代碼到HEX的轉(zhuǎn)換器。uVision2 通過以下特性加速你的嵌入式系統(tǒng)的開發(fā)過程:1) 全功能的源代碼編輯器。2) 器件庫用來配置開發(fā)工具設(shè)置。3) 項目管理器用來創(chuàng)建和維護(hù)你的項目。4) 集成的 MAKE 工具可以匯編 編譯和連接你的嵌入式應(yīng)用。5) 所有開發(fā)工具
20、的設(shè)置都是對話框形式的。6) 真正的源代碼級的對 CPU和外圍器件的調(diào)試器。7) 高級 GDI(AGDI)接口用來在目標(biāo)硬件上進(jìn)行軟件調(diào)試 以及和Monitor-51 進(jìn)行通信。 8) 與開發(fā)工具手冊和器件數(shù)據(jù)手冊和用戶指南有直接的鏈接。 uVision2界面提供一個菜單,一個工具條以便你快速選擇命令按鈕,另外還有源代碼的顯示窗口,對話框和信息顯示uVision2允許同時打開瀏覽多個源文件。 圖5-1開發(fā)環(huán)境界面菜單條,工具條和快捷鍵 菜單條提供各種操作菜單,如:編輯操作,項目維護(hù),開發(fā)工具選項設(shè)置,調(diào)試程序,窗口選擇和處理,在線幫助,工具條按鈕允許你快速地執(zhí)行uVision2命令。鍵盤快捷鍵
21、(你自己可以配置)允許你執(zhí)行uVision命令。下面的表格列出了uVision2菜單項命令,工具條圖標(biāo),默認(rèn)的快捷鍵以及他們的描述:文件菜單和命令 File 菜單 快捷鍵 描述 New Ctrl+N 創(chuàng)建新文件 Open Ctrl+O 打開已經(jīng)存在的文件 Close 關(guān)閉當(dāng)前文件 Save Ctrl+S 保存當(dāng)前文件 Save all 保存所有文件 Save as 另外取名保存 Device Database 維護(hù)器件庫 Print Setup 設(shè)置打印機 Print Ctrl+P 打印當(dāng)前文件 Print Preview 打印預(yù)覽 1-9 打開最近用過的文件 Exit 退出 uVision2
22、 提示是否保存文件 編輯菜單和編輯器命令(Edit) 菜單 快捷鍵 描述 Home 移動光標(biāo)到本行的開始 End 移動光標(biāo)到本行的末尾 Ctrl+Home 移動光標(biāo)到文件的開始 Ctrl+End 移動光標(biāo)到文件的結(jié)束 Ctrl+ 移動光標(biāo)到詞的右邊 Ctrl+A 選擇當(dāng)前文件的所有文本內(nèi)容 Undo Ctrl+Z 取消上次操作 Redo Ctrl+Shift+Z 重復(fù)上次操作 Cut Ctrl+X 剪切所選文本 Ctrl+Y 剪切當(dāng)前行的所有文本 Copy Ctrl+C 復(fù)制所選文本 Paste Ctrl+V 粘貼 Indent 將所選文本右移一個制表鍵的距離 Selected Text Un
23、indent 將所選文本左移一個制表鍵的距離 Selected Text Toggle Bookmark Ctrl+F2 設(shè)置/取消當(dāng)前行的標(biāo)簽Goto Next Bookmark F2 移動光標(biāo)到下一個標(biāo)簽處 Goto Previous Bookmark Shift+F2 移動光標(biāo)到上一個標(biāo)簽處 Clear All Bookmarks 清除當(dāng)前文件的所有標(biāo)簽 Find Ctrl+F 在當(dāng)前文件中查找文本 F3 向前重復(fù)查找 Shift+F3 向后重復(fù)查找 Ctrl+F3 查找光標(biāo)處的單詞 Ctrl+ 尋找匹配的大括號,圓括號,方括號(用此命令將光標(biāo)放到大括號,圓括號或方括號的前面) Repl
24、ace Ctrl+H 替換特定的字符 Find in Files 在多個文件中查找選擇文本命令 在 uVision2中, 你可以通過按住Shift鍵和相應(yīng)的光標(biāo)操作鍵來選擇文本 如 Ctrl+-是移動光標(biāo)到下一個詞 那么 Ctrl+Shift+-就是選擇當(dāng)前光標(biāo)位置到下一個詞的開始位置間的文本。 當(dāng)然 你也可以用鼠標(biāo)來選擇文本 操作如下: 要選擇 鼠標(biāo)操作 任意數(shù)量的文本 在你要選擇的文本上拖動鼠標(biāo) 一個詞 雙擊此詞。 一行文本 移動鼠標(biāo)到此行的最左邊,直到鼠標(biāo)變成右指向的箭頭,然后單擊。 多行文本 移動鼠標(biāo)到此行的最左邊 直到鼠標(biāo)變成右指向的箭頭 然后相應(yīng)拖動。 一個距形框中的文本 按住 A
25、lt鍵 然后相應(yīng)拖動鼠標(biāo)。 視圖菜單 View 菜單 快捷鍵 描述 Status Bar 顯示/隱藏狀態(tài)條 File Toolbar 顯示/隱藏文件菜單條 Build Toolbar 顯示/隱藏編譯菜單條 Debug Toolbar 顯示/隱藏調(diào)試菜單條 Project Window 顯示/隱藏項目窗口 Output Window 顯示/隱藏輸出窗口 Source Browser 打開資源瀏覽器 Disassembly Window 顯示/隱藏反匯編窗口 Watch & Call 顯示/隱藏觀察和堆棧窗口 Stack Window Memory Window 顯示/隱藏存儲器窗口 Code C
26、overage Window 顯示/隱藏代碼報告窗口 Performance Analyzer Window 顯示/隱藏性能分析窗口 Symbol Window 顯示/隱藏字符變量窗口 Serial Window #1 顯示/隱藏串口 1 的觀察窗口 Serial Window #2 顯示/隱藏串口 2 的觀察窗口 Toolbox 顯示/隱藏自定義工具條 Periodic Window Update 程序運行時刷新調(diào)試窗口 Workbook Mode 顯示/隱藏窗口框架模式 Options 設(shè)置顏色 字體 快捷鍵和編輯器的選項 調(diào)試菜單和調(diào)試命令 Debug 菜單 快捷鍵 描述 Start/S
27、top Ctrl+F5 開始/停止調(diào)試模式 Debugging Go F5 運行程序 直到遇到一個中斷 Step F11 單步執(zhí)行程序 遇到子程序則進(jìn)入 Step over F10 單步執(zhí)行程序 跳過子程序 Step out of Ctrl+F11 執(zhí)行到當(dāng)前函數(shù)的結(jié)束 Current function Stop Running ESC 停止程序運行 Breakpoints 打開斷點對話框 Insert/Remove 設(shè)置/取消當(dāng)前行的斷點 Breakpoint Enable/Disable 使能/禁止當(dāng)前行的斷點 Breakpoint Disable All 禁止所有的斷點 Breakpoi
28、nts Kill All 取消所有的斷點 Breakpoints Show Next 顯示下一條指令 Statement Enable/Disable 使能/禁止程序運行軌跡的標(biāo)識 Trace Recording View Trace 顯示程序運行過的指令 Records Memory Map 打開存儲器空間配置對話框 Performance 打開設(shè)置性能分析的窗口 Analyzer Inline Assembly 對某一個行重新匯編 可以修改匯編代碼 Function Editor 編輯調(diào)試函數(shù)和調(diào)試配置文件外圍器件菜單 Peripherals 菜單 快捷鍵 描述 Reset CPU 復(fù)位
29、CPU Interrupt, 打開片上外圍器件的設(shè)置對話框 I/O-Ports, 話框的種類及內(nèi)容依賴于你選擇CPU Serial, Timer, A/D Converter, D/A Converter, I2C Controller, CAN Controller, Watchdog工具菜單 Tool 利用工具菜單,你可以配置,運行Gimpel PC-Lint,Siemens Easy-Case 和用戶程序通過Customize Tools Menu菜單,你可以添加你想要添加的程序。 菜單 快捷鍵 描述 Setup PC-Lint 配置 Gimpel Software的PC-Link程序
30、Lint 用 PC-Lint 處理當(dāng)前編輯的文件 Lint all C Source Files 用PC-Lint處理你項目中所有的C源代碼文件 Setup Easy-Case 配置 Siemens的 Easy-Case 程序 Start/Stop Easy-Case 運行/停止 Siemens的 Easy-Case 程序 Show File (Line) 用Easy-Case 處理當(dāng)前編輯的文件 Customize Tools Menu 添加用戶程序到工具菜單中 5.3 C51 優(yōu)化的 C 語言交叉編譯器 Keil C51 交叉編譯器是一個基于ANSI C標(biāo)準(zhǔn)的針對8051系列MCU的C編譯
31、器生成的可執(zhí)行代碼快速,緊湊。在運行效率和速度上可以和匯編程序得到的代碼相媲美。 和匯編語言相比,用C語言這樣的高級語言有很多優(yōu)勢,比如:1) 對處理器的指令集不必了解8051 CPU的基本結(jié)構(gòu)可以了解,但不是必須的。 2) 寄存器的分配以及各種變量和數(shù)據(jù)的尋址都由編譯器完成。 3) 程序擁有了正式的結(jié)構(gòu)(由C語言帶來的),并且能被分成多個單獨的子函數(shù)。這使整個應(yīng)用系統(tǒng)的結(jié)構(gòu)變得清晰,同時讓源代碼變得可重復(fù)使用。 4) 選擇特定的操作符來操作變量的能力提高了源代碼的可讀性 5) 可以運用和人的思維很接近的詞匯和算法表達(dá)式 6) 編寫程序和調(diào)試程序的時間得到很大程度的縮短 7) C 運行連接庫包
32、含一些標(biāo)準(zhǔn)的子程序 如 格式化輸出 數(shù)字轉(zhuǎn)換 浮點運算 8) 由于程序的模塊結(jié)構(gòu)技術(shù) 使得現(xiàn)有的程序段可以很容易的包含到新的程序中去 9) ANSI標(biāo)準(zhǔn)的C語言是一種豐常方便的,獲得廣泛應(yīng)用的,在絕大部分系統(tǒng)中都能夠很容易得到的語言。 因此 如果需要 現(xiàn)有的程序可以很快地移植到其他的處理器上,節(jié)省投資。 5.4 系統(tǒng)設(shè)計流程圖開始LCD屏幕初始化貪吃蛇設(shè)計初始化貪吃蛇運行子程序圖5-2系統(tǒng)主程序流程圖 如圖所示,程序設(shè)計的主程序即main函數(shù)很簡單,主要完成初始化工作,主要完成對LCD屏幕,貪吃蛇結(jié)構(gòu)的初始化,然后不斷運行貪吃蛇游戲程序。下面逐一分析每一個子程序的設(shè)計。開始初始化定時器繪制游戲
33、初始界面初始化貪吃蛇參數(shù)結(jié)束圖5-3貪吃蛇初始化子程序流程圖定時器的作用在于產(chǎn)生隨機數(shù),用于隨機擺放食物,定時器的工作模式為模式一,即16位計數(shù)器,當(dāng)計數(shù)溢出時,定時器中斷程序重裝計數(shù)初值,清除中斷標(biāo)志位。TFT顯示屏幕的顯示范圍是132x132個像素點,定義貪吃蛇的活動范圍為從左第7個像素到84個像素,從上第7個像素到120個像素。在屏幕的坐標(biāo)為(96,24)開始顯示游戲得分值,坐標(biāo)為(96,97)顯示游戲的級數(shù)。初始化貪吃蛇參數(shù)是直接給貪吃蛇的結(jié)構(gòu)體賦初值。開始根據(jù)按鍵選擇蛇的方向判斷蛇是否死亡判斷蛇是否最長判斷蛇是否吃到食物蛇死亡界面過關(guān)界面放果子程序判斷是否有按鍵判斷是否有按鍵YNYN
34、等待等待YNYNYN圖5-4貪吃蛇運行子程序 貪吃蛇運行子程序是整個程序設(shè)計的核心,首先由系統(tǒng)檢測是否有按鍵按下,確定有按鍵按下后,外部中斷程序自動執(zhí)行,開始掃描矩陣鍵盤,得到鍵值,根據(jù)鍵值判斷貪吃蛇要走的方向。在游戲運行的期間,系統(tǒng)不斷檢測蛇是否死亡,蛇是否已經(jīng)最長,蛇是否吃到了食物。若蛇已經(jīng)死亡,則蛇的死亡標(biāo)記位被置位,跳轉(zhuǎn)到死亡界面,檢測是否有按鍵按下,有就跳轉(zhuǎn)到游戲開始界面,重新開始游戲,無則等到有任意鍵按下。若檢測到蛇身的長度已經(jīng)達(dá)到最長,則游戲的級數(shù)自動升高一級,游戲的級數(shù)越高,貪吃蛇移動的速度越快。游戲的速度控制由延時程序決定,若延時程序延時短,則蛇移動得快,若延時比較長,則蛇移
35、動得慢。若蛇已經(jīng)吃到食物,則在放食物的原來的坐標(biāo)會消除顯示,重新讀取計數(shù)器的值,通過計算得到要放置食物的坐標(biāo),在該坐標(biāo)上顯示食物。開始P1低四位輸出1P1是否等于0 x0f結(jié)束延時P1是否等于0 x0f取出低四位P1輸出0 xf0取出高四位取出鍵值NYNY圖5-5鍵盤掃描子程序 由于該子程序出現(xiàn)在中斷服務(wù)程序當(dāng)中,不需要在主程序里重復(fù)運行,所以為CPU省下了許多資源,只占用了INIT0口,在主程序當(dāng)中只需要執(zhí)行對中斷的設(shè)置和把P1置0 x0f輸出就可以了。在掃描程序當(dāng)中,首先P1輸出0 x0f,若有按鍵按下,則在P1口的低四位會有低電平出現(xiàn),在P1口的低四位分別連接著四個二極管的陰極,二極管的
36、陽極連接著中斷口P3.2和VCC,沒有按鍵按下的時候,P3.2呈現(xiàn)高電平,有按鍵按下的時候,四個二極管當(dāng)中至少有一個導(dǎo)通,P3.2的高電平被拉低,只要把P3.2設(shè)置成下降沿中斷響應(yīng)模式,那樣就可以進(jìn)入中斷服務(wù)程序。進(jìn)入中斷程序后,系統(tǒng)再次檢測P1口的電平是否等于0 x0f,若P1口的電平依然不等于0 x0f,則把讀到P1口的值的低四位保存起來,再輸出0 xf0,讀取P1口的值,把高四位保存起來。根據(jù)高四位(列值)跟低四位(行值)的值計算出鍵值。參考文獻(xiàn)1 明浩:單片機 C 語言入門教程J,2005 年電子報2 谷樹忠,閆勝利:PROTEL 2004 使用教程M,電子工業(yè)出版社第一版3 胡耀輝:
37、單片機系統(tǒng)開發(fā)實例經(jīng)典M,北京冶金工業(yè)出版社,20064 李軍:51系列單片機高級實例開發(fā)指南M,北京航空航天大學(xué)出版社,20055 姚燕南:微型計算機原理M,安電子科技大學(xué)出版社6 謝嘉奎:電子線路M,高等教育出版社7 李秉操:機接口技術(shù)在工業(yè)控制中的應(yīng)用M, 陜西電子編輯部8 蔡美琴:MCS51單片機系統(tǒng)及其應(yīng)用M,高等教育出版社9 周利功:增強型80C51單片機速成和實戰(zhàn)M,北京航空航天大學(xué)出版社10 王天曦 ,李洪儒:電子技術(shù)工藝基礎(chǔ)M,清華大學(xué)出版社 200011 李光才,樓然笛:單片機課程設(shè)計 實例指導(dǎo)M,北京航空航天大學(xué)出版社 2004附 錄Main.c#include #inc
38、lude #include LCD_SSD1283.H#include SNAKE.hvoid main(void)LCD_ssd1283a_Init();Init_SNAKE();Interrupt0_Key();while(1)Run_SNAKE();Snake.c#include #include #include LCD_SSD1283.H#include SNAKE.h/=/ 使用結(jié)構(gòu)體定義變量 使程序的名稱更加的清楚/=struct uchar X;uchar Y; uchar Yes;Food;/食物結(jié)構(gòu)體#define SNAKE_Max_Long 20 /最大長度struct
39、 uchar XSNAKE_Max_Long;uchar YSNAKE_Max_Long;uchar Long; uchar Life; uchar Score;/蛇的分?jǐn)?shù)uchar Level;/蛇的等級 Snake;/蛇結(jié)構(gòu)體uchar Key_V_temp=0; /取出上次按鍵值/函數(shù)功能:1ms延時函數(shù)/晶 振:11.0592Mvoid Delay_1mS(unsigned int n)unsigned int i;unsigned char j;for(i=0;in;i+)for(j=0;j120;j+) ;/函數(shù)名稱:void Init_time0 (void)/函數(shù)功能:初始化定
40、時器1 用于產(chǎn)生隨機數(shù)種子 ,用于放置實物void Init_time0 (void)EA=1;ET1=1;TMOD|=0X10;TH1=0X00;TL1=0X00;TR1=1;void time1 (void) interrupt 3TH1=0X00;TL1=0X00;/函數(shù)名稱:Trun_On_Point Trun_Off_Point (uchar x,uchar y)/函數(shù)功能:點亮或者熄滅 一個點。用于顯示蛇身體/入口參數(shù):無/出口參數(shù):無/特別說明:此 Trun_On,函數(shù)換成其他的就可以兼容其他的液晶/ 入8*8 點陣 12864 等void Trun_On_Point (ucha
41、r x,uchar y,uchar color)Bar(4*(x+2),(4*(y+2),(4*(x+3),(4*(y+3),color);void Trun_Off_Point (uchar x,uchar y)Bar(4*(x+2),(4*(y+2),(4*(x+3),(4*(y+3),0 xBE5F);/函數(shù)名稱:void Init_SNAKE(void) /函數(shù)功能:繪制游戲界面,初始化游戲等級等參數(shù)void Init_SNAKE(void) uchar i;Init_time0();/*繪制游戲界面*/CLR_Led_ssd1283a(0 xBE5F);Rectangle(8-1,8
42、-1,84,120,0 xaa);/繪制一個矩形框, 0-127 LCD_Display(88,8,Score,0 xcc88,0 xBE5F);LCDShow_uCharNumber(96,24,Snake.Score,0 xcc88,0 xBE5F); LCD_Display(88,81,LEVEL,0 xcc88,0 xBE5F);LCDShow_uCharNumber(96,97,Snake.Level,0 xcc88,0 xBE5F);/*初始化蛇參數(shù)*/Snake.Long=2; /定義初始化蛇的長度Snake.Life=0; /初始化蛇還活著Snake.Score=0;Food.
43、Yes=1;Key_Value=0;for(i=0;iSnake.Long;i+)/將蛇給賦值Snake.Xi=i+2;Snake.Yi=2;for(i=0;iSnake.Long;i+)/將蛇給畫出來Trun_On_Point(Snake.Xi,Snake.Yi,0 xaa);/函數(shù)名稱:void Display_dead(uchar i) /函數(shù)功能:顯示死亡界面void Display_dead(uchar i)LCD_Display(10,40,GAME OVER,0 xcc88,0 xBE5F); while(Key_Value=i);Init_SNAKE();/函數(shù)名稱:void
44、Display_Pass(uchar i)/函數(shù)功能:顯示過關(guān)界面void Display_Pass(uchar i)Snake.Level+;LCD_Display(18,40,You are,0 xcc88,0 xBE5F); LCD_Display(34,56,WIN!,0 xcc88,0 xBE5F); while(Key_Value=i);Init_SNAKE();/函數(shù)名稱:void Run_SNAKE(void)/函數(shù)功能:蛇運動函數(shù) (游戲精華)void Run_SNAKE(void)uchar i=0;/*根據(jù)按鍵選擇蛇的運動方向*/if(Key_Value=Key_Righ
45、t&Key_V_temp!=Key_Left)|(Key_Value=Key_Left&Key_V_temp=Key_Right)Trun_Off_Point(Snake.X0,Snake.Y0); /先把蛇尾給熄滅掉 for(i=0;iSnake.Long-1;i+) /蛇身都是它前一段的蛇身的位置Snake.Xi=Snake.Xi+1;Snake.Yi=Snake.Yi+1; Snake.XSnake.Long-1=Snake.XSnake.Long-2+1;Snake.YSnake.Long-1=Snake.YSnake.Long-2+0; /蛇頭向你要求的方向移動for(i=0;iSn
46、ake.Long;i+) /這個讓蛇顯示出來的函數(shù)Trun_On_Point(Snake.Xi,Snake.Yi,0 xaa);Key_V_temp=Key_Right;if(Key_Value=Key_Left&Key_V_temp!=Key_Right)|(Key_Value=Key_Right&Key_V_temp=Key_Left)Trun_Off_Point(Snake.X0,Snake.Y0); /先把蛇尾給熄滅掉 for(i=0;iSnake.Long-1;i+) /蛇身都是它前一段的蛇身的位置Snake.Xi=Snake.Xi+1;Snake.Yi=Snake.Yi+1; Sn
47、ake.XSnake.Long-1=Snake.XSnake.Long-2-1;Snake.YSnake.Long-1=Snake.YSnake.Long-2+0; /蛇頭向你要求的方向移動for(i=0;iSnake.Long;i+) /這個讓蛇顯示出來的函數(shù)Trun_On_Point(Snake.Xi,Snake.Yi,0 xaa);Key_V_temp=Key_Left;if( Key_Value=Key_Up&Key_V_temp!=Key_Down)|( Key_Value=Key_Down&Key_V_temp=Key_Up)Trun_Off_Point(Snake.X0,Snak
48、e.Y0); /先把蛇尾給熄滅掉 for(i=0;iSnake.Long-1;i+) /蛇身都是它前一段的蛇身的位置Snake.Xi=Snake.Xi+1;Snake.Yi=Snake.Yi+1; Snake.XSnake.Long-1=Snake.XSnake.Long-2+0;Snake.YSnake.Long-1=Snake.YSnake.Long-2-1; /蛇頭向你要求的方向移動for(i=0;iSnake.Long;i+) /這個讓蛇顯示出來的函數(shù)Trun_On_Point(Snake.Xi,Snake.Yi,0 xaa);Key_V_temp=Key_Up;if( Key_Val
49、ue=Key_Down&Key_V_temp!=Key_Up)|( Key_Value=Key_Up&Key_V_temp=Key_Down)Trun_Off_Point(Snake.X0,Snake.Y0); /先把蛇尾給熄滅掉 for(i=0;iSnake.Long-1;i+) /蛇身都是它前一段的蛇身的位置Snake.Xi=Snake.Xi+1;Snake.Yi=Snake.Yi+1; Snake.XSnake.Long-1=Snake.XSnake.Long-2+0;Snake.YSnake.Long-1=Snake.YSnake.Long-2+1; /蛇頭向你要求的方向移動for(i=0;i=19|Snake.YSnake.Long-1=28)/判蛇頭是否撞到墻壁Snake.Life=1;for(i=3;iSnake.Long;i+)/從第三節(jié)開始判斷蛇頭是否咬到自己if(Snake.Xi=Snake.X0&Snake.Yi=Snake.Y0)Snake.Life=1;if(Snake.Life=1) /
- 溫馨提示:
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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 行政溝通與講義協(xié)調(diào)-ppt課件(演講稿)
- 利潤表及其分析課件
- 企業(yè)管理決策模擬大賽(商道使用)總結(jié)課件
- 藥品包裝材料和容器
- 反校園欺凌主題班會課件
- 蝴蝶效應(yīng)與中醫(yī)養(yǎng)生課件
- 新課程課堂教學(xué)的境界課件
- 人教版英語七年級下冊Unit-1-Section-A-Grammar-Focus-3c課件
- 下腔靜脈濾器植入術(shù)
- 團(tuán)隊建設(shè)(中外管理)
- 不擠不搶好朋友課件
- 人教版數(shù)學(xué)一年級上冊數(shù)學(xué)樂園課件
- 八年級上冊數(shù)學(xué)-一元一次不等式組ppt課件
- 健康生活習(xí)慣養(yǎng)成教育課件
- 免疫應(yīng)答ppt課件(英文)