国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于STM32制作的音樂播放器,用PWM控制蜂鳴器

這篇具有很好參考價值的文章主要介紹了基于STM32制作的音樂播放器,用PWM控制蜂鳴器。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

效果展示?

前言

? ? ? ? 一、設(shè)計背景

? ? ? ? 1.1、知識儲備?

? ? ? ? 二、系統(tǒng)設(shè)計方案

? ? ? ? 2.1、實現(xiàn)功能?

? ? ? ? 2.2、硬件部分

? ? ? ? 2.3、軟件部分?

? ? ? ? 三、軟件設(shè)計

?????????3.1、設(shè)計流程圖

? ? ? ? ?3.2、音樂頻率的設(shè)置

? ? ? ? ?3.3、編程主要思路

? ? ? ? 四、程序設(shè)計??


效果展示?

?

基于STM32用PWM控制蜂鳴器


前言

? ? ? ? 音樂播放器項目,我使用PWM輸出捕獲的方式控制無源蜂鳴器響,這樣可以解放主函數(shù)的空間,用來控制其他外設(shè)。?(PWM的介紹在STM32學(xué)習(xí)筆記中我做了詳細(xì)的介紹和應(yīng)用實例)

? ? ? ? 一、設(shè)計背景

? ? ? ? 1.1、知識儲備?

? ? ? ? 用到了蜂鳴器、獨立按鍵、LED、PWM輸出捕獲、引腳重映射、定時器中斷等方面的知識。同時還要了解STM32內(nèi)部時鐘樹,我用到的開發(fā)工具有:STM32 CubeMX和MDK kile5,并且使用的是HAL庫進行的編程。為什么不用標(biāo)準(zhǔn)庫主要是因為,HAL庫是ST公司一直維護和支持更新的庫,它的支持性更好,標(biāo)準(zhǔn)庫在2011年就已經(jīng)停止了維護,但是HAL庫的調(diào)用更抽象,所以我在學(xué)習(xí)時用標(biāo)準(zhǔn)庫,更加形象具體,能快速的打好基礎(chǔ),而做項目則用的HAL庫,可以用cubeMX進行圖形化編程,效率更高。兩種庫各有利弊,不存在誰好誰壞。?而且HAL庫只是支持ST公司的單片機,這變相限制了開發(fā)移植性。

? ? ? ? 二、系統(tǒng)設(shè)計方案

? ? ? ? 2.1、實現(xiàn)功能?

????????1.開發(fā)板通電,蜂鳴器能正常播放音樂;

????????2.通過按鍵可以向前\向后切換歌曲;

????????3.LED指示燈隨著按鍵的按下進行翻轉(zhuǎn)指示;

? ? ? ? 2.2、硬件部分

? ? ? ? 使用的是正點原子精英開發(fā)板,芯片是STM32F103ZET6,內(nèi)部時鐘為72M。蜂鳴器是無源蜂鳴器,無內(nèi)部振蕩電路,可以改變其頻率,使其播放音樂。獨立按鍵控制音樂的播放并且可以切歌。LED做為指示燈,用來判斷獨立按鍵是否按下。

? ? ? ? 2.3、軟件部分?

? ? ? ? PE5、PB5為LED引腳,PB7為PWM輸出捕獲引腳(TIM4、CH2),PE3、PE4為獨立按鍵控制引腳(開啟中斷),開啟定時器TIM2;

stm32蜂鳴器音樂,單片機課設(shè)系列,單片機,stm32,嵌入式硬件,深度學(xué)習(xí),pcb工藝

stm32蜂鳴器音樂,單片機課設(shè)系列,單片機,stm32,嵌入式硬件,深度學(xué)習(xí),pcb工藝
時鐘樹設(shè)置

? ? ? ? 三、軟件設(shè)計

?????????3.1、設(shè)計流程圖

stm32蜂鳴器音樂,單片機課設(shè)系列,單片機,stm32,嵌入式硬件,深度學(xué)習(xí),pcb工藝

? ? ? ? ?3.2、音樂頻率的設(shè)置

