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

正文內容

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

2024-12-03 19:16本頁面

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

  

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