蜂鸣器

本文详细介绍了蜂鸣器的工作原理,包括无源和有源蜂鸣器的区别。通过实例展示了如何让蜂鸣器响起来,并探讨了使用延迟函数驱动蜂鸣器的问题。接着,重点讲解了利用定时器精确控制蜂鸣器音调的方法,解决了延迟函数的时间精度问题。此外,还讨论了如何通过编程使蜂鸣器发出滴滴声乃至唱歌,为电子爱好者提供了实践指导。
摘要由CSDN通过智能技术生成

1 蜂鸣器的原理

1.1 无源蜂鸣器原理

(1)早期的蜂鸣器都是无源的。

(2)内部结构和材料。

(3)发声原理。

(4)控制信号,是高低电平相间的方波。

(5)电路图。

这里写图片描述

(6)音调如何控制,音调受震动频率控制,就等于控制信号的频率。频率越高音调越高,听起来越刺耳。

(7)声音大小如何控制,由硬件决定的,没法写代码去控制声音大小。

1.2 有源蜂鸣器

(1)无源蜂鸣器的缺陷,必须用频率信号驱动,有时候不具备这个条件。

(2)内置震荡电路后形成有源蜂鸣器。

(3)有源蜂鸣器也可以用频率信号驱动。

2 让蜂鸣器响起来

(1)接线确定。P0.0接到J8上面。

(2)最简单:使用delay让蜂鸣器响起来。

(3)调节delay时间感受音调变化。

#include <reg51.h>


sbit BUZZER = P0^0;                 // buzzer的驱动引脚


void delay(void)
{
    unsigned char i, j;

    for (i=0; i<5; i++)
        for (j=0; j<5; j++);
}


void main(void)
{
    while (1)
    {
        BUZZER = 1;
        delay();
        BUZZER = 0;
        delay();
    }
}


3 用定时器控制蜂鸣器音调

3.1 上节驱动方法的问题

(1)不容易精准控制时间。

(2)CPU控制蜂鸣器中不能做其他事。

3.2 定时器控制蜂鸣器响

(1)10KHz => 1/10000s => 100us =>高电平+低电平一共100us,那高电平和低电平的时间都是50us。所以要定的时间就是50us
(2)外部晶振12MHz + 12T设置 => 内部时钟频率1MHz => 1us => 65536-50。

#include <reg51.h>


sbit BUZZER = P0^0;                 // buzzer的驱动引脚

#define XKHZ    2                   // 要定多少Khz,就直接写这里
#define US      (500/XKHZ)
#define N       (65535-US)


void timer0_isr(void) interrupt 1 using 1
{
    TL0 = N % 256;
    TH0 = N / 256;

    BUZZER = !BUZZER;
}



void main(void)
{
    TMOD = 0x01;        // T0使用16bit定时器
    TL0 = N % 256;
    TH0 = N / 256;

    TR0 = 1;            // T0打开开始计数
    ET0 = 1;            // T0中断允许
    EA = 1;             // 总中断允许

    BUZZER = 1;

    while
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值