整理蜂鸣器和弦音发声控制

上传人:夏** 文档编号:459959492 上传时间:2023-02-19 格式:DOCX 页数:13 大小:59.33KB
返回 下载 相关 举报
整理蜂鸣器和弦音发声控制_第1页
第1页 / 共13页
整理蜂鸣器和弦音发声控制_第2页
第2页 / 共13页
整理蜂鸣器和弦音发声控制_第3页
第3页 / 共13页
整理蜂鸣器和弦音发声控制_第4页
第4页 / 共13页
整理蜂鸣器和弦音发声控制_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《整理蜂鸣器和弦音发声控制》由会员分享,可在线阅读,更多相关《整理蜂鸣器和弦音发声控制(13页珍藏版)》请在金锄头文库上搜索。

1、精品文档蜂鸣器和弦咅发声限制前言:现在一些带按键显示限制面板的家电比拟常见的是柜式空调在按键操作 的时候会有悦耳的和弦音发出,特别是开关机或操作上下键时会有不同变调的和弦 音,相比普通的嘀嘀声给人更愉悦的操作体验.1. 限制方式说明此处以型号为SH2225T2PA的蜂鸣器谐振频率2.6KHz 为例.蜂鸣器模块有两 个驱动引脚与MCU相连,一个是振荡信号输入引脚,由MCU提供相应频率的方波 信号驱动蜂鸣器发声,一个是供电限制端,供电切断后蜂鸣器靠电解电容放电维持 其发声,会有音量渐渐变小的效果.原理图如下所示,MC9为供电限制端,MC8为振荡信号输入端.MC9为高电平时, 三极管Q4导通,然后Q

2、2导通,蜂鸣器开始供电,同时电容 CD2充电.假设MC8 有一定频率的方波信号发出,那么蜂鸣器可发出鸣叫.假设此时先关掉供电,即MC9置低电平,MC8依然发出方波信号,那么蜂鸣器可依靠 CD2放电发出声音,但随着 电容电量减少,音量会逐渐减小,形成蜂鸣声渐隐的和弦音效果.要实现变调的效 果,那么可通过短时间内切换发出几种不同频率的蜂鸣声来实现.41 ZVBUZI 1K IME I0斗 S9D1J?40F2SHI2C精品文档MC3 fy以下是3种比拟典型的和弦音的实现细节:符号说明:Tf :频率给定持续时间ms Tv :电压给定持续时间ms F:输出频率KHz单声和弦音:短暂鸣响后音量渐隐F=2

3、.6,Tv=200,Tf=1000开机和弦音:三升调,按音调分3个阶段1. F=2.3,Tv=200,Tf=2002. F=2.6,Tv=200,Tf=2003. F=2.9,Tv=100,Tf=2100关机和弦音:三降调,按音调分3个阶段1. F=2.9,Tv=200,Tf=2002. F=2.6,Tv=200,Tf=2003. F=2.3,Tv=100,Tf=21002. 编程实例MCU : STM8S903K3 开发环境:STVD 4.1.6+Cosmic 4.2.8/* buzzer.h 文件 */?Copy to clipboardView CodeC1 #ifndef _BUZZE

4、R_H2 #defi ne _BUZZER_H33 #i nclude commo n.h4 #i nclude beep.h5 typedef enum7r8MONO = 0,/单音9POLY_ON = 1,/开机和弦10POLY_OFF = 2/关机和弦11 卜 Tone_Type ;/蜂鸣器声音类型12131typedefstruct14r15FREQ_Type Freq;/频率16u8 OSCTime ;/振荡持续时间,最小单位为10ms17u8 PWRTime ;/供电持续时间,最小单位为10ms18 卜 TONE_Def ;/音调结构体1920 void BuzzerStart(T

