北郵數字電路綜合實驗-打地鼠_第1頁
北郵數字電路綜合實驗-打地鼠_第2頁
北郵數字電路綜合實驗-打地鼠_第3頁
北郵數字電路綜合實驗-打地鼠_第4頁
北郵數字電路綜合實驗-打地鼠_第5頁
已閱讀5頁,還剩13頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、精選優質文檔-傾情為你奉上精選優質文檔-傾情為你奉上專心-專注-專業專心-專注-專業精選優質文檔-傾情為你奉上專心-專注-專業數字電路與邏輯設計實驗報告打地鼠游戲的設計與實現 學院:信息與通信工程學院班級: 姓名:李昊然 學號: 序號:02 課題:打地鼠 一課題的任務要求基本要求:1、 設計一個挑戰反應速度的“打地鼠”游戲,采用用88 雙色點陣顯示游戲界面,其中游戲邊界采用綠色LED 顯示,隨機出現的地鼠采用紅色LED 顯示,游戲有16 個洞穴,如圖1 所示。圖1 打地鼠游戲示意圖2、 游戲洞穴每次隨機出現一個地鼠,每個地鼠的最長保持時間為2 秒,2 秒后隨機出現下一個地鼠。以44 鍵盤的按鍵

2、代表錘子,16 個洞穴與16 個按鍵一一對應,一旦錘子在2 秒內擊中地鼠,地鼠消失,數碼管計分器分數加1 分;若錘子一直沒有擊中地鼠,2 秒后該地鼠消失。用兩個數碼管顯示游戲成績,當游戲成績達到10 分時游戲結束,點陣顯示字符“V”。3、 用兩個數碼管對整個游戲進行倒計時,當游戲時間超過59 秒而成績未達到10 分時,游戲失敗,點陣顯示字符“X”。4、 按復位鍵重新開始游戲,并開始倒計時。提高要求:1、 增加游戲難關,在邊界內每次隨機出現兩個地鼠,兩個地鼠的最長保持時間均為2秒,2 秒后隨機出現下兩個地鼠,錘子擊中一個地鼠加1 分,當游戲成績達到20 分而且游戲時間未超過59 秒時,游戲結束,

3、顯示字符“V”,否則顯示字符“X”。2、 自擬其他功能。二系統設計(一)設計思路程序采用自頂向下設計的思路,先將主程序啟動,然后依次進行多級分頻,并逐個執行子程序,主程序為點陣中顯示邊框背景及隨機出現地鼠,子程序包括數碼管計分和計時部分、時鐘部分、鍵盤部分以及邏輯判斷部分等。(二)總體框圖開始 生成邊框60s是否到時否是生成隨機位置地鼠打地鼠是2s內擊中地鼠否加1分輸積分是否達到10分贏結束(三)分塊設計1. 輸入部分:外部時鐘信號CLK頻率為25MHz,為程序提供初始的有效時鐘邊沿。復位信號輸入CLEAR為高電平有效,當CLEAR為1時,數碼管、點陣、計數器等都返回到初始狀態。鍵盤輸入值由兩

4、個四位二進制數分別表示行和列的狀態。2. 邏輯判斷模塊:通過檢測鍵盤返回值是否與點陣上出現地鼠的位置相對應,判斷“打”是否有效。通過60s倒計時的計數器是否為0判斷游戲是否到時。通過一個模為10的計數器判斷得分是否達到游戲要求。3輸出部分:由譯碼電路,根據SEG_SELECT信號的掃描、對SEG_SHOW賦予不同的值,實現在四個數碼管上分別顯示兩位60s倒計時和兩位計分。點陣根據LED_ROW的掃描、和LED_COL_G、LED_COL_R的值顯示游戲的邊框、地鼠出現的位置以及結束畫面,利用人眼的視覺延緩效應,當行掃描時鐘信號clk的頻率50Hz,可以達到六行點陣同時顯示的效果。 4.鍵盤輸入

