美文网首页
MIDI音乐播放(STM 32)

MIDI音乐播放(STM 32)

作者: tomato_20fc | 来源:发表于2019-02-24 10:23 被阅读0次

利用蜂鸣器发出一段音乐,此例程只写了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]); //
        }   
    }
}

相关文章

网友评论

      本文标题:MIDI音乐播放(STM 32)

      本文链接:https://www.haomeiwen.com/subject/csdvyqtx.html