? ? ? ? 這個項目的難點就是設(shè)置音樂頻率,按照我之前使用51單片機制作音樂播放器的經(jīng)驗,音樂頻率,主要是音樂的音符,音調(diào)和節(jié)拍之間的關(guān)系。

? ? ? ? 音符決定發(fā)音單元,音調(diào)決定音量的高低,節(jié)拍決定音符發(fā)音的時間長短。

stm32蜂鳴器音樂,單片機課設(shè)系列,單片機,stm32,嵌入式硬件,深度學(xué)習(xí),pcb工藝

? ? ? ? ?3.3、編程主要思路

? ? ? ? 因為我采用PWM和定時器控制蜂鳴器,主要關(guān)系是這樣的:定時器把握音樂的節(jié)拍,PWM把握音調(diào)和音符。

? ? ? ? 還是得說一下PWM。PWM 周期由定時器分頻系數(shù)和重裝載值共同決定,STM32F103ZET6的主頻為72MHZ,設(shè)置分頻為9,所以最大是8MHZ。而我們所需要的最小頻率是262HZ,所以我們只需要計算得到的重裝載值不大于定時器的重裝載最大值(65535)即可。?

????????所以每次轉(zhuǎn)換音符時,動態(tài)修改重裝載值即可實現(xiàn) PWM 輸出頻率的變化,進而控制無源蜂鳴器發(fā)聲。定時器將進行 ms 中斷,判斷每拍時間是否到達(dá),到達(dá)則播放下一拍。?

? ? ? ? 四、程序設(shè)計??


?篇幅有限,只能展示部分代碼,需要全部代碼,請私信博主,謝謝。

music.c程序如下:?

#include "music.h"

uint16_t C_FREQ[]={0,262,294,330,349,392,440,
								494,523,587,659,698,784,880,988,
						 1046,1175,1318,1397,1568,1760,1976};

/*-------------------兩只老虎--------------------*/

/*頻率*/
uint8_t music_two_tiger_f[]={
		1,2,3,1,
		1,2,3,1,
		3,4,5,
		3,4,5,
		5,6,5,6,3,1,
		5,6,5,4,3,1,
		1,5,1,
		1,5,1,
};

/*1/4拍長*/
u16 music_two_tiger_t_echo=150;

/*長度*/
u16 music_two_tiger_len=(sizeof(music_two_tiger_f)/sizeof(uint8_t));

/*拍長*/
uint8_t music_two_tiger_t[]={
		P_1,P_1,P_1,P_1,
		P_1,P_1,P_1,P_1,
		P_1,P_1,P_2,
		P_1,P_1,P_2,
		P_4_3,P_4_1,P_4_3,P_4_1,P_1,P_1,
		P_4_3,P_4_1,P_4_3,P_4_1,P_1,P_1,
		P_1,P_1,P_2,
		P_1,P_1,P_2,
};

/*-------------------春節(jié)序曲--------------------*/

/*頻率*/
uint8_t music_happy_newyear_f[]={
		3,2,3,5,5,6,
		7,6,7,7,
		3,7,6,5,3,5,
		6,5,6,5,
		5,6,1,6,1,2,
		1,6,5,3,
		5,6,1,2,1,7,
		6,5,6,5,
		3,2,3,5,5,6,
		1,6,3,1,
};

/*1/4拍長*/
u16 music_happy_newyear_t_echo=200;

/*長度*/
u16 music_happy_newyear_len=(sizeof(music_happy_newyear_f)/sizeof(uint8_t));

/*拍長*/
uint8_t music_happy_newyear_t[]={
		P_2_1,P_1,P_2_1,P_2_1,P_1,P_2_1,
		P_1,P_2_1,P_2_1,P_2,
		P_2_1,P_1,P_2_1,P_2_1,P_1,P_2_1,
		P_4_3,P_4_1,P_1,P_2,
		P_4_3,P_4_1,P_1,P_2_1,P_1,P_2_1,
		P_1,P_2_1,P_2_1,P_2,
		P_4_3,P_4_1,P_1,P_2_1,P_1,P_2_1,
		P_4_3,P_4_1,P_1,P_2,
		P_2_1,P_1,P_2_1,P_2_1,P_1,P_2_1,
		P_1,P_2_1,P_2_1,P_2,
};

