<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > DIY創(chuàng )意設計:手舞足蹈跳舞機的軟硬件實(shí)現,方案設計

DIY創(chuàng )意設計:手舞足蹈跳舞機的軟硬件實(shí)現,方案設計

作者: 時(shí)間:2014-05-26 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/256928.htm

項目關(guān)鍵技術(shù)及創(chuàng )新點(diǎn)的論述

要處理大量的圖像文件,其中,圖層間的α運算、圖像的卷動(dòng)等圖形圖像運算會(huì )頻繁發(fā)生,如果這些運算都交給CPU處理,就會(huì )占用大量的CPU資源,會(huì )破壞圖像顯示的連貫性。我們引入PPU,用于將上述繁重的計算任務(wù)從CPU分離出來(lái),從而提高系統的性能。

也是項目的關(guān)鍵技術(shù)之一:SoC集成的Mp3 Decoder將游戲音樂(lè )文件解碼為PCM流,PCM流傳輸到兩塊同樣大小的緩沖區(暫且假設每塊緩沖區的大小為1K),如下圖所示,這兩塊緩沖區相當于構成一個(gè)循環(huán)隊列,一塊緩沖區的PCM流文件播放完以后,接著(zhù)播放另一個(gè)緩沖區中的流文件。在切換緩沖區時(shí),會(huì )產(chǎn)生中斷,在這個(gè)中斷周期,系統渲染新的圖像幀,從而實(shí)現聲像像同步。

游戲開(kāi)發(fā)Framework:這是在該硬件驅動(dòng)上實(shí)現的一組API,它是獨立于跳舞機游戲的,提供游戲開(kāi)發(fā)的常用接口,規定了游戲開(kāi)發(fā)的模型。

技術(shù)成熟性和可靠性論述:

目前市場(chǎng)上有很多基于PC的跳舞機的設計案例可以參考(當中的PPU部件等關(guān)鍵功能模塊可以參考任天堂公司紅白機的設計),技術(shù)已經(jīng)相當成熟。

項目實(shí)施方案

方案基本功能框圖及描述

硬件功能框圖及描述

Compact Flash(CF) Card:

扮演只讀存儲器的角色,用于存儲游戲文件;游戲文件分為三個(gè)部分:第一部分是控制程序,這一部分供CPU(MicroBlaze)執行;第二部分是位圖文件,這一部分由PPU處理;第三部分是音樂(lè )文件,其中MP3格式的文件交給圖中所示的MP3 Decoder處理。

之所以使用作為ROM,是因為可以很方便地從系統中取出,并與PC兼容,這樣容易實(shí)現游戲軟件的更新。

PPU(Physics Processing Unit):

用于圖像顯示加速。在程序運行過(guò)程中,有大量位圖文件需要顯示,考慮到處理這些位圖文件會(huì )給CPU帶來(lái)沉重的負擔,我們引入PPU,用來(lái)實(shí)現圖像顯示加速功能。

LCD顯示的圖像由三個(gè)圖層構成,它們分別是背景層、卡通層與前景層。

背景層用于顯示游戲背景圖像,背景圖像有時(shí)需要縱向移動(dòng)。某些游戲為了縱向卷動(dòng)顯示圖像,是通過(guò)反復改寫(xiě)顯示映射單元的內容來(lái)實(shí)現的,這種辦法處理速度太慢。為了更快地實(shí)現背景圖像的縱向移動(dòng),我們采用移動(dòng)顯示窗口的辦法。移動(dòng)顯示窗口的大小與LCD的大小相當(1024×768);背景圖像文件在CF卡中以矩陣的形式連續存儲,每行也包含1024個(gè)像素。因此如果需要畫(huà)面移動(dòng),只需將顯示窗口向相反的方向移動(dòng)即可。這樣每次顯示畫(huà)面移動(dòng)一行,顯示窗口僅需要重新繪制一行,可以大幅度提高背景圖像的顯示速度,降低cpu占用。

卡通層用于顯示游戲中的提示動(dòng)作,提示動(dòng)作提示玩家該在什么時(shí)間完成什么樣的游戲動(dòng)作(例如踩下向前按鈕、伸出左手等)。CPU將提示動(dòng)作的種類(lèi)、顯示時(shí)間、顯示坐標發(fā)送給PPU,PPU則在規定的時(shí)間,將規定種類(lèi)的提示動(dòng)作顯示在規定的坐標處。

前景層顯示玩家游戲動(dòng)作的情況以及最終的得分情況。根據玩家完成游戲動(dòng)作的時(shí)間與游戲規定時(shí)間的比較結果,可將完成情況分為不同的級別,每種級別對應不同的前景層位圖文件。

值得注意的是顯示過(guò)程中,層與層之間會(huì )出現α運算。所有的α運算均由PPU處理。

MP3 Decoder/頻譜分析功能部件

游戲中的聲音以mp3的格式儲存在CF卡中,cpu從Flash中讀取mp3文件,送給MP3 Decoder處理,將它轉化成PCM格式的數據,再將PCM流轉換成模擬信號,最終通過(guò)揚聲器播放出來(lái)。

游戲中的聲音包括兩種,一種是游戲背景音樂(lè ),存儲格式是MP3格式,由MP3 Decoder處理,從游戲開(kāi)始就連續播放,一直到游戲結束為止;另一種是游戲提示音,提示音持續時(shí)間較短,通常只有幾秒鐘,存儲格式為WAV格式,不需要解碼,不同提示音文件分別對應著(zhù)玩家完成游戲動(dòng)作的情況或得分情況,CPU通過(guò)判斷玩家完成動(dòng)作情況或得分情況控制播放對應的提示音文件。

要想營(yíng)造絢麗、歡快的游戲氛圍,變幻多端的燈光效果是必不可少的,為了模擬這種效果,我們設計了頻譜分析模塊。該模塊從MP3 Decoder接收PCM流文件,通過(guò)對PCM文件進(jìn)行頻譜分析,得知游戲節奏的快慢,并控制LED指示燈根據游戲的節奏按照不同的頻率進(jìn)行顯示。

/

分別接收玩家腳部與手部的動(dòng)作作為原始輸入,每個(gè)傳感器對應一個(gè)寄存器,該寄存器用于記錄輸入狀態(tài)。游戲中讀取輸入的操作全部在中斷周期中完成,游戲中斷時(shí),如果傳感器有輸入,那么對應的寄存器值被置為1,之后CPU讀各寄存器的狀態(tài)值,依次判斷玩家的輸入是否符合游戲要求,并確定游戲下一步的顯示圖像、播放聲音等操作。在中斷的最后階段還要對各狀態(tài)寄存器進(jìn)行復位。

DDR SDRAM Controller

UART

用于調試。

DIY機械鍵盤(pán)相關(guān)社區:機械鍵盤(pán)DIY




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>