编写普中c51程序,蜂鸣器管脚为2.5,实现可以切换《两只老虎》、《世上只有妈妈好》、《烟花易冷》三首曲子
时间: 2023-06-27 10:01:14 浏览: 62
以下是一个简单的普中c51程序,可供参考:
```c
#include <reg51.h>
#define BUZZER P2_5
// 定义三个曲子的频率数组
unsigned int tiger[] = {262, 294, 330, 262, 262, 294, 330, 262, 330, 349, 392, 330, 349, 392, 392, 440, 392, 349, 330, 262, 392, 440, 392, 349, 330, 262, 262, 196, 262, 262, 196, 262};
unsigned int mother[] = {262, 294, 330, 330, 330, 294, 294, 262, 294, 262, 220, 262, 294, 330, 330, 330, 294, 294, 262, 294, 262, 220, 220, 262, 294, 262, 220, 262, 294, 330, 262};
unsigned int firework[] = {262, 262, 294, 330, 330, 294, 262, 262, 294, 330, 330, 294, 294, 330, 392, 330, 294, 262, 262, 294, 330, 330, 294, 262, 262, 294, 330, 330, 294, 294, 330, 392, 330, 294, 262, 294, 330, 262};
// 延时函数
void delay(unsigned int n)
{
unsigned int i, j;
for (i = 0; i < n; i++)
for (j = 0; j < 120; j++);
}
// 播放曲子函数
void play(unsigned int *song, unsigned int len)
{
unsigned int i;
for (i = 0; i < len; i++)
{
BUZZER = 1; // 发声
delay(song[i]); // 延时
BUZZER = 0; // 停止发声
delay(10); // 间隔一段时间再发声
}
}
void main()
{
while (1)
{
// 切换曲子
if (P1_0 == 0) // 第一个按钮按下,播放《两只老虎》
play(tiger, sizeof(tiger) / sizeof(unsigned int));
else if (P1_1 == 0) // 第二个按钮按下,播放《世上只有妈妈好》
play(mother, sizeof(mother) / sizeof(unsigned int));
else if (P1_2 == 0) // 第三个按钮按下,播放《烟花易冷》
play(firework, sizeof(firework) / sizeof(unsigned int));
}
}
```
这个程序中使用了 P2_5 作为蜂鸣器的管脚,使用 P1_0、P1_1、P1_2 作为切换曲子的按钮。在程序中,定义了三个曲子的频率数组,分别对应《两只老虎》、《世上只有妈妈好》、《烟花易冷》三首曲子。play() 函数用来播放曲子,delay() 函数用来进行延时。
程序中通过不断检测 P1_0、P1_1、P1_2 是否被按下来切换曲子。当一个按钮按下时,程序会调用 play() 函数播放对应的曲子。