基于單片機的俄羅斯方塊游戲機課程設計_第1頁
基于單片機的俄羅斯方塊游戲機課程設計_第2頁
基于單片機的俄羅斯方塊游戲機課程設計_第3頁
基于單片機的俄羅斯方塊游戲機課程設計_第4頁
基于單片機的俄羅斯方塊游戲機課程設計_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、單片機原理及應用課程設計報告題 目:俄羅斯方塊游戲機專 業:電子信息工程技術班 級:電子B1512班學 號:姓 名:指導老師:2017-12-01目 錄1.設計題目、要求及分工21.1 設計題目21.2 設計要求21.3 分工22.設計方案23.系統硬件電路設計23.1硬件設計整體方框圖23.2電源系統23.3 STC89C52單片機介紹33.4 復位電路設計43.5時鐘電路設計53.6液晶屏顯示模塊63.7按鍵電路設計64.軟件系統的分析與設計74.1系統界面整體分析75.調試結果記錄及分析75.1仿真結果85.2實物調試結果86.心得體會9參考文獻11附錄112附錄213附錄3141.設計

2、題目、要求及分工1.1 設計題目本課程設計題目是基于51單片機的俄羅斯方塊游戲機。1.2 設計要求本課程設計主要器件是STC89C52單片機和液晶12864,通過單片機發生信號控制液晶屏的顯示,使用按鍵實現游戲的開始、暫停、移動、翻轉等。1.3 分工在本次設計中,張榮俊同學主要負責軟件的設計與分析,湯青紅同學負責硬件電路的設計。2.設計方案本次設計采用STC89C52單片機控制模塊,USB電源模塊來提供電源,復位模塊,12864LCD顯示屏進行屏顯,晶振與電容實現時鐘電路,按鍵直接接入I/O口,這樣可以簡化電路。另外我們還采用了6個按鍵,分別是左移,右移,下移、方塊變化鍵、確定按鍵與暫停按鍵。

3、3.系統硬件電路設計3.1硬件設計整體方框圖時鐘電路復位電路顯示電路按鍵電路STC89C52單片機電源模塊圖3.1 硬件設計框圖3.2電源系統本設計的電源系統比較簡單,由USB電源輸出5V電源進行供電,具體電路如下圖所示:圖3.2 電源電路3.3 STC89C52單片機介紹圖3.3 STC89C52引腳圖P1口P1 是一個帶內部上拉電阻的8 位雙向I/O 口, P1的輸出緩沖級可驅動(吸收或輸出電流)4 個TTL 邏輯門電路。對端口寫1,通過內部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL)。與AT89C51

4、不同之處是,P1.0 和P1.1還可分別作為定時/計數器2 的外部計數輸入(P1.0/T2)和(P1.1/T2EX)。P2口P2 是一個帶有內部上拉電阻的8 位雙向I/O 口,P2 的輸出緩沖級可驅動(吸收或輸出電流)4 個TTL 邏輯門電路。對端口P2 寫1,通過內部的上拉電阻把端口拉到高電平,此時可作輸入口,作輸入口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL)。在訪問外部程序存儲器或16 位地數據存儲器(例如執行MOVX DPTR 指令)時,P2 口送出高8 位地址數據。在訪問8 位地址的外部數據存儲器(如執行MOVXRI 指令)時,P2 口輸出P2鎖存器

5、的內容。Flash編程或校驗時,P2亦接收高位地址和一些控制信號。P3 口P3 口是一組帶有內部上拉電阻的8 位雙向I/O 口。P3 口輸出緩沖級可驅動(吸收或輸出電流)4 個TTL 邏輯門電路。對P3 口寫入1時,它們被內部上拉電阻拉高并可作為輸入端口。此時,被外部拉低的P3 口將用上拉電阻輸出電流(IIL)。P3 口除了作為一般的I/O 口線外,更重要的用途是它的第二功能P3 口還接收一些用于Flash閃速存儲器編程和程序校驗的控制信號。RST復位輸入。當振蕩器工作時,RST引腳出現兩個機器周期以上高電平將使單片機復位。ALE/PROG當訪問外部程序存儲器或數據存儲器時,ALE(地址鎖存允

6、許)輸出脈沖用于鎖存地址的低8 位字節。一般情況下,ALE 仍以時鐘振蕩頻率的1/6 輸出固定的脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當訪問外部數據存儲器時將跳過一個ALE 脈沖。對Flash存儲器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,可通過對特殊功能寄存器(SFR)區中的8EH 單元的D0 位置位,可禁止ALE 操作。該位置位后,只有一條MOVX 和MOVC指令才能將ALE 激活。此外,該引腳會被微弱拉高,單片機執行外部程序時,應設置ALE 禁止位無效。PSEN程序儲存允許(PSEN)輸出是外部程序存儲器的讀選通信號,當AT89C52 由外部程序存儲

