#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit BEEP=P1^5;
//生日快乐歌的音符频率表,不同频率由不同的延时来决定
uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,
212,212,106,126,159,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 xms)/ / 延时程序
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void xg0()// 效果 0
{
uint a,b;
a=0xee;
delayms(1000);//延时 1 秒
for(b=4;b>0;b--)// 点亮次数
{ P0=a;//灯 1 和 5 亮
delayms(1000);
a=_crol_(a,1);// 循环左移 1 位
}
}
void xg1()// 效果 1
{
uint a,b;
a=0x77;
delayms(1000);
for(b=4;b>0;b--)
{ P0=a;//灯 4 和 8 亮
delayms(1000);
a=_cror_(a,1);// 循环右移 1 位
}
}
void xg2()// 效果 2
{
P0=0xe7;//灯 4 与 5 亮
delayms(1000);
P0=0xdb;// 灯 3 和 6 亮
delayms(1000);
P0=0xbd;// 灯 2 和 7 亮
delayms(1000);
P0=0x7e;//灯 1 和 8 亮
delayms(1000);
}
void xg3()// 效果 3
{
P0=0x7e;//灯 1 和 8 亮
delayms(1000);
P0=0xbd;// 灯 2 和 7 亮
delayms(1000);
P0=0xdb;// 灯 3 和 6 亮
delayms(1000);
P0=0xe7;//灯 4 与 5 亮
delayms(1000);
}
//播放函数
void PlayMusic()
{
uint i=0,j,k;
while(SONG_LONG[i]!=0||SONG_TONE[i]!=0)
{ // 播放各个音符, SONG_LONG 为拍子长度
for(j=0;j
{
BEEP=~BEEP;
//SONG_TONE 延时表决定了每个音符的频率
for(k=0;k
}
delayms(10);
i++;
}
}
void main()
{
BEEP=0;
while(1)
{
PlayMusic(); // 播放生日快乐
BEEP=1;
xg0();
P0=0xff;
delayms(1000);
xg1();
P0=0xff;
delayms(1000);
xg2();
P0=0xff;
delayms(1000);
xg3();
P0=0xff;
delayms(1000);
}
}
P1.5 口