📄 musicbox.lst
字号:
C51 COMPILER V8.05a MUSICBOX 03/30/2009 13:25:08 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE MUSICBOX
OBJECT MODULE PLACED IN MusicBox.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE MusicBox.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #define uchar unsigned char //定义一下方便使用
2 #define uint unsigned int
3 #define ulong unsigned long
4 #include <reg52.h> //包括一个52标准内核的头文件
5
6 char code dx516[3] _at_ 0x003b;//这是为了仿真设置的
7 sbit BEEP=P2^0; //喇叭输出脚
8 sbit K0= P1^0;
9
10 sbit LED1= P0^0;
11 sbit LED2= P0^1;
12 sbit LED3= P0^2;
13 sbit LED4= P0^3;
14 sbit LED5= P0^4;
15 sbit LED6= P0^5;
16 sbit LED7= P0^6;
17
18 sbit K1= P3^1;
19 sbit K2= P3^2;
20 sbit K3= P3^3;
21 sbit K4= P3^4;
22 sbit K5= P3^5;
23 sbit K6= P3^6;
24 sbit K7= P3^7;
25
26 sbit K8= P1^1;
27 sbit K9= P1^2;
28 sbit K10= P1^3;
29 sbit K11= P1^4;
30 sbit K12= P1^5;
31 sbit K13= P1^6;
32 sbit K14= P1^7;
33
34 sbit K15= P2^1;
35 sbit K16= P2^2;
36 sbit K17= P2^3;
37 sbit K18= P2^4;
38 sbit K19= P2^5;
39 sbit K20= P2^6;
40 sbit K21= P2^7;
41
42
43 uchar th0_f; //在中断中装载的T0的值高8位
44 uchar tl0_f; //在中断中装载的T0的值低8位
45 //T0的值,及输出频率对照表
46 uchar code freq[36*2]={
47 0xA9,0xEF,//00220HZ ,1 //0
48 0x93,0xF0,//00233HZ ,1#//1
49 0x73,0xF1,//00247HZ ,2 //2
50 0x49,0xF2,//00262HZ ,2#//3
51 0x07,0xF3,//00277HZ ,3 //4
52 0xC8,0xF3,//00294HZ ,4 //5
53 0x73,0xF4,//00311HZ ,4#//6
54 0x1E,0xF5,//00330HZ ,5 //7
55 0xB6,0xF5,//00349HZ ,5#//8
C51 COMPILER V8.05a MUSICBOX 03/30/2009 13:25:08 PAGE 2
56 0x4C,0xF6,//00370HZ ,6 //9
57 0xD7,0xF6,//00392HZ ,6#//10
58 0x5A,0xF7,//00415HZ ,7 //11
59 0xD8,0xF7,//00440HZ 1 //12
60 0x4D,0xF8,//00466HZ 1# //13
61 0xBD,0xF8,//00494HZ 2 //14
62 0x24,0xF9,//00523HZ 2# //15
63 0x87,0xF9,//00554HZ 3 //16
64 0xE4,0xF9,//00587HZ 4 //17
65 0x3D,0xFA,//00622HZ 4# //18
66 0x90,0xFA,//00659HZ 5 //19
67 0xDE,0xFA,//00698HZ 5# //20
68 0x29,0xFB,//00740HZ 6 //21
69 0x6F,0xFB,//00784HZ 6# //22
70 0xB1,0xFB,//00831HZ 7 //23
71 0xEF,0xFB,//00880HZ `1 //24
72 0x2A,0xFC,//00932HZ `1#//25
73 0x62,0xFC,//00988HZ `2 //26
74 0x95,0xFC,//01046HZ `2#//27
75 0xC7,0xFC,//01109HZ `3 //28
76 0xF6,0xFC,//01175HZ `4 //29
77 0x22,0xFD,//01244HZ `4#//30
78 0x4B,0xFD,//01318HZ `5 //31
79 0x73,0xFD,//01397HZ `5#//32
80 0x98,0xFD,//01480HZ `6 //33
81 0xBB,0xFD,//01568HZ `6#//34
82 0xDC,0xFD,//01661HZ `7 //35
83 };
84 //定时中断0,用于产生唱歌频率
85 timer0() interrupt 1
86 {
87 1 TL0=tl0_f;TH0=th0_f; //调入预定时值
88 1 BEEP=~BEEP; //取反音乐输出IO
89 1 }
90
91 //按键控制音阶声音输出(电子琴)
92 void main(void) // 主程序
93 {
94 1 ulong n;
95 1 uchar code jie8[21]={0,2,4,5,7,9,11,12,14,16,17,19,21,23,24,26,28,29,31,33,35};//1234567`1八个音符在频率表
-中的位置
96 1 TMOD = 0x01; //使用定时器0的16位工作模式
97 1 TR0 = 0;
98 1 ET0 = 1;
99 1 EA = 1;
100 1 while(1)
101 1 {
102 2
103 2
104 2 if(!K0)
105 2 {
106 3 tl0_f=freq[jie8[16]*2]; //置一个音符的值
107 3 th0_f=freq[jie8[16]*2+1];
108 3 TR0 = 1;
109 3 if(K0) goto tanzou;
110 3 for(n=0;n<12000;n++); //延时
111 3 tl0_f=freq[jie8[19]*2]; //置一个音符的值
112 3 th0_f=freq[jie8[19]*2+1];
113 3 TR0 = 1;
114 3 if(K0) goto tanzou;
115 3 for(n=0;n<12000;n++); //延时
116 3 tl0_f=freq[jie8[16]*2]; //置一个音符的值
C51 COMPILER V8.05a MUSICBOX 03/30/2009 13:25:08 PAGE 3
117 3 th0_f=freq[jie8[16]*2+1];
118 3 TR0 = 1;
119 3 if(K0) goto tanzou;
120 3 for(n=0;n<12000;n++); //延时
121 3 tl0_f=freq[jie8[14]*2]; //置一个音符的值
122 3 th0_f=freq[jie8[14]*2+1];
123 3 TR0 = 1;
124 3 if(K0) goto tanzou;
125 3 for(n=0;n<12000;n++); //延时
126 3 tl0_f=freq[jie8[16]*2]; //置一个音符的值
127 3 th0_f=freq[jie8[16]*2+1];
128 3 TR0 = 1;
129 3 if(K0) goto tanzou;
130 3 for(n=0;n<12000;n++); //延时
131 3 tl0_f=freq[jie8[14]*2]; //置一个音符的值
132 3 th0_f=freq[jie8[14]*2+1];
133 3 TR0 = 1;
134 3 if(K0) goto tanzou;
135 3 for(n=0;n<12000;n++); //延时
136 3 tl0_f=freq[jie8[16]*2]; //置一个音符的值
137 3 th0_f=freq[jie8[16]*2+1];
138 3 TR0 = 1;
139 3 if(K0) goto tanzou;
140 3 for(n=0;n<24000;n++); //延时
141 3 TR0 =0;
142 3 for(n=0;n<10000;n++);
143 3
144 3 tl0_f=freq[jie8[16]*2]; //置一个音符的值
145 3 th0_f=freq[jie8[16]*2+1];
146 3 TR0 = 1;
147 3 if(K0) goto tanzou;
148 3 for(n=0;n<18000;n++); //延时
149 3 tl0_f=freq[jie8[14]*2]; //置一个音符的值
150 3 th0_f=freq[jie8[14]*2+1];
151 3 TR0 = 1;
152 3 if(K0) goto tanzou;
153 3 for(n=0;n<6000;n++); //延时
154 3 tl0_f=freq[jie8[9]*2]; //置一个音符的值
155 3 th0_f=freq[jie8[9]*2+1];
156 3 TR0 = 1;
157 3 if(K0) goto tanzou;
158 3 for(n=0;n<12000;n++); //延时
159 3 tl0_f=freq[jie8[12]*2]; //置一个音符的值
160 3 th0_f=freq[jie8[12]*2+1];
161 3 TR0 = 1;
162 3 if(K0) goto tanzou;
163 3 for(n=0;n<12000;n++); //延时
164 3 tl0_f=freq[jie8[16]*2]; //置一个音符的值
165 3 th0_f=freq[jie8[16]*2+1];
166 3 TR0 = 1;
167 3 if(K0) goto tanzou;
168 3 for(n=0;n<12000;n++); //延时
169 3 tl0_f=freq[jie8[14]*2]; //置一个音符的值
170 3 th0_f=freq[jie8[14]*2+1];
171 3 TR0 = 1;
172 3 if(K0) goto tanzou;
173 3 for(n=0;n<30000;n++); //延时
174 3 TR0 =0;
175 3 for(n=0;n<10000;n++);
176 3
177 3 tl0_f=freq[jie8[14]*2]; //置一个音符的值
178 3 th0_f=freq[jie8[14]*2+1];
C51 COMPILER V8.05a MUSICBOX 03/30/2009 13:25:08 PAGE 4
179 3 TR0 = 1;
180 3 if(K0) goto tanzou;
181 3 for(n=0;n<12000;n++); //延时
182 3 tl0_f=freq[jie8[12]*2]; //置一个音符的值
183 3 th0_f=freq[jie8[12]*2+1];
184 3 TR0 = 1;
185 3 if(K0) goto tanzou;
186 3 for(n=0;n<12000;n++); //延时
187 3 tl0_f=freq[jie8[9]*2]; //置一个音符的值
188 3 th0_f=freq[jie8[9]*2+1];
189 3 TR0 = 1;
190 3 if(K0) goto tanzou;
191 3 for(n=0;n<12000;n++); //延时
192 3 tl0_f=freq[jie8[12]*2]; //置一个音符的值
193 3 th0_f=freq[jie8[12]*2+1];
194 3 TR0 = 1;
195 3 if(K0) goto tanzou;
196 3 for(n=0;n<12000;n++); //延时
197 3 tl0_f=freq[jie8[14]*2]; //置一个音符的值
198 3 th0_f=freq[jie8[14]*2+1];
199 3 TR0 = 1;
200 3 if(K0) goto tanzou;
201 3 for(n=0;n<12000;n++); //延时
202 3 tl0_f=freq[jie8[16]*2]; //置一个音符的值
203 3 th0_f=freq[jie8[16]*2+1];
204 3 TR0 = 1;
205 3 if(K0) goto tanzou;
206 3 for(n=0;n<12000;n++); //延时
207 3 tl0_f=freq[jie8[19]*2]; //置一个音符的值
208 3 th0_f=freq[jie8[19]*2+1];
209 3 TR0 = 1;
210 3 if(K0) goto tanzou;
211 3 for(n=0;n<12000;n++); //延时
212 3 tl0_f=freq[jie8[14]*2]; //置一个音符的值
213 3 th0_f=freq[jie8[14]*2+1];
214 3 TR0 = 1;
215 3 if(K0) goto tanzou;
216 3 for(n=0;n<12000;n++); //延时
217 3 TR0 =0;
218 3 for(n=0;n<10000;n++);
219 3
220 3 TR0 = 1;
221 3 for(n=0;n<12000;n++); //延时
222 3 tl0_f=freq[jie8[16]*2]; //置一个音符的值
223 3 th0_f=freq[jie8[16]*2+1];
224 3 TR0 = 1;
225 3 if(K0) goto tanzou;
226 3 for(n=0;n<12000;n++); //延时
227 3 tl0_f=freq[jie8[21]*2]; //置一个音符的值
228 3 th0_f=freq[jie8[21]*2+1];
229 3 TR0 = 1;
230 3 if(K0) goto tanzou;
231 3 for(n=0;n<12000;n++); //延时
232 3 tl0_f=freq[jie8[19]*2]; //置一个音符的值
233 3 th0_f=freq[jie8[19]*2+1];
234 3 TR0 = 1;
235 3 if(K0) goto tanzou;
236 3 for(n=0;n<12000;n++); //延时
237 3 tl0_f=freq[jie8[7]*2]; //置一个音符的值
238 3 th0_f=freq[jie8[7]*2+1];
239 3 TR0 = 1;
240 3 if(K0) goto tanzou;
C51 COMPILER V8.05a MUSICBOX 03/30/2009 13:25:08 PAGE 5
241 3 for(n=0;n<12000;n++); //延时
242 3 tl0_f=freq[jie8[14]*2]; //置一个音符的值
243 3 th0_f=freq[jie8[14]*2+1];
244 3 TR0 = 1;
245 3 if(K0) goto tanzou;
246 3 for(n=0;n<12000;n++); //延时
247 3 tl0_f=freq[jie8[12]*2]; //置一个音符的值
248 3 th0_f=freq[jie8[12]*2+1];
249 3 TR0 = 1;
250 3 if(K0) goto tanzou;
251 3 for(n=0;n<30000;n++); //延时
252 3 TR0 =0;
253 3 for(n=0;n<10000;n++);
254 3
255 3 tl0_f=freq[jie8[14]*2]; //置一个音符的值
256 3 th0_f=freq[jie8[14]*2+1];
257 3 TR0 = 1;
258 3 if(K0) goto tanzou;
259 3 for(n=0;n<12000;n++); //延时
260 3 tl0_f=freq[jie8[16]*2]; //置一个音符的值
261 3 th0_f=freq[jie8[16]*2+1];
262 3 TR0 = 1;
263 3 if(K0) goto tanzou;
264 3 for(n=0;n<12000;n++); //延时
265 3 tl0_f=freq[jie8[14]*2]; //置一个音符的值
266 3 th0_f=freq[jie8[14]*2+1];
267 3 TR0 = 1;
268 3 if(K0) goto tanzou;
269 3 for(n=0;n<12000;n++); //延时
270 3 tl0_f=freq[jie8[12]*2]; //置一个音符的值
271 3 th0_f=freq[jie8[12]*2+1];
272 3 TR0 = 1;
273 3 if(K0) goto tanzou;
274 3 for(n=0;n<12000;n++); //延时
275 3 tl0_f=freq[jie8[19]*2]; //置一个音符的值
276 3 th0_f=freq[jie8[19]*2+1];
277 3 TR0 = 1;
278 3 if(K0) goto tanzou;
279 3 for(n=0;n<18000;n++); //延时
280 3 tl0_f=freq[jie8[21]*2]; //置一个音符的值
281 3 th0_f=freq[jie8[21]*2+1];
282 3 TR0 = 1;
283 3 if(K0) goto tanzou;
284 3 for(n=0;n<6000;n++); //延时
285 3 tl0_f=freq[jie8[16]*2]; //置一个音符的值
286 3 th0_f=freq[jie8[16]*2+1];
287 3 TR0 = 1;
288 3 if(K0) goto tanzou;
289 3 for(n=0;n<24000;n++); //延时
290 3 TR0 =0;
291 3 for(n=0;n<10000;n++);
292 3
293 3 tl0_f=freq[jie8[9]*2]; //置一个音符的值
294 3 th0_f=freq[jie8[9]*2+1];
295 3 TR0 = 1;
296 3 if(K0) goto tanzou;
297 3 for(n=0;n<12000;n++); //延时
298 3 tl0_f=freq[jie8[16]*2]; //置一个音符的值
299 3 th0_f=freq[jie8[16]*2+1];
300 3 TR0 = 1;
301 3 if(K0) goto tanzou;
302 3 for(n=0;n<12000;n++); //延时
C51 COMPILER V8.05a MUSICBOX 03/30/2009 13:25:08 PAGE 6
303 3 tl0_f=freq[jie8[14]*2]; //置一个音符的值
304 3 th0_f=freq[jie8[14]*2+1];
305 3 TR0 = 1;
306 3 if(K0) goto tanzou;
307 3 TR0 =0;
308 3 for(n=0;n<3000;n++);
309 3 for(n=0;n<12000;n++); //延时
310 3 tl0_f=freq[jie8[14]*2]; //置一个音符的值
311 3 th0_f=freq[jie8[14]*2+1];
312 3 TR0 = 1;
313 3 if(K0) goto tanzou;
314 3 TR0 =0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -