51单片机 蜂鸣器

发布者:VelvetWhisper最新更新时间:2017-01-08 来源: eefocus关键字:51单片机  蜂鸣器 手机看文章 扫描二维码
随时随地手机看文章

蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。三极管的作用为驱动,通过三极管放大驱动电流,从而可以让蜂鸣器发出声音。

 

有源蜂鸣器和无源蜂鸣器的区别:

这里的“源”不是指电源。而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。 
而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。 
有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。 
无源蜂鸣器的优点是:1。便宜,2。声音频率可控,可以做出“多来米发索拉西”的效果。3。在一些特例中,可以和LED复用一个控制口 有源蜂鸣器的优点是:程序控制方便 。

 

 

 

例程,参考自网络。

  1 /************************************************************************  

  2 [文件名]  C51音乐程序(八月桂花)  

  3 [功能]    通过单片机演奏音乐  

  4   

  5 /**********************************************************************/   

  6 #include    

  7 #include    

  8 //本例采用89C52, 晶振为11.0592MHZ    

  9 //关于如何编制音乐代码, 其实十分简单,各位可以看以下代码.    

 10 //频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;    

 11 //所以拿出谱子, 试探编吧!    

 12 

 13 sbit Beep =  P1^5 ; 

 14    

 15 unsigned char n=0;  //n为节拍常数变量    

 16 unsigned char code music_tab[] ={   

 17 0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数,    

 18 0x20, 0x40, 0x1C , 0x10,   

 19 0x18, 0x10, 0x20 , 0x10,   

 20 0x1C, 0x10, 0x18 , 0x40,   

 21 0x1C, 0x20, 0x20 , 0x20,   

 22 0x1C, 0x20, 0x18 , 0x20,   

 23 0x20, 0x80, 0xFF , 0x20,   

 24 0x30, 0x1C, 0x10 , 0x18,   

 25 0x20, 0x15, 0x20 , 0x1C,   

 26 0x20, 0x20, 0x20 , 0x26,   

 27 0x40, 0x20, 0x20 , 0x2B,   

 28 0x20, 0x26, 0x20 , 0x20,   

 29 0x20, 0x30, 0x80 , 0xFF,   

 30 0x20, 0x20, 0x1C , 0x10,   

 31 0x18, 0x10, 0x20 , 0x20,   

 32 0x26, 0x20, 0x2B , 0x20,   

 33 0x30, 0x20, 0x2B , 0x40,   

 34 0x20, 0x20, 0x1C , 0x10,   

 35 0x18, 0x10, 0x20 , 0x20,   

 36 0x26, 0x20, 0x2B , 0x20,   

 37 0x30, 0x20, 0x2B , 0x40,   

 38 0x20, 0x30, 0x1C , 0x10,   

 39 0x18, 0x20, 0x15 , 0x20,   

 40 0x1C, 0x20, 0x20 , 0x20,   

 41 0x26, 0x40, 0x20 , 0x20,   

 42 0x2B, 0x20, 0x26 , 0x20,   

 43 0x20, 0x20, 0x30 , 0x80,   

 44 0x20, 0x30, 0x1C , 0x10,   

 45 0x20, 0x10, 0x1C , 0x10,   

 46 0x20, 0x20, 0x26 , 0x20,   

 47 0x2B, 0x20, 0x30 , 0x20,   

 48 0x2B, 0x40, 0x20 , 0x15,   

 49 0x1F, 0x05, 0x20 , 0x10,   

 50 0x1C, 0x10, 0x20 , 0x20,   

 51 0x26, 0x20, 0x2B , 0x20,   

 52 0x30, 0x20, 0x2B , 0x40,   

 53 0x20, 0x30, 0x1C , 0x10,   

 54 0x18, 0x20, 0x15 , 0x20,   

 55 0x1C, 0x20, 0x20 , 0x20,   

 56 0x26, 0x40, 0x20 , 0x20,   

 57 0x2B, 0x20, 0x26 , 0x20,   

 58 0x20, 0x20, 0x30 , 0x30,   

 59 0x20, 0x30, 0x1C , 0x10,   

 60 0x18, 0x40, 0x1C , 0x20,   

 61 0x20, 0x20, 0x26 , 0x40,   

 62 0x13, 0x60, 0x18 , 0x20,   

 63 0x15, 0x40, 0x13 , 0x40,   

 64 0x18, 0x80, 0x00   

 65 };   

 66    

 67 void int0()  interrupt 1   //采用中断0 控制节拍    

 68 {  TH0=0xd8;   

 69    TL0=0xef;   

 70    n--;   

 71 }   

 72    

 73 void delay (unsigned char m)   //控制频率延时    

 74 {   

 75  unsigned i=3*m;   

 76  while(--i);   

 77 }   

 78    

 79 void delayms(unsigned char a)  //豪秒延时子程序    

 80 {   

 81   while(--a);                  //采用while(--a) 不要采用while(a--); 各位可编译一下看看汇编结果就知道了!    

 82 }   

 83    

 84 void main()   

 85 { unsigned char p,m;   //m为频率常数变量    

 86   unsigned char i=0;   

 87   TMOD&=0x0f;   

 88   TMOD|=0x01;   

 89   TH0=0xd8;TL0=0xef;   

 90   IE=0x82;   

 91 play:   

 92    while(1)   

 93     {   

 94     a: p=music_tab[i];   

 95        if(p==0x00)       { i=0, delayms(1000); goto play;}     //如果碰到结束符,延时1秒,回到开始再来一遍    

 96        else if(p==0xff)  { i=i+1;delayms(100),TR0=0; goto a;}  //若碰到休止符,延时100ms,继续取下一音符    

 97             else         {m=music_tab[i++], n=music_tab[i++];}  //取频率常数 和 节拍常数    

 98              TR0=1;                                             //开定时器1    

 99            while(n!=0) Beep=~Beep,delay(m);                         //等待节拍完成, 通过P1口输出音频(可多声道哦!)    

100        TR0=0;                                             //关定时器1    

101     }   

102 }  