5、部分:以1k Hz的頻率進行列掃描,將鍵盤檢測到的行和列的二進制數KEY_COL和KEY_ROW組合起來,賦值給一個四位二進制數CODE,記錄按鍵的位置,方便與地鼠在點陣上的位置相比較。三仿真波形及波形分析1.分頻由波形可知,對輸入時鐘信號clk進行了4倍分頻2.綠色燈示邊框在行數為1和6時,每列都亮,在行數為2、3、4、5時,亮第1和第6列,從而形成一個6*6的邊框。3.隨機出現地鼠地鼠可能出現在隨機的行和列當lose信號為1時,點陣顯示4. 數碼管會在第一個到第四個之間來回掃描5.給鍵盤行值賦予一個隨機值,程序進行列掃描,當鍵盤輸入值與點陣值相對應時,積分信號score會+1,由于是隨機賦

6、值,所以恰好碰上的概率較小,加分的時間較長四源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY dds IS PORT( CLK:IN STD_LOGIC; -輸入時鐘 LED_ROW:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -點陣行 LED_COL_G:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -點陣列 綠色 LED_COL_R:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -點陣列 紅色 SEG_SEL

7、ECT:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);-數碼管位置掃描 SEG_SHOW:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); -數碼管顯示 KEY_COL:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -鍵盤列 KEY_ROW:IN STD_LOGIC_VECTOR(3 DOWNTO 0); -鍵盤行 CLEAR:IN STD_LOGIC; -復位信號 LIGHT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) -輸出 燈 );END dds;ARCHITECTURE a OF dds IS SIGNA

8、L TEMP_LED_ROW: STD_LOGIC_VECTOR(7 DOWNTO 0); -DIAN ZHEN SIGNAL TEMP_LED_COLG: STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL TEMP_LED_COLR: STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL TEMP_SEG_SELECT: STD_LOGIC_VECTOR(5 DOWNTO 0):=; -SHU MA GUAN SIGNAL TEMP_SEG1: STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL TEMP_SEG2: STD_

9、LOGIC_VECTOR(6 DOWNTO 0); SIGNAL TEMP_SEG3: STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL TEMP_SEG4: STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL RANDOM: STD_LOGIC_VECTOR(3 DOWNTO 0); -SUIJISHU SIGNAL TEMP_RANDOM: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL DIV_1K: INTEGER RANGE 0 TO 12499; -FEN PIN 0.001S SIGNAL DIV_1S: I

10、NTEGER RANGE 0 TO 499; -FEN PIN 1S SIGNAL DIV_2S: INTEGER RANGE 0 TO 999; -FEN PIN 2S SIGNAL DIV_R: INTEGER RANGE 0 TO 998; -FEN PIN SUI JI SIGNAL TEMP_10: INTEGER RANGE 0 TO 9; -DAO JI SHI SHI WEI SIGNAL CLK_1K: STD_LOGIC; -SHI ZHONG SIGNAL CLK_1S: STD_LOGIC; SIGNAL CLK_2S: STD_LOGIC; SIGNAL CLK_R:

11、 STD_LOGIC; -SIGNAL CLKTEMP: STD_LOGIC; SIGNAL TEMP_KEY_COL:STD_LOGIC_VECTOR(3 DOWNTO 0); -JIAN PAN SIGNAL TEMP_KEY_ROW:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL CODE: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL TEMP_LIGHT:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL POKE:INTEGER RANGE 0 TO 1; -DA DI SHU SIGNAL POKE_FL

12、AG:INTEGER RANGE 0 TO 1:=0; -DA BIAO ZHI WEI SIGNAL SCORE :INTEGER RANGE 0 TO 10; -DE FEN SIGNAL SCORE_FLAG: INTEGER RANGE 0 TO 1; -DE FEN BIAO ZHI WEI SIGNAL COUNTDOWN_60:INTEGER RANGE 0 TO 60; -60S DAO JI SHI SIGNAL WIN :INTEGER RANGE 0 TO 1; -YING SIGNAL LOSE :INTEGER RANGE 0 TO 1; -SHU SIGNAL CL

