在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

電子森林 ? 來源:FPGA入門到精通 ? 作者:FPGA入門到精通 ? 2020-09-30 17:32 ? 次閱讀

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

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

一個STM32F4 Discovery板

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

一個2軸游戲手柄

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

一只4ohm,3W的喇叭

兩個按鍵

其它電阻二極管若干

原理圖:

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

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

下圖為軟件模塊的構成及調用關系

下圖為數據流:

游戲手柄在兩個方向的變化通過其內部兩個獨立的可變電阻來實現,電阻的改變以變化的電壓送到控制器的12位精度的ADC,變換后的數據以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; } } }}

第二個周期性的中斷產生DAC需要的數據,以產生相應的音頻效果:

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

創建特殊的空間維度:

/***********************************************************************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; }}

下面的示意 - 右邊慢慢消失,出現在左側

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

/***********************************************************************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;}

責任編輯:xjx

原文標題:基于STM32F4的手持式游戲機如何實現?

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • STM32
    +關注

    關注

    2270

    文章

    10915

    瀏覽量

    356774
  • 手持設備
    +關注

    關注

    0

    文章

    46

    瀏覽量

    24098
  • 游戲機
    +關注

    關注

    9

    文章

    300

    瀏覽量

    33507

原文標題:基于STM32F4的手持式游戲機如何實現?

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

收藏 人收藏

    評論

    相關推薦

    Simcenter SCADAS XS手持式數據采集系統

    SimcenterSCADASXS手持式數據采集系統將各類噪聲和振動測試功能與手持式解決方案的自由度結合,即可在現實生活中快速測試產品。為何選擇SimcenterSCADASXS?即時測試并對產品
    的頭像 發表于 01-15 14:42 ?39次閱讀
    Simcenter SCADAS XS<b class='flag-5'>手持式</b>數據采集系統

    手持式RFID讀寫器可以當pda手持終端用嗎

    隨著科技的不斷進步,手持式RFID讀寫器作為種新興的便攜讀寫器,逐漸在各行各業中發揮著重要作用。而在很多場景下,手持式RFID讀寫器是否能替代傳統的PDA(數據采集終端)
    的頭像 發表于 12-05 14:58 ?171次閱讀
    <b class='flag-5'>手持式</b>RFID讀寫器可以當pda<b class='flag-5'>手持</b>終端用嗎

    手持式點焊電源:靈活高效,引領焊接工藝新潮流

    在當今的工業生產領域,尤其是制造業與建筑業中,焊接技術作為種至關重要的連接手段,在不斷地追求創新和升級。種新型的焊接設備——手持式點焊電源,正以其獨特的靈活性和高效的性能特點,悄然引領著現代
    的頭像 發表于 11-27 15:06 ?165次閱讀

    STM32項目實戰:基于STM32F4的智能燈光控制系統(LVGL),附項目教程/源碼

    《智能燈光控制系統_STM32F4》項目完整文檔、項目源碼,私信小雯老師免費領取。STM32項目實戰之“智能燈光控制系統”(基于STM32F4)今天小編來分享個《智能燈光控制系統》的
    的頭像 發表于 10-17 16:16 ?919次閱讀
    <b class='flag-5'>STM32</b>項目實戰:基于<b class='flag-5'>STM32F4</b>的智能燈光控制系統(LVGL),附項目教程/源碼

    STM32F40xxx、STM32F41xxx、STM32F42xxx、STM32F43xxx中文手冊

    STM32F4系列單片中文手冊
    發表于 08-08 14:32 ?2次下載

    手持式地物光譜儀:野外遙感環境監測的革命性工具

    在現代科技飛速發展的今天,環境監測已經成為各個領域中不可或缺的重要環節。手持式地物光譜儀作為款專門用于野外遙感環境監測的最新產品,以其操作靈活、輕巧方便、光譜測試速度快、光譜數據準確等特點,迅速
    的頭像 發表于 08-02 15:40 ?382次閱讀
    <b class='flag-5'>手持式</b>地物光譜儀:野外遙感環境監測的革命性工具

    手持式光譜儀可以檢測哪些材質

    手持式光譜儀是種便攜、快速、非破壞性的分析儀器,廣泛應用于材料分析、環境監測、食品安全、地質勘探等領域。它通過測量物質對不同波長光的吸收、發射或散射特性,來確定物質的組成和含量。 手持式
    的頭像 發表于 07-18 09:20 ?1182次閱讀

    手持式激光焊機臺多少錢?

    ? ? 【標題:手持式激光焊機臺多少錢?】 臺高性能、高品質的手持式激光焊機,究竟有多神奇,能夠讓你在工作、生活中大顯身手,脫穎而出呢?接下來,就讓我給您揭曉答案! ? 首先,我們
    的頭像 發表于 05-13 10:14 ?1177次閱讀
    <b class='flag-5'>手持式</b>激光焊機<b class='flag-5'>一</b>臺多少錢?

    STM32F4或者STM32L4自帶的DSP庫FFT運算是不是只能做基2的點數?

    請教,用STM32F4或者STM32L4自帶的DSP庫FFT運算是不是只能做基2的點數,如果采樣200點,還能用dsp庫來進行FFT嘛,或者自己找個任意點數的FFT算法計算。
    發表于 05-11 08:32

    STM32F4的USB做主機,無線模塊,相連接以后無線模塊的USB驅動程序該如何寫到F4中呢?

    STM32F4的USB做主機,無線模塊,相連接以后無線模塊的USB驅動程序該如何寫到F4中呢? 這個與平常的鼠標驅動什么的類似嗎?
    發表于 04-28 06:16

    stm32F4 64位變量操作異常怎么解決?

    stm32F4 64位變量使用報錯解決
    發表于 04-02 07:16

    激光焊接機手持式:無所不能的加工神器

    標題:《激光焊接機手持式:無所不能的加工神器》 激光焊接機手持式種高效、便捷的焊接設備,廣泛應用于金屬加工、汽車制造、航空航天、電子電器等領域。那么,激光焊接機手持式都能加工哪些地
    的頭像 發表于 03-05 10:10 ?343次閱讀
    激光焊接機<b class='flag-5'>手持式</b>:無所不能的加工神器

    手持式平板電腦終端對倉儲有什么好處?

    在之前倉儲物流行業對于自動化管理都是半趨向的,如今隨著工業發展速度越來越快,手持式平板電腦終端也被大力使用起來。那么對于倉儲而言,手持式平板電腦終端有何好處呢?
    的頭像 發表于 02-19 13:50 ?401次閱讀

    手持式激光測距儀產品介紹

    電子發燒友網站提供《手持式激光測距儀產品介紹.zip》資料免費下載
    發表于 01-29 10:19 ?9次下載

    手持式溫濕度表HG-HDHT08

    手持式溫濕度表HG-HDHT08說明書
    發表于 01-24 10:04 ?0次下載
    主站蜘蛛池模板: 国产亚洲网站| 久久久精品波多野结衣| 国产又黄又免费aaaa视频| 色综合色综合| 偷偷狠狠的日日2020| 天天操视频 夜夜| 久久久久亚洲香蕉网| 福利在线播放| 天天操夜夜逼| 欧美一级在线全免费| 免费一级特黄欧美大片勹久久网| 久久国产香蕉视频| 在线免费看视频| 中文字幕一区二区三区不卡| 色婷婷激情五月综合| 资源新版在线天堂| 婷婷色在线播放| 欧美日韩国产网站| 国产一二三区精品| 69一级毛片| 欧美黄色成人| 久久xxxx| 伊人涩| 色偷偷91综合久久噜噜 | 久操中文| 欧美极品| 永久免费毛片| 日本三级网址| 色多多高清在线观看视频www| 欧美精品videosex性欧美| 国产女人视频| 国产精品免费拍拍拍| 小优视频在线| 1024手机在线观看视频| 男男浪荡性受高hnp肉| 天堂网2021天堂手机版| 免费一级特黄a| 悠悠影院欧美日韩国产| 狠狠干狠狠插| 日本加勒比一区| 色www 永久免费网站|