5、on e_Type Ton eType;21 void BuzzerCtrl(void );22235#en dif /* _BUZZER_H */* buzzer.c 文件 */?Copy to clipboardView CodeC12345678910111213141516171819#in elude buzzer.hcon st TONE_Def Ton e1= FREQ_2K6 ,100 ,20 , FREQ_NO,0, 0 ; /单音con st TONE_Def Ton e2= FREQ_2K3 ,20 ,20 , FREQ_2K6 ,20 ,20 , FREQ_2K9 ,2

6、10 ,10,FREQ_NO, 0,0 ; /开机和弦音con st TONE_Def Ton e3= FREQ_2K9 ,20 ,20 , FREQ_2K6 ,20 ,20 , FREQ_2K3 ,210 ,10,FREQ_NO, 0,0;关机和弦音TONE_Def * pTone ;static u8 BuzzerStatus= 0;/蜂鸣器启动,需要发声时调用void BuzzerStart(Ton e_Type Ton eType)switch ( Ton eType )case MONO:pTone = Tone1 ;break ;case POLY ON :202122232425

7、26272829303132333435363738pTone = Tone2breakcase POLY OFFpTone = Tone3breakdefaultpTone = Tone1breakBuzzerStatus= 0;/蜂鸣器限制,每10ms执行一次void BuzzerCtrl (void )staticTONE_Def Toneswitch ( BuzzerStatus )39404142434445464748495051525354555657case 0:Tone = * pTone/非结束符if (Tone. Freq != FREQ_NO )/先判断供电持续时间if

8、 ( Tone. PWRTime !=0)Tone.PWRTime -;BeepPwrOn(); elseBuzzerStatus= 2;break ;/再判断振荡持续时间if (Tone. OSCTime !=0)Tone.OSCTime -;精品文档58596061626364656667686970717273747576精品文档BEEP_SetFreq(Tone. Freq );BEEP_On();elseBeepPwrOff();BuzzerStatus= 2;break ;/判断完成,开始递减计时BuzzerStatus= 1;/是结束符else/* Ton e.Freq = FR

9、EQ_NO */BuzzerStatus= 2;break ;case 1:if (To ne. PWRTime !=0)Tone. PWRTime -;elseBeepPwrOff();if(To ne. OSCTime != 0)Tone. OSCTime -;elseBEEP_Off ();pTone+;/取下一个音调BuzzerStatus= 0;break ;精品文档77787980818283848586878889909192939495精品文档default精品文档96 break97 以上代码中,BEEP_Off() , BEEP_On() , BeepPwrOff() ,

10、BEEP_SetFreq()都在头 文件beep.h中声明,由底层代码实现.上层代码只需在主循环中每 10ms调用一次BuzzerCtrl()函数,在需要发音的地方调 用一次BuzzerStart()函数,即可实现和弦音的播放了.思维拓展:依据以上代码的结构,可以很容易的通过定义 TONE_Def数组实现任意 节奏,任意曲调的输出.如下段:/两只老虎(两只老虎两只老虎 跑得快 跑得?Copy to clipboardView Code Ccon st TONE_Def Tone4 = 快FREQ_2K,25 ,25,1FREQ_2K3,25,25,2FREQ_2K6,25,25,3FREQ_2

11、K,25 ,25,1 FREQ_2K ,25 ,25 , 1 FREQ_2K3 ,25 ,25 , 2 FREQ_2K6 ,25 ,25 , 3精品文档 FREQ_2K ,25 ,25 , 11011121314151617 FREQ_2K3 ,25, FREQ_2K6 ,25, FREQ_2K9 ,50, FREQ_2K3 ,25, FREQ_2K6 ,25, FREQ_2K9 ,100 ,FREQ_NO,;25 , 225 , 325 , 4稍有停顿25 , 225 , 325 , 4 和弦效果0, 0 /停止当然,你可以添加一些按键,为每个按键设定一个特定音调的和弦音输出,就做成 一个电子琴了,音质很不错的哦:.精品文档

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 演讲稿/致辞

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号