13、EAR_TEMP: STD_LOGIC; -FU WEI BEGIN P1:PROCESS (CLK) -DIV 0.001 S BEGIN IF CLKEVENT AND CLK = 1 THEN IF DIV_1K =12499 THEN -計數12500次 DIV_1K = 0; CLK_1K = NOT CLK_1K;-clk_1k翻轉兩次 ELSE DIV_1K = DIV_1K + 1; END IF;END IF; END PROCESS P1; P2:PROCESS (CLK_1K) -DIV 1 s BEGIN IF CLK_1KEVENT AND CLK_1K = 1 TH

14、EN IF DIV_1S =499 THEN DIV_1S = 0; CLK_1S = NOT CLK_1S; ELSE DIV_1S = DIV_1S + 1; END IF;END IF; END PROCESS P2; P3:PROCESS (CLK_1K) -DIV 2 S BEGIN IF CLK_1KEVENT AND CLK_1K = 1 THEN IF DIV_2S =999 THEN DIV_2S = 0; CLK_2S = NOT CLK_2S; ELSE DIV_2S = DIV_2S + 1; END IF; -比較鍵盤輸入值和地鼠位置是否相同,判斷有沒有打到 IF (

15、 (CODE = 0000 AND TEMP_RANDOM = 1100) OR (CODE = 0001 AND TEMP_RANDOM = 0000) OR (CODE = 0010 AND TEMP_RANDOM = 0100) OR (CODE = 0011 AND TEMP_RANDOM = 1000) OR (CODE = 0100 AND TEMP_RANDOM = 1101) OR (CODE = 0101 AND TEMP_RANDOM = 0001) OR (CODE = 0110 AND TEMP_RANDOM = 0101) OR (CODE = 0111 AND TE

16、MP_RANDOM = 1001) OR (CODE = 1000 AND TEMP_RANDOM = 1110) OR (CODE = 1001 AND TEMP_RANDOM = 0010) OR (CODE = 1010 AND TEMP_RANDOM = 0110) OR (CODE = 1011 AND TEMP_RANDOM = 1010) OR (CODE = 1100 AND TEMP_RANDOM = 1111) OR (CODE = 1101 AND TEMP_RANDOM = 0011) OR (CODE = 1110 AND TEMP_RANDOM = 0111) OR

17、 (CODE = 1111 AND TEMP_RANDOM = 1011) ) THEN POKE=1; ELSE POKE=0;SCORE_FLAG=0; -標志位,防止按一次計分多次 END IF; IF (POKE = 1 AND SCORE_FLAG=0 AND POKE_FLAG=1) THEN若打到則計一分 CLK_2S = NOT CLK_2S; -DIV_2S = 0; SCORE_FLAG=1; -計分后標志位變1 SCORE =SCORE +1; END IF; IF CLEAR_TEMP=1 THEN -若復位信號為高電平,恢復初始值 SCORE = 0; END IF

18、; END IF; END PROCESS P3; P4:PROCESS (CLK) -random time -通過與2s時鐘不同頻率的時鐘產生隨機數 BEGIN IF CLKEVENT AND CLK = 1 THEN IF DIV_R = 233 THEN DIV_R = 0; CLK_R = NOT CLK_R; ELSE DIV_R RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM RANDOM = 0000; END CAS

19、E; END IF; END PROCESS P5; P6:PROCESS (CLK_2S) -把中間變量賦值給地鼠 BEGIN IF(CLK_2SEVENT AND CLK_2S = 1) THEN TEMP_RANDOM = RANDOM; END IF; END PROCESS P6; P7:PROCESS(TEMP_RANDOM,CLK_1K) - SUI JI CHU XIAN DI SHU BEGIN -按照隨機數隨機生成地鼠 IF CLEAR_TEMP =1 THEN -若復位信號為高電平就不亮燈 TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP

