
瑞萨单片机
细胞的大小-中国茶叶分类
2023年2月22日发(作者:护士xxxx)蜂鸣器和弦电路
以下是基于瑞萨单片机实现代码:
/******************************************************************************
**
文件:Beep.c
功能:蜂鸣器和弦音,定义三种音,关机,开机,单音
Author:,*****************
Time:2013.10.15
RecentModify:2013.10.16
******************************************************************************/
/*=======================以下是音调定义======================*/
#defineTone_C61
#defineTone_CS62
#defineTone_D63
#defineTone_DS64
#defineTone_E65
#defineTone_F66
#defineTone_FS67
#defineTone_G68
#defineTone_GS69
#defineTone_A610
#defineTone_AS611
#defineTone_B612
#defineTone_C713
#defineTone_CS714
#defineTone_D715
#defineTone_DS716
#defineTone_E717
#defineTone_F718
#defineTone_FS719
#defineTone_G720
#defineTone_GS721
#defineTone_A722
#defineTone_AS723
#defineTone_B724
#defineEND0//音频结束位
#defineSYS_FREQ8//MHZ系统时钟
#defineTIMER_CNT_BASE1000000*SYS_FREQ/2//定时器计数基数
#defineBUZZER_IOP3_1//BEEPIO
#defineBUZZER_OUTPM3_1=0//ModeOUT
#defineBUZZER_PULLPU3_1=1//Pullup
#definePWR_CTRLP13_0//蜂鸣器供电控制脚
#defineBUZZERIO_INIT{BUZZER_OUT;BUZZER_PULL;}
/*=========================音调频率表=======================*/
constuintTune_Tbl[24]=
{
//C6,CS6,D6,DS6,E6F6,FS6,G6,GS6,A6,AS6,B6
1047,1109,1175,1245,1319,1397,1480,1568,1661,1760,1865,1976,
//C7,CS7,D7,DS7,E7F7,FS7,G7,GS7,A7,AS7,B7
2093,2217,2349,2489,2637,2794,2960,3136,3322,3520,3729,3951,
};
/*======================关机和弦1,2,3...====================*/
constucharSound_ShutDown[10]=
{
Tone_C7,2,14,Tone_D7,2,6,Tone_E7,6,60,END
};
/*======================开机和弦3,2,1...====================*/
constucharSound_PowerOn[10]=
{
Tone_E7,2,6,Tone_D7,2,14,Tone_C7,6,60,END
};
/*======================单音和弦2...=======================*/
constucharSound_Single[10]=
{
Tone_D7,12,60,END,END,END,END,END,END,END,
};
#defineS_SHUTDOWN1//关机音
#defineS_POWERON2//开机音
#defineS_SINGLE3//单音
constuchar(*pSoundSel)[10];//选曲指针
structBE
{
uintCountFR;//定时器计数值,通过改变计数值改变音频频率
ucharPWR_time;//开启时间,单位为10mS
ucharFREQ_time;//音频供给时间,单位为10mS
ucharindex;//
}Beep;
volatileunion{ucharflag4;__BITS8flag4_bit;};
#defineBeep_ENflag4_0
#defineBeep_Finishflag4_1//和弦结束标志
/*=======================================================
函数名:Beep_On(ucharSoundSel)
传入参数:SoundSel
功能:选择声音种类
调用:外部调用
=========================================================*/
__calltvoidBeep_On(ucharSoundSel)
{
Beep_EN=1;
=0;
Beep_Finish=0;
switch(SoundSel)
{
caseS_SHUTDOWN:
pSoundSel=&Sound_ShutDown;
break;
caseS_POWERON:
pSoundSel=&Sound_PowerOn;
break;
caseS_SINGLE:
pSoundSel=&Sound_Single;
break;
default:
break;
}
}
/*=======================================================
函数名:Beep_set()
功能:蜂鸣器参数设置
调用:Beep_control()
=========================================================*/
__calltvoidBeep_set()
{
if((*pSoundSel)[]!=END)
{
R=(uint)(TIMER_CNT_BASE/Tune_Tbl[(*pSoundSel)[]-1]);
_time=(*pSoundSel)[+1];
_time=(*pSoundSel)[+2];
=+3;
}else{=0;PWR_CTRL=1;Beep_EN=0;Beep_Finish=1;}
return;
}
/*=======================================================
函数名:Beep_control()
功能:蜂鸣器控制
调用:每10ms调用一次
=========================================================*/
__calltvoidBeep_control()//每10mS调用一次
{
if(Beep_EN)
{
if(_time)
{
PWR_CTRL=0;//供电
_time--;
}
else
{
PWR_CTRL=1;//掉电,依靠电容放电实现和弦拖音
}
if(_time)
{
_time--;
CR000=R;
TOC00=0x03;
//TMC00=0X0C;//启动操作
}
else
{
TOC00=0x02;
//TMC00=0X00;//启动操作
Beep_set();
PWR_CTRL=0;//发声完毕,打开电源给电容充电
}
}
else
{
BUZZER_IO=0;
TOC00=0x02;
}
return;
}