北郵數電實驗點陣賽車.doc_第1頁
北郵數電實驗點陣賽車.doc_第2頁
北郵數電實驗點陣賽車.doc_第3頁
北郵數電實驗點陣賽車.doc_第4頁
北郵數電實驗點陣賽車.doc_第5頁
已閱讀5頁,還剩14頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

數字電路綜合實驗報告點陣賽車游戲學院:信息與通信工程學院班級:2010211117班 姓名: 學號: 班內序號: 輔導老師:袁東明時間:2012年11月目錄一、 設計任務要求二、 系統設計三、 仿真波形及分析四、 源程序五、 功能說明六、 元器件清單及資源利用情況七、故障及問題分析八、總結和結論一、設計任務要求1、基本要求:1.用88點陣進行5秒倒計時顯示,如下圖所示。2.當5秒倒計時結束后,點陣顯示下圖所示的賽道和賽車的初始位置,賽車游戲開始,并開始計時,用兩個數碼管顯示時間。圖中的紅色表示賽道,黃色表示賽車的初始位置,箭頭表示賽車行進的方向。3.用BTN1BTN3三個按鍵分別控制賽車的左移、前進、右移,最終使賽車在不碰撞賽道的情況下走完全程(即圖2中的綠色位置),游戲結束,點陣顯示“V”圖案,數碼管顯示走完全程所耗費的時間。4.當游戲時間超過59秒,或者賽車在行進過程中碰撞賽道,游戲失敗,點陣顯示“X”圖案。5.通過按鍵BTN0進行復位,控制點陣返回到初始狀態。2、提高要求:1.有多種游戲賽道可選,5秒倒計時顯示后賽道隨機出現。2.賽車的初始位置隨機出現。3.在賽車行進過程中,賽道中隨機出現障礙物(用88點陣中的一個LED表示),通過BTN1BTN3三個按鍵的控制躲避障礙物,走完全程。若賽車碰到障礙物和賽道,則游戲失敗。二、系統設計1、設計框圖1、 系統結構框圖本系統主要由四個模塊組成,其中控制器用于控制程序運行、儲存當前狀態并控制輸出顯示,點陣用于顯示游戲界面,數碼管用于顯示當前分數。按鈕輸入用于輸入控制信息。2、 邏輯劃分方框圖3、 系統流程圖開始點陣5秒倒計時游戲開始,數碼管顯示時間,點陣顯示小車與賽道賽道下移,小車不動小車位置移動否賽道與車是否相撞,是否超時按鍵輸入否是是是否到達終點否是點陣顯示“V”圖案,數碼管顯示走完全程所耗費的時間點陣顯示“X”游戲結束4、MDS圖Te to end到達終點Cr crash 撞車Ot over timeCD count downKI keyboard input運行狀態游戲成功游戲失敗等待狀態ResetResetResetOt or CrTeCD 游戲運行狀態的具體狀態轉移圖鍵盤輸入狀態車移動賽道移動是否撞車,超時KIKIKI到達狀態三、仿真波形及波形分析說明:為了得到仿真結果,仿真實驗先將分頻比降低再進行。說明:cat的波形說明,硬件運行過程中只選擇5號和4號數碼管,這兩個數碼管交替啟動,分別顯示時間秒數的個位和十位說明:游戲剛開始時,數碼管顯示00.對應的time_car序列為0111111說明:游戲運行一段時間后(5秒倒計時)計時模塊開始計時。上圖中,數碼管顯示01秒,0對應序列為0111111,1對應于0000110。下圖是02秒的仿真圖說明:點陣輸出,列的輸出為01111111,10111111,11111110說明:列的輸出為00000100,00000100,00111100對應于點陣圖形5的輸出。從第二行開始輸出。四、源程序及注釋(由于代碼過長,此處只顯示top-level entity,其余代碼詳見附件)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CAR ISPORT( CLK_CAR,CLEAR_CAR:IN STD_LOGIC; ROW_CAR,COL_CAR:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); KEY_CAR:IN STD_LOGIC_VECTOR(2 DOWNTO 0); TIME_CAR:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); CAT_CAR:OUT STD_LOGIC_VECTOR(5 DOWNTO 0) );END CAR;-ARCHITECTURE GAME OF CAR ISCOMPONENT DIV_N IS-分頻模塊PORT( CLK_IN:IN STD_LOGIC;-時鐘輸入 CLEAR:IN STD_LOGIC;-掃描,清零CLK:OUT STD_LOGIC:=0;-1000HZ游戲控制及點陣掃描頻率CLK1:OUT STD_LOGIC:=0;-100HZ數碼管掃描頻率CLK2:OUT STD_LOGIC:=0-10HZ計時頻率 ); END COMPONENT;COMPONENT ANTI_SHAKING IS -防抖模塊PORT(CLK,KEY,CLK1:IN STD_LOGIC; - clk為游戲控制頻率 clk1 為防抖頻率 100hzK_OUT:OUT STD_LOGIC);END COMPONENT;COMPONENT DISPLAY IS -顯示模塊PORT(CLK1,CLK,CLEAR:IN STD_LOGIC;COL,ROW:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -點陣的輸出 行與列COL0_IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); - 游戲控制模塊傳給顯示模塊的 點陣的列的數據COL1_IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); -COL2_IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); -COL3_IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); -COL4_IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); COL5_IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); COL6_IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); COL7_IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); LED1_IN,LED2_IN:IN INTEGER RANGE 0 TO 9;-LED計時模塊傳給顯示模塊的數據 :時間的秒數 CAT:OUT STD_LOGIC_VECTOR(5 DOWNTO 0); SHUMA: OUT STD_LOGIC_VECTOR(6 DOWNTO 0) -即AA-AF);-數碼管END COMPONENT;COMPONENT GAME_CONTROL IS -游戲控制模塊PORT(COL0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-傳給顯示模塊的數據 點陣的列COL1: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COL2: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COL3: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COL4: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COL5: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COL6: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COL7: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);CLK:IN STD_LOGIC; STARTCOUNT : OUT STD_LOGIC; -傳給計時模塊的一個標志 用來控制是否計時TIMEOUT :IN STD_LOGIC;-計時模塊傳給游戲控制模塊的一個標志,說明是否超時CLEAR:IN STD_LOGIC;KEYUP,KEYRIGHT,KEYLEFT: IN STD_LOGIC); END COMPONENT;COMPONENT TIMECOUNT ISPORT(CLK2,CLEAR:IN STD_LOGIC;-10HZLED1_OUT,LED2_OUT:OUT INTEGER RANGE 0 TO 9;-傳給顯示模塊的 STARTCOUNT :IN STD_LOGIC;-用來控制是否計時TIMEOUT :OUT STD_LOGIC-傳給游戲控制模塊的一個標志,說明是否超時);END COMPONENT;-SIGNAL KEY_TMP:STD_LOGIC_VECTOR(2 DOWNTO 0);-以下皆為連接的中間信號SIGNAL CLK_TMP,CLK1_TMP,CLK2_TMP:STD_LOGIC;SIGNAL COL0_TMP: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL COL1_TMP: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL COL2_TMP: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL COL3_TMP: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL COL4_TMP: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL COL5_TMP: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL COL6_TMP: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL COL7_TMP: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL TIMEOUT_TMP : STD_LOGIC;SIGNAL STARTCOUNT_TMP : STD_LOGIC; SIGNALLED1_TMP,LED2_TMP: INTEGER RANGE 0 TO 9;-LED SIGNAL CLEAR: STD_LOGIC;-BEGIND1:DIV_N PORT MAP(CLK=CLK_TMP,CLK1=CLK1_TMP,CLK2=CLK2_TMP,CLK_IN=CLK_CAR,CLEAR=CLEAR_CAR);-A1:ANTI_SHAKING PORT MAP(CLK=CLK_TMP,CLK1=CLK1_TMP,KEY=KEY_CAR(0),K_OUT=KEY_TMP(0); - A2:ANTI_SHAKING PORT MAP(CLK=CLK_TMP,CLK1=CLK1_TMP,KEY=KEY_CAR(1),K_OUT=KEY_TMP(1);-A3:ANTI_SHAKING PORT MAP(CLK=CLK_TMP,CLK1=CLK1_TMP,KEY=KEY_CAR(2),K_OUT=KEY_TMP(2);-DP1:DISPLAY PORT MAP(CLK=CLK_TMP,CLK1=CLK1_TMP,CLEAR=CLEAR_CAR,SHUMA=TIME_CAR,CAT=CAT_CAR,COL=COL_CAR,ROW=ROW_CAR,LED1_IN=LED1_TMP,LED2_IN=LED2_TMP,COL0_IN=COL0_TMP,COL1_IN=COL1_TMP,COL2_IN=COL2_TMP,COL3_IN=COL3_TMP,COL4_IN=COL4_TMP,COL5_IN=COL5_TMP,COL6_IN=COL6_TMP,COL7_IN=COL7_TMP);-OK-T1:TIMECOUNT PORT MAP(CLK2=CLK2_TMP,CLEAR=CLEAR_CAR,LED1_OUT=LED1_TMP,LED2_OUT=LED2_TMP,STARTCOUNT=STARTCOUNT_TMP,TIMEOUT=TIMEOUT_TMP);-G1:GAME_CONTROL PORT MAP(CLK=CLK_TMP,CLEAR=CLEAR_CAR,STARTCOUNT=STARTCOUNT_TMP,TIMEOUT=TIMEOUT_TMP,KEYUP=KEY_TMP(1),KEYRIGHT=KEY_TMP(0),KEYLEFT=KEY_TMP(2),COL0=COL0_TMP,COL1=COL1_TMP,COL2=COL2_TMP,COL3=COL3_TMP,COL4=COL4_TMP,COL5=COL5_TMP,COL6=COL6_TMP,COL7=COL7_TMP); -END GAME;五、實現功能說明倒計時階段,數碼管不計時60秒超時 ,游戲結束碰賽道或障礙,游戲結束跑到終點,游戲成功,顯示完成時間隨機賽道,隨機障礙,小車隨機初始位置 按下復位鍵之后,游戲重新開始六、元器件清單及資源利用情況1、使用的元器件芯片EPM1270T144C5按鍵3個Led點陣8*8個單元Led數碼管1個2、資源利用七、 故障及問題分析1, 故障:加了防抖模塊后,按鍵變得非常不靈敏,怎么按都沒有反應。問題分析:之前只考慮防抖的設計,在排除故障時,沒有找出任何有價值的信息,防抖頻率也是100hz,分頻模塊也沒有出錯,試著將防抖電路的頻率改了一下,依舊沒有用。后來聽課之后才明白,加了防抖模塊外,還需要加上時鐘同步,才能做成同步時序電路,才能有效地控制電路的運行。修改了防抖模塊代碼后(由防抖頻率進行防抖,游戲控制頻率進行同步),游戲終于能夠有效運行。2, 故障:在不同的實驗室進行實驗,有時點陣顯示正常,有時點陣全亮。問題分析:這是由于實驗板的點陣設計不同導致的。在將點陣管腳的行與列相互對換之后,終于能夠顯示正常。但是有時出現

溫馨提示

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

評論

0/150

提交評論