7、器取指令(或數據)時,每個機器周期兩次PSEN 有效,即輸出兩個脈沖。在此期間,當訪問外部數據存儲器,將跳過兩次PSEN信號。EA/VPP外部訪問允許。欲使CPU 僅訪問外部程序存儲器(地址為0000H-FFFFH),EA 端必須保持低電平(接地)。需注意的是:如果加密位LB1 被編程,復位時內部會鎖存EA端狀態。如EA端為高電平(接Vcc端),CPU 則執行內部程序存儲器中的指令。Flash存儲器編程時,該引腳加上+12V 的編程允許電源Vpp,當然這必須是該器件是使用12V編程電壓Vpp。XTAL1振蕩器反相放大器及內部時鐘發生器的輸入端。XTAL2振蕩器反相放大器的輸出端。3.4 復位電

8、路設計單片機在啟動時都需要復位,以使CPU及系統各部件處于確定的初始狀態,并從初態開始工作。89系列單片機的復位信號是從RST引腳輸入到芯片內的施密特觸發器中的。當系統處于正常工作狀態時,且振蕩器穩定后,如果RST引腳上有一個高電平并維持2個機器周期(24個振蕩周期)以上,則CPU就可以響應并將系統復位。單片機系統的復位方式有:手動按鈕復位和上電復位。 手動按鈕復位需要人為在復位輸入端RST上加入高電平(圖1)。一般采用的辦法是在RST端和正電源Vcc之間接一個按鈕。當人為按下按鈕時,則Vcc的+5V電平就會直接加到RST端。手動按鈕復位的電路如所示。由于人的動作再快也會使按鈕保持接通達數十毫

9、秒,所以,完全能夠滿足復位的時間要求。復位電路連接如圖所示:圖3.4復位電路3.5時鐘電路設計8XX51系列單片機的時鐘信號通常用兩種電路形式得到:內部振蕩方式和外部振蕩方式。在引腳XTAL1和XTAL2外接晶振,就構成了內部振蕩方式。由于單片機內部有一個高增益反相放大器,當外接晶振后,就構成了自激振蕩器,并產生振蕩時鐘脈沖。晶振通常選用6MHz、12MHz或24MHz。本次設計中我們選用了12MHz的晶振,晶振與鎖相環電路配合使用,以提供系統所需的時鐘頻率。設計中STC89C52使用12MHz晶體振蕩器作為振蕩源,由于單片機內部帶有振蕩電路,所以外部只要連接一個晶振和兩個電容即可,電容容量一

10、般在15pF到50pF之間,我們選用電容容量為33pF的電容,如圖所示即為本設計的振蕩電路。圖3.5 時鐘電路3.6液晶屏顯示模塊液晶顯示屏是整個系統硬件的重要組成部分,擔當著人機交互的重要角色。本設計采用銘正同公司生產的MzL02D-12864液晶點陣屏作為顯示器件。它是一塊128*64點陣的LCD顯示模組,模組上的LCM采用COG技術將控制(包括顯存)、驅動器集成在LCM的玻璃上,接口簡單,操作方便。其特點為單電源供電,對比度編程可調,可采用并行接口為6800/8080時序或者串行SPI的MPU接口方式,整塊液晶屏由3.3V的白色LED背光,美觀大方。其外接部分分為電源端口、數據端口和命令

11、端口三部分組成。本設計中LCD的數據端口連接到STC89C51單片機的P0端口,LCD命令端口連接到單片機的P2端口。具體實物如圖所示:圖3.6 液晶屏正面圖 圖3.7 液晶屏反面圖圖3.8 液晶屏顯示電路3.7按鍵電路設計按鍵電路模塊是智能俄羅斯方塊游戲系統的輸入器件,它的控制器包括六個按鍵,分別為:左移、變形、右移、暫停、下降、確定。具體硬件電路如下圖所示。圖3.8 按鍵電路4.軟件系統的設計4.1軟件系統設計框圖 開機啟動動畫進入主菜單開始游戲游戲設置最高積分顯示單人最高積分添加游戲模式選擇返回按鍵.Y圖4.1軟件系統設計框圖5.調試結果記錄及分析5.1仿真結果圖5.1 仿真電路圖5.2

