C51 Proteus仿真实验23:蜂鸣器播放音乐
说明
程序运行后播放生日快乐歌曲
Proteus仿真
使用到的元器件:
单片机:AT89C51
电容:CAP
极性电容:CAP-ELEC
电阻:RES、RESPACK-8
晶振:CRYSTAL
蜂鸣器:SOUNDER
C51代码
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit Beep = P3^7;
//生日快乐歌的音符频率表,不同频率由不同的延时来决定
uchar code SONG_TONE[]=
{
212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,129,169,190,119,119,126,159,142,159,0
};
//生日快乐歌节拍表,节拍决定每个音符的演奏长短
uchar code SONG_LONG[]=
{
9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0
};
//延时
void DelayMs(uint ms)
{
uchar t;
while(ms--)
{
for(t=0;t<120;t++);
}
}
//播放音乐实现
void PlayMusic()
{
uint i =0,j,k;
while(SONG_LONG[i]!=0||SONG_TONE[i]!=0)
{
for(j=0;j<SONG_LONG[i]*20;j++)//循环控制音符的持续时间,SONG_LONG[i]*20决定每个音符的播放时长
{
Beep = ~Beep;
for(k=0;k<SONG_TONE[i]/3;k++);//循环控制音符的频率
}
DelayMs(10);
i++;
}
}
void main()
{
while(1)
{
PlayMusic();
DelayMs(500);//延时500ms后再重新播放
}
}