logo资料库

stm32蜂鸣器播放音乐.doc

第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
资料共12页,剩余部分请下载后查看
******************************************************************** 羲和 QQ394492028 ********************************************************************* #include const unsigned int MusicDataD[7] = {262,293,329,349,392,440,494}; 1~7 //低音 const unsigned int MusicData[7] = {523,586,658,697,783,879,987}; //中音 1~7 const unsigned int MusicDataG[7] = {1045,1171,1316,1393,1563,1755,1971}; //高音 1~7 unsigned int i=0,choose=0,PlayWord,jie; unsigned int Music_Code[][500]= { {0x16,0x02, 0x16,0x03, 0x17,0x03, 0x15,0x02, 0x0F,0x03, 0x0F,0x03, 0x16,0x03, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x15,0x16, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x15,0x03, 0x15,0x04, 0x16,0x04, 0x16,0x16, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x15,0x03, 0x15,0x03, 0x15,0x03, 0x16,0x04, 0x15,0x04, 0x11,0x02, 0x16,0x03, 0x16,0x03, 0x16,0x03, 0x17,0x03, 0x15,0x02, 0x0F,0x03, 0x0F,0x03, 0x16,0x03, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x15,0x16, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x15,0x03, 0x15,0x04, 0x16,0x04, 0x16,0x16, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x19,0x03, 0x19,0x02, 0x00,0x00, 0x0F,0x03, 0x10,0x03, 0x15,0x02, 0x16,0x03, 0x17,0x03,
0x19,0x02, 0x17,0x03, 0x19,0x03, 0x1A,0x03, 0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x17,0x02, 0x16,0x03, 0x17,0x03, 0x19,0x03, 0x17,0x03, 0x17,0x03, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x0F,0x01, 0x00,0x00 }, {0x1A,0x66, 0x19,0x03, 0x17,0x02, 0x19,0x02, 0x1F,0x02, 0x1A,0x03, 0x19,0x03, 0x1A,0x01, 0x17,0x02, 0x19,0x03, 0x1A,0x03, 0x19,0x02, 0x17,0x02, 0x15,0x03, 0x10,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x01, 0x00,0x00}, { 0x0B,0x02, 0x0C,0x02, 0x0D,0x02, 0x0E,0x02, 0x0F,0x02,0x10,0x02, 0x11,0x02, 0x15,0x02, 0x16,0x02, 0x17,0x02, 0x18,0x02, 0x19,0x02, 0x1A,0x02, 0x1B,0x02, 0x1F,0x02,0x20,0x02, 0x21,0x02, 0x22,0x02, 0x23,0x02, 0x24,0x02, 0x25,0x02, 0x00,0x00 }, }; void RCC_config(void); void GPIO_config(void); void PWM_TIMER_config(void); void Music(unsigned int yin) { switch (yin) { case 0x0B: PlayWord = MusicDataD[0]; break; case 0x0C: PlayWord = MusicDataD[1]; break; case 0x0D: PlayWord = MusicDataD[2];
break; case 0x0E: PlayWord = MusicDataD[3]; break; case 0x0F: PlayWord = MusicDataD[4]; break; case 0x10: PlayWord = MusicDataD[5]; break; case 0x11: PlayWord = MusicDataD[6]; break; case 0x15: PlayWord = MusicData[0]; break; case 0x16: PlayWord = MusicData[1]; break; case 0x17: PlayWord = MusicData[2]; break; case 0x18: PlayWord = MusicData[3]; break; case 0x19: PlayWord = MusicData[4]; break; case 0x1a: PlayWord = MusicData[5];
break; case 0x1b: PlayWord = MusicData[6]; break; case 0x1f: PlayWord = MusicDataG[0]; break; case 0x20: PlayWord = MusicDataG[1]; break; case 0x21: PlayWord = MusicDataG[2]; break; case 0x22: PlayWord = MusicDataG[3]; break; case 0x23: PlayWord = MusicDataG[4]; break; case 0x24: PlayWord = MusicDataG[5]; break; case 0x25: PlayWord = MusicDataG[6]; break; default: PlayWord = 0;//表示无声音 break; } }
void jiepai(unsigned int yin) { switch (yin) { case 0x00: jie =1600; case 0x01: jie =800; case 0x02: jie =400; break; case 0x03: jie = 200; break; case 0x04: jie= 100; break; case 0x66: jie= 600; } } void GPIO_config(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //部分映射,将 TIM2_CH1 映射到 PB5 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //选择引脚 5
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出频率最大 50MHz GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin= GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 GPIO_Pin_7 ; | GPIO_Pin_6 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 最高输出速率 50Hz GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化 GPIOA } void Delay(unsigned int t) //节拍延时 { unsigned int m,n; for(m=0; m
} } void NVIC_Config(void) { NVIC_InitTypeDef NVIC_InitStructure;//定义结构体变量 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //选择优先级组 NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//主优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //次优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断 NVIC_Init(&NVIC_InitStructure); } void Ext_Init() { EXTI_InitTypeDef EXTn_Init; GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource8); GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource9); EXTn_Init.EXTI_Line=EXTI_Line8|EXTI_Line9;//选择中断线 EXTn_Init.EXTI_Mode=EXTI_Mode_Interrupt;//中断方式 EXTn_Init.EXTI_Trigger=EXTI_Trigger_Rising;//触发方式_Falling EXTn_Init.EXTI_LineCmd=ENABLE;//使能 EXTI_DeInit(); EXTI_Init(&EXTn_Init); }//外部中断配置初始化 int main(void)
{ } RCC_config(); GPIO_config(); NVIC_Config(); Ext_Init(); while(1) { Music(Music_Code[choose][i]); i++; jiepai(Music_Code[choose][i]) ; i++; PWM_TIMER_config(); TIM_Cmd(TIM3, ENABLE); //使能 TIM3 计时器,开始输出 PWM Delay(jie); if(choose==5) {choose=0;} } void RCC_config() { ErrorStatus HSEStartUpStatus; //定义错误状态变量 RCC_DeInit(); //将 RCC 寄存器重新设置为默认值 RCC_HSEConfig(RCC_HSE_ON); //打开外部高速时钟晶振 HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待外部高速时钟晶振 工作 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
分享到:
收藏