12、實物調試結果圖5.2實物主界面圖 圖5.3實物速度設置界面圖 圖5.4實物游戲界面圖圖 5.5實物游戲得分界面圖5.6實物游戲結束界面圖6.心得體會我在這次中主要負責軟件的調試以及協調好軟硬鍵的通訊。軟件調試中,發現了亂碼的現象,開始調試是弄不清是軟件的問題還是硬件的問題,這給了我一個很大的教訓,軟件硬件不能同時調試,只有確認一個沒問題后才能更好的調試另一個。最后發現是由軟件引起數據沖突造成的。此外還出現的各種各樣的BUG,例如游戲得分系統和人機通訊系統也會出現問題,有個問題更是莫名其妙,比如按著按著出現界面停頓現象,甚至出現了死機現象,而實際游戲中這種現象是萬萬不允許的。開始以為是電平干擾所

13、引起的,但是接穩定的電壓也會出現這種情況。回去檢查代碼時已經是1000多行代碼了,從主函數慢慢往下看,雖然注釋的比較詳細但是問題卻很難找到,然而BUG事實卻擺在那里。不修復則游戲無法進行。我終于體會到程序員的辛苦和無奈。只能回到最初的流程圖從底層驅動函數和算法邏輯慢慢整理,才發現我的程序出現的多么大的問題,沒有用好指針,指針出現了問題給程序帶來的災難性的后果。還有一些變量的初始化沒有賦值,初始化指針中沒用明確的指向,函數沒有返回。這些都是細節問題,任何一個關鍵變量沒有用好都會出現很大的問題。更重要的教訓是編程思路一定要清晰,這就要求編寫代碼之前流程圖都要畫好。還有就是編寫程序時頭腦要清醒不能打

14、疲勞戰,有時候變量的賦值過程中腦袋里想的是賦值為1而鍵盤中賦值的確實0;這種情況也是最難找的,因為是自己寫的程序,潛意識以為是正確的,就去找別處的錯誤了。只有一個一個的找才能找出來。找到之后,真的很后悔當初的粗心參考文獻1張毅剛.單片機原理及接口技術M.北京:人民郵電出版社,2013:220-2402郭天祥.新概念51單片機C語言教程M.北京:電子工業出版社,2012:230-2403韓旭,王娣. C語言從入門到精通M.北京:清華大學出版社,2010:244-2604胡仁喜. Altium Designer 16從入門到精通M.北京:機械工業出版社,2016:118-1685 王東鋒,董冠強.

15、單片機C語言應用100例M.北京:電子工業出版社,2009:182-200附錄1整體電路原理圖:PCB圖:附錄2元件清單:元件名稱規格元件名稱規格可調電阻10K單片機STC89C52按鍵6個液晶顯示屏LCD12864晶振12M滑動變阻器10K瓷片電容33PFUSB母座1個附錄3關鍵函數如下所示:俄羅斯方塊中文顯示界面void game_start_show()bit tpflag=1;/置循環標志位為1LCD_full_draw(start_pic);while(tpflag)switch(basic_button()case 6: tpflag=0; speaker=0;while(butt

16、on_b=0);speaker=1;break;default:;/game_start_show選擇游戲難度級別void select_speed()unsigned char i;bit tpflag=1;/置循環標志為1LCD_clear();for(i=0;i128;i+)LCD_display_byte(i,0,0xff);LCD_display_byte(i,7,0xff);LCD_display_byte(60,4,0x7f);LCD_display_byte(59,4,0x3e);LCD_display_byte(58,4,0x1c);LCD_display_byte(57,4

17、,0x08);LCD_display_byte(67,4,0x7f);LCD_display_byte(68,4,0x3e);LCD_display_byte(69,4,0x1c);LCD_display_byte(70,4,0x08);LCD_display_word(speed_data,24,3,52);show_speed_num(62,4);while(tpflag)switch(basic_button()case 4: if(speed_num!=0)speaker=0;speed_num-;show_speed_num(62,4);speaker=1;while(left=0);break;case 5: if(speed_num!=9) speaker=0;speed_num+;show_speed_num(62,4);speaker=1;while(right=0);break;case 6: tpflag=0; speaker=0;while(button_b=0);speaker=1;break;default:;/選擇游戲速度循環人機通信(進行游戲)void Tetris_main()unsigned char i;for(i=0;i19;i+)Box_Rami=Box_Ram_datai;/載入游戲初始化顯示畫面LCD_draw(mpic);ga

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論