51单片机蜂鸣器播放音乐
时间: 2023-08-29 21:05:35 浏览: 145
单片机蜂鸣器可以通过PWM调制输出频率来播放音乐。以下是一个简单的程序示例:
```
#include <reg51.h>
// 定义音符频率数组,以及对应的定时器计数值
unsigned int freq[] = {262, 294, 330, 349, 392, 440, 494, 523};
unsigned int tmr[] = {3034, 2702, 2408, 2272, 2024, 1805, 1608, 1517};
void delay(unsigned int t) {
while(t--);
}
void play(int note) {
TMOD |= 0x01; // 设置定时器0为16位自动重装模式
TH0 = (65536 - tmr[note]) / 256; // 设置定时器0高8位
TL0 = (65536 - tmr[note]) % 256; // 设置定时器0低8位
TR0 = 1; // 启动定时器0
while(TF0 == 0); // 等待定时器0计时完成
TR0 = 0; // 关闭定时器0
TF0 = 0; // 清除定时器0计时标志
}
void main() {
unsigned int i, j;
while(1) {
for(i = 0; i < 8; i++) { // 循环播放音符
for(j = 0; j < 100; j++) { // 每个音符持续100ms
play(i);
delay(500); // 间隔500us
}
}
}
}
```
上述程序中,定义了一个`freq`数组和一个`tmr`数组,分别存储了8个常见音符的频率和对应的定时器计数值。`delay`函数用于延时,`play`函数用于播放指定的音符。
在`main`函数中,使用嵌套循环播放8个音符,每个音符持续100ms,并且在每个音符之间间隔500us。
需要注意的是,单片机蜂鸣器的声音很难听,无法播放高质量的音乐。如果需要播放高质量的音乐,建议使用外部音频输出设备。
阅读全文