/*-------------------難忘今宵--------------------*/

/*頻率*/
uint8_t music_bitter_unforget_f[]={
  2,3,2,1,2,3,2,5,
	5,5,5,2,4,3,2,
	7,1,2,3,1,7,1,2,3,5,
	5,4,3,4,3,2,1,
	
	5,6,5,4,1,3,4,6,5,5,
	2,6,5,6,4,6,5,
	3,4,3,2,5,3,4,3,2,1,
	
	5,4,3,4,3,2,1,
	6,5,4,1,4,6,5,5,
	6,5,4,1,4,6,5,5,

	3,2,1,5,1,3,2,2,
	3,2,1,5,1,3,5,5,
	3,2,1,5,1,3,1,1,
};

/*1/4拍長*/
u16 music_bitter_unforget_t_echo=300;

/*長度*/
u16 music_bitter_unforget_len=(sizeof(music_bitter_unforget_f)/sizeof(uint8_t));

/*拍長*/
uint8_t music_bitter_unforget_t[]={
  P_2_1,P_4_1,P_4_1,P_1,P_2_1,P_4_1,P_4_1,P_1,
	P_2_1,P_2_1,P_4_1,P_4_1,P_4_1,P_4_1,P_2,
	P_4_1,P_4_1,P_4_1,P_4_1,P_1,P_4_1,P_4_1,P_4_1,P_4_1,P_1,
	P_2_1,P_2_1,P_4_1,P_4_1,P_4_1,P_4_1,P_2,
	
  P_2_1,P_4_1,P_4_1,P_2_1,P_2_1,P_4_1,P_4_1,P_4_1,P_4_1,P_1,
	P_2_1,P_2_1,P_4_1,P_4_1,P_4_1,P_4_1,P_2,
	P_4_1,P_4_1,P_4_1,P_4_1,P_1,P_4_1,P_4_1,P_4_1,P_4_1,P_1,
	
	P_2_1,P_2_1,P_4_1,P_4_1,P_4_1,P_4_1,P_2,
	P_4_1,P_4_1,P_4_1,P_4_1,P_4_1,P_4_1,P_2_1,P_2,
	P_4_1,P_4_1,P_4_1,P_4_1,P_4_1,P_4_1,P_2_1,P_2,
	
	P_4_1,P_4_1,P_4_1,P_4_1,P_4_1,P_4_1,P_2_1,P_2,
	P_4_1,P_4_1,P_4_1,P_4_1,P_4_1,P_4_1,P_2_1,P_2,
	P_4_1,P_4_1,P_4_1,P_4_1,P_4_1,P_4_1,P_2_1,P_2,
};

struct MUSIC_T music_t;

u8 B0[]="stop";
u8 B1[]="two tigers";
u8 B2[]="happy newyear";
u8 B3[]="bitter_unforget";

void music_tea_seeds(u8 n){
		switch(n){
				case 0:{
						music_t.f=NULL;
						music_t.t=NULL;
						music_t.len=0;
						music_t.t_each=0;
						music_t.name=B0;
								};break;
				case 1:{
						music_t.f=music_two_tiger_f;
						music_t.t=music_two_tiger_t;
						music_t.len=music_two_tiger_len;
						music_t.t_each=music_two_tiger_t_echo;
						music_t.name=B1;
							}; break;
				case 2:{
						music_t.f=music_happy_newyear_f;
						music_t.t=music_happy_newyear_t;
						music_t.len=music_happy_newyear_len;
						music_t.t_each=music_happy_newyear_t_echo;
						music_t.name=B2;
							};break;
				case 3:{
						music_t.f=music_bitter_unforget_f;
						music_t.t=music_bitter_unforget_t;
						music_t.len=music_bitter_unforget_len;
						music_t.t_each=music_bitter_unforget_t_echo;
						music_t.name=B3;
							};break;
				case 4:{

								}; break;
				case 5:{

								};break;
						}
}

beep.c

#include "beep.h"
#include "music.h"
#include "tim.h"

