freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)設(shè)計-基于stc12c5a60s2單片機(jī)的俄羅斯方塊游戲設(shè)計(參考版)

2024-12-07 19:16本頁面
  

【正文】 計數(shù)脈沖值與頻率的關(guān)系公。 (3) 以 6MHz 晶振為例:要產(chǎn)生頻率為 523Hz,其周期 T=1/523=1912us,半周期為1912/2=956us,因此,只要令 定時器 計時 956us/1us=956。 數(shù)據(jù)處理過程中的相關(guān)計算如下: (1) 音頻脈沖 的產(chǎn)生方法: 算出某一音 頻的周期( 1/頻率),然后將此周期除以 2,即為半周期 的時間,然后利用 PCA 定 時器計時此半周 期時間,每當(dāng)計時到后就將輸出脈沖的 I/O 取 反,然后重復(fù)計時此半周期 時間再對 I/O 取反 ,如此就可在 I/O腳上得到此頻率的脈沖。 音樂 播放的 實現(xiàn)方法 把樂譜中的音符對應(yīng)的頻率轉(zhuǎn)換成 PCA 定時器常數(shù),相應(yīng)的節(jié)拍變?yōu)?T1 常數(shù)。 此外 STC12C5A60S2 單片機(jī)提供了用 PCA模塊實現(xiàn) 16 位定時器的功能。 CPU 執(zhí)行時間被劃分為若干時間片, RTX51 TINY 為每個任務(wù)分配一個時間片,在一個時間片內(nèi)允許執(zhí)行某個任務(wù),然后 RTX51 TINY 切換到另一個就緒的任務(wù)并允許它在其規(guī)定的時間片內(nèi)執(zhí)行。這些樂譜數(shù)據(jù)的生成是由樂譜生成器來產(chǎn)生的。即 按照下列方法進(jìn)行編碼:一個字節(jié)共八位,高兩位表示節(jié)拍,三四位表示音高,低四位表示音符。為了使單片機(jī)能輸出美妙的音樂, 曲譜不僅 需要包含音 名 的信息,而且還要包含有節(jié)拍的信息。我們知道,樂譜中每一個音符都與某一個特定的頻率相對應(yīng),產(chǎn)生某種頻率的輸出就可以得到相應(yīng)音符的聲音。 如圖 319所示為雙人模式下的 相關(guān)程序流程。其基本思路是利用 RTX51 Tiny 多任務(wù)實時操作系統(tǒng)來完成 多個事件的準(zhǔn)并行實行 運行。函數(shù)os_wait 和函數(shù) os_switch_task 的不同之處在于 os_wait 函數(shù) 可以讓任務(wù)等待某一事件的發(fā)生,而函數(shù) os_switch_task 函數(shù) 直接切換到另一個 準(zhǔn)備 就緒的任務(wù)。特別地,必須在 每個任務(wù)的某個地方調(diào)用 os_wait函數(shù) 或 os_switch_task 函數(shù)。缺省值是 5個時鐘節(jié)拍。 IMESHARING 指定任務(wù)在進(jìn)行 Roundrobin 切換前執(zhí)行的 RTX51 Tiny 時鐘節(jié)拍數(shù)。 ② 具體配置方法 為解決上述問題,本設(shè)計 禁止循環(huán)任務(wù)切換 ,采用協(xié)助任務(wù)切換的方式進(jìn)行多任務(wù)間的切換。 C51 編譯器允許使用多個數(shù)據(jù)指針。 其次是函數(shù)的重入性問題。 ① 在 系統(tǒng) 默認(rèn) 配置 下應(yīng)用 程序設(shè)計 中出現(xiàn)的 問題 首先, 在雙人模式下,應(yīng)用程序中的兩個進(jìn)程都需要對 LCD12864 顯示屏進(jìn)行讀賀州學(xué)院本科生畢業(yè)論文(設(shè)計) 33 寫操作。通過改變 中的設(shè)置來定制 RTX51 Tiny 的 系統(tǒng) 配置。 默認(rèn) 包含在 RTX51 Tiny 庫中。 (2) RTX51 Tiny 系統(tǒng) 內(nèi)核 配置 建立了嵌入式應(yīng)用后, RTX51 Tiny 必須要配置。 ② 運行菜單命令 Project→ Options for Target‘ Target 1’,打開 Target 對話 框,并在對話框中選擇 Target 選項卡。一般采用德國 Keil Software公司提供的集成開發(fā)環(huán)境 μ Vision 3 IDE。 os_wait 函數(shù) 與 os_switch_task 函數(shù) 的所不同是:os_wait 函數(shù) 是讓任務(wù)等待一個事件,而 os_switch_task 函數(shù) 是立即切換到另一個就緒的任務(wù)。在此期間,任意數(shù)量的其他任務(wù)可以運行。 如果禁止了循環(huán)任務(wù)處理 (如何禁止此方式在 RTX51 Tiny 系統(tǒng) 配置 一節(jié) 中 再作介紹) ,就必須讓任務(wù)以協(xié)作的方式運作, 用戶 可以用 os_wait 函數(shù) 或 os_switch_task函數(shù) 讓 RTX51 Tiny切換到另一個任務(wù)而不是等待任務(wù)的時間片用完。 任務(wù)切換的流程如圖 318 所示 [8]。 RTX51 TINY 是基于時間片調(diào)度算法的操作系統(tǒng),它支持的是非搶占式的任務(wù)切換。與 TIMEOUT 不同的是,任務(wù)的節(jié)拍計數(shù)器不復(fù)位。 ③ INTERVAL:由 os_wait 函數(shù)開始的時間間隔,其間隔時間可由定時節(jié)拍數(shù)確定。 ② TIMEOUT:由 os_wait 函數(shù)開始的時間延時,其持續(xù)時間可由定時節(jié)拍數(shù)確定。 ① SIGNAL:用于任務(wù)之間通信的位,可以用系統(tǒng)函數(shù)置位或清除。 圖 317 任務(wù)狀態(tài)轉(zhuǎn)換圖 Fig 317 Task state transition diagram (4) RTX51 Tiny 的 同步機(jī)制 為了能保證任務(wù)在執(zhí)行次序上的協(xié)調(diào),必須采用同步機(jī)制。該狀態(tài)與“ READY”狀態(tài)相似,但由于是內(nèi)部操作過程使一個循環(huán)任務(wù)被切換而被冠以標(biāo)記。 READY :任務(wù)正在等待運行,在當(dāng)前運行的任務(wù)時間片完成之后, RTX51 Tiny 運行下一個處于“ READY”狀態(tài)的任務(wù)。 (2) 系統(tǒng)調(diào)用函數(shù) 簡介 RTX51 Tiny 內(nèi)核 完全集成在 KEIL C51 編譯器中,以系統(tǒng)函數(shù)調(diào)用的方式運行,因此可以很容易地使用 KEIL C51 語言編寫和編譯一個多任務(wù)程序,并嵌入到實際應(yīng)用系統(tǒng)中,內(nèi)核提供 多組 函數(shù)供應(yīng)用程序引用。同時, RTX51 Tiny 任務(wù)必須是用 _task_聲明的 C 函數(shù),返回值和參數(shù)都必須是 void 類型的, RTX51 Tiny黃忠南 基于單片機(jī)的俄羅斯方塊游戲設(shè)計 30 程序不需要用戶自已定義 main 函數(shù),取而代之 的是 , RTX51 Tiny 從任務(wù) 0開始執(zhí)行。所有的運行 時庫 常量都在這個頭文件中定義。讀者若想更全面了解 RTX51 Tiny 多任務(wù)實時操作 系統(tǒng),請閱讀 RTX51 Tiny 的幫助文件或其它相關(guān)文件。無論如何, RTX51 Tiny 仍然是在 8位單片機(jī)中應(yīng)用操作系統(tǒng)的首選。當(dāng)程序比較復(fù)雜時,它的 優(yōu)點就體現(xiàn)得更明顯。不支持搶先式的任務(wù)切換,不包括消息歷程,沒有存儲器池分配程序。自身僅占用 900 字節(jié)左右的程序存儲空間。程序員可以從一存儲池中分配和釋放內(nèi)存,也可以強(qiáng)迫一個任務(wù)等待中斷、超時或者是從另一個任務(wù)或中斷發(fā)出的信號或信息。 RTX51 Full 版本是完整版,它使用四個任務(wù)優(yōu)先級來完成,同時存在時間片輪轉(zhuǎn)調(diào)度和搶先的任務(wù)切換。有兩個不同的RTX51 版本可以利用: RTX51 Full 和 RTX51 Tiny。 RTX51它可以運行于所有的 8051 派生機(jī)型,是一個很好使用的強(qiáng)大的準(zhǔn)并行實時操作系統(tǒng)。 圖 316 積 分系統(tǒng)程序流程圖 Fig 316 Score system program flowchart N Y Y N Y N Y N Y N 消去一行 當(dāng)前積分加 1 是否大于最高紀(jì)錄 存儲當(dāng)前積分 退出 單人模式下 雙人模式下 增加 n 分,消去 n 行 消去 n 行? n0 n=3? 增加 1 道具 道具是否小于 2個? 增加 1 道具 進(jìn)度是否到頂? 結(jié)束所有進(jìn)程 返回游戲 賀州學(xué)院本科生畢業(yè)論文(設(shè)計) 29 雙人俄羅斯方塊游戲設(shè)計 RTX51 Tiny 簡介 許多微處理器應(yīng)用程序要求同時執(zhí)行 多 個任務(wù)。最多能累積兩個道具。雙方誰先到達(dá)進(jìn)度條的頂端就算勝利。 Y N Y N Y N 某一方塊已落定 進(jìn)入滿行檢測程序,頁標(biāo)志 n=7 從第 n 頁開始檢測 檢測當(dāng)前頁的下半頁 是否滿行 消除此行,其上方塊依次下落一行 檢測當(dāng)前頁的上半頁 是否滿行 消除此行,其上方塊依次下落一行 n 減 1 是否是第 0 頁 退出 黃忠南 基于單片機(jī)的俄羅斯方塊游戲設(shè)計 28 雙人模式下,雙方的積分制度是一樣的,以進(jìn)度條的方式展示在積 分與道具區(qū)。本游戲系統(tǒng)分單人模式和雙人模式兩種積分計算方式。 具體程序?qū)崿F(xiàn)流程如圖 315所示。系統(tǒng)滿行檢測和消行功能是通過 “ 滿行檢測及消行”函數(shù) 實現(xiàn)的 , 即在每個圖塊落定和 下一個圖塊未出來之前,按頁掃描游戲 map 區(qū),每半頁算一行。 具 體程序?qū)崿F(xiàn)流程如圖 314所示。 具體程序流程如圖 313所示。 所以,在旋轉(zhuǎn)處理程序中,當(dāng)要旋轉(zhuǎn)的當(dāng)前圖塊為 I型及其旋轉(zhuǎn)型時,就要改變當(dāng)前列、行 這兩個全局 變量的值。 之所以把 I 型的旋轉(zhuǎn)變換單獨拿出來討論,是因為 I 型只有基本型和旋轉(zhuǎn)型共兩種圖塊。 圖 312 I型的旋轉(zhuǎn)方法 Fig 312 The rotation method of I shape 當(dāng)落下的圖塊是圖 ① 所示時,其旋轉(zhuǎn)周期為 ① —— ② —— ③ —— ④ —— ① 。 (3) I 型的旋轉(zhuǎn)策略 為了在視覺上實現(xiàn) I 型的順時針旋轉(zhuǎn),本設(shè)計采用位置錯落的方式 來實現(xiàn) 。 (2) 旋轉(zhuǎn)合法性判斷 方塊做順時針 旋轉(zhuǎn),每次旋轉(zhuǎn) 90 度。 綜上所述,七種基本型方塊,因旋轉(zhuǎn)產(chǎn)生 了不同的旋轉(zhuǎn)型,這些旋轉(zhuǎn)型加上他們的基本型,整個游戲中,共有 19種不同的方塊形狀。 基本型中的“ T 型”有三種旋轉(zhuǎn)型,將他按順時針旋轉(zhuǎn)一個 90 度就產(chǎn)生一種旋轉(zhuǎn)返回 1 返回 1 返回 0 Y Y N N ?? 左移按鍵被按下 right_left_judge 函數(shù) ?? 列變量 f_x減 4行不變 右移按鍵被按下 列變量 f_x加 4行不變 right_left_judge 函數(shù) 將圖塊左移一格 將圖塊右移一格 黃忠南 基于單片機(jī)的俄羅斯方塊游戲設(shè)計 24 型,它可以旋轉(zhuǎn)三次,得到三種不同的旋轉(zhuǎn)型,因此,它的三種旋轉(zhuǎn)型加上其基本型,“ T型” 方塊共有四種形狀。 基本型中的“ L 型”和“反 L 型”有三種旋轉(zhuǎn)型,將 它按順時針每旋 轉(zhuǎn) 一個 90度就產(chǎn) 生 一種旋轉(zhuǎn)型,可以旋轉(zhuǎn)三次,得到三種不同的旋轉(zhuǎn)型,因此,它的三種旋轉(zhuǎn)型加上其基本型,“ L 型”和“反 L 型”方塊分別有四種形狀。 基本型中的“ I 型”,只有一種旋轉(zhuǎn)型,即由豎直旋轉(zhuǎn) 90 度后成為水平。本文前面已經(jīng)論述了此次設(shè)計采用枚舉的方法,對 19 種俄羅斯方塊 造型進(jìn)行 構(gòu)造。其程序流程如圖 311 所示。 (2) 平移合法性判斷 平移的合法性判斷經(jīng)較簡單,只需判斷它旁邊相鄰位 置是否被填充 即可。 (1) 俄羅斯方塊平移特性 在本設(shè)計中規(guī)定 當(dāng) 按下一次左移或右移按鍵 時, map 區(qū)中的 當(dāng)前 圖塊 就左移或右移 一個正方形的寬度。 圖 310 隨機(jī)數(shù)程序流程圖 Fig 310 Ramdom process flow program diagram 俄羅斯 方塊平移的實現(xiàn) 方法 方塊產(chǎn)生后,需要用全局變量來保存方塊在游戲 map 區(qū)中的行坐標(biāo)和列坐標(biāo)。從而實現(xiàn)真正的隨機(jī)。 這可能會導(dǎo)致 每次重新運行游戲 時 其隨機(jī) 數(shù) 結(jié)果都是一樣的。首先給 srand(unsigned int seed)提供一個種子, 該種子為unsigned int 類型,其取值范圍從 0到 65536, srand(unsigned int seed)根據(jù)這個種子 會由 上 述 特定的公式生成一個隨機(jī)數(shù)序列; 然后調(diào)用 rand(),它會依次從這個序列中返回一個數(shù),其值在 0 到 32767 之間。因為種了的變化足夠隨機(jī),所以種子的值可以作為 8位 或 16 位隨機(jī)數(shù)。因為奇數(shù)(舊的種子)乘奇數(shù)(乘數(shù) A)是奇數(shù),再加奇數(shù)(常數(shù) C)將會是一個偶數(shù)學(xué)偶數(shù)(舊的種子)乘奇數(shù)(乘數(shù) A),加奇數(shù)(常數(shù) C)將會是一個奇 數(shù)?!俺?shù) C”,不像乘數(shù) A那樣重 要,但是一定是個奇數(shù)。計算公式為: 種子 = A * 種子 + C ( 31) 此公式在幾何圖中表示 為 一條直線,而且新種子由舊種子反復(fù)相加得來,所以叫線性疊加。只需三個步驟即:第一,為了取得新的種子,舊的種子 與 一個常數(shù) A 相乘;第二,所得的結(jié)果 和第二個常數(shù) C相加;第三,新的種子 就 是 第二步 結(jié)果的低 32位 。但這卻是一個有用的特性,我們可以每次從不同的點取數(shù),即改變種子,從而 可以 實現(xiàn)真正的隨機(jī)。 這個開始的點(數(shù)字)叫做種子。 本設(shè)計采用眾所周知的線性疊加法,雖然沒有完美的方法產(chǎn)生隨機(jī)數(shù),不過線性疊加法是一個合適的方法,它徹底解決了 8 位機(jī)隨機(jī)數(shù)的問題。 圖 39 L型 Fig 39 L Shape 隨機(jī)產(chǎn)生俄羅斯方塊的方法 (1) 產(chǎn)生隨機(jī)數(shù)的理論依據(jù) 為了實現(xiàn)隨機(jī)落下各類方塊圖形,游戲過程序中必須抽取隨機(jī)數(shù)來確定方塊的類I 型 L 型 反 L 型 T 型 Z 型 反 Z型 口型 2 3 4 1 賀州學(xué)院本科生畢業(yè)論文(設(shè)計) 21 型。由圖可知,整個界面的坐標(biāo)原點在左上角,分別向右、向下作為橫軸的正方向和縱軸的正方向。比如 L 型,其數(shù)據(jù)結(jié)構(gòu)為{ 0,0,0,4,0,8,4,8}。如圖 38所示。利用小方塊不同的擺放位置,可產(chǎn)生 19 種旋轉(zhuǎn)型圖塊。 所謂枚舉算法,就是直接枚舉出游戲中 各圖 塊的基本形狀和它們的旋轉(zhuǎn)形狀,然后控制每一種不同形狀的方塊在游戲戲中的產(chǎn)生、移動、旋轉(zhuǎn)、落下、填滿和清除等
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1