日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何做一部基于STM32F4的手持式游戲機

電子森林 ? 來源:FPGA入門到精通 ? 作者:FPGA入門到精通 ? 2020-09-30 17:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

這是在Hackster.io上發(fā)布的一個項目,基于STM32F4 Discovery板制作的游戲機。采用編寫游戲的方式來學(xué)習(xí)嵌入式系統(tǒng)是比較好的方式,寓教于樂,培養(yǎng)成就感,并不需要學(xué)習(xí)完模電、數(shù)電就可以編程。

下面是這個項目的硬件部分,主要的器件:

一個STM32F4 Discovery板

一個3.2寸、320*240分辨率、帶觸摸的TFT LCD顯示屏(ILI9341為控制器

一個2軸游戲手柄

單通道2.5W D類音頻放大器

一只4ohm,3W的喇叭

兩個按鍵

其它電阻、二極管若干

原理圖:

關(guān)于游戲手柄及按鍵的功能定義參見原文 - 點擊左下角的“閱讀原文”即可到達,在這里不再贅述。

下面是板子的正面和背面器件布局示意圖:

下圖為軟件模塊的構(gòu)成及調(diào)用關(guān)系

下圖為數(shù)據(jù)流:

游戲手柄在兩個方向的變化通過其內(nèi)部兩個獨立的可變電阻來實現(xiàn),電阻的改變以變化的電壓送到控制器的12位精度的ADC,變換后的數(shù)據(jù)以40Hz的頻度被控制器的游戲引擎讀取。

下面是游戲的流程圖:

ISR的程序:

void TIM6_DAC_IRQHandler (void){ TIM_intrpt_handler(TIM6); frameUpdate = SET;}

前景:

int main (void){ RTE_init(); RTE_display_start_screen(); while(SHOOT_BUTTON_READ); while(1){ RTE_display_black_background(); RTE_create_player_spaceship(&PlayerSpaceship); RTE_draw_player_spaceship(&PlayerSpaceship); RTE_create_asteroid(&AsteroidVect,Asteroid,numOfAsteroidInWave[currentWa ve],&PlayerSpaceship); RTE_draw_asteroid(&AsteroidVect); RNG_deinit(); RTE_start_update_frame(); while(1){ if(frameUpdate == SET){ RTE_display_score(); RTE_update_player_spaceship(&PlayerSpaceship); RTE_draw_player_spaceship(&PlayerSpaceship); RTE_create_rocket(&RocketVect,Rocket,&PlayerSpaceship); RTE_update_rocket(&RocketVect,&AsteroidVect); RTE_draw_rocket(&RocketVect); RTE_update_asteroid(&AsteroidVect,&PlayerSpaceship); RTE_draw_asteroid(&AsteroidVect); if(PlayerSpaceship.Object_Property.aliveFlag == RTE_ALIVE_FALSE){ PROTOBOARD_GREEN_LED_ON; RTE_display_game_over_screen(); while(SHOOT_BUTTON_READ); RTE_reset_game(); PROTOBOARD_GREEN_LED_OFF; break; } if(AsteroidVect.total == 0){ TIM_ctr(TIM6,STOP); currentWave++; RNG_init(); RTE_create_asteroid(&AsteroidVect,Asteroid,numOfAsteroidInWave[currentWave],&PlayerSpaceship); TIM_ctr(TIM6,START); } frameUpdate = CLEAR; } } }}

第二個周期性的中斷產(chǎn)生DAC需要的數(shù)據(jù),以產(chǎn)生相應(yīng)的音頻效果:

#ifdef SPEAKER_USE_TIMER7 void TIM7_IRQHandler (void){ TIM_intrpt_handler(TIM7); DAC_write(&DACxHandle,*(soundPtrGlobal++)); if(soundPtrGlobal == soundEnd){ speaker_stop_sound(); } }#endif

創(chuàng)建特殊的空間維度:

/***********************************************************************Private function: Wrap coordinate***********************************************************************/void RTE_wrap_cordinate (int16_t *xPtr, int16_t *yPtr){ if (*xPtr < 0){ *xPtr += ILI9341_config.width; } if (*xPtr >= ILI9341_config.width){ *xPtr -= ILI9341_config.width; } if (*yPtr < 0){ *yPtr += ILI9341_config.height; } if (*yPtr >= ILI9341_config.height){ *yPtr -= ILI9341_config.height; }}

下面的示意 - 右邊慢慢消失,出現(xiàn)在左側(cè)

下面的代碼就是在左側(cè)重畫出圖像中右側(cè)消失掉的部分:

/***********************************************************************External function: Overwrite draw pixel function in ILI9341 driver library (in order to draw pixels going off screen)***********************************************************************/void ILI9341_draw_pixel (int16_t x, int16_t y, uint16_t color){ RTE_wrap_cordinate(&x,&y); ILI9341_set_active_area(x,x,y,y); ILI9341_send_command(ILI9341_MEM_WRITE); ILI9341_send_parameter_16_bits(color);}

碰撞檢測:

/***********************************************************************Private function: Detect collision between 2 object using AABB algorithm***********************************************************************/uint8_t RTE_collision_detect (Space_Object_t *Object1Ptr, Space_Object_t *Object2Ptr){ int16_t Obj1BottomRight_X = Object1Ptr->Object_Property.x + Object1Ptr->Object_Image.imageWidth; int16_t Obj1BottomRight_Y = Object1Ptr->Object_Property.y + Object1Ptr->Object_Image.imageHeight; int16_t Obj2BottomRight_X = Object2Ptr->Object_Property.x + Object2Ptr->Obje ct_Image.imageWidth; int16_t Obj2BottomRight_Y = Object2Ptr->Object_Property.y + Object2Ptr->Object_Image.imageHeight; if (Object1Ptr->Object_Property.x < Obj2BottomRight_X && Object2Ptr->Object_Property.x < Obj1BottomRight_X && Object1Ptr->Object_Property.y < Obj2BottomRight_Y && Object2Ptr->Object_Property.y < Obj1BottomRight_Y){ return RTE_COLLISION_TRUE; } return RTE_COLLISION_FALSE;}

責(zé)任編輯:xjx

原文標(biāo)題:基于STM32F4的手持式游戲機如何實現(xiàn)?

文章出處:【微信公眾號:FPGA入門到精通】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關(guān)注

    關(guān)注

    2313

    文章

    11196

    瀏覽量

    374764
  • 手持設(shè)備
    +關(guān)注

    關(guān)注

    0

    文章

    60

    瀏覽量

    24782
  • 游戲機
    +關(guān)注

    關(guān)注

    9

    文章

    307

    瀏覽量

    35623

原文標(biāo)題:基于STM32F4的手持式游戲機如何實現(xiàn)?

文章出處:【微信號:xiaojiaoyafpga,微信公眾號:電子森林】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    STM32F042x4/STM32F042x6微控制器深度解析:特性、應(yīng)用與設(shè)計要點

    STM32F042x4/STM32F042x6微控制器深度解析:特性、應(yīng)用與設(shè)計要點 在嵌入系統(tǒng)開發(fā)領(lǐng)域,微控制器的選擇至關(guān)重要,它直接影響著產(chǎn)品的性能、功能和成本。今天,我們就來深入探討
    的頭像 發(fā)表于 03-19 17:15 ?683次閱讀

    新大陸NLS MT95-U手持式RFID讀寫器:多場景智能識別的得力助手

    在倉儲管理、物流快遞、智慧醫(yī)療等多個行業(yè)的數(shù)字化轉(zhuǎn)型進程中,高效精準(zhǔn)的識別設(shè)備扮演著關(guān)鍵角色。新大陸NLSMT95-U手持式RFID讀寫器,作為款功能強大的手持式RFID讀寫終端,憑借
    的頭像 發(fā)表于 02-04 15:12 ?378次閱讀
    新大陸NLS MT95-U<b class='flag-5'>手持式</b>RFID讀寫器:多場景智能識別的得力助手

    Bamtone T60F 手持式面銅測試儀:PCB 銅箔厚度檢測的國產(chǎn)替代新標(biāo)桿

    深厚的技術(shù)積累與市場洞察,在BamtoneT60、BamtoneT60C的基礎(chǔ)上,匠心研發(fā)推出了BamtoneT60F手持式面銅測試儀。這款便攜電子測試設(shè)備,精
    的頭像 發(fā)表于 01-15 11:06 ?696次閱讀
    Bamtone T60<b class='flag-5'>F</b> <b class='flag-5'>手持式</b>面銅測試儀:PCB 銅箔厚度檢測的國產(chǎn)替代新標(biāo)桿

    提升手持式LIBS光譜儀的使用效率關(guān)鍵技巧

    現(xiàn)代材料分析領(lǐng)域中,手持式LIBS光譜儀以其便捷性和高效率受到越來越多行業(yè)的青睞。然而,用戶在使用過程中常常會遇到效率低下、結(jié)果不準(zhǔn)確的問題。如何更好地利用這高科技工具,是許多用戶亟待解決的難題
    的頭像 發(fā)表于 10-28 10:46 ?369次閱讀

    作為名PCB質(zhì)檢工程師,我為什么在用手持式面銅測試儀?

    在PCB行業(yè),銅厚直是決定阻抗、散熱與可靠性的關(guān)鍵指標(biāo)。過去,工程師把板子搬到實驗室、等待臺式銅厚儀出結(jié)果;作為名PCB質(zhì)檢工程師,如今,我更愿意把“實驗室”揣進口袋——手持式面銅測試儀正在成為
    發(fā)表于 08-11 11:59

    STM32F103c8上DLQR最優(yōu)控制算法的C編程資料

    這是我近期個項目--基于STM32F103c8的DLQR控制算法的C編程,涉及DLQR最優(yōu)控制算法、嵌入STM32F103編程、CM
    發(fā)表于 07-23 15:30 ?0次下載

    【項目分享】Xii-Boy-Ultra 無線便攜 Wii 游戲機

    Xii-Boy Ultra 是款小型便攜 Wii 游戲機,采用垂直布局設(shè)計。該系統(tǒng)允許用戶無需使用焊錫,僅用螺絲刀就能輕松組裝和拆卸。 Xii-Boy Ultra 是款采用
    發(fā)表于 07-14 17:27

    【VisionFive 2單板計算機試用體驗】VisionFive 2個霸氣的游戲機

    這次的測試活動,每人人手送游戲機,非常的好?。。?! 很高興收到賽昉科技發(fā)放的VisionFive 2開發(fā)板,VisionFive 2是全球首款集成了3D GPU的高性能量產(chǎn)RISC-V
    發(fā)表于 07-13 20:41

    使用studio構(gòu)建STM32F4工程報錯的原因?

    使用studio 構(gòu)建STM32F4 工程,什么都沒有動報了以上錯誤.這是為什么 ?
    發(fā)表于 06-26 07:26

    手持式RFID掃碼設(shè)備功能解析:搞定入庫/出庫/盤點

    的入庫方式依賴人工記錄和逐個掃碼,效率低下且容易出錯。而手持式RFID掃碼設(shè)備則徹底改變了這局面。當(dāng)貨物入庫時,工作人員只需手持設(shè)備在貨物附近走過,設(shè)備就能快速
    的頭像 發(fā)表于 06-12 14:38 ?822次閱讀
    <b class='flag-5'>手持式</b>RFID掃碼設(shè)備功能解析:<b class='flag-5'>一</b><b class='flag-5'>機</b>搞定入庫/出庫/盤點

    STM32F4標(biāo)準(zhǔn)外設(shè)庫資料

    stm32f4xx.h,標(biāo)準(zhǔn)外設(shè)庫
    發(fā)表于 06-08 09:49 ?5次下載

    STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4編程手冊

    電子發(fā)燒友網(wǎng)站提供《STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4編程手冊.pdf》資料
    發(fā)表于 06-06 17:06 ?17次下載

    松下4K手持式攝錄一體機AJ-UPX380介紹

    2025年第季度,松下正式推出4K手持式攝錄一體機AJ-UPX380,旨在為廣播及流媒體專業(yè)人士提供更高品質(zhì)的視頻制作解決方案。作為UPX系列專業(yè)攝錄
    的頭像 發(fā)表于 05-30 15:54 ?1948次閱讀

    用 Lakka 和 樹莓派 打造終客廳游戲機!

    盡管現(xiàn)代樹莓派單板計算機(SBC)的規(guī)格有了大幅提升,但它們的性能仍不足以在4K分辨率下以60幀每秒(FPS)的速度運行3A級PC游戲。不過,那些老派游戲——尤其是為老式游戲機設(shè)計的
    的頭像 發(fā)表于 05-27 15:35 ?1374次閱讀
    用 Lakka 和 樹莓派 打造終客廳<b class='flag-5'>游戲機</b>!

    零知開源——STM32F4驅(qū)動MAX31865實現(xiàn)PT100高精度測溫

    STM32F
    PCB56242069
    發(fā)布于 :2025年05月26日 18:25:17
    鹿邑县| 竹北市| 华容县| 龙海市| 河池市| 岱山县| 昭通市| 赤水市| 巴林左旗| 隆尧县| 金山区| 罗山县| 中方县| 射阳县| 增城市| 祁连县| 金华市| 会宁县| 塘沽区| 邵阳市| 华坪县| 凌海市| 仙居县| 宜君县| 盐池县| 永清县| 金华市| 洪雅县| 拉萨市| 嵊州市| 天长市| 昔阳县| 平邑县| 乌拉特后旗| 杂多县| 大城县| 会宁县| 赞皇县| 赣榆县| 驻马店市| 霍邱县|