在C51中用蜂鸣器来播放音乐
时间: 2023-05-16 20:07:43 浏览: 142
可以使用定时器和蜂鸣器来实现在C51中播放音乐的功能。具体实现方法可以参考以下代码:
```
#include <reg51.h>
// 定义音符频率
#define C4 262
#define D4 294
#define E4 330
#define F4 349
#define G4 392
#define A4 440
#define B4 494
// 定义音符时长
#define W 1000
#define H 500
#define Q 250
#define E 125
// 定义蜂鸣器控制端口
sbit BEEP=P1^5;
// 定义定时器0的初值
#define T0_INIT_VALUE (65536 - 1000)
// 定义定时器0中断处理函数
void timer0_isr() interrupt 1
{
static unsigned char count = 0;
count++;
if (count == 1) {
BEEP = 1;
} else if (count == 2) {
BEEP = 0;
} else if (count == 3) {
BEEP = 1;
} else if (count == 4) {
BEEP = 0;
count = 0;
}
}
// 主函数
void main()
{
// 初始化定时器0
TMOD |= 0x01; // 定时器0工作在模式1
TH0 = T0_INIT_VALUE / 256;
TL0 = T0_INIT_VALUE % 256;
ET0 = 1; // 允许定时器0中断
EA = 1; // 允许总中断
TR0 = 1; // 启动定时器0
// 播放音乐
while (1) {
// C4
TH0 = (65536 - C4) / 256;
TL0 = (65536 - C4) % 256;
delay(W);
// D4
TH0 = (65536 - D4) / 256;
TL0 = (65536 - D4) % 256;
delay(W);
// E4
TH0 = (65536 - E4) / 256;
TL0 = (65536 - E4) % 256;
delay(W);
// F4
TH0 = (65536 - F4) / 256;
TL0 = (65536 - F4) % 256;
delay(W);
// G4
TH0 = (65536 - G4) / 256;
TL0 = (65536 - G4) % 256;
delay(W);
// A4
TH0 = (65536 - A4) / 256;
TL0 = (65536 - A4) % 256;
delay(W);
// B4
TH0 = (65536 - B4) / 256;
TL0 = (65536 - B4) % 256;
delay(W);
}
}
// 延时函数
void delay(unsigned int t)
{
unsigned int i, j;
for (i = 0; i < t; i++) {
for (j = 0; j < 120; j++);
}
}
```