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

正文內(nèi)容

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

2025-01-13 01:02本頁面
  

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