本课程详细讲解了如何通过单片机控制蜂鸣器发声,包括硬件连接、软件编程等环节,适用于初学者学习基础电子和嵌入式系统开发。
### 单片机蜂鸣器电路图及程序详解
#### 一、蜂鸣器类型及其原理
##### 1.1 压电式蜂鸣器
- **结构**:利用压电陶瓷片的逆压电效应产生振动发声,通常体积较小。
- **特点**:电流较小,适用于低功耗场合。
##### 1.2 电磁式蜂鸣器
- **结构**:通过线圈通电产生磁场,带动金属膜片振动发声。
- **特点**:体积较小,电流相对较大,适用于需要较大声音的场合。
#### 二、蜂鸣器的驱动方式
##### 2.1 有源蜂鸣器
- **定义**:内部自带振荡源,只需提供直流电压即可发声。
- **优点**:使用方便,只需要电平信号即可控制发声。
- **应用场景**:适合需要简单提示音的场合。
##### 2.2 无源蜂鸣器
- **定义**:内部不带振荡源,需要外部提供特定频率的脉冲信号才能发声。
- **优点**:成本较低,可调节音调,实现更多功能(如播放简单的音乐)。
- **应用场景**:适合需要可编程控制音调的应用场景。
#### 三、单片机控制蜂鸣器电路设计
##### 3.1 电路原理
- **三极管驱动**:由于蜂鸣器工作时需要较大的电流,故采用三极管进行驱动。
- **限流电阻**:加入100Ω的限流电阻,防止蜂鸣器因电流过大而损坏。
- **续流二极管**:为了保护电路,避免蜂鸣器断电瞬间产生的反向电动势对电路造成损害,加入续流二极管(D4)。
##### 3.2 续流二极管的作用
- **原理**:当三极管导通时,电流流过蜂鸣器;当三极管截止时,蜂鸣器中的电流不能突然消失,会通过续流二极管形成闭合回路,释放能量。
- **好处**:有效避免了电路中因断电瞬间产生的反向冲击电压对其他电子元件的损害。
#### 四、单片机控制蜂鸣器程序设计
##### 4.1 基本发声程序
- **程序结构**:
- 初始化定时器T0。
- 设置定时器重载值,以实现特定频率的脉冲信号输出。
- 启动定时器,通过中断反转BUZZ引脚电平实现蜂鸣器的启停控制。
```c
#include
sbit BUZZ = P1^6; // 蜂鸣器控制引脚
unsigned char T0RH = 0; // T0重载值的高字节
unsigned char T0RL = 0; // T0重载值的低字节
void OpenBuzz(unsigned int frequ);
void StopBuzz();
void main() {
unsigned int i;
TMOD = 0x01; // 配置T0工作在模式1
EA = 1;
while (1) { // 使能全局中断
OpenBuzz(4000); // 以4KHz的频率启动蜂鸣器
for (i = 0; i < 1000; i++);
}
}
// 蜂鸣器停止函数
void StopBuzz() {
ET0 = 0; // 禁用T0中断
TR0 = 0; // 停止T0
}
// T0中断服务函数,用于控制蜂鸣器发声
void InterruptTimer0() interrupt 1 {
TH0 = T0RH; // 重新加载重载值
TL0 = T0RL;
BUZZ = ~BUZZ; // 反转蜂鸣器控制电平
}
```
##### 4.2 播放简单音乐程序
- **程序结构**:
- 定义音阶频率列表和对应的定时器重载值。
- 通过循环读取不同的音符频率,调整定时器重载值,实现不同音阶的发声。
```c
#include
sbit BUZZ = P1^6; // 蜂鸣器控制引脚
unsigned int code NoteFrequ[] = { // 中音1-7和高音1-7对应频率列表
523, 587, 659, 698, 784, 880, 988,
1047, 1175,