单片机按键控制蜂鸣器发声程序(严选参考)
单片机控制蜂鸣器变化音调
单片机驱动蜂鸣器
作者:jdzj868 来源:机电之家下载站 录入:jdzj868
蜂鸣器使用在很多的场合,他一般用来发出报警或者提示的声音,是一种常用的电子器件,这里我给大家 简单的介绍一下用单片机驱动蜂鸣器的方法, 蜂鸣器有二种 1.本身带有驱动电路, 分 5v,9v,12v 超电压使用, 声音沙哑失真。2.象 call 机,喇叭一样,用软件驱动。频率控制音调,时间控制音量大小,第一种蜂鸣器 一般都有一个固定的频率参数也就是他他发出的声音是的一声。第 2 种就不同了用单片机驱动第 2 种蜂鸣器后还可以使他演奏出美妙的音乐,我们只需 要用简单的程序就可以控制单蜂鸣器所奏的频率,也就控制了音调。
c51 程序实例: 单片机驱动蜂鸣器演奏中华人民共和国国歌的前 4 节的 c51 程序: #include <REG52.h>
sbit BUZ=P2^6; //蜂鸣器接单片机的p2.6 电路很简单。 unsigned int hzs[]={131,147,165,175,196,220,247,262,294,330,349,392,440,494,523,587,659,698,784,880,988,1047,1175,131 9,1397,1568,1760,1976};//标准音调频率 char dots[]={8,28,10,12,12,13,28,28,12,28,10,28,8,12,12,12,10,28,28,8,28,5,5,5,5,5,5,8,'#'};//频率控制数组 void delay(unsigned int u) //延时 { while(u--); } void play_hz(unsigned int u) { unsigned int i=u; while(i--){ BUZ=0; BUZ=1; delay(18432/u-24);
单片机蜂鸣器发声代码
单片机蜂鸣器发声代码蜂鸣器是一种常见的电子元件,可以发出短促的蜂鸣声用于提醒或警示。
在单片机应用中,蜂鸣器可以用来作为声音提示的一种方式。
下面介绍一段单片机蜂鸣器的发声代码。
1. 引脚连接在使用单片机控制蜂鸣器发声之前,需要将蜂鸣器与单片机的引脚连接。
通常情况下,蜂鸣器有两个引脚,其中一个为正极,一个为负极。
将蜂鸣器的正极连接到单片机的一个IO口上,将负极连接到单片机的GND上。
2. 代码实现单片机发出频率为f的声音,需要将IO口以1/f的频率高低电平切换。
以下是一个基本的单片机蜂鸣器发声代码:#include 'reg51.h' //单片机头文件#define BEEP P1_5 //定义蜂鸣器连接的IO口void Delay(unsigned int Time) //延时函数{unsigned int i,j;for(i=Time;i>0;i--)for(j=110;j>0;j--);}void Beep(unsigned int Time) //发出一次蜂鸣声{BEEP = 0; //使IO口输出低电平Delay(Time); //延时BEEP = 1; //使IO口输出高电平Delay(Time); //延时}void main(void){while(1){Beep(100); //发出100ms的蜂鸣声}}在上述代码中,我们首先定义了蜂鸣器连接的IO口为P1_5,然后定义了一个延时函数Delay和一个发出蜂鸣声函数Beep。
Delay函数用于延时,Beep函数用于发出一次蜂鸣声。
在main函数中,我们使用一个while循环不停地发出蜂鸣声。
在Beep函数中,我们首先使IO口输出低电平,然后延时一段时间,再使IO口输出高电平,再延时一段时间,从而在IO口上形成一个频率为1/(2*Time)的方波信号,从而发出蜂鸣声。
3. 修改参数如果我们想要修改蜂鸣器发出的声音的频率和时长,只需要在Beep函数中修改Time的值即可。
用单片机驱动蜂鸣器的演奏说明
用单片机驱动蜂鸣器演奏的方法说明音的产生是由于物体的振动,通过单片机供电来控制蜂鸣器振动来发声。
单片机IO 口通过高低电平快速切换形成频率可以驱动蜂鸣器发音。
这样蜂鸣器就会以不同的音调“鸣响”。
这里主要理解“音调”和“节拍”两个概念。
音调表示一个音的频率是多少。
即就是音的高低。
在钢琴上,中央C 所在音阶的A ,(C D E F G A B )A 的频率作为基准频率,440Hz 。
同时,需要知道如果f2 = f1*2,则称f2是f1的高八度,即f2和f1的音名相同,高度高了一个音阶。
按照钢琴12平均律,将一个音阶的音均分成12份,那么每一个对应的音都可以计算出确定的频率了。
注意!八度音指频率加倍,将八度音分为12等份,是分为12个等比级数。
f2=f1*2,且f1*12q =f2,可以计算,这个等比数列的比值是q=122=1212=1.05946.为了实现不同音的频率,需要单片机通过定时器不停的产生中断,实现管脚电平反转,来产生相应频率。
这时定时器装载初始值如何计算呢?以标准A 为例,A (f=440Hz),T=1/f=1/440=0.00227273s=2272.73us ,即单片机管脚要输出周期为2272.73us 或者f=440Hz 的方波。
通过单片机定时中断来实现反转的话,考虑单片机定时器装载数值为多少才能形成2272us 的定时中断呢?假设系统时钟8MHz ,则x/8MHz=2272.73us ,x = 18181.1818... x 取整数18181,即定时器应装载18181,才能产生440Hz 的频率。
对应参考表格FIG1.音名 C C# D D# E F F# G G# A A# B 大字组频率f(Hz)65 69 73 78 82 87 92 98 104 110 117 123 周期T(us)15289 14431 13621 12856 12135 11454 10811 10204 9631 9091 8581 8099音名 c c# d d# e f f# g g# a a# b 小字组频率f(Hz)131 139 147 156 165 175 185 196 208 220 233 247 周期T(us)7644 7215 6810 6428 6067 5727 5405 5102 4816 4545 4290 4050音名c1(中央C)c1# d1 d1# e1 f1 f1# g1 g1#a1(基准音)a1# b1小字1组频率f(Hz)262 277 294 311 330 349 370 392 415 440 466 494 周期T(us)3822 3608 3405 3214 3034 2863 2703 2551 2408 2273 2145 2025音名c2 c2# d2 d2# e2 f2 f2# g2 g2# a2 a2# b2 小字2组频率f(Hz)523 554 587 622 659 698 740 784 831 880 932 988 周期T(us)1911 1804 1703 1607 1517 1432 1351 1276 1204 1136 1073 1012音名c3 c3# d3 d3# e3 f3 f3# g3 g3# a3 a3# b3 小字3组频率f(Hz)785 832 881 933 989 1048 1110 1176 1246 1320 1398 1482 周期T(us)1274 1203 1135 1071 1011 954 901 850 803 758 715 675FIG 1.节拍音乐的调号和节拍被表示成 1=C44或者1=G 43,其中的C,或者G 或者位于“=”之后的其他音名表示的意思是,以这个音名作为基础,唱作do 。
51单片机通过按键控制蜂鸣器发生详解
单片机开发报告院系:电子工程学院专业:自动化班级:自动化1401学号:8姓名:越指导老师:星光2018年01 月04 日一.系统任务按键控制蜂鸣器发声二.电路原理图三.程序设计容“叮咚”电子门铃实验程序:常见的家用电子门铃在有客人来访时候,如果按压门铃按钮时,室会发出“叮咚”声音,本实验程序模拟电子门铃的发音,当我们按压实验板上的K1按钮时候,蜂鸣器发出“叮咚”音乐声,是一个比较实用的程序。
使用无源蜂鸣器输出7个基本音阶声音是由物体振动所产生的。
只是由于物体的材料以及振幅、频率不同,而产生不同的声音。
声音的响度是由振幅决定的,而音调则是由频率决定的,那么我们只需要控制物体振动的频率,就可以发出固定的声调。
五.汇编程序ORG 0000HAJMP STARTORG 000BHINC 20H ;中断服务,中断计数器加1MOV TH0,#0D8HMOV TL0,#0F0H 12M晶振,形成10毫秒中断RETIORG 001BHLJMP INTT1 ;跳转到T1中断服务程序START: MOV DPTR,#00H ;初始化程序MOV A,#00HOBUF1 EQU 30HOBUF2 EQU 31HOBUF3 EQU 32HOBUF4 EQU 33HFLAGB BIT 00HSTOPB BIT 01HMOV SP,#50HMOV TH0,#0D8HMOV TL0,#0F0HMOV TMOD,#21HMOV TH1,#09HMOV TL1,#09HMOV IE,#8AHAJMP LOOPLOOP: JNB P3.2,MUSIC0JNB P3.1,MAINAJMP LOOPMAIN:JB P3.1,MAIN ;检测p3.1按钮LCALL YS10M ;延时去抖动JB P3.1,MAINSETB TR1 ;按钮有效MOV OBUF1,#00HMOV OBUF2,#00HMOV OBUF3,#00HMOV OBUF4,#00HCLR FLAGBCLR STOPBJNB STOPB,$AJMP START ;发出“叮咚”完毕,返回重新检测按钮YS10M: ;10ms延时子程序MOV R6,#20D1:MOV R7,#100DJNZ R7,$DJNZ R6,D1RETTING: AJMP STARTINTT1: ;定时器T1中断服务程序INC OBUF3 ;中断服务程序中发出一声“叮咚”响声MOV A,OBUF3CJNE A,#100,NEXTMOV OBUF3,#00HINC OBUF4MOV A,OBUF4CJNE A,#20,NEXTMOV OBUF4,#00HJB FLAGB,PGSTPCPL FLAGBAJMP NEXT PGSTP:SETB STOPBCLR TR1LJMP INT0RET NEXT:JB FLAGB,SOU2INC OBUF2MOV A,OBUF2CJNE A,#04H,INT0RETMOV OBUF2,#00HCPL P1.5LJMP INT0RETSOU2:INC OBUF1MOV A,OBUF1CJNE A,#05H,INT0RETMOV OBUF1,#00HCPL P1.5INT0RET:RETIMUSIC0: JB p3.2,MUSIC0LCALL YS10MJB p3.2,MUSIC0NOPMOV DPTR,#DAT 表头地址送DPTRMOV 20H,#00H ;中断计数器清0MOV B,#00H ;表序号清0 MAIN2: JNB P3.3,TINGCLR AMOVC A,A+DPTR ;查表取代码JZ END0 ;是00H,则结束CJNE A,#0FFH,MUSIC5LJMP MUSIC3MUSIC5:NOPMOV R6,AINC DPTRMOV A,BMOVC A,A+DPTR ;取节拍代码送R7MOV R7,ASETB TR0 ;启动计数MUSIC2:NOPCPL P1.5MOV A,R6MOV R3,ALCALL DELMOV A,R7CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否?;不等,则继续循环MOV 20H,#00H ;等于,则取下一代码INC DPTRINC BLJMP MAIN2MUSIC3: ;休止100毫秒NOPCLR TR0MOV R2,#0DHMUSIC4:NOPMOV R3,#0FFHLCALL DELDJNZ R2,MUSIC4INC DPTRLJMP MAIN2NOPMOV R2,#0FFH ;歌曲结束,延时MUSIC6:MOV R3,#00HLCALL DELDJNZ R2,MUSIC6CLR TR0LJMP LOOPDEL:NOPDEL3:MOV R4,#03HDEL4:NOPDJNZ R4,DEL4NOPDJNZ R3,DEL3RETDENG1: MOV R3,#64HDJNZ R3,$AJMP MAINDB30h,30h,26h,26h,20h,20h,1ch,1ch,1ah,1ah,18h,18h,00h END六、程序下载及调试步骤:1.点击translate 按钮预编译2.点击build 按钮编译3.点击rebuild 按钮编译所有目标4.打开普中烧录软件5.点击程序下载. . .. .. .四.程序流程图。
用按键控制蜂鸣器(1)
这部分 是整首 曲子的 接拍部 分,也 定义个 序列 duration,
int length;//定义一个变量用来表示共有多少个音符 int tonePin =11;//定义数字11 接口 int inpin=7;//定义数字7 接口 int val;//定义变量val
void setup() { pinMode(tonePin,OUTPUT);//定义小灯接口为输出接口 pinMode(inpin,INPUT);//定义按键接口为输入接口 length = sizeof(tune)/sizeof(tune[0]);//sizeof函数查出tone序列里有多少个音符
项目程序代码
及部分解释
#define NOTE_D0 -1 #define NOTE_D1 294 #define NOTE_D2 330 #define NOTE_D3 350 #define NOTE_D4 393 #define NOTE_D5 441 #define NOTE_D6 495 #define NOTE_D7 556 #define NOTE_DL1 147 #define NOTE_DL2 165 #define NOTE_DL3 175 #define NOTE_DL4 196 #define NOTE_DL5 221 #define NOTE_DL6 248 #define NOTE_DL7 278 #define NOTE_DH1 589 #define NOTE_DH2 661 #define NOTE_DH3 700 #define NOTE_DH4 786 #define NOTE_DH5 882 #define NOTE_DH6 990 #define NOTE_DH7 112 #define WHOLE 1 #define HALF 0.5 #define QUARTER 0.25 #define EIGHTH 0.25 #define SIXTEENTH 0.625
单片机蜂鸣器发声代码
单片机蜂鸣器发声代码
单片机蜂鸣器是单片机开发中经常使用的一种输出设备,在很多作品中都发挥着很重要的作用。
本文将介绍如何通过单片机控制蜂鸣器发出不同频率的声音。
一、硬件设计
我们需要使用一个蜂鸣器和一块单片机开发板,比如STC89C52。
蜂鸣器有正负两个针脚,需要将正极接到控制单片机的GPIO端口上,负极接地即可。
1. 预处理指令
首先需要在头文件中定义单片机的型号和所要使用的GPIO端口。
```
#include <STC89C5xRC.H> //使用STC89C52
#define buzz P2 //定义蜂鸣器控制口
```
2. 主函数
接下来就是核心部分,主函数中需要实现的就是通过改变GPIO口的电平来控制蜂鸣器发出不同频率的声音。
对于控制蜂鸣器发出持久的“滴滴声”,可以采用下面的程序:
程序中先将GPIO口输出低电平,等待一段时间后再输出高电平,蜂鸣器发出持续的“滴滴声”。
如果想控制蜂鸣器发出不同频率的声音,可以修改上述程序中的DelayMs()函数来设置不同的延时时间。
因为蜂鸣器的振动频率与输入信号的高低电平时间比例有关,所以延时时间变化会使输出的声音频率发生变化。
比如,如果想让蜂鸣器发出音调为“咳咳声”,可以改变延时时间来实现。
如此,蜂鸣器就发出了“咳咳声”。
以上就是单片机蜂鸣器发声的基本方法,不同的延时时间可以产生不同的声音效果,可以根据实际需要进行调整。
基于51单片机蜂鸣器发声的-C语言程序
本例使用延时函数实精品文档按键发音/* 名称:按键发音说明:按下不同的按键会是SOUNDE 发出不同频率的声音。
现不同频率的声音输出,以后也可使用定时器*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit BEEP=P3A 7;sbit K 仁 P1A4;sbit K2=P1A5;sbit K3=P1A6;sbit K4=P1A7;// 延时void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}// 按周期 t 发音void Play(uchar t){uchar i;for(i=0;i<100;i++){BEEP=~BEEP;DelayMS(t);}BEEP=0;}void main(){P1=0xff;BEEP=0;while(1){if(K1==0) Play(1);if(K2==0) Play(2);if(K3==0) Play(3);if(K4==0) Play(4);}}精品文档播放音乐/* 名称:播放音乐说明:程序运行时播放生日快乐歌, 未使用定时器中断,所有频率完全用延时 实现*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit BEEP=P3A7;// 生日快乐歌的音符频率表,不同频率由不同的延时来决定uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,159, 169,190,119,119,126,159,142,159,0};// 生日快乐歌节拍表,节拍决定每个音符的演奏长短uchar code SONG_LONG[]= {9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0};// 延时void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}// 播放函数void PlayMusic(){ uint i=0,j,k; while(SONG_LONG[i]!=0||SONG_TONE[i]!=0){ //播放各个音符,SONG_LON为拍子长度for(j=0;j<SONG_LONG[i]*20;j++){BEEP=~BEEP;〃SONG_TON延时表决定了每个音符的频率for(k=0;k<SONG_TONE[i]/3;k++);} DelayMS(10);i++;}}void main(){BEEP=0;while(1){PlayMusic(); // 播放生日快乐DelayMS(500); // 播放完后暂停一段时间}精品文档。
51单片机控制喇叭(蜂鸣器)简单发声,频率可调
/*-----------------------------------------------------------------------------------------------------------------------------------*//*--*************************功能:【喇叭发出声音,频率可调】*********************--*//*--*************************芯片:【STC12C5A60S2】******************************--*//*--*************************说明:【频率500Hz,单次发声时长1s】******************--*//*--*************************控制:【每按下P1.0一次,喇叭发声1s,长按一直发声】**--*//*------------------------------------------------------------------------------------------------------------------------------------*//*头文件*/#include <reg52.h>#include <intrins.h>sbitControl_Key = P1^0; //定义控制独立按键P1.0,按下发声。
sbitSpeaker_port = P2^7; //定义喇叭控制端口unsigned intnum = 8; //num = (4 * 1000) / Frequency(500Hz) : 决定喇叭的响应周期,从而决定不同的频率unsigned int counter0 = 0; //T0控制频率unsigned int counter1 = 0; //T1控制时长unsigned char Juge_Start; //判断发声1s是否开始。
毕业设计-单片机控制蜂鸣器
图3 JH51多功能实验板LED数码管部分电路图8 9 A B C D E F80H 90H 88H 83H 0C6H 0A1H 86H 8EH数码管显示程序请参考51多功能单片机综合测试程序,LED数码管显示部分。
.按键输入口的P3.0~P3.3接了K1~K4共4 个按钮开关,用作键盘。
.字符型液晶接口液晶显示器由于体积小、重量轻、功耗低等优点,日渐成为各种便携式电子产品的理想显示器。
从液晶显示器显示内容来分,可分为段式、字符式和点阵式三种。
其中字符式液晶显示器以其价廉、显示内容丰富、美观、无须定制、使用方便等特点成为LED显示器的理想替代品。
字符型液晶显示器专门用于显示数图形符号并可显示少量自定义符号。
这类显示器均把LCDvoid T1_ISR() interrupt 3{ TR1 = 0;TH1 = ReloadH;TL1 = ReloadL;TR1 = 1;SPEAKER = !SPEAKER; //音乐声频的半个波}/************************************************************* 函数:Delay()功能:延时0.001~65.536s参数:t>0时,延时(t*0.001)st=0时,延时65.536s*************************************************************/ void Delay(unsigned int t){ do{ TH0 = 0xFC; //定时器赋初值,定时1msTL0 = 0x66+17;TR0 = 1; //启动定时器while ( !TF0 ); //等待定时器溢出TR0 = 0; //关闭定时器TF0 = 0; //清除溢出标志} while ( --t != 0 ); //循环t次}/*********************************************************** 函数:Sound()功能:演奏一个音符参数:*note,音符指针,指向要演奏的音符***********************************************************/ void Sound(CNote *note){ //利用定时器T1发出音符的频率if ( note->mFreq != 0 ){ ReloadH = (unsigned char)(note->mFreq >> 8);ReloadL = (unsigned char)(note->mFreq);TH1 = 0xFF;TL1 = 0xF0;TR1 = 1;}Delay(note->mDelay); //发声延时TR1 = 0; //停止发声TF1 = 0;SPEAKER = 1;Delay(5);}/************************************************************ 函数:Play()功能:演奏一段乐曲参数:music[],要演奏的乐曲*************************************************************/ void Play(CNote music[]){ unsigned int n = 0;while(1){ if ( music[n].mDelay == 0 ) break;Sound(&(music[n]));n++;}}#include "MusicTab.h" //包含乐曲头文件void main() //主程序{unsigned int i,j;TMOD = 0x11; //设定时器EA = 1;ET1 = 1;成绩评定。
通过按键控制蜂鸣器
嵌入式系统设计与开发实验一:通过按键控制蜂鸣器所在系(院):学生姓名:指导教师:起止日期:实验目的:了解ARM2131开发板;搭建JLINK开发环境;运行第一个嵌入式程序参考书本:P44,P1541、实验电路图2、实验流程图开始P0.7选择接GPIO设置P0.7为输出状态置位P0.7口,关闭蜂鸣器延时清零P0.7,蜂鸣器鸣叫延时3、程序清单#ifndef __CONFIG_H_#include "config.h"#endifvoid WaitKey(void){uint32 i;while(1){ // 等待KEY1按下(即等待KEY1对应的口线为低电平,若为高电平则一直循环等待) // 通过IO0PIN读取P0.0~P0.31口的电平值,屏蔽其它位后判断P0.7是否为低电平。
while( (IO0PIN&KEY1)!=0 );for(i=0; i<50000; i++); // 软件延时,去抖动(根据系统时钟调整)// 判断KEY1是否仍为低电平,若是表明按键有效,否则表明是假按键if((IO0PIN&KEY1) == 0) break;}// 等待KEY1放开(即等待KEY1对应的口线为高电平,若为低电平则一直循环等待)while((IO0PIN&KEY1) == 0);}****************************************************************************************** ** 函数名称: DelayNS()** 函数功能:长软件延时。
** 入口参数: dly 延时控制值,值越大延时越长** 出口参数:无****************************************************************************************** */void DelayNS(uint32 dly){ uint32 i;for(; dly>0; dly--)for(i=0; i<50000; i++);}/******************************************************************************************* ** 名称: main()** 功能:初始化GPIO,然后等待KEY1按键,若有按键则控制蜂鸣器响两声。
单片机控制蜂鸣器发声(分析“蜂鸣器”文档)共6张PPT
掌握蜂鸣器的驱动电路
理解蜂鸣器发声的程序设计
பைடு நூலகம்
1.蜂鸣器的分类
蜂鸣器分为电磁式蜂鸣器和压电式蜂鸣器两种。
从结构上蜂鸣器分为有源和无源两种。
电磁式蜂鸣器
有源蜂鸣器
压电式蜂鸣器
无源蜂鸣器
2.蜂鸣器的驱动电路
杜邦线
知识回顾
蜂鸣器的分类和驱动电路 1KHZ方波的程序设计
单片机控制蜂鸣器发声
学习目标
从1有蜂从从理理从理有 从有 有从从蜂有从理从从 有有从1从从从有从有 理有1有有理蜂从KKK结源鸣结结解解结解源结源源结结鸣源结解结结源源结结结结源结源解源源源解鸣结HHHZZZ构 蜂 器 构 构 蜂 蜂 构 蜂 蜂构 蜂蜂 构 构 器 蜂 构 蜂 构 构蜂 蜂 构 构 构 构 蜂 构 蜂蜂 蜂 蜂 蜂 蜂 器 构方方方上鸣分上上鸣鸣上鸣鸣 上鸣 鸣上上分鸣上鸣上上 鸣鸣上上上上鸣上鸣 鸣鸣鸣鸣鸣分上波波波蜂器为蜂蜂器器蜂器器 蜂器 器蜂蜂为器蜂器蜂蜂 器器蜂蜂蜂蜂器蜂器 器器器器器为蜂的的的鸣电鸣鸣发发鸣发鸣鸣鸣电鸣发鸣鸣 鸣鸣鸣鸣鸣发发电鸣程程程器磁器器声声器声器器器磁器声器器 器器器器器声声磁器了序序序分式分分的的分的分分分式分的分分 分分分分分的的式分设设设解为蜂为为程程为程为为为蜂为程为为 为为为为为程程蜂为计计计有鸣有有序序有序有有有鸣有序有有 有有有有有序序鸣有蜂源器源源设设源设源源源器源设源源源源源源源设设器源鸣和和和和计计和计和和和计和和 和和和和和计计和和器无压无无无无无无压无无无 无无无无无压无的源电源源源源源源电源源源 源源源源源电源无无 无 无无无无无无 无无无两式两两两两两两式两两两 两两两两两式两分源源 源 源源源源源源 源源源种蜂种种种种种种蜂种种种 种种种种种蜂种蜂蜂 蜂 蜂蜂蜂蜂蜂蜂 蜂蜂蜂类。鸣。。。。。。鸣。。。 。。。。。鸣。鸣鸣 鸣 鸣鸣鸣鸣鸣鸣 鸣鸣鸣器器器器器 器 器器器器器器 器器器两两两种种种。。。