畢業(yè)設計(論文)-基于單片機的微型游戲機--貪吃的蛇.doc
《畢業(yè)設計(論文)-基于單片機的微型游戲機--貪吃的蛇.doc》由會員分享,可在線閱讀,更多相關《畢業(yè)設計(論文)-基于單片機的微型游戲機--貪吃的蛇.doc(3頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、北京理工大學珠海學院2006屆本科畢業(yè)生畢業(yè)設計(論文)基于單片機的微型游戲機貪吃的蛇摘 要 單片微型機簡稱單片機,它是在一片芯片上集成了中央處理部件,存儲器、定時器/計數(shù)器和各種輸入輸出設備等接口部件。單片機是微機發(fā)展的一個重要的分支,自問世以來,性能不斷地改善和提高,加之單片機具有集成度高、功能強、速度快、體積小、功耗小、使用方便、性能可靠、價格便宜等優(yōu)點,故在工業(yè)控制、數(shù)據(jù)采集和處理、通信系統(tǒng)、家用電器等領域的應用日益廣泛。國內(nèi)雖然起步較晚,但單片機的潛力越來越被人們所重視,尤其在工業(yè)控制、自動化儀器儀表、計算機系統(tǒng)接口、智能化外設等應用領域發(fā)展很快。它的應用對于產(chǎn)品升級換代、機電一體化
2、都具有重要的意義,在工業(yè)生產(chǎn)中,電流、電壓、溫度、壓力、流量、流速和開關量都是常用的主要被控參數(shù),被用于各種不同產(chǎn)品的生產(chǎn)。在通信行業(yè)更為廣泛利用,手機從只能基本通話,到現(xiàn)在一臺手機擁有各種不同的功能,單片機得到了廣泛的應用。手機可以聽音樂,聽收音機,玩游戲,照相片等等,比較流行的手機游戲貪吃蛇就能用單片機實現(xià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思路設計12第二章 系統(tǒng)的基本組成和工作原理22.1系統(tǒng)的基本組成22.2系統(tǒng)的工作原理23第三章 顯示電路的選取和設計23.1游戲顯示的器件選擇23.2顯示功能的硬件電路34第四章 鍵盤掃描的電路設計44.1鍵盤掃描思路設計44.2鍵盤硬件電路設計45第五章 系統(tǒng)程序設計55.1編譯軟件55.2軟件設計工具55.3C51 優(yōu)化的 C 語言交叉編譯器105.4系統(tǒng)設計流程圖11參考文獻15附 錄16謝辭43IV 1 第一章 緒論1.1 概述本設計采用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 選題背景貪吃蛇是家喻戶曉的益智類小游戲,選擇這個題目一是為了將自己的所學知識加以運用,二是一直以來貪吃蛇這個游戲就深深地吸引著我,它的制作方法對于以前的我而言都是很神秘
10、的。我希望通過自己的所學知識把它剖析開來,真真正正的了解它的本質(zhì)和精髓。雖然我的編程能力不是很強,但是我有信心,在這次學習中我將從實踐和實際的項目中提高自己的編程能力。因此我選定了這個題目。1.3 課題分析 貪吃蛇游戲設計主要硬件由單片機最小系統(tǒng),TFT彩屏,4X4矩陣鍵盤,整個的游戲設計外圍電路比較少,主要核心在于游戲的程序設計,本設計的游戲規(guī)則也參照現(xiàn)在手機流行的貪吃蛇游戲的規(guī)則去設計,當蛇吃到食物時,蛇身就會自動增加一格,食物隨機出現(xiàn)在屏幕上,當蛇碰到墻壁時,游戲結(jié)束。本設計需要考慮的問題有以下幾個:1. 顯示彩屏的選擇2. 保證游戲的流暢性和及時響應性3. 游戲的設計應該接近人性化4.
11、 電路連接距離應盡量短,避免信號線受外界干擾1.4 思路設計 游戲的運行由矩陣鍵盤去控制,顯示由TFT彩色屏幕完成。本設計的鍵盤掃描電路不同于以往一般的矩陣鍵盤,而由中斷掃描代替,當有按鍵按下時,才執(zhí)行掃描鍵盤,這樣就可以節(jié)省很多CPU資源,同時也可以及時的反應出按鍵操作。2 第二章 系統(tǒng)的基本組成和工作原理2.1 系統(tǒng)的基本組成 貪吃蛇游戲設計由三部分組成,屏幕顯示,最小系統(tǒng)及矩陣鍵盤。最小系統(tǒng)采用Atmel公司的51核的AT89S52芯片,AT89S52芯片具有8K的程序存儲器,256B的數(shù)據(jù)存儲器,已經(jīng)為程序的設計帶來了很大的方便,解決了因程序容量龐大而導致硬件選擇困難的問題。同時也節(jié)約
12、了設計成本,一塊AT89S52只需要5塊錢就足夠了,對于一般人來講是可以承受得了的。加上屏幕的應用比較簡單,有相應的配套應用命令子程序,減低了設計者重新編寫屏幕應用子程序的麻煩,同時設計者可根據(jù)自身設計需要,增添或修改程序,使得程序更完善。2.2 系統(tǒng)的工作原理 系統(tǒng)的程序設計分為一個主函數(shù),3個子函數(shù),子函數(shù)分別是鍵盤掃描函數(shù),貪吃蛇運行子程序和TFT屏幕自帶的子程序。在主程序里只對LCD的初始化,中斷設備的初始化,然后死循環(huán)執(zhí)行貪吃蛇運行程序。3 第三章 顯示電路的選取和設計3.1 游戲顯示的器件選擇 游戲設計的顯示屏可以有很多種的選擇,選擇不同的屏幕,程序的編寫也隨之不同。屏幕可以選擇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é)構更簡單,不需要任何的指令集,即對I/O口直接輸出可以使
14、用。若選用8X8點陣LED顯示屏,首先16位的I/O口已經(jīng)被占用,8X8的點陣能使用的范圍很少,對增強游戲的功能方面加以限制。 TFT彩色屏幕具有很強的顯示功能,能顯示262k顏色,屏幕由具有豐富的功能子程序,為使用者節(jié)省了不少時間,而且占用I/O口少,只用到5個I/O口。本設計將采用SSD1283A型號的彩屏。 SSD1283A的TFT驅(qū)動器是一種智能都在同一個驅(qū)動器,集成了電源電路,門驅(qū)動器,內(nèi)存為單芯片驅(qū)動器和源。它可以驅(qū)動132號決議的RGB 132的一個小組26萬色為a - TFT。 它也集成了控制器的功能和組成132高達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負載。在作為通用I/O口時,由于輸出驅(qū)動電路是開漏方式,有集電極的開路(OC門)電路或漏極電路驅(qū)動是需外接上拉電阻,本設計采用4.7K的排電阻做上拉電阻,足以使P0口驅(qū)動TFT液晶顯示屏。4 第四章 鍵盤掃描的電路設計4.1 鍵盤掃描思路設計 鍵盤是人機對話的一個重要的橋梁,通過按鍵控制單片機的操作。鍵盤的設計有兩種方式,一種是獨立鍵盤,就是獨立每一個I/O口單獨連接一個按鈕,這樣的設計是最簡單的,可是具有很大的局限性,因為單片機的I/O口本身就很有限,而且8個按鍵需要8
17、個I/O口,浪費了單片機的資源。第二種方式是矩陣鍵盤,矩陣鍵盤采用行列式結(jié)構按鍵設置在行列的交點上。當口線數(shù)量為8時,可以將4根口線定義為行線,另4根口線的定義為列線,形成4X4鍵盤,可以配置16個按鍵。同樣利用8根口線,矩陣鍵盤可以配置16個鍵,而獨立鍵盤只能配置8個按鍵,從此看出,矩陣鍵盤比獨立鍵盤擁有更豐富的性能。4.2 鍵盤硬件電路設計圖1-2矩陣鍵盤電路圖 如圖所示,矩陣鍵盤的行線連接P1口的前四位,列線連接P1口的后四位。矩陣鍵盤上某一鍵閉合時,該鍵所對應的行線和列線短接。此時該行線電平將由被短接的列線電平所決定。5 第五章 系統(tǒng)程序設計5.1 編譯軟件 關于程序的編寫,在C51單
18、片機中,可以用匯編語言編寫程序,也可以用C語言編寫。匯編語言是一種用文字助記符來表示機器指令的符號語言,是最接近機器碼的一種語言,其主要優(yōu)點是占用資源少、程序執(zhí)行效率高,但是不同的CPU,其匯編語言可能有所差異,所以不易移植。C語言是一種結(jié)構化的高級語言,其優(yōu)點是可讀性好,移植容易,是普遍使用的一種計算機語言,缺點是占用資源較多,執(zhí)行效率沒有匯編高。對于目前普遍使用的RISC架構的8bit MCU來說,其內(nèi)部ROM、RAM、STACK等資源都有限,如果使用C語言編寫,一條C語言指令編譯后,會變成很多條機器碼,很容易出現(xiàn)ROM空間不夠、堆棧溢出等問題。 綜合本設計的情況,由于編寫程序容量并不是很
19、大,而且對于初學者更好理解程序的設計,故采用keilC 編譯器來完成程序的編寫。5.2 軟件設計工具uVision2 集成開發(fā)環(huán)境 uVision2 IDE是一個基于Window的開發(fā)平臺包含一個高效的編輯器一個項目管理器和一個MAKE工具。uVision2 支持所有的KEIL 8051工具包括C編譯器,宏匯編器,連接/定位器 目標代碼到HEX的轉(zhuǎn)換器。uVision2 通過以下特性加速你的嵌入式系統(tǒng)的開發(fā)過程:1) 全功能的源代碼編輯器。2) 器件庫用來配置開發(fā)工具設置。3) 項目管理器用來創(chuàng)建和維護你的項目。4) 集成的 MAKE 工具可以匯編 編譯和連接你的嵌入式應用。5) 所有開發(fā)工具
20、的設置都是對話框形式的。6) 真正的源代碼級的對 CPU和外圍器件的調(diào)試器。7) 高級 GDI(AGDI)接口用來在目標硬件上進行軟件調(diào)試 以及和Monitor-51 進行通信。 8) 與開發(fā)工具手冊和器件數(shù)據(jù)手冊和用戶指南有直接的鏈接。 uVision2界面提供一個菜單,一個工具條以便你快速選擇命令按鈕,另外還有源代碼的顯示窗口,對話框和信息顯示uVision2允許同時打開瀏覽多個源文件。 圖5-1開發(fā)環(huán)境界面菜單條,工具條和快捷鍵 菜單條提供各種操作菜單,如:編輯操作,項目維護,開發(fā)工具選項設置,調(diào)試程序,窗口選擇和處理,在線幫助,工具條按鈕允許你快速地執(zhí)行uVision2命令。鍵盤快捷鍵
21、(你自己可以配置)允許你執(zhí)行uVision命令。下面的表格列出了uVision2菜單項命令,工具條圖標,默認的快捷鍵以及他們的描述:文件菜單和命令 File 菜單 快捷鍵 描述 New Ctrl+N 創(chuàng)建新文件 Open Ctrl+O 打開已經(jīng)存在的文件 Close 關閉當前文件 Save Ctrl+S 保存當前文件 Save all 保存所有文件 Save as 另外取名保存 Device Database 維護器件庫 Print Setup 設置打印機 Print Ctrl+P 打印當前文件 Print Preview 打印預覽 1-9 打開最近用過的文件 Exit 退出 uVision2
22、 提示是否保存文件 編輯菜單和編輯器命令(Edit) 菜單 快捷鍵 描述 Home 移動光標到本行的開始 End 移動光標到本行的末尾 Ctrl+Home 移動光標到文件的開始 Ctrl+End 移動光標到文件的結(jié)束 Ctrl+ 移動光標到詞的右邊 Ctrl+A 選擇當前文件的所有文本內(nèi)容 Undo Ctrl+Z 取消上次操作 Redo Ctrl+Shift+Z 重復上次操作 Cut Ctrl+X 剪切所選文本 Ctrl+Y 剪切當前行的所有文本 Copy Ctrl+C 復制所選文本 Paste Ctrl+V 粘貼 Indent 將所選文本右移一個制表鍵的距離 Selected Text Un
23、indent 將所選文本左移一個制表鍵的距離 Selected Text Toggle Bookmark Ctrl+F2 設置/取消當前行的標簽Goto Next Bookmark F2 移動光標到下一個標簽處 Goto Previous Bookmark Shift+F2 移動光標到上一個標簽處 Clear All Bookmarks 清除當前文件的所有標簽 Find Ctrl+F 在當前文件中查找文本 F3 向前重復查找 Shift+F3 向后重復查找 Ctrl+F3 查找光標處的單詞 Ctrl+ 尋找匹配的大括號,圓括號,方括號(用此命令將光標放到大括號,圓括號或方括號的前面) Repl
24、ace Ctrl+H 替換特定的字符 Find in Files 在多個文件中查找選擇文本命令 在 uVision2中, 你可以通過按住Shift鍵和相應的光標操作鍵來選擇文本 如 Ctrl+-是移動光標到下一個詞 那么 Ctrl+Shift+-就是選擇當前光標位置到下一個詞的開始位置間的文本。 當然 你也可以用鼠標來選擇文本 操作如下: 要選擇 鼠標操作 任意數(shù)量的文本 在你要選擇的文本上拖動鼠標 一個詞 雙擊此詞。 一行文本 移動鼠標到此行的最左邊,直到鼠標變成右指向的箭頭,然后單擊。 多行文本 移動鼠標到此行的最左邊 直到鼠標變成右指向的箭頭 然后相應拖動。 一個距形框中的文本 按住 A
25、lt鍵 然后相應拖動鼠標。 視圖菜單 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 設置顏色 字體 快捷鍵和編輯器的選項 調(diào)試菜單和調(diào)試命令 Debug 菜單 快捷鍵 描述 Start/S
27、top Ctrl+F5 開始/停止調(diào)試模式 Debugging Go F5 運行程序 直到遇到一個中斷 Step F11 單步執(zhí)行程序 遇到子程序則進入 Step over F10 單步執(zhí)行程序 跳過子程序 Step out of Ctrl+F11 執(zhí)行到當前函數(shù)的結(jié)束 Current function Stop Running ESC 停止程序運行 Breakpoints 打開斷點對話框 Insert/Remove 設置/取消當前行的斷點 Breakpoint Enable/Disable 使能/禁止當前行的斷點 Breakpoint Disable All 禁止所有的斷點 Breakpoi
28、nts Kill All 取消所有的斷點 Breakpoints Show Next 顯示下一條指令 Statement Enable/Disable 使能/禁止程序運行軌跡的標識 Trace Recording View Trace 顯示程序運行過的指令 Records Memory Map 打開存儲器空間配置對話框 Performance 打開設置性能分析的窗口 Analyzer Inline Assembly 對某一個行重新匯編 可以修改匯編代碼 Function Editor 編輯調(diào)試函數(shù)和調(diào)試配置文件外圍器件菜單 Peripherals 菜單 快捷鍵 描述 Reset CPU 復位
29、CPU Interrupt, 打開片上外圍器件的設置對話框 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 處理當前編輯的文件 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 處理當前編輯的文件 Customize Tools Menu 添加用戶程序到工具菜單中 5.3 C51 優(yōu)化的 C 語言交叉編譯器 Keil C51 交叉編譯器是一個基于ANSI C標準的針對8051系列MCU的C編譯
31、器生成的可執(zhí)行代碼快速,緊湊。在運行效率和速度上可以和匯編程序得到的代碼相媲美。 和匯編語言相比,用C語言這樣的高級語言有很多優(yōu)勢,比如:1) 對處理器的指令集不必了解8051 CPU的基本結(jié)構可以了解,但不是必須的。 2) 寄存器的分配以及各種變量和數(shù)據(jù)的尋址都由編譯器完成。 3) 程序擁有了正式的結(jié)構(由C語言帶來的),并且能被分成多個單獨的子函數(shù)。這使整個應用系統(tǒng)的結(jié)構變得清晰,同時讓源代碼變得可重復使用。 4) 選擇特定的操作符來操作變量的能力提高了源代碼的可讀性 5) 可以運用和人的思維很接近的詞匯和算法表達式 6) 編寫程序和調(diào)試程序的時間得到很大程度的縮短 7) C 運行連接庫包
32、含一些標準的子程序 如 格式化輸出 數(shù)字轉(zhuǎn)換 浮點運算 8) 由于程序的模塊結(jié)構技術 使得現(xiàn)有的程序段可以很容易的包含到新的程序中去 9) ANSI標準的C語言是一種豐常方便的,獲得廣泛應用的,在絕大部分系統(tǒng)中都能夠很容易得到的語言。 因此 如果需要 現(xiàn)有的程序可以很快地移植到其他的處理器上,節(jié)省投資。 5.4 系統(tǒng)設計流程圖開始LCD屏幕初始化貪吃蛇設計初始化貪吃蛇運行子程序圖5-2系統(tǒng)主程序流程圖 如圖所示,程序設計的主程序即main函數(shù)很簡單,主要完成初始化工作,主要完成對LCD屏幕,貪吃蛇結(jié)構的初始化,然后不斷運行貪吃蛇游戲程序。下面逐一分析每一個子程序的設計。開始初始化定時器繪制游戲
33、初始界面初始化貪吃蛇參數(shù)結(jié)束圖5-3貪吃蛇初始化子程序流程圖定時器的作用在于產(chǎn)生隨機數(shù),用于隨機擺放食物,定時器的工作模式為模式一,即16位計數(shù)器,當計數(shù)溢出時,定時器中斷程序重裝計數(shù)初值,清除中斷標志位。TFT顯示屏幕的顯示范圍是132x132個像素點,定義貪吃蛇的活動范圍為從左第7個像素到84個像素,從上第7個像素到120個像素。在屏幕的坐標為(96,24)開始顯示游戲得分值,坐標為(96,97)顯示游戲的級數(shù)。初始化貪吃蛇參數(shù)是直接給貪吃蛇的結(jié)構體賦初值。開始根據(jù)按鍵選擇蛇的方向判斷蛇是否死亡判斷蛇是否最長判斷蛇是否吃到食物蛇死亡界面過關界面放果子程序判斷是否有按鍵判斷是否有按鍵YNYN
34、等待等待YNYNYN圖5-4貪吃蛇運行子程序 貪吃蛇運行子程序是整個程序設計的核心,首先由系統(tǒng)檢測是否有按鍵按下,確定有按鍵按下后,外部中斷程序自動執(zhí)行,開始掃描矩陣鍵盤,得到鍵值,根據(jù)鍵值判斷貪吃蛇要走的方向。在游戲運行的期間,系統(tǒng)不斷檢測蛇是否死亡,蛇是否已經(jīng)最長,蛇是否吃到了食物。若蛇已經(jīng)死亡,則蛇的死亡標記位被置位,跳轉(zhuǎn)到死亡界面,檢測是否有按鍵按下,有就跳轉(zhuǎn)到游戲開始界面,重新開始游戲,無則等到有任意鍵按下。若檢測到蛇身的長度已經(jīng)達到最長,則游戲的級數(shù)自動升高一級,游戲的級數(shù)越高,貪吃蛇移動的速度越快。游戲的速度控制由延時程序決定,若延時程序延時短,則蛇移動得快,若延時比較長,則蛇移
35、動得慢。若蛇已經(jīng)吃到食物,則在放食物的原來的坐標會消除顯示,重新讀取計數(shù)器的值,通過計算得到要放置食物的坐標,在該坐標上顯示食物。開始P1低四位輸出1P1是否等于0 x0f結(jié)束延時P1是否等于0 x0f取出低四位P1輸出0 xf0取出高四位取出鍵值NYNY圖5-5鍵盤掃描子程序 由于該子程序出現(xiàn)在中斷服務程序當中,不需要在主程序里重復運行,所以為CPU省下了許多資源,只占用了INIT0口,在主程序當中只需要執(zhí)行對中斷的設置和把P1置0 x0f輸出就可以了。在掃描程序當中,首先P1輸出0 x0f,若有按鍵按下,則在P1口的低四位會有低電平出現(xiàn),在P1口的低四位分別連接著四個二極管的陰極,二極管的
36、陽極連接著中斷口P3.2和VCC,沒有按鍵按下的時候,P3.2呈現(xiàn)高電平,有按鍵按下的時候,四個二極管當中至少有一個導通,P3.2的高電平被拉低,只要把P3.2設置成下降沿中斷響應模式,那樣就可以進入中斷服務程序。進入中斷程序后,系統(tǒng)再次檢測P1口的電平是否等于0 x0f,若P1口的電平依然不等于0 x0f,則把讀到P1口的值的低四位保存起來,再輸出0 xf0,讀取P1口的值,把高四位保存起來。根據(jù)高四位(列值)跟低四位(行值)的值計算出鍵值。參考文獻1 明浩:單片機 C 語言入門教程J,2005 年電子報2 谷樹忠,閆勝利:PROTEL 2004 使用教程M,電子工業(yè)出版社第一版3 胡耀輝:
37、單片機系統(tǒng)開發(fā)實例經(jīng)典M,北京冶金工業(yè)出版社,20064 李軍:51系列單片機高級實例開發(fā)指南M,北京航空航天大學出版社,20055 姚燕南:微型計算機原理M,安電子科技大學出版社6 謝嘉奎:電子線路M,高等教育出版社7 李秉操:機接口技術在工業(yè)控制中的應用M, 陜西電子編輯部8 蔡美琴:MCS51單片機系統(tǒng)及其應用M,高等教育出版社9 周利功:增強型80C51單片機速成和實戰(zhàn)M,北京航空航天大學出版社10 王天曦 ,李洪儒:電子技術工藝基礎M,清華大學出版社 200011 李光才,樓然笛:單片機課程設計 實例指導M,北京航空航天大學出版社 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é)構體定義變量 使程序的名稱更加的清楚/=struct uchar X;uchar Y; uchar Yes;Food;/食物結(jié)構體#define SNAKE_Max_Long 20 /最大長度struct
39、 uchar XSNAKE_Max_Long;uchar YSNAKE_Max_Long;uchar Long; uchar Life; uchar Score;/蛇的分數(shù)uchar Level;/蛇的等級 Snake;/蛇結(jié)構體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ù)功能:顯示過關界面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)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。