20、_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR=

21、 ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEM

22、P_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR IF TEMP_LED_ROW = THEN TEMP_LED_COLR= ;ELSE TEMP_LED_COLR

23、= ;END IF; END CASE; END IF; ELSIF LOSE = 1 THEN -若失敗則顯示 IF TEMP_LED_ROW= THEN TEMP_LED_COLR= ;END IF; IF TEMP_LED_ROW= THEN TEMP_LED_COLR= ;END IF; IF TEMP_LED_ROW= THEN TEMP_LED_COLR= ;END IF; IF TEMP_LED_ROW= THEN TEMP_LED_COLR= ;END IF; IF TEMP_LED_ROW= THEN TEMP_LED_COLR= ;END IF; IF TEMP_LED_R

24、OW= THEN TEMP_LED_COLR= ;END IF; IF TEMP_LED_ROW= THEN TEMP_LED_COLR= ;END IF; IF TEMP_LED_ROW= THEN TEMP_LED_COLR= ;END IF; ELSIF WIN = 1 THEN -若成功則顯示笑臉 IF TEMP_LED_ROW= THEN TEMP_LED_COLR= ;END IF; IF TEMP_LED_ROW= THEN TEMP_LED_COLR= ;END IF; IF TEMP_LED_ROW= THEN TEMP_LED_COLR= ;END IF; IF TEMP_

25、LED_ROW= THEN TEMP_LED_COLR TEMP_LED_ROW = ;TEMP_LED_COLG TEMP_LED_ROW = ;TEMP_LED_COLG TEMP_LED_ROW = ;TEMP_LED_COLG TEMP_LED_ROW = ;TEMP_LED_COLG TEMP_LED_ROW = ;TEMP_LED_COLG TEMP_LED_ROW = ;TEMP_LED_COLG TEMP_LED_ROW TEMP_SEG_SELECT = ; SEG_SHOW TEMP_SEG_SELECT = ; SEG_SHOW TEMP_SEG_SELECT = ; S

26、EG_SHOW TEMP_SEG_SELECT = ; SEG_SHOW TEMP_SEG_SELECT = ;SEG_SHOW = TEMP_SEG1; END CASE; END IF; END PROCESS P9; P10:PROCESS(CLK_1S) -COUNTDOWN_1 BEGIN -60秒倒計時的個位 IF (CLK_1SEVENT AND CLK_1S = 1)THEN IF CLEAR_TEMP = 1 THEN TEMP_SEG1 =;-復位有效顯示0 ELSIF WIN = 1 THEN TEMP_SEG1 =;-輸或贏后顯示0 ELSIF LOSE =1 THEN

27、 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 TEMP_SEG1 = ;-0 END CASE; END IF; END IF;END PROCESS P10;P11:PROCESS(CLK_1S) -COUNTDOWN_10 BEGIN -60秒倒計時的十位 IF CLEAR_TEMP= 1 THEN -復位有效顯示0 TEMP_SEG2 =; TEMP_10= 0; COUNTDOWN_60 = 0; ELSIF W

28、IN = 1 THEN TEMP_SEG2 =; -輸或贏后顯示0 ELSIF LOSE = 1 THEN TEMP_SEG2 =; ELSIF (CLK_1SEVENT AND CLK_1S = 1)THEN -計數器,相當于1Hz時鐘進行10分頻 COUNTDOWN_60 = COUNTDOWN_60+1; IF TEMP_10 =9 THEN TEMP_10=0; ELSE TEMP_10 TEMP_SEG2 TEMP_SEG2 TEMP_SEG2 TEMP_SEG2 TEMP_SEG2 TEMP_SEG2 TEMP_KEY_COL TEMP_KEY_COL TEMP_KEY_COL T

