用51单片机写一个蜂鸣器播放音乐的代码
时间: 2024-01-24 19:05:36 浏览: 222
好的,以下是用51单片机控制蜂鸣器播放音乐的代码:
```
#include <reg51.h> //头文件
#define uint unsigned int //宏定义
#define uchar unsigned char
sbit beep=P1^5; //定义引脚
uchar code music[]={ //音乐数据
0x3c,0x3c,0x42,0x42,0x42,0x3c,0x42,0x3c,
0x3c,0x3c,0x42,0x42,0x42,0x3c,0x3c,0x00,
0x24,0x24,0x18,0x18,0x18,0x24,0x18,0x24,
0x24,0x24,0x18,0x18,0x18,0x24,0x24,0x00,
0x42,0x42,0x5a,0x5a,0x5a,0x66,0x5a,0x42,
0x42,0x42,0x5a,0x5a,0x5a,0x66,0x5a,0x00,
0x24,0x24,0x24,0x24,0x24,0x24,0x18,0x24,
0x24,0x24,0x24,0x24,0x24,0x24,0x18,0x00,
0x3c,0x3c,0x5a,0x5a,0x66,0x66,0x5a,0x3c,
0x3c,0x3c,0x5a,0x5a,0x66,0x66,0x5a,0x00
};
void delay(uint xms) //延时函数
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
uchar i,j;
while(1)
{
for(j=0;j<8;j++) //循环播放音乐
{
for(i=0;i<16;i++) //播放一小节
{
beep=music[j*16+i]&0x01; //取出最后一位
delay(music[j*16+i]>>1); //取出除最后一位的部分
beep=0; //关闭蜂鸣器
delay(1); //间隔一下
}
delay(100); //小节之间的间隔
}
}
}
```
该代码中定义了一个音乐数组,其中每个元素都代表了一小节音乐的数据,每个元素的最后一位表示蜂鸣器的状态(1为开启,0为关闭),除最后一位的部分表示延时的时间,通过这个时间来控制音乐的节奏。在主函数中,通过循环播放音乐来实现蜂鸣器的音乐播放功能。
阅读全文