1、挥着翅膀的女孩unsigned char code Music_Girl= 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x02, 0x18,0x03, 0x17,0x03, 0x15,0x02, 0x18,0x03, 0x17,0x03, 0x18,0x02, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x15,0x03
2、, 0x16,0x03, 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x1A,0x03, 0x1B,0x03, 0x1F,0x03, 0x1F,0x03, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x1F,0x03, 0x1F,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02, 0x1F,0x03, 0
3、x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20
4、,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00, 0x1A,0x03, 0x1A,0x03, 0x1A,0x03, 0x1B,0x03, 0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x19,0x02, 0x17,0x03, 0x15,0x
5、17, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x04, 0x18,0x0E, 0x18,0x03, 0x17,0x04, 0x18,0x0E, 0x18,0x66, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x04, 0x1B,0x0E,
6、 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03, 0x
7、19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00, 0x18,0x02, 0x18,0x03, 0x1A,0x03, 0x19,0x0D, 0x15,0x03, 0x15,0x02, 0x18,0x66, 0x16,0x02, 0x17,0x02, 0x15,0x00, 0x00,0x00;天空之城unsigned char code music_tab = 0x1c, 0x30, 0x19, 0x30, 0x18, 0x40, 0x19, 0x30,
8、0x18, 0x30, 0x13, 0x30, 0x19, 0x18,0x26, 0x30, 0x26, 0x30, 0x1c, 0x40, 0x20, 0x30, 0x1c, 0x30, 0x18, 0x30, 0x20, 0x60,0x26, 0x30, 0x26, 0x30, 0x24, 0x40, 0x26, 0x30, 0x24, 0x30, 0x18, 0x40, 0x26, 0x60,0x18, 0x20, 0x18, 0x20, 0x18, 0x20, 0x19, 0x40, 0x24, 0x30, 0x24, 0x30, 0x19, 0x30,0x19, 0x60, 0x1c
9、, 0x30, 0x19, 0x30, 0x18, 0x40, 0x19, 0x30, 0x18, 0x30, 0x13, 0x30, 0x19, 0x60, 0x26, 0x30, 0x26, 0x30, 0x1c, 0x40, 0x20, 0x30, 0x1c, 0x30, 0x18, 0x30,0x20, 0x80, 0x26, 0x30, 0x24, 0x30, 0x24, 0x30, 0x18, 0x30, 0x19, 0x20, 0x19, 0x30,0x18, 0x30, 0x15, 0x20, 0x15, 0x20, 0x13, 0x20, 0x18, 0x40, 0x18,
10、0x30, 0x19, 0x30,0x1c, 0x20, 0x1c, 0x20, 0x19, 0x30, 0x20, 0x30, 0x1c, 0x60, 0x18, 0x30, 0x15, 0x30,0x13, 0x40, 0x15, 0x30, 0x13, 0x30, 0x10, 0x30, 0x15, 0x60, 0x20, 0x30, 0x20, 0x30, 0x18, 0x30, 0x19, 0x30, 0x18, 0x30, 0x13, 0x30, 0x13, 0x60, 0x1c, 0x20, 0x19, 0x20,0x18, 0x30, 0x19, 0x30, 0x15, 0x2
11、0, 0x15, 0x20, 0x18, 0x40, 0x20, 0x30, 0x20, 0x30,0x12, 0x30, 0x13, 0x30, 0x15, 0x30, 0x18, 0x30, 0x13, 0xc0, 0x13, 0x80, 0x13, 0x30,0x0e, 0x80, 0x10, 0x30, 0x10, 0x30, 0x13, 0x20, 0x15, 0x20, 0x18, 0x40, 0x18, 0x30,0x15, 0x30, 0x18, 0x20, 0x15, 0x20, 0x15, 0x30, 0x10, 0x30, 0x13, 0x60, 0x13, 0x30,0
12、x0e, 0x60, 0x10, 0x60, 0x13, 0x20, 0x15, 0x20, 0x18, 0x40, 0x18, 0x30, 0x15, 0x30,0x15, 0x20, 0x18, 0x20, 0x15, 0x30, 0x19, 0x30, 0x1c, 0x60, 0x1c, 0x30, 0x19, 0x30,0x1c,0xc0, 0x00,;示例#include #include /本例采用89C52, 晶振为11.0592MHZ /关于如何编制音乐代码, 其实十分简单,各位可以看以下代码. /频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍; /所以拿出谱子,
13、试探编吧! #define LED P0sbit Beep = P15 ; void delaya(unsigned int); unsigned char n=0; /n为节拍常数变量 unsigned char code music_tab = 0x1c, 0x30, 0x19, 0x30, 0x18, 0x40, 0x19, 0x30, 0x18, 0x30, 0x13, 0x30, 0x19, 0x18,0x26, 0x30, 0x26, 0x30, 0x1c, 0x40, 0x20, 0x30, 0x1c, 0x30, 0x18, 0x30, 0x20, 0x60,0x26, 0x3
14、0, 0x26, 0x30, 0x24, 0x40, 0x26, 0x30, 0x24, 0x30, 0x18, 0x40, 0x26, 0x60,0x18, 0x20, 0x18, 0x20, 0x18, 0x20, 0x19, 0x40, 0x24, 0x30, 0x24, 0x30, 0x19, 0x30,0x19, 0x60, 0x1c, 0x30, 0x19, 0x30, 0x18, 0x40, 0x19, 0x30, 0x18, 0x30, 0x13, 0x30, 0x19, 0x60, 0x26, 0x30, 0x26, 0x30, 0x1c, 0x40, 0x20, 0x30,
15、 0x1c, 0x30, 0x18, 0x30,0x20, 0x80, 0x26, 0x30, 0x24, 0x30, 0x24, 0x30, 0x18, 0x30, 0x19, 0x20, 0x19, 0x30,0x18, 0x30, 0x15, 0x20, 0x15, 0x20, 0x13, 0x20, 0x18, 0x40, 0x18, 0x30, 0x19, 0x30,0x1c, 0x20, 0x1c, 0x20, 0x19, 0x30, 0x20, 0x30, 0x1c, 0x60, 0x18, 0x30, 0x15, 0x30,0x13, 0x40, 0x15, 0x30, 0x1
16、3, 0x30, 0x10, 0x30, 0x15, 0x60, 0x20, 0x30, 0x20, 0x30, 0x18, 0x30, 0x19, 0x30, 0x18, 0x30, 0x13, 0x30, 0x13, 0x60, 0x1c, 0x20, 0x19, 0x20,0x18, 0x30, 0x19, 0x30, 0x15, 0x20, 0x15, 0x20, 0x18, 0x40, 0x20, 0x30, 0x20, 0x30,0x12, 0x30, 0x13, 0x30, 0x15, 0x30, 0x18, 0x30, 0x13, 0xc0, 0x13, 0x80, 0x13,
17、 0x30,0x0e, 0x80, 0x10, 0x30, 0x10, 0x30, 0x13, 0x20, 0x15, 0x20, 0x18, 0x40, 0x18, 0x30,0x15, 0x30, 0x18, 0x20, 0x15, 0x20, 0x15, 0x30, 0x10, 0x30, 0x13, 0x60, 0x13, 0x30,0x0e, 0x60, 0x10, 0x60, 0x13, 0x20, 0x15, 0x20, 0x18, 0x40, 0x18, 0x30, 0x15, 0x30,0x15, 0x20, 0x18, 0x20, 0x15, 0x30, 0x19, 0x3
18、0, 0x1c, 0x60, 0x1c, 0x30, 0x19, 0x30,0x1c,0xc0, 0x00,; void delaya(unsigned int x)unsigned int i;for(i=0;ix;i+); void int0() interrupt 1 /采用中断0 控制节拍 TH0=0xd8; TL0=0xef; n-; void delay (unsigned char m) /控制频率延时 unsigned i=3*m; while(-i); void delayms(unsigned char a) /豪秒延时子程序 while(-a); /采用while(-a)
19、 不要采用while(a-); 各位可编译一下看看汇编结果就知道了! void main() unsigned char p,m; /m为频率常数变量 unsigned char i=0; TMOD&=0x0f; TMOD|=0x01; TH0=0xd8;TL0=0xef; IE=0x82; play: while(1) a: p=music_tabi; if(p=0x00) i=0, delayms(1000); goto play; /如果碰到结束符,延时1秒,回到开始再来一遍 else if(p=0xff) i=i+1;delayms(100),TR0=0; goto a; /若碰到休止
20、符,延时100ms,继续取下一音符 else m=music_tabi+, n=music_tabi+; /取频率常数 和 节拍常数 TR0=1; /开定时器1 while(n!=0) Beep=Beep,delay(m); /等待节拍完成, 通过P1口输出音频(可多声道哦!) TR0=0; /关定时器1 LED=music_tabi ;delayms(100); 、#include sbit buzzer=P37; unsigned char timer0h,timer0l,time; /生日歌code unsigned char sszymmh=5,1,1, 5,1,1, 6,1,2, 5
21、,1,2, 1,2,2, 7,1,4, 5,1,1, 5,1,1, 6,1,2, 5,1,2, 2,2,2, 1,2,4, 5,1,1, 5,1,1, 5,2,2, 3,2,2, 1,2,2, 7,1,2, 6,1,2, 4,2,1, 4,2,1, 3,2,2, 1,2,2, 2,2,2, 1,2,4; / 音阶频率表 高八位code unsigned char FREQH= 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8, 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, /1,2,3,4,5,6,7,8,i 0xFC,0xFD,0xFD
22、,0xFD,0xFD,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF, ; / 音阶频率表 低八位code unsigned char FREQL= 0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6, 0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, /1,2,3,4,5,6,7,8,i 0xEE,0x44, 0x6B,0xB4,0xF4,0x2D, 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16, ;void delay(unsigned char t) unsigned char t
23、1; unsigned long t2; for(t1=0;t1t;t1+) for(t2=0;t28000;t2+) ; TR0=0; void t0int() interrupt 1 TR0=0; buzzer=!buzzer; TH0=timer0h; TL0=timer0l; TR0=1; void song() TH0=timer0h; TL0=timer0l; TR0=1; delay(time); void main(void) unsigned char k,i; TMOD=1; /置CT0定时工作方式1 EA=1; ET0=1;/IE=0x82 /CPU开中断,CT0开中断
24、while(1) i=0; while(i75) /音乐数组长度 ,唱完从头再来 k=sszymmhi+7*sszymmhi+1-1; timer0h=FREQHk; timer0l=FREQLk; time=sszymmhi+2; i=i+3; song(); #include#define uchar unsigned char#define uint unsigned int /必不可少的定义头文件sbit BEEP=P37;uchar code SONG_TONE=212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,1
25、26,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 x)/延时uchar t;while(x-) for(t=0;t120;t+);void PlayMusic()/播放函数uint i=0,j,k;while(SONG_LONGi!=0|SONG_TON
26、Ei!=0)for(j=0;jSONG_LONGi*20;j+)/播放各个音符,SONG_LONG 为拍子长度BEEP=BEEP;/SONG_TONE 延时表决定了每个音符的频率for(k=0;kSONG_TONEi/3;k+);DelayMS(10);i+; void main()BEEP=0;while(1)PlayMusic(); /播放生日快乐DelayMS(500);/播放完后暂停一段时间#include#define uchar unsigned char#define uint unsigned int /必不可少的定义头文件sbit BEEP=P37;uchar code SO
27、NG_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 x)/延时uchar t;while(x-) for(t=0;t1
28、20;t+);void PlayMusic()/播放函数uint i=0,j,k;while(SONG_LONGi!=0|SONG_TONEi!=0)for(j=0;jSONG_LONGi*20;j+)/播放各个音符,SONG_LONG 为拍子长度BEEP=BEEP;/SONG_TONE 延时表决定了每个音符的频率for(k=0;kSONG_TONEi/3;k+);DelayMS(10);i+; void main()BEEP=0;while(1)PlayMusic(); /播放生日快乐DelayMS(500);/播放完后暂停一段时间#include#define uchar unsigned
29、 char#define uint unsigned intsbit BEEP=P37;/生日快乐歌的音符频率表,不同频率由不同的延时来决定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
30、,24,0;/延时void DelayMS(uint x)uchar t;while(x-) for(t=0;t120;t+);/播放函数void PlayMusic()uint i=0,j,k;while(SONG_LONGi!=0|SONG_TONEi!=0) /播放各个音符,SONG_LONG 为拍子长度for(j=0;jSONG_LONGi*20;j+)BEEP=BEEP;/SONG_TONE 延时表决定了每个音符的频率for(k=0;kSONG_TONEi/3;k+);DelayMS(10);i+;void main()BEEP=0;while(1)PlayMusic(); /播放生日快乐DelayMS(500); /播放完后暂停一段时间