实验目的:请编写发音程序,要求让喇叭连续发出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]]);
}
}
}