用C语言写一个可以控制C51单片机蜂鸣器的能播放小星星的代码
时间: 2023-05-30 14:02:44 浏览: 2291
由于C51单片机的具体型号和硬件连接方式不同,因此无法提供通用的代码。以下代码仅供参考,需要根据实际情况进行修改和调试。
```
#include <reg51.h>
#define BEEP P2
unsigned int music[] = { // 小星星音乐频率表
659, 659, 880, 880, 987, 987, 880, 0,
784, 784, 699, 699, 659, 659, 587, 0,
880, 880, 784, 784, 699, 699, 659, 0,
880, 880, 784, 784, 699, 699, 659, 0,
659, 659, 880, 880, 987, 987, 880, 0,
784, 784, 699, 699, 659, 659, 587, 0,
880, 880, 784, 784, 699, 699, 659, 0,
880, 880, 784, 784, 699, 699, 659, 0,
659, 659, 880, 880, 987, 987, 880, 0,
784, 784, 699, 699, 659, 659, 587, 0,
880, 880, 784, 784, 699, 699, 659, 0,
880, 880, 784, 784, 699, 699, 659, 0,
659, 659, 880, 880, 987, 987, 880, 0,
784, 784, 699, 699, 659, 659, 587, 0,
880, 880, 784, 784, 699, 699, 659, 0,
880, 880, 784, 784, 699, 699, 587, 0
};
unsigned int duration[] = { // 小星星音乐节拍表
500, 500, 1000, 500, 500, 1000, 500, 500,
1000, 500, 500, 1000, 500, 500, 1000, 500,
1000, 500, 500, 1000, 500, 500, 1000, 500,
1000, 500, 500, 1000, 500, 500, 1000, 500,
500, 500, 1000, 500, 500, 1000, 500, 500,
1000, 500, 500, 1000, 500, 500, 1000, 500,
1000, 500, 500, 1000, 500, 500, 1000, 500,
1000, 500, 500, 1000, 500, 500, 1000, 500,
500, 500, 1000, 500, 500, 1000, 500, 500,
1000, 500, 500, 1000, 500, 500, 1000, 500,
1000, 500, 500, 1000, 500, 500, 1000, 500,
1000, 500, 500, 1000, 500, 500, 1000, 500,
500, 500, 1000, 500, 500, 1000, 500, 500,
1000, 500, 500, 1000, 500, 500, 1000, 500,
1000, 500, 500, 1000, 500, 500, 1000, 500,
1000, 500, 500, 1000, 500, 500, 2000, 0
};
void delay(unsigned int t) { // 延时函数
unsigned int i, j;
for (i = 0; i < t; i++)
for (j = 0; j < 120; j++);
}
void main() {
unsigned int i, j;
while (1) {
for (i = 0; i < sizeof(music) / sizeof(music[0]); i++) {
if (music[i] == 0) { // 暂停
delay(duration[i]);
} else { // 发声
for (j = 0; j < duration[i] * 1000 / music[i] / 2; j++) {
BEEP = ~BEEP;
delay(1);
}
}
}
}
}
```
以上代码实现了一个可以播放小星星的程序。其中,`music`数组为小星星音乐频率表,`duration`数组为小星星音乐节拍表,`delay()`函数为延时函数,`main()`函数为主函数。
在主函数中,使用一个无限循环,不断地按照音乐频率表和节拍表发声或暂停。发声时,通过循环计算每个音符需要的时间,然后在这个时间内交替控制蜂鸣器输出高低电平,从而发出声音。
需要注意的是,以上代码中使用的是简单的软件延时方式,可能导致实际播放的音乐与预期有偏差。如果需要更精确的播放效果,可以使用定时器或其他硬件方式实现延时。
阅读全文