29、EMP_KEY_COL TEMP_KEY_COL -在列確定情況下,根據行值對CODE進行賦值 CASE TEMP_KEY_ROW IS WHEN 0111 = CODE = 0000;POKE_FLAG CODE = 0001;POKE_FLAG CODE = 0010;POKE_FLAG CODE = 0011;POKE_FLAG POKE_FLAG CASE TEMP_KEY_ROW IS WHEN 0111 = CODE = 0100;POKE_FLAG CODE = 0101;POKE_FLAG CODE = 0110;POKE_FLAG CODE = 0111;POKE_FLAG

30、POKE_FLAG CASE TEMP_KEY_ROW IS WHEN 0111 = CODE = 1000;POKE_FLAG CODE = 1001;POKE_FLAG CODE = 1010;POKE_FLAG CODE = 1011;POKE_FLAG POKE_FLAG CASE TEMP_KEY_ROW IS WHEN 0111 = CODE = 1100;POKE_FLAG CODE = 1101;POKE_FLAG CODE = 1110;POKE_FLAG CODE = 1111;POKE_FLAG POKE_FLAGNULL; END CASE; IF CLEAR_TEMP

31、 = 1 THEN POKE_FLAG TEMP_LIGHT TEMP_LIGHT TEMP_LIGHT TEMP_LIGHT TEMP_LIGHT=; END CASE; END IF;END PROCESS P14;P15:PROCESS (CLK_1K) -FEN SHU BEGIN IF (CLK_1KEVENT AND CLK_1K = 1)THEN在數碼管顯示分數 IF WIN = 1 THEN TEMP_SEG3 =;TEMP_SEG4 = ; ELSIF LOSE = 1 THEN TEMP_SEG3 =;TEMP_SEG4 TEMP_SEG3=;TEMP_SEG4 TEMP_

32、SEG3 =;TEMP_SEG4 TEMP_SEG3 = ;TEMP_SEG4 TEMP_SEG3 = ;TEMP_SEG4 TEMP_SEG3 = ;TEMP_SEG4 TEMP_SEG3 = ;TEMP_SEG4 TEMP_SEG3 = ;TEMP_SEG4 TEMP_SEG3 = ;TEMP_SEG4 TEMP_SEG3 = ;TEMP_SEG4 TEMP_SEG3 = ;TEMP_SEG4 TEMP_SEG3 = ;TEMP_SEG4 TEMP_SEG3 = ;TEMP_SEG4;-0 END CASE; END IF; END IF; END PROCESS P15;P16: PRO

33、CESS(CLK_1K,CLEAR) BEGIN IF CLEAR_TEMP = 1 THEN WIN = 0;LOSE 59 AND SCORE 10) THEN -若60s到時且分數小于10則輸 LOSE = 1; END IF; IF (COUNTDOWN_60 9 ) THEN 若60秒未到且分數達到10則贏 WIN = 1; END IF; END IF; END PROCESS P16; LED_ROW=TEMP_LED_ROW; LED_COL_G=TEMP_LED_COLG;LED_COL_R=TEMP_LED_COLR;SEG_SELECT=TEMP_SEG_SELECT;TEMP_KEY_ROW=KEY_ROW;KEY_COL=TEMP_KEY_COL;-LIGHT=TEMP_LIGHT;CLEAR_TEMP=CLEAR;END a;五功能說明及資源利用情況1.畫面:通電后,在點陣上會一直顯示5*5的綠色邊框,當判定輸或贏后,邊框中間會相應地顯示或笑臉,開始游戲后,在邊框中4*4范圍內會每隔兩秒隨機出現一個亮點代表地鼠,兩秒到時或地鼠被擊中,地鼠會消失。2.計時:游戲中由兩個計數器分別完成60s和2s的計時功能,其中60s計時結果會顯示在數碼管上。3.計分:當地鼠出現在點陣上,在2秒內按下相應的按鍵,則計1分,位置

溫馨提示

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

評論

0/150

提交評論