📄 music.lst
字号:
C51 COMPILER V8.02 MUSIC 03/06/2009 19:44:50 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MUSIC
OBJECT MODULE PLACED IN music.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE music.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4 #include <ctype.h>
5 #pragma ot(0)
6 sbit P3_0=P3^0;
7 #define OSFREQ 12000000l /*所使用的晶振频率*/
8 //uchar code string1[]=("g=a=1=a=|11=2=3=2=3g=a=1=a=|1=1_1=2_3=2=2g=a=1=a=|11=2=3=2=3g=a=1=a=|1=1_1=2_6=5=
-53_5_|5_5_5_6=C=C=6._0_5=3=|2=2=2=3=2_1=3=3=5._0_3=5=|5_5_5_6=C=C=6._0._3=|3_2_2_6=5=55=6=C=6=|CC=6_5=6_C=3=3_0=3=|3=2=2
-=2=2_1=3=3=2._5=6=C=6=|CC=6_5=6_C=3=3_0=3=|3_2_03_3_2_3_|2._1=1--| 5=6=C=D=|E._E=E=E=E_D.D=D=G=D_|C._C=C=D=E=C=6_D=7=7=
-7=C_|C5=6=C=D=|E._E=E=G=E_D._D=D=G=D_|C0_6=6=7_C_C|C---| 5=6=C=D=|E._E=E=G=E_D._D=D=G=D_|C._C=C=D=E=C=6_D=7=7=7=C_|C5=6
-=C=D=|E._E=E=G=E_D._D=D=G=D_|C0_6=6=7_C_C|C---| 0_5=5=5=6=C=E=E_5=5=5=6=C=D=D0=D=E=D|=D=C=C=C=C=G=D=E=E._E=E=D=D=E=D=C=
-C=D=D_C_A=A=G=E=C=0=6=6=E=E=D=C=C=C=6=C=D=0_5=5=5=6=C=D=D_5=5=6=C=D=D0=D=D=E=D=C=C=D=D=5=A=6=G=D=C=0=6=6=E|=3=D=C=6=6=5=
-6=D=D_C.");//吻别 很爱很爱你 认真的雪
9 //uchar code string2[]=("3_5.6._C=6_5_6_5_6.C=6_56_5_3_2_3-2._3_2_1_2._3=2_1|3_5_C_7_6-a._1=a_g_a._1=a_g_a
-_1-2_1_a-2._3=2_1_2._3=2_1_2_1_1_2_3-6_6_5_3_2_3_5_6_5_3_2_3-2_2_1_a_g_a_1|_2_1a_g_a-|a1ag|a1_2_3-|6_6_6_5=6=6.6=6=6_5_2
-_3_3-a1aga1_2_3-2_2_2_1=2=2.3=5=C_7_6__6-6._C=6_5=6._C=6_5_|6_5_6_5_3-6_6_5_3_2_3_5_C_7_6_5_6-6._C=6_5_6-6_5_6_5_3-2._3=
-2_1_2-3_5_3_2_33_5_6._C=6_5_|_6_5_6_53-|2_2_3_2_a_g_a---a1236._C=6_5_6._C_5_6_5_6_5_3-66_5_3_2_3_5_C_7_6_5_6-C7656---6--
--");//中国人
10 //uchar code string3[]=("C3_2=1=132=113_2_3_1_3_6=5=5.3=5=6_6=5=5_6=5=53=2_1_2_2=3=2_123_3_213_2=1=13_2_3_
-1_1=6_6_5=5.3=5=6_6_C_6=5=53=2=2_1_22=1=3=2=23_3_211. 5_6=C=6=5=3=5=3_2.1_1=25_3_2=3=1.5_3=5=6._5=3_5_32._1=a_g_1---1_1
-2=35_53_2._1=a_g_1_a5_C_6._5=3_5_a1_1=25_3_2._3=1=2=1=a=g---"); //老鼠爱大米 浏阳河
11 //uchar code string4[]=("3_3=5=3_2_3_2_1_2_2=3=e_g_a-3_3=5=3_2_3_6_5_3=5=2-203_6_5_3=5=6.a._a._3_2_1_=2=3-
-a_3_=3=2_1_3_5_5_2_3-303_3=5=3_2_32_1_2_2=3=e_g_a-3_3=5=3_2_3_6_5_3=5=2-203_6_5_3=5=6.a_a_3_2_1=2=3-a_3=3=2_1_3_5_g_a-3_
-6=6=63_6=6=63_6_5_3=5=6-a_2=2=2a_5_3_2_3-3_6_5_3=2_1_2=3=23_5_5_1_2-3_6_5_3=2=1_2=3=22_5=5=5_g_a-3_5=5=5_3=5=6-6- |5_
-5=5=5=C._5._C=C=D=E=D=|7._6=7=6=5_(C=7=5=2=2_0=)5=|D_D=D=D=D_D=D_6_6=5=3=5=|5=5_4=404_5_|6._6=6=6=C_70_6_|5_5_5=D_C=C0=6
-7=|C._C=C=D=E_D._D=C_7_|C---|C._C=C=D=E_D._D=D=C_7=|D._C=C-5=6=C=D=|E._E=E=G=E_D._D=D=G=D_|C._C=C=D=E=C=6_D=7=7=7=C_|C5=
-6=C=D=|E._E=E=G=E_D._D=D=G=D_|C0_6=6=7_C_C|C---|"); //无聊的游戏 很爱很爱你
12 uchar code string5[]=("0=G=G=E=D=E=6_D=E=G=E=D0=G=G=E=D=E=5_D=E=G=D=C0=C=D=E=G=A=G=E=G=E=E=D=D0=C=D=C=D_C=
-D=D=E_G=E=E._0=G=G=E=D=E=A_D=E=G=E=D0=G=G=E=D=E=G_D=E=G=D=C0=C=D=E=G=A=G=E=G=E=E=D=D._G=E_D=D=D_C_C- 0=5=6=C=E=E=E=E=E.
-_D=D_C_0_6=C=DD=E_5=50=5=5=6=C=C=C=C=C=6._D.=E=D=C=G=A=C_C=C=C=6=6=C=D0=5=6=C=E=E=E=E=E._D=D_C_0_A=C=DD=E_5=50=5=5=6=C=C
-=C=C=C=C-6._D._E=D=C=5=6=C_C=C=C=6=6=C=D.C_C-- "); /* /青花瓷 一万个理由 */
13 //uchar code string6[]=("22_3_1g_g_2_1_2_3_10_3_4_3_1_2_20_3_4_3_1_1_1b2_2_2_3_1g_g_2_1_2_3_10_3_4_3_1_2_2
-0_3_4_3_4_5_5g_a_12_3_53_5_6_7_6_5_32_3_5_33_2_3_2_1_g-0g_a_12_3_53_5_6_7_6_5_32_3_5_33__2_3_2_1_g---g---06_5.2_3_300006
-_5.2_3_3_3_3=2=1_1-06_5.7_7_70_7_C7_6_6-00g--g_a_g--- "); //super star
14 //uchar code string7[]=("5._3=2_1_5-12_3_g-5.3_23_5_1a_3_2-356.5_352._3=2_1_a32_21_a1g05.3_6562_3_50 a-a1
--a2--a-b1b13-2a--a--a-33-12--a-b1b13-21--1--5-55432--a-b1-12123--3--1-1_1_1235--4-32-b3-2a--a--a-66565--4-34-56543--3--1
--1_1_1235--4-32-b3-2a--a-- C-53.2_1530C-53.2_1650 5_C6_5_C05_C6_5_6_0_3_C.6_53C.6_C0C53_6_5_3_2.1_30_5_C56_C_6_5_33_1_
-6-60C._C=5_5_2._3=5_5_6.5_6DC6_5_C6_5_33_5_C- 3- 2_3_4_3 3- 2_3_4_3 3- 4- 3_4_5_4 4- 3-2- 3- 2_3_4_3 3- 2_3_4_3 3-4- 3
-_4_5_4 4- 3-2"); /*学习雷锋好榜样 山楂树 团结就是力量 许巍-星空前奏*/
15 //uchar code string8[]={"c_1_5_5_6_6_54_4_3_3_2_2_15_5_4_4_3_3_25_5_4_4_3_3_21_1_5_5_6_6_54_4_3_3_2_2_1 1
-_2_3_1_1_2_3_1_3_4_5 3_4_55=6=5=4=3_1_5=6=5=4=3_1_2_g_12_g_1 543 3_2_1_2_30 g53 3_2_1_2_30 a65 4_3_2_
-3_4 1 b a g g_g_ag 1b- g_g_ag 21- g_g_53 1ba 004_4_ 312 1--1 "};/* 满天都是小星星 两只老虎 许巍-时光 生日快乐*/
-
16 //uchar code string9[]=("e=a_b=1=1.0=2=|b_a_g=a._3C_7=C=|6._e=a_b=1=1.0=2=|b_a=g=g=2_3=30_1=2=|3_3_2=1_2=2
-0_b=1=|2_2_b_g=a=a.0=e=|f_1=1=1._2=b_a_g=a_b=|b-0(E_D_)|0=1=1=2=|3_3_2=1_2=20=2=2=3=|4_4_3=2_3=3_0_0_3=4=|5_5=4=4=2_6=6=
-5=5=4=4_3=1=|1_1=2=3=2=20=1=1=2=|3_3_2=1_2=20=2=2=3=|4_4_3=2_3=30_3=4=|5_5_4_3=6=6=5=5=4=4=3=3_|1--b._a=|a1_b_1.2|b=a=g_
-g00|ab_1_1.2|b5-| |D_D_D_C_C0_C_|7_7_7_7_C7_5_|6_6_6_5_66_5_|6_6_6_E_D0_C_|D_D_D_C_C0_C_|7_7_7_7_C._7=7_5_|6._5=1-0_2=3
-=|4_3_1_4_4_3_0_1_|1---|");//一千个伤心的理由
17
18 /**************音符频率表****************/
19 uint code notefreq[]={ 523, 587, 659, 698, 784, 880, 988,
20 1047,1175,1319,1396,1568,1760,1976,
21 2093,2349,2637,2793,3136,3520,3961};
22 /*************音名***************/
C51 COMPILER V8.02 MUSIC 03/06/2009 19:44:50 PAGE 2
23 uchar code notename[]={ 'c','d','e','f','g','a','b',
24 '1','2','3','4','5','6','7',
25 'C','D','E','F','G','A','B',0};
26 /*************半音频率表*****************/
27 uint code halfnotefreq[]={ 554, 622, 740, 831, 933,
28 1109,1245,1480,1161,1865,
29 2218,2489,2960,3322,3729};
30 /*************音名***************/
31 uchar code halfnotename[]={ 'c','d','f','g','a',
32 '1','2','4','5','6',
33 'C','D','F','G','A',0};
34 uint n1,n2; /*产生方波的定时器的初值*/
35
36
37
38 delay (uint x)
39 {
40 1 uint a;
41 1 uint b;
42 1 for(a=x;a>0;a--)
43 1 for(b=140;b>0;b--);
44 1 }
45
46
47 void Sound(uint freq) // 发声
48 {
49 1 uint timreg;
50 1 timreg=65536l-(OSFREQ/(24l*freq));
51 1 delay (1);
52 1 n2=timreg/256;
53 1 n1=timreg&0x00ff;
54 1 TL0=n1;
55 1 TH0=n2;
56 1 TR0=1;
57 1 ET0=1;
58 1 }
59 void SoundOff(void) // 停止发声
60 {
61 1 TR0=0;
62 1 ET0=0;
63 1 P3_0=0; //1111 0111
64 1 }
65 uint GetFreq(uchar ch) // 依据音名取对应的频率
66 {
67 1 uchar * pn,i=0;
68 1 uint * pf;
69 1 pn=notename;
70 1 pf=notefreq;
71 1 while(1)
72 1 {
73 2 if(pn[i]==0) return 0;
74 2 if(ch==pn[i]) return pf[i];
75 2 i++;
76 2 }
77 1 }
78
79 void Play(char * str)
80 {
81 1 uint i=0,ch;
82 1 uint lasttime;
83 1 uint freq;
84 1 while(1)
C51 COMPILER V8.02 MUSIC 03/06/2009 19:44:50 PAGE 3
85 1 {
86 2 for(;;i++)
87 2 {
88 3 ch=str[i]; /*允许曲谱用空格符 '|'符,换行回车等分隔以便阅读*/
89 3 if((ch==' ')||(ch=='|')||(ch=='\r')||(ch=='\n')) {i++;continue;}
90 3 if(!ch) {SoundOff(); return;} /*乐曲结束则播放完毕*/
91 3 if(isdigit(ch)||isalpha(ch))
92 3 {
93 4 freq=GetFreq(ch); /*从音名获取频率*/
94 4 lasttime=256;
95 4 break;
96 4 }
97 3 }
98 2 i++;
99 2 ch=str[i];
100 2 // delay(10); /*从下一个符号获取额外音长符号*/
101 2 while(1)
102 2 {
103 3 if(!ch) break;
104 3 if(isdigit(ch)||isalpha(ch)) break; /*非音长符号则下次处理*/
105 3 if(ch=='-') lasttime +=8; /*额外延时一拍*/
106 3 if(ch=='.') lasttime +=4; /*额外延时半拍*/
107 3 if(ch=='_') lasttime /=2; /*下划线相当于简谱中音名下面的下划线,延时减半*/
108 3 if(ch=='=') lasttime /=4; /*双下划线相当于简谱中音名下面的双下划线,延时减为1/4*/
109 3 i++;
110 3 ch=str[i];
111 3 }
112 2 if(freq!=0)
113 2 Sound(freq); /*发声*/
114 2 else
115 2 SoundOff();
116 2 delay(lasttime); /*延时*/
117 2 SoundOff();
118 2 delay(50);
119 2 /*两个引之间的间歇*/
120 2 }
121 1 }
122 void main(void)
123 {
124 1
125 1 TMOD=0x01; //设定T0为方式1(16位计数)
126 1 delay (10);
127 1 EA=1;
128 1 ET0=1;
129 1 TR0=1;
130 1 TH0 = 0x3C;
131 1 TL0 = 0xB0;
132 1 Play(string5);
133 1 delay (100);
134 1 while(1);
135 1 }
136
137 void time0_int (void) interrupt 1
138 {
139 1 ET0=0;
140 1 TR0=0;
141 1 TL0=n1;
142 1 TH0=n2;
143 1 P3_0=!P3_0;
144 1 ET0=1;
145 1 TR0=1;
146 1 }
C51 COMPILER V8.02 MUSIC 03/06/2009 19:44:50 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 666 ----
CONSTANT SIZE = 483 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 33 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -