stm32蜂鸣器实现播放音乐的库函数实现及优化

#include "sys.h"	
#include "delay.h"	
#include "led.h" 
#include "beep.h" 
 


int pyte=1000;
int blank=150;
void duo(int ms)
{
int time=ms*1000/3900;
while(time>0)
{
	BEEP=1;	
	delay_us(100);
	BEEP=0;
	delay_us(3800);
	time--;
}
}
void re(int ms)
{
int time=ms*1000/3500;
while(time>0)
{
	BEEP=1;	
	delay_us(100);
	BEEP=0;
	delay_us(3400);
	time--;

}
}
void mi(int ms)
{
int time=ms*1000/3133;
while(time>0)
{
	BEEP=1;	
	delay_us(100);
	BEEP=0;
	delay_us(3033);
	time--;
}
}
void fa(int ms)
{
int time=ms*1000/2963;
while(time>0)
{
	BEEP=1;	
	delay_us(100);
	BEEP=0;
	delay_us(2863);
	time--;
}
}
void so(int ms)
{
int time=ms*1000/2651;
while(time>0)
{
	BEEP=1;	
	delay_us(100);
	BEEP=0;
	delay_us(2551);
	time--;
}
}
void la(int ms)
{
int time=ms*1000/2372;
while(time>0)
{
	BEEP=1;	
	delay_us(100);
	BEEP=0;
	delay_us(2272);
	time--;
}
}
void si(int ms)
{
int time=ms*1000/2125;
while(time>0)
{
	BEEP=1;	
	delay_us(100);
	BEEP=0;
	delay_us(2025);
	time--;
}
}
void bfm(int note)
{
switch(note){
    case 1:
       duo(pyte);
       break; 
    case 2:
       re(pyte);
       break; 
    case 3:
       duo(pyte);
       break; 
    case 4:
       re(pyte);
       break; 
		case 5:
       duo(pyte);
       break; 
    case 6:
       re(pyte);
       break; 
		case 7:
       duo(pyte);
       break; 

   
    default : 
       duo(pyte);
}
}

 int main(void)
 {	
	char song[]="115566544332215544332554433211556654433221";
	 int i=0;
	 
	 
	delay_init();	    	
	LED_Init();		  	 	
	BEEP_Init();         	
	
	 BEEP=0;
duo(1000);
	 re(1000);
	 mi(1000);
	 bfm(4);
	 bfm(5);
	 bfm(6);
	 
	 while (song[i] != '\0') {
        int value = song[i] - '0';
        bfm(value);
		 BEEP=0;
		 delay_ms(blank);
        i++;
    }

//	while(1)
//	{
//		
//		LED0=0;
//		BEEP=1;		  
//		delay_ms(1000);
//		LED0=1;	  
//		BEEP=0;  
//		delay_ms(1000);
//	}
 }

#include "sys.h"	
#include "delay.h"	
#include "led.h" 
#include "beep.h" 
 
// 以国际标准音A-la-440HZ为准:do的频率为261.
// 6HZ,re的频率为293.6HZ,mi的频率为329.6HZ,
// fa的频率为349.2HZ,sol的频率为392HZ,la的频率为440HZ,si的频率为493.8HZ

float highbeepratio=0.5;

int pyte=1000;
int blank=150;

void duo(int ms)
{
int t=1000000/261.6;   //3822us
int time=(ms*1000)/t;
while(time>0)
{
		
	int beep_on=highbeepratio*t;
  int beep_off=t-highbeepratio*t;
	BEEP=1;
	delay_us(beep_on);
	BEEP=0;
	delay_us(beep_off);
	time--;
}
}
void re(int ms)
{
int t=1000000/293.6;   //3822us
int time=(ms*1000)/t;
while(time>0)
{
		
	int beep_on=highbeepratio*t;
    int beep_off=t-highbeepratio*t;
	BEEP=1;
	delay_us(beep_on);
	BEEP=0;
	delay_us(beep_off);
	time--;
}
}
void mi(int ms)
{
int t=1000000/329.6;   //3822us
int time=(ms*1000)/t;
while(time>0)
{
		
	int beep_on=highbeepratio*t;
    int beep_off=t-highbeepratio*t;
	BEEP=1;
	delay_us(beep_on);
	BEEP=0;
	delay_us(beep_off);
	time--;
}
}
void fa(int ms)
{
int t=1000000/349.2;   //3822us
int time=(ms*1000)/t;
while(time>0)
{
		
	int beep_on=highbeepratio*t;
    int beep_off=t-highbeepratio*t;
	BEEP=1;
	delay_us(beep_on);
	BEEP=0;
	delay_us(beep_off);
	time--;
}
}
void so(int ms)
{
int t=1000000/392;   //3822us
int time=(ms*1000)/t;
while(time>0)
{
		
	int beep_on=highbeepratio*t;
    int beep_off=t-highbeepratio*t;
	BEEP=1;
	delay_us(beep_on);
	BEEP=0;
	delay_us(beep_off);
	time--;
}
}
void la(int ms)
{
int t=1000000/440;   //3822us
int time=(ms*1000)/t;
while(time>0)
{
		
	int beep_on=highbeepratio*t;
    int beep_off=t-highbeepratio*t;
	BEEP=1;
	delay_us(beep_on);
	BEEP=0;
	delay_us(beep_off);
	time--;
}
}
void si(int ms)
{
int t=1000000/493.8;   //3822us
int time=(ms*1000)/t;
while(time>0)
{
		
	int beep_on=highbeepratio*t;
    int beep_off=t-highbeepratio*t;
	BEEP=1;
	delay_us(beep_on);
	BEEP=0;
	delay_us(beep_off);
	time--;
}
}
void bfm(int note)
{
switch(note){
    case 1:
       duo(pyte);
       break; 
    case 2:
       re(pyte);
       break; 
    case 3:
       duo(pyte);
       break; 
    case 4:
       re(pyte);
       break; 
		case 5:
       duo(pyte);
       break; 
    case 6:
       re(pyte);
       break; 
		case 7:
       duo(pyte);
       break; 

   
    default : 
       duo(pyte);
}
}

 int main(void)
 {	
	char song[]="115566544332215544332554433211556654433221";
	 int i=0;
	 
	 
	delay_init();	    	
	LED_Init();		  	 	
	BEEP_Init();         	
	
	 BEEP=0;
duo(1000);
	 re(1000);
	 mi(1000);
	 bfm(4);
	 bfm(5);
	 bfm(6);
	 
	 while (song[i] != '\0') {
        int value = song[i] - '0';
        bfm(value);
		 BEEP=0;
		 delay_ms(blank);
        i++;
    }

//	while(1)
//	{
//		
//		LED0=0;
//		BEEP=1;		  
//		delay_ms(1000);//锟斤拷时300ms
//		LED0=1;	  
//		BEEP=0;  
//		delay_ms(1000);//锟斤拷时300ms
//	}
 }

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值