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

正文內(nèi)容

畢業(yè)設(shè)計(jì)-基于stc12c5a60s2單片機(jī)的俄羅斯方塊游戲設(shè)計(jì)-資料下載頁(yè)

2024-12-03 19:16本頁(yè)面

【導(dǎo)讀】俄羅斯方塊是一款風(fēng)靡全球的益智游戲。它規(guī)則簡(jiǎn)單,容易上手,且游戲過(guò)程變?;療o(wú)窮,使用戶在游戲中得到樂(lè)趣。該設(shè)計(jì)選用的處理器型號(hào)為STC12C5A60S2的單片機(jī),實(shí)時(shí)操作。系統(tǒng)采用適用于8051處理器的RTX51Tiny多任務(wù)實(shí)時(shí)操作系統(tǒng)。重點(diǎn)從軟件工程角。設(shè)計(jì)法方,以及背景音樂(lè)的處理等技術(shù)。同時(shí),該設(shè)計(jì)的獨(dú)創(chuàng)性是在8051系列單片。機(jī)中使用操作系統(tǒng)實(shí)現(xiàn)了雙人游戲和音效的添加。

  

【正文】 仍然是在 8位單片機(jī)中應(yīng)用操作系統(tǒng)的首選。 RTX51 Tiny 的內(nèi)核分析 該小節(jié)只介紹本設(shè)計(jì)中用到 RTX51 Tiny 系統(tǒng)的相關(guān)知識(shí)與配置方法。讀者若想更全面了解 RTX51 Tiny 多任務(wù)實(shí)時(shí)操作 系統(tǒng),請(qǐng)閱讀 RTX51 Tiny 的幫助文件或其它相關(guān)文件。 (1) RTX51 Tiny 程序的編寫(xiě)方法 若要 使用 RTX51 Tiny 的內(nèi)核 , 只需包含文 件 即可 。所有的運(yùn)行 時(shí)庫(kù) 常量都在這個(gè)頭文件中定義??梢圆捎靡韵路绞桨? # include 當(dāng)使用 Rtx51 Tiny時(shí),要為每個(gè)任務(wù)建立獨(dú)立的任務(wù)函數(shù)。同時(shí), RTX51 Tiny 任務(wù)必須是用 _task_聲明的 C 函數(shù),返回值和參數(shù)都必須是 void 類(lèi)型的, RTX51 Tiny黃忠南 基于單片機(jī)的俄羅斯方塊游戲設(shè)計(jì) 30 程序不需要用戶自已定義 main 函數(shù),取而代之 的是 , RTX51 Tiny 從任務(wù) 0開(kāi)始執(zhí)行。在典型的應(yīng)用中,任務(wù) 0 簡(jiǎn)單的建立所有其他的任務(wù)。 (2) 系統(tǒng)調(diào)用函數(shù) 簡(jiǎn)介 RTX51 Tiny 內(nèi)核 完全集成在 KEIL C51 編譯器中,以系統(tǒng)函數(shù)調(diào)用的方式運(yùn)行,因此可以很容易地使用 KEIL C51 語(yǔ)言編寫(xiě)和編譯一個(gè)多任務(wù)程序,并嵌入到實(shí)際應(yīng)用系統(tǒng)中,內(nèi)核提供 多組 函數(shù)供應(yīng)用程序引用。 (3) RTX51 Tiny 的 任務(wù)狀態(tài) RTX51 Tiny 的用戶任務(wù)具有以下幾個(gè)狀態(tài): RUNNING: 任務(wù)處于運(yùn)行中,同一時(shí)間只有一個(gè)搶占 任務(wù)可以處于“ RUNNING”狀態(tài)。 READY :任務(wù)正在等待運(yùn)行,在當(dāng)前運(yùn)行的任務(wù)時(shí)間片完成之后, RTX51 Tiny 運(yùn)行下一個(gè)處于“ READY”狀態(tài)的任務(wù)。 WAITING: 任務(wù)由于時(shí)間片用完而處于“ TIME OUT”狀態(tài),并等待再次運(yùn)行。該狀態(tài)與“ READY”狀態(tài)相似,但由于是內(nèi)部操作過(guò)程使一個(gè)循環(huán)任務(wù)被切換而被冠以標(biāo)記。如圖 317 所示為任務(wù)狀態(tài)轉(zhuǎn)換圖 [8]。 圖 317 任務(wù)狀態(tài)轉(zhuǎn)換圖 Fig 317 Task state transition diagram (4) RTX51 Tiny 的 同步機(jī)制 為了能保證任務(wù)在執(zhí)行次序上的協(xié)調(diào),必須采用同步機(jī)制。內(nèi)核用以下事件進(jìn)行任務(wù)間的通信和同步。 ① SIGNAL:用于任務(wù)之間通信的位,可以用系統(tǒng)函數(shù)置位或清除。如果一個(gè)任務(wù)調(diào)用os_wait 函數(shù)等待 SIGNAL 而 SIGNAL 未置位,則該任務(wù)被掛起直到 SIGNAL 置位,才返回到 READY 狀態(tài),并可被再次執(zhí)行。 ② TIMEOUT:由 os_wait 函數(shù)開(kāi)始的時(shí)間延時(shí),其持續(xù)時(shí)間可由定時(shí)節(jié)拍數(shù)確定。帶有 TIMEOUT 值調(diào)用 os_wait 函數(shù)的任務(wù)將被掛起,直到延時(shí)結(jié)束,才返回到 READY 狀態(tài),并可被再次執(zhí)行。 ③ INTERVAL:由 os_wait 函數(shù)開(kāi)始的時(shí)間間隔,其間隔時(shí)間可由定時(shí)節(jié)拍數(shù)確定。帶信號(hào)或超時(shí)到來(lái) 等待信號(hào)或超時(shí) 時(shí)間片結(jié)束 時(shí)間片到來(lái) READY/TIMEOUT RUNNING WAITING 賀州學(xué)院本科生畢業(yè)論文(設(shè)計(jì)) 31 有 INTERVAL 值調(diào)用 os_wait 函數(shù)的任務(wù)將被掛起,直到間隔時(shí)間結(jié)束,然后返回到READY 狀態(tài),并可被再次執(zhí)行。與 TIMEOUT 不同的是,任務(wù)的節(jié)拍計(jì)數(shù)器不復(fù)位。 (5) RTX51 TINY 的 任務(wù)切換 方式 任務(wù)切換是 RTX51 TINY 提供的基本服務(wù)。 RTX51 TINY 是基于時(shí)間片調(diào)度算法的操作系統(tǒng),它支持的是非搶占式的任務(wù)切換。所以在一個(gè)任務(wù)被執(zhí)行時(shí)不能對(duì)其進(jìn)行中斷,除非該任務(wù)主動(dòng)放棄 CPU 的資源,中斷才可以打斷當(dāng)前的任務(wù),中斷完成后把CPU 的控制權(quán)再交還該被中斷的任務(wù)。 任務(wù)切換的流程如圖 318 所示 [8]。 圖 318 任務(wù)切換流程圖 Fig 318 Task switching flowchart TASK SWITCHING SWITCHING NOW 寄存器組切換 當(dāng)前任務(wù)時(shí)間片到標(biāo)志置位 查找下一個(gè)“ READY”狀態(tài)的任務(wù) N 對(duì)任務(wù) N堆棧管理 重置任務(wù) N節(jié)拍數(shù) 任務(wù) N 因時(shí)間片到轉(zhuǎn)入就緒狀態(tài) 任務(wù) N 因等信號(hào)且信號(hào)到,轉(zhuǎn)入就緒狀態(tài) 任務(wù) N 因等超時(shí)且超時(shí)到,轉(zhuǎn)入就緒狀態(tài) 任務(wù) N 因其他原因轉(zhuǎn)入就緒狀態(tài) 清除時(shí)間片到標(biāo)志 清除等待信號(hào)及信號(hào)到標(biāo)志 清除等超時(shí)及超時(shí)標(biāo)志 恢復(fù)因 T0中斷保護(hù)的現(xiàn)場(chǎng) 返回任務(wù) N 執(zhí)行,任務(wù)N 成 為 當(dāng) 前 任 務(wù)( SWITCHING 出口) 返回任務(wù) N 執(zhí)行,任務(wù) N 成為當(dāng)前任務(wù) ( SWITCHING NOW 出口) 黃忠南 基于單片機(jī)的俄羅斯方塊游戲設(shè)計(jì) 32 任務(wù)切換方式 分為 兩種 : 循環(huán)任務(wù)切換 方式 和 協(xié)作任務(wù)切換方式 。 如果禁止了循環(huán)任務(wù)處理 (如何禁止此方式在 RTX51 Tiny 系統(tǒng) 配置 一節(jié) 中 再作介紹) ,就必須讓任務(wù)以協(xié)作的方式運(yùn)作, 用戶 可以用 os_wait 函數(shù) 或 os_switch_task函數(shù) 讓 RTX51 Tiny切換到另一個(gè)任務(wù)而不是等待任務(wù)的時(shí)間片用完。 os_wait 函數(shù)掛起當(dāng)前的任務(wù)(使之變?yōu)榈?待態(tài))直到指定的事件發(fā)生(接著任務(wù)變?yōu)榫途w態(tài))。在此期間,任意數(shù)量的其他任務(wù)可以運(yùn)行。 具體 做法是 在每個(gè)任務(wù)里調(diào)用 os_wait 函數(shù) 或 os_switch_task 函數(shù) ,以通知RTX51 Tiny 切換到另一個(gè)任務(wù)。 os_wait 函數(shù) 與 os_switch_task 函數(shù) 的所不同是:os_wait 函數(shù) 是讓任務(wù)等待一個(gè)事件,而 os_switch_task 函數(shù) 是立即切換到另一個(gè)就緒的任務(wù)。 游戲 開(kāi)發(fā)環(huán)境的 配置 (1) Keil 的配置 編譯和鏈接 RTX51 Tiny 應(yīng)用程序有 2種途徑,一種是使用集成開(kāi)發(fā)環(huán)境μ Vision 3 IDE,另一種是使用命令行工具 CommandLine Tools。一般采用德國(guó) Keil Software公司提供的集成開(kāi)發(fā)環(huán)境 μ Vision 3 IDE。 利用 Keil Software 公司提供的集成開(kāi)發(fā)環(huán)境 μ Vision 3 IDE,創(chuàng)建 RTX51 Tiny應(yīng)用程序的開(kāi)始的步驟如下: ① 運(yùn)行 Keil Software 公司的集成開(kāi)發(fā)環(huán)境 μ Vision 3 IDE。 ② 運(yùn)行菜單命令 Project→ Options for Target‘ Target 1’,打開(kāi) Target 對(duì)話 框,并在對(duì)話框中選擇 Target 選項(xiàng)卡。 ③ 從 Operating 下拉列表框中選擇 RTX51 Tiny。 (2) RTX51 Tiny 系統(tǒng) 內(nèi)核 配置 建立了嵌入式應(yīng)用后, RTX51 Tiny 必須要配置。所有的配置設(shè)置都在 文件中,該文件位于 KEIL C51/RTXTINY2目錄下。 默認(rèn) 包含在 RTX51 Tiny 庫(kù)中。 μ Vision 3 IDE 編譯 RTX51 Tiny 程序時(shí)已 將 文 件拷貝到工程目錄下并將其加入 到 工程中。通過(guò)改變 中的設(shè)置來(lái)定制 RTX51 Tiny 的 系統(tǒng) 配置。 下面僅對(duì)本設(shè)計(jì)中所需做的系統(tǒng)配置進(jìn)行詳細(xì)介紹。 ① 在 系統(tǒng) 默認(rèn) 配置 下應(yīng)用 程序設(shè)計(jì) 中出現(xiàn)的 問(wèn)題 首先, 在雙人模式下,應(yīng)用程序中的兩個(gè)進(jìn)程都需要對(duì) LCD12864 顯示屏進(jìn)行讀賀州學(xué)院本科生畢業(yè)論文(設(shè)計(jì)) 33 寫(xiě)操作。在多任務(wù)實(shí)時(shí)系統(tǒng)下就會(huì)出現(xiàn)“資源沖 突”的問(wèn)題。 其次是函數(shù)的重入性問(wèn)題。 還有就是 多個(gè) 指針 型 數(shù)據(jù) 在 任務(wù)中使用的問(wèn)題。 C51 編譯器允許使用多個(gè)數(shù)據(jù)指針。 RTX51 Tiny 對(duì)他們不進(jìn)行管理,所以在應(yīng)用中必須確保在改變數(shù)據(jù)指針時(shí)不會(huì)發(fā)生 roundrobin 切換。 ② 具體配置方法 為解決上述問(wèn)題,本設(shè)計(jì) 禁止循環(huán)任務(wù)切換 ,采用協(xié)助任務(wù)切換的方式進(jìn)行多任務(wù)間的切換。 Roundrobin 切換是默認(rèn)使能的,以下參數(shù)用來(lái)設(shè)定 Roundrobin 切換的時(shí)間或禁能 Roundrobin 切換 。 IMESHARING 指定任務(wù)在進(jìn)行 Roundrobin 切換前執(zhí)行的 RTX51 Tiny 時(shí)鐘節(jié)拍數(shù)。當(dāng)這個(gè)值為 0時(shí)禁止 Roundrobin 切換。缺省值是 5個(gè)時(shí)鐘節(jié)拍。 如果禁止了 roundrobin 多任務(wù) 切換 ,必須設(shè)計(jì) 將應(yīng)用程序要執(zhí)行的 任務(wù)以Cooperative 任務(wù)切換 的 方式工作。特別地,必須在 每個(gè)任務(wù)的某個(gè)地方調(diào)用 os_wait函數(shù) 或 os_switch_task 函數(shù)。這些函數(shù)告知 RTX51 Tiny 切換到另一任務(wù)。函數(shù)os_wait 和函數(shù) os_switch_task 的不同之處在于 os_wait 函數(shù) 可以讓任務(wù)等待某一事件的發(fā)生,而函數(shù) os_switch_task 函數(shù) 直接切換到另一個(gè) 準(zhǔn)備 就緒的任務(wù)。 雙人單機(jī)對(duì)戰(zhàn) 模式 的實(shí)現(xiàn) 流程 本系統(tǒng) 實(shí)現(xiàn) 的 雙人 游戲 模式是建立在單人 游戲 模式的基礎(chǔ)上的。其基本思路是利用 RTX51 Tiny 多任務(wù)實(shí)時(shí)操作系統(tǒng)來(lái)完成 多個(gè)事件的準(zhǔn)并行實(shí)行 運(yùn)行。 其中進(jìn)程 0和進(jìn)程 1的程序流程是大致相同的。 如圖 319所示為雙人模式下的 相關(guān)程序流程。 系統(tǒng)背景音樂(lè)的設(shè)計(jì) 音樂(lè)的設(shè)計(jì) 原理 對(duì)于單片機(jī)產(chǎn)生音樂(lè),關(guān)鍵是控制頻率的輸出。我們知道,樂(lè)譜中每一個(gè)音符都與某一個(gè)特定的頻率相對(duì)應(yīng),產(chǎn)生某種頻率的輸出就可以得到相應(yīng)音符的聲音。音樂(lè)中,有 8個(gè)基本音符: do、 re、 mi、 fa、 so、 la、 xi、 do,八個(gè)不同的音符對(duì)應(yīng)著不同的頻率。為了使單片機(jī)能輸出美妙的音樂(lè), 曲譜不僅 需要包含音 名 的信息,而且還要包含有節(jié)拍的信息。因此,本設(shè)計(jì)采用的是一種音名同節(jié)拍混排的一種方式來(lái)對(duì)曲譜進(jìn) 行的編碼。即 按照下列方法進(jìn)行編碼:一個(gè)字節(jié)共八位,高兩位表示節(jié)拍,三四位表示音高,低四位表示音符。節(jié)拍是兩位,有四種狀態(tài),表示四種節(jié)拍;音高是兩位,有四種狀態(tài),表示三種不同的音高(低音、中音、高音);音符用四位表示,有黃忠南 基于單片機(jī)的俄羅斯方塊游戲設(shè)計(jì) 34 十六種狀態(tài),來(lái)表示每個(gè)調(diào)的十二種不同的音符。這些樂(lè)譜數(shù)據(jù)的生成是由樂(lè)譜生成器來(lái)產(chǎn)生的。 在本設(shè)計(jì)中, RTX51 TINY 允許同時(shí) “ 準(zhǔn)并行 ” 地執(zhí)行多個(gè)任務(wù) , 各個(gè)任務(wù)是在預(yù)先設(shè)定 圖 319 雙人游戲程序流 程圖 Fig 319 Double game processes flowchart Y N Y Y Y N Y N Y N Y N Y N Y N Y N 游戲配置為雙人模式 啟動(dòng)游戲 進(jìn)程 0 進(jìn)程 1 使用協(xié)助方式進(jìn)行任務(wù)切換 速降信號(hào) 平移信號(hào) 平移信號(hào) 道具信號(hào) 速降信號(hào) 道具信號(hào) 執(zhí)行相關(guān)平移操作 執(zhí)行相關(guān)平移操作 執(zhí)行速降操作 執(zhí)行速降操作 下移操作 下移操作 執(zhí)行道具功能 執(zhí)行道具功能 積分統(tǒng)計(jì) 積分統(tǒng)計(jì) 使用協(xié)助方式進(jìn)行任務(wù)切換 積分到上限 積分到上限 停止游戲 停止游戲 賀州學(xué)院本科生畢業(yè)論文(設(shè)計(jì)) 35 的時(shí)間片內(nèi)執(zhí)行 的 。 CPU 執(zhí)行時(shí)間被劃分為若干時(shí)間片, RTX51 TINY 為每個(gè)任務(wù)分配一個(gè)時(shí)間片,在一個(gè)時(shí)間片內(nèi)允許執(zhí)行某個(gè)任務(wù),然后 RTX51 TINY 切換到另一個(gè)就緒的任務(wù)并允許它在其規(guī)定的時(shí)間片內(nèi)執(zhí)行。 這個(gè)過(guò)程的實(shí)現(xiàn)是 RTX51 TINY 利用單片機(jī)內(nèi)部定時(shí)器 T0的中斷功能實(shí)現(xiàn) 的 。 此外 STC12C5A60S2 單片機(jī)提供了用 PCA模塊實(shí)現(xiàn) 16 位定時(shí)器的功能。所以本設(shè)計(jì)通過(guò)控制內(nèi)部 PCA 模塊構(gòu)成的定時(shí)器產(chǎn)生不同頻率的脈沖,從而驅(qū)動(dòng)蜂鳴器發(fā)出相應(yīng)頻 率的聲音,而發(fā)音時(shí)間的長(zhǎng)短用定時(shí)器 T1來(lái)控制。 音樂(lè) 播放的 實(shí)現(xiàn)方法 把樂(lè)譜中的音符對(duì)應(yīng)的頻率轉(zhuǎn)換成 PCA 定時(shí)器常數(shù),相應(yīng)的節(jié)拍變?yōu)?T1 常數(shù)。通過(guò)對(duì)歌譜編碼, 程序可以 到 編碼數(shù)組中 取 出 音符 的頻率及節(jié)拍 數(shù)據(jù) ,然后將所取 的數(shù)據(jù)經(jīng)過(guò) 系統(tǒng)的 處理 后 ,將 音調(diào)定時(shí)時(shí)間和節(jié)拍定時(shí)時(shí)間 送入 相應(yīng)的 定時(shí)器。 數(shù)據(jù)處理過(guò)程中的相關(guān)計(jì)算如下: (1) 音頻脈沖 的產(chǎn)生方法: 算出某一音 頻的周期( 1/頻率),然后將此周期除以 2,即為半周期 的時(shí)間,然后利用 PCA 定 時(shí)器計(jì)時(shí)此半周 期時(shí)間,每當(dāng)計(jì)時(shí)到后就將輸出脈沖的 I/O 取 反,然后重復(fù)計(jì)時(shí)此半周期 時(shí)間再對(duì) I/O 取反 ,如此就可在 I/O腳上得到此頻率的脈沖。 (2) 讓 STC12C5A60S2 單片機(jī) 的內(nèi)部計(jì)時(shí)器 T1工作在計(jì)數(shù)模式 MODE1 下,改變計(jì)數(shù)值TH1 及 TL1 以產(chǎn)生不同的頻率。 (3) 以 6MHz 晶振為例:要產(chǎn)生頻率為 523Hz,其周期 T=1/523=1912us,半周期為1912/2=956us,因此,只要令 定時(shí)器 計(jì)時(shí) 956us/1us=956。所以在每計(jì)數(shù) 956 次時(shí)將 I/O 反相,就要以得到中音 D0( 523Hz)。 計(jì)數(shù)脈沖值與頻率
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1