关键字:51单片机  蜂鸣器 引用地址:51单片机 蜂鸣器

上一篇:51单片机 AD转换
下一篇:51单片机 按键,键盘检测

推荐阅读最新更新时间:2024-03-16 15:29

一种基于51单片机的多任务机制及应用
引言 传统的单片机程序一般采用单任务机制,单任务系统具有简单直观、易于控制的优点。然而由于程序只能按顺序依次执行,缺乏灵活性,只能使用中断函数实时地处理一些较短的任务,在较复杂的应用中使用极为不便。嵌入式多任务操作系统的出现解决了这个问题。在多任务系统中,可以同时执行多个并行任务,任务之间可以相互跳转。但是嵌入式操作系统在提供强大功能的同时,也带来了代码量大、结构复杂、对硬件要求较高、开发难度大且成本高等问题。而很多时候只需要实现简单的多任务操作就可以满足实际需要,本文设计的这种简单的多任务机制,在只增加极少量C语言代码的前提下,不需使用汇编,无需对原本的程序进行大改动,就可以实现多任务操作。 实时操作系统RTOS的
[单片机]
一种基于<font color='red'>51单片机</font>的多任务机制及应用
基于51单片机实现继电器控制照明设备
具体功能实现: 当按下开关时,继电器闭合点亮照明设备(灯泡) 使用器件: 照明设备(LAMP)、按键、AT89C51、若干电阻、PNP晶体管、二极管、继电器(RTE24005F) Proteus仿真原理图: 仿真: 知识介绍: Proteus布线 为了让整个原理图看上去简洁明了,我们对元器件的导线进行标号,而不是直接和芯片相连。 继电器驱动电路原理 主要代码(C语言)KEIL5实现: #include reg52.h #define uchar unsigned char #define uint unsigned int sbit K1 = P1^0; sbit RELAY = P2^4; v
[单片机]
基于51单片机的高级计算器设计
本设计是基于51单片机科学型计算器。 能够实现的功能包括: (1) 四则运算(加、减、乘、除) (2) 带小数点数据的运算(小数点后面最多8位) (3) 有符号数据运算。 (4) sin、cos、tan、log函数的运算(如果要实现其他的函数运算,也可以,只是按键个数有限。其他的函数包括幂函数、ln函数,绝对值函数,反三角函数等)。 (5) 输入数据最多八位,运算结果最大是99999999。超过数据结果自动显示EEEEEEEE (6)本系统还自带时钟功能,并可以进行修改时间、设置闹钟等功能。 本系统首先使用protues7.8进行仿真,并最后在硬件上进行实现。 总的仿真图: 仿真结果:
[单片机]
基于<font color='red'>51单片机</font>的高级计算器设计
关于MCS-51单片机实现PWM的方法
关于MCS-51单片机实现PWM的方法 PWM 是 脉冲宽度调制 的意思。 PWM 实际上是在单片机的某个引脚输出一系列的矩形波,其周期一般是固定的;而其高电平、低电平所占用的时间,是可以受控调整的。高电平、低电平所占用的时间之比,称为占空比,其值为0~1之间。PWM 的应用很广,简单的说,它可以控制灯光的亮度、可以控制直流电机的转速,甚至还可以输出语音信号。 新型的单片机,往往都含有硬件的 PWM 模块,编写程序就很简单;而老式的MCS-51系列,就不具备这个条件。 其实,在没有 PWM 硬件的单片机上实现 PWM,也并不难,只需一个定时器,令其工作在中断方式即可。下面以网上的一个题目为例,说明实现 PWM 方法。 题目链接:ht
[单片机]
51单片机十进制整数与二进制整数转换汇编语言子程序
==================================== 【4位十进制整数转换为二进制整数子程序】 入口:十进制整数千位数RAM址存于R0,百位数、十位数、个位数RAM址依次加1; 返回值:转换所得二进制整数存于R3(高字节)R4(低字节)。 DtoB: MOV R2, #4 ;;R2←递减的循环次数初值 MOV A, @R0 MOV R4, A ;;R4←千位数 LP1 : MOV A, R4 ;;R3R4←(R3)(R4)*10 MOV B, #10 MUL AB MOV R4, A MOV B, #10 XCH A
[单片机]
基于51单片机制作的六位数显多路定时电子钟
这里介绍的电子钟,电路可称得上极简,它仅使用单片的20引脚单片机完成电子钟的全部功能,而笔者见到的其它设计方案均采用二片以上的多片IC实现。  一片20引脚的单片机STC2032(引脚排列与AT89C2051完全相同)为电子钟主体,其显示笔画数据从P1口分时输出,P3口则输出对应的六位选通信号。由于LED数码管点亮时耗电较大,故不能使用AT89C2051单片来完成,但是可以可以用STC89C2032来完成。另外,本站制作时用超高亮的发光二极管代替昂贵的大数码管,成本低,效果独特。 本电子钟设计有三个轻触式按键,这里我们分别命名为:模式设定键K1、加调整键K2、减调整键K3。由于STC89C2032内部已经集成有复位电阻,所以,
[单片机]
51单片机蜂鸣器程序
#include reg52.h typedef unsigned char u8; typedef unsigned int u16; sbit beep=P1^5; void delay(u16 i) { while(i--); } void main() { while(1) { beep=~beep; delay(1000);//控制音调频率 beep=~beep;/控制声音大小 delay(10); } }
[单片机]
机器人教程1:如何利用51单片机输出PWM波
1、理论知识 PWM这个功能在飞思卡尔、STM32等高档的单片机内部有专用的模块,用此类芯片实现PWM功能时只需要通过设置相应的寄存器就可实现周期和占空比的控制。但是如果要用51单片机的话,也是可以的,但是比较的麻烦。此时需要用到内部定时器来实现,可用两个定时器实现,也可以用一个定时器实现。 用两个定时器的方法是用定时器T0来控制频率,定时器T1来控制占空比。大致的的编程思路是这样的:T0定时器中断让一个I0口输出高电平,在这个定时器T0的中断当中起动定时器T1,而这个T1是让IO口输出低电平,这样改变定时器T0的初值就可以改变频率,改变定时器T1的初值就可以改变占空比。 下面重点介绍用一个定时器的实现PWM的方法。因为
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved