单片机演奏乐曲

/*********************************************************************************************
程序名: 蜂鸣器演奏曲谱(喜羊羊)
器 件: STC89C52,蜂鸣器, MCU晶振:12MHZ
设 计: 更改某前辈的生日快乐
功 能: 循环演奏喜羊羊
注: 可以对数组更改,即可换成任意曲目
*********************************************************************************************/
#include
sbit Beep = P3^6;
unsigned char n=0;
// || 中 音 || || 低 音 || || 高 音 ||
// 0 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1
unsigned char code music_tab0[]={ 1 ,153,136,121,114,102, 91, 81,0,0,0, 0 , 0 ,242,228,204,182,162,0,0,0, 76, 68, 61, 57, 51, 46, 41,0,0,0, 38}; //音调延时表
unsigned char code music_tab1[]={3,5,5, 2,5,5, 3,5,5, 2,5,5, 3,5,5, 2,5,5, 3,5,5, 2,5,5, 7,7,7,7,7,5,3,5, 7,7,7,7,7,5,3,5,22, 23,23,23,23,22,21,6,3,22, 7,7,7,7,7,5,3,3,5, 7,7,7,7,7,5,3,5, 7,7,7,7,7,5,3,5,22, 23,23,23,23,22,21,6,3,22, 7,7,7,7,7,22,21, 0};
//喜羊羊 美羊羊 懒羊羊 沸羊羊 慢羊羊 软绵绵 红太狼 灰太狼 别看我只是一只羊 绿草因为我变得更香 天 空 因 为 我 变 得更蓝 白云因为我变得柔软 别看我只是一只羊 羊儿的聪明难以想象 天 再 高 心 情 一 样奔放 每天都追赶太阳
unsigned char code music_tab2[]={4,2,2, 4,2,2, 4,2,2, 4,2,2, 4,2,2, 4,2,2, 4,2,2, 4,2,2, 4,2,2,2,2,2,2,8, 4,2,2,2,2,2,2,4,6 , 4 ,2 ,2 ,2 ,2 ,2 ,2,4, 6, 4,2,2,2,2,2,2,4,6, 4,2,2,2,2,2,2,8, 4,2,2,2,2,2,2,4,6 , 4 ,2 ,2 ,2 ,2 ,2 ,2,4, 6, 4,2,2,2,2,4 ,8 , 0}; //喜羊羊

void delaya ( unsigned char m ) {
unsigned char i;
for ( i=m ; i>0 ; i--);
}

void main() {
unsigned char m;
unsigned char i;
TMOD=0x01;
TH0=0xd8;
TL0=0xef;
EA=1;
ET0=1;
TR0=1;

i=0;

while(1){
m = music_tab0[music_tab1[i]];
n = 15 * music_tab2[i];
i++;
if ( 1==m ) break;
if ( m ) {
while(n!=0) {
Beep=~Beep;
delaya(m);
}
} else {
while(n!=0) {
delaya(m);
}
}
delaya (200);
}

for ( i=0 ; i<255 ; i++ ) {
delaya (200);
}

}

void timer0() interrupt 1 {
TH0=0xd8;
TL0=0xef;
n--;
}

相关文档
最新文档