#define TEA_VOL 99

/*
蜂鳴器根據(jù)頻率發(fā)聲音
note_f:頻率,取值來自于數(shù)組
vol:聲音,取值范圍區(qū)間:[0,100]
*/

void my_passive_buzzer_set(uint16_t note_f)
{
		/*計算自動重裝載值,計算新的頻率*/
		uint16_t Autoreload=(80000.0/(float)C_FREQ[note_f])-1;	
		/*計算音量*/
    uint16_t volume=(((float)Autoreload)/100.0)*TEA_VOL;
	  /*設(shè)置自動重裝載值*/
		__HAL_TIM_SET_AUTORELOAD(&htim4,Autoreload);	
	  /*設(shè)置音量*/
		__HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_2,volume);
	  /*情況計算值*/
		__HAL_TIM_SET_COUNTER(&htim4,0);
}

u32 paly_delay_ms=0;
void my_buzzer_play()
{
    static u8 last_flg=255;//記錄上一首歌
	
	  /*歌曲切換*/
	  if(last_flg!=music_t.now_flg)
			{
				music_t.now_len=0;
				music_code_get(music_t.now_flg);
				last_flg=mymusic_t.now_flg;
		  }
		if(music_t.now_flg==0)
			{
				passive_buzzer_set(0);
				return;
		  }
		if(paly_delay_ms==0)
			{
					paly_delay_ms=music_t.t_each*music_t.t[music_t.now_len];
					passive_buzzer_set(music_t.f[music_t.now_len]);
				
			  if(music_t.now_len>=(music_t.len-1))
					{
							music_t.now_len=0;
					}else
					{
							music_t.now_len++;
					}
			}else
			{
				 paly_delay_ms--;
			}
}

/*定時器1ms中斷*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
   if(htim->Instance == TIM2)
		 {
					buzzer_play();
     }
}


tim.c

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file    tim.c
  * @brief   This file provides code for the configuration
  *          of the TIM instances.
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2022 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "tim.h"

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

TIM_HandleTypeDef htim2;
TIM_HandleTypeDef htim4;

/* TIM2 init function */
void MX_TIM2_Init(void)
{

  /* USER CODE BEGIN TIM2_Init 0 */

  /* USER CODE END TIM2_Init 0 */

  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  TIM_MasterConfigTypeDef sMasterConfig = {0};

  /* USER CODE BEGIN TIM2_Init 1 */

  /* USER CODE END TIM2_Init 1 */
  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 7200-1;
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.Period = 9;
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  {
    Error_Handler();
  }
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN TIM2_Init 2 */

  /* USER CODE END TIM2_Init 2 */

}
/* TIM4 init function */
void MX_TIM4_Init(void)
{

  /* USER CODE BEGIN TIM4_Init 0 */

  /* USER CODE END TIM4_Init 0 */

  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  TIM_MasterConfigTypeDef sMasterConfig = {0};
  TIM_OC_InitTypeDef sConfigOC = {0};

  /* USER CODE BEGIN TIM4_Init 1 */

  /* USER CODE END TIM4_Init 1 */
  htim4.Instance = TIM4;
  htim4.Init.Prescaler = 9-1;
  htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim4.Init.Period = 65535-1;
  htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
  {
    Error_Handler();
  }
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 0;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN TIM4_Init 2 */

  /* USER CODE END TIM4_Init 2 */
  HAL_TIM_MspPostInit(&htim4);

}

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{

  if(tim_baseHandle->Instance==TIM2)
  {
  /* USER CODE BEGIN TIM2_MspInit 0 */

  /* USER CODE END TIM2_MspInit 0 */
    /* TIM2 clock enable */
    __HAL_RCC_TIM2_CLK_ENABLE();

    /* TIM2 interrupt Init */
    HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(TIM2_IRQn);
  /* USER CODE BEGIN TIM2_MspInit 1 */

  /* USER CODE END TIM2_MspInit 1 */
  }
  else if(tim_baseHandle->Instance==TIM4)
  {
  /* USER CODE BEGIN TIM4_MspInit 0 */

  /* USER CODE END TIM4_MspInit 0 */
    /* TIM4 clock enable */
    __HAL_RCC_TIM4_CLK_ENABLE();

    /* TIM4 interrupt Init */
    HAL_NVIC_SetPriority(TIM4_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(TIM4_IRQn);
  /* USER CODE BEGIN TIM4_MspInit 1 */

  /* USER CODE END TIM4_MspInit 1 */
  }
}
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(timHandle->Instance==TIM4)
  {
  /* USER CODE BEGIN TIM4_MspPostInit 0 */

  /* USER CODE END TIM4_MspPostInit 0 */

    __HAL_RCC_GPIOB_CLK_ENABLE();
    /**TIM4 GPIO Configuration
    PB7     ------> TIM4_CH2
    */
    GPIO_InitStruct.Pin = GPIO_PIN_7;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  /* USER CODE BEGIN TIM4_MspPostInit 1 */

  /* USER CODE END TIM4_MspPostInit 1 */
  }

}

