实验二-让喇叭连续发出5个不同频率

实验目的:请编写发音程序,要求让喇叭连续发出5个不同频率,不同音长的声音。

代码:

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "key.h"
#include "led.h"
#include "beep.h"
int main(void)
 {	
	delay_init();	    
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 
	KEY_Init();       
	LED_Init();	 
    BEEP_Init();  
	 
	 while(1)
	{	
		play_music();
	}
}

beep.c文件

#include "beep.h"
#include "delay.h"
 int melody[] = {50, 50, 50, 50, 200, 200, 200, 400, 400, 500, 500, 500};
void BEEP_Init(void)
{
GPIO_InitTypeDef  GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;	
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 	
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 
 GPIO_Init(GPIOB, &GPIO_InitStructure);	 
 GPIO_SetBits(GPIOB,GPIO_Pin_8);
}

void Sound(u16 frq)
{
	u32 time;
	if(frq != 1000)
	{
		time = 500000/((u32)frq);
		BEEP = 1;
		delay_us(time);
		BEEP = 0;
		delay_us(time);
	}else
		delay_us(1000);
}
void Sound2(u16 time)
{    BEEP = 1;
    delay_ms(time);
    BEEP = 0;
    delay_ms(time);}
void play_music(void)
{				
	uc16 tone[] = {262,294,330,349,392};	
	u8 music[]={1,2,3,4,5};
	u8 time[] ={1,2,3,4,5};
	
	u32 yanshi;
	u16 i,e;
	yanshi = 10;
	for(i=0;i<sizeof(music)/sizeof(music[0]);i++)
	{
		for(e=0;e<((u16)time[i])*tone[music[i]]/yanshi;e++)
		{
			Sound((u32)tone[music[i]]);
		}	
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值