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]); //
        }   
    }
}
上一篇 下一篇

猜你喜欢

热点阅读