MIDI音乐播放(STM 32)
2019-02-24 本文已影响0人
tomato_20fc
利用蜂鸣器发出一段音乐,此例程只写了buzzer的消息响应,main函数请自己添加
<buzzer.h>***************************
#include "buzzer.h"
#include "delay.h"
void BUZZER_Init(void){
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = BUZZER;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(BUZZERPORT, &GPIO_InitStructure);
GPIO_WriteBit(BUZZERPORT,BUZZER,(BitAction)(1)); //蜂鸣器初始化 不响
}
void BUZZER_BEEP1(void){ //
u16 i;
for(i=0;i<200;i++){
GPIO_WriteBit(BUZZERPORT,BUZZER,(BitAction)(0)); //
delay_us(500); //
GPIO_WriteBit(BUZZERPORT,BUZZER,(BitAction)(1)); //
delay_us(500); //
}
}
uc16 music1[78]={ //奇数是音调 也就是频率 偶数是时间长度(单位ms),只读的16位无符号变量
330,750,
440,375,
494,375,
523,750,
587,375,
659,375,
587,750,
494,375,
392,375,
440,1500,
330,750,
440,375,
494,375,
523,750,
587,375,
659,375,
587,750,
494,375,
392,375,
784,1500,
659,750,
698,375,
784,375,
880,750,
784,375,
698,375,
659,750,
587,750,
659,750,
523,375,
494,375,
440,750,
440,375,
494,375,
523,750,
523,750,
494,750,
392,750,
440,3000
};
void MIDI_PLAY(void){ //MIDI响应函数
u16 i,e;
for(i=0;i<39;i++){//39是此例程有39个音符 所以循环39次
for(e=0;e<music1[i*2]*music1[i*2+1]/1000;e++){
GPIO_WriteBit(BUZZERPORT,BUZZER,(BitAction)(0)); //for循环的e<music1[i*2]*music1[i*2+1]/1000表示 music1[i*2+1]时间播放多少次
delay_us(500000/music1[i*2]); //高低电平各为0.5s
GPIO_WriteBit(BUZZERPORT,BUZZER,(BitAction)(1)); //
delay_us(500000/music1[i*2]); //
}
}
}