void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
{

  if(tim_baseHandle->Instance==TIM2)
  {
  /* USER CODE BEGIN TIM2_MspDeInit 0 */

  /* USER CODE END TIM2_MspDeInit 0 */
    /* Peripheral clock disable */
    __HAL_RCC_TIM2_CLK_DISABLE();

    /* TIM2 interrupt Deinit */
    HAL_NVIC_DisableIRQ(TIM2_IRQn);
  /* USER CODE BEGIN TIM2_MspDeInit 1 */

  /* USER CODE END TIM2_MspDeInit 1 */
  }
  else if(tim_baseHandle->Instance==TIM4)
  {
  /* USER CODE BEGIN TIM4_MspDeInit 0 */

  /* USER CODE END TIM4_MspDeInit 0 */
    /* Peripheral clock disable */
    __HAL_RCC_TIM4_CLK_DISABLE();

    /* TIM4 interrupt Deinit */
    HAL_NVIC_DisableIRQ(TIM4_IRQn);
  /* USER CODE BEGIN TIM4_MspDeInit 1 */

  /* USER CODE END TIM4_MspDeInit 1 */
  }
}

/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

????????謝謝支持~文章來源地址http://www.zghlxwxcb.cn/news/detail-779054.html

到了這里,關(guān)于基于STM32制作的音樂播放器,用PWM控制蜂鳴器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 基于Arduino Uno開發(fā)板制作音樂播放器

    基于Arduino Uno開發(fā)板制作音樂播放器

    1.Arduino開發(fā)板 Arduino Uno 是一款基于 Microchip ATmega328P 微控制器的開源微控制器板,由 Arduino.cc 開發(fā),最初于 2010 年發(fā)布。該板配備了一組數(shù)字和模擬輸入/輸出 (I/O) 引腳,可以連接到各種擴展板(屏蔽)和其他電路。 該板具有 14 個數(shù)字 I/O 引腳(6 個能夠進行 PWM 輸出)、6 個

    2024年02月16日
    瀏覽(25)
  • 畢設(shè)分享 STM32的音樂播放器設(shè)計與實現(xiàn)(原理圖+源碼+論文)

    畢設(shè)分享 STM32的音樂播放器設(shè)計與實現(xiàn)(原理圖+源碼+論文)

    ?? 這兩年開始畢業(yè)設(shè)計和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點,往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長自己做的項目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計項目,今天

    2023年04月15日
    瀏覽(78)
  • 82、基于stm32單片機音樂噴泉設(shè)計播放器頻譜彩燈系統(tǒng)設(shè)計(程序+原理圖+參考論文+開題報告+任務(wù)書+設(shè)計資料+元器件清單等)

    82、基于stm32單片機音樂噴泉設(shè)計播放器頻譜彩燈系統(tǒng)設(shè)計(程序+原理圖+參考論文+開題報告+任務(wù)書+設(shè)計資料+元器件清單等)

    隨著人們生活水平的提高和建立綠色城市的向往,音樂噴泉以其獨特的魅力和特殊的功能,愈來愈成為休閑娛樂產(chǎn)業(yè)中的一項重要產(chǎn)品,音樂噴泉的興建也越來越多。 根據(jù)目前音樂噴泉的發(fā)展現(xiàn)狀,介紹了一個以STM32單片機為核心的小型音樂噴泉控制系統(tǒng)。給出了一個簡潔的單

    2024年02月12日
    瀏覽(108)
  • 單片機畢設(shè) STM32音樂播放器設(shè)計與實現(xiàn)(原理圖+源碼+論文)

    單片機畢設(shè) STM32音樂播放器設(shè)計與實現(xiàn)(原理圖+源碼+論文)

    ?? 這兩年開始畢業(yè)設(shè)計和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點,往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長自己做的項目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計項目,今天

    2024年02月05日
    瀏覽(39)
  • 通信工程畢設(shè) Stm32單片機的音樂播放器設(shè)計 - 物聯(lián)網(wǎng) 嵌入式

    通信工程畢設(shè) Stm32單片機的音樂播放器設(shè)計 - 物聯(lián)網(wǎng) 嵌入式

    ?? 這兩年開始畢業(yè)設(shè)計和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點,往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長自己做的項目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計項目,今天

    2024年02月19日
    瀏覽(102)
  • 【單片機畢設(shè)選題】Stm32單片機的音樂播放器設(shè)計 - 物聯(lián)網(wǎng) 嵌入式

    【單片機畢設(shè)選題】Stm32單片機的音樂播放器設(shè)計 - 物聯(lián)網(wǎng) 嵌入式

    ?? 這兩年開始畢業(yè)設(shè)計和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點,往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長自己做的項目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計項目,今天

    2024年02月20日
    瀏覽(35)
  • 【正點原子STM32連載】 第五十四章 音樂播放器實驗摘自【正點原子】STM32F103 戰(zhàn)艦開發(fā)指南V1.2

    【正點原子STM32連載】 第五十四章 音樂播放器實驗摘自【正點原子】STM32F103 戰(zhàn)艦開發(fā)指南V1.2

    1)實驗平臺:正點原子stm32f103戰(zhàn)艦開發(fā)板V4 2)平臺購買地址:https://detail.tmall.com/item.htm?id=609294757420 3)全套實驗源碼+手冊+視頻下載地址: http://www.openedv.com/thread-340252-1-1.html# 正點原子戰(zhàn)艦STM32F103板載了VS1053B這顆高性能音頻編解碼芯片,該芯片可以支持wav/mp3/wma/flac/ogg/midi

    2024年02月03日
    瀏覽(24)
  • Python爬蟲網(wǎng)易云音樂,Tkinter制作音樂播放器

    Python爬蟲網(wǎng)易云音樂,Tkinter制作音樂播放器

    目錄 一、效果展示 二、環(huán)境 三、實現(xiàn)過程 四、源碼 頁面的美化以及功能還有待升級~ 先來說一下已有功能吧: 可以在搜索框中通過歌曲或歌手名稱進行搜索,效果和在網(wǎng)易云官網(wǎng)搜索一樣。 點擊開始下載,就會將搜索結(jié)果的第一條歌曲下載到指定文件夾 下載完畢后,會遍

    2024年02月04日
    瀏覽(19)
  • 小案例:用Python制作音樂播放器

    小案例:用Python制作音樂播放器

    以下是音樂播放器要實現(xiàn)的功能: ? ? ? ? 1.可以通過打開存放音頻文件夾來添加音頻 ? ? ? ? 2.可以播放和暫停音頻 ? ? ? ? 3.可以設(shè)置播放音量 需要實現(xiàn)音頻播放器的模塊: ? ? ? ? 1. pygame 的音頻播放功能 ? ? ? ? 2. easygui 的 fileopenbox 函數(shù)與 os 的 listdir 函數(shù) ? ? ? ?

    2024年02月12日
    瀏覽(21)
  • Python功能制作之簡單的音樂播放器

    Python功能制作之簡單的音樂播放器

    pip?install?PyQt5 雙擊列表歌曲即播放。 按住下面的暫停和播放【需要圖標(biāo)】【空格也可以】 ?

    2024年02月11日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包