📄 无线遥控音乐2.lst
字号:
177 0x72,0x42,0x44,0x52,0x41,0x31,
178 0x34,0x52,0x41,0x31,0x34,0x52,0x42,
179 0x52,0x32,0x52,0x81,0x71,0x74,0x51,0x71,
C51 COMPILER V8.02 蝊线_?___乐2 12/01/2008 22:07:15 PAGE 4
180 0x82,0x81,0x71,0x72,0x81,0x71,0x74,0x51,0x41,0x31,
181 0x42,0x41,0x51,0x42,0x31,0x41,0x44,0x52,0x41,0x31,
182 0x34,0x52,0x41,0x31,0x34,0x52,0x42,
183 0x52,0x32,0x52,0x81,0x71,0x74,0x51,0x41,
184 0x82,0x82,0xA2,0x71,0x81,0x72,0x71,0x51,0x41,0x31,
185 0x44,0x41,0x31,0x41,0x51,0x44,0x52,0x52,
186 0x42,0x31,0x34,0x52,0x41,0x31,
187 0x42,0x31,0x34,
188 0xFF};
189
190
191 //第八首 偏偏喜欢你
192 unsigned char code song8[]={
193 0XC2,0XB2,
194 0X36,0X52,0X42,0X32,0X11,0XC1,0XB2,
195 0XC6,0X12,0XC4,0X12,0XC2,
196 0X76,0XA2,0X82,0X72,0X51,0X41,0X32,
197 0X4C,0X42,0X32,
198 0X74,0X82,0X74,0X82,0X72,
199 0X52,0X41,0X38,0X32,0X42,
200 0X16,0XC2,0X72,0X52,0X42,0X42,
201 0X3C,0XC2,0XB2,
202 0X36,0X52,0X42,0X32,0X11,0XC1,0XB2,
203 0XC6,0X12,0XC4,0X12,0XC2,
204 0X76,0XA2,0X82,0X72,0X51,0X41,0X32,
205 0X4C,0X42,0X32,
206 0X76,0X82,0X74,0X82,0X72,
207 0X53,0X41,0X38,0X32,0X42,
208 0X16,0XC2,0X72,0X52,0X41,0X51,0X12,
209 0XCC,0XC2,0XB2,
210 0X16,0XC2,0X72,0X52,0X42,0X42,
211 0X3C,0X32,0X32,
212 0X26,0X22,0X24,0X42,0X32,
213 0x22,0x12,0x18,0x02,0x52,
214 0X46,0X12,0X44,0X72,0X82,
215 0X5C,0X52,0X52,
216 0X46,0X42,0X74,0X42,0X32,
217 0X36,0X42,0X58,
218 0X82,0X72,0X62,0X52,0X46,0X32,
219 0X3C,0X12,0XB2,
220 0X36,0X52,0X42,0X32,0X11,0XC1,0XB2,
221 0XC6,0X12,0XC4,0X12,0XC2,
222 0X76,0XA2,0X82,0X72,0X51,0X41,0X32,
223 0X48,0X02,0X42,0X52,0X62,
224 0X76,0X82,0X74,0X82,0X72,
225 0X56,0X41,0X38,0X32,0X22,
226 0X16,0XC2,0X72,0X52,0X42,0X42,
227 0X3C,0X04,0X04,0X04,0X04,
228 0xFF};
229
230
231 unsigned char code* code songs[]={song0,song1,song2,song3,song4,song5,song6,
232 song7,song8}; //指向8首歌
233
234
235
236 unsigned char code yin[30]={0xFF,0xFF,0xFB,0x90,0xFC,0x0C,0xFC,0x44,0xFC,0xAC,0xFD,0x09,0xFD,0x34,
237 0xFD,0x82,0xFD,0xC8,0xFE,0x06,0xFE,0x22,0xFA,0X15,0XFB,0x04,0xFA,0x67,0xFE,0x85}; //C调
-各音符频率与计数初值T的对照表
238
239
240 /*//1ms
C51 COMPILER V8.02 蝊线_?___乐2 12/01/2008 22:07:15 PAGE 5
241 void delay1ms(void)
242 {
243 unsigned char i,j;
244 for(i=2;i>0;i--)
245 for(j=230;j>0;j--) ;
246 } */
247
248 /*延时1/4拍时间即187ms*/
249 void delay187ms()
250
251 {
252 1 unsigned char i,j;
253 1 for(i=255;i>0;i--)
254 1 {
255 2 for(j=120;j>0;j--)
256 2 {
257 3 if(IR_OK==1) {break;}
258 3 }
259 2 }
260 1 }
261
262
263
264
265
266 /*每个音符的发声*/
267 void timer0() interrupt 1 using 1 //定时器T0
268 {
269 1 TH0=yin[2*l];
270 1 TL0=yin[2*l+1];
271 1 SPK = !SPK;
272 1
273 1 }
274
275
276
277
278 void sing_song()
279 {
280 1 unsigned int data j; //取码指针
281 1 unsigned char data i; //用于循环
282 1 unsigned char data k; //几个1/4拍
283 1 IR_OK=0; //不能少掉!!!!
284 1 song=songs[song_number];
285 1 j=0;
286 1 while(*(song+j)!=0xFF) //是否取到结束码
287 1 {
288 2 if(IR_OK==1){break;} //这一句很重要的!!!!!
289 2 k=*(song+j)&0x0F; //后4位为多少个1/4拍
290 2 l=*(song+j)>>4; //song(song+j)[]中所放的每个字节
291 2 //前4位乘2表示为音符频率在数组yin[]中的位置
292 2
293 2 TH0=yin[2*l]; //置初值
294 2 TL0=yin[2*l+1];
295 2 TR0=1; //起动定时器0
296 2 if ((yin[2*l]==0xff)&&(yin[2*l+1]==0xff)) //如果取到的都是休止符,则不输出音频
297 2 {
298 3 TR0=0;SPK=1;
299 3 }
300 2 for(i=k;i>0;--i) //节拍K为多少就执行多少个1/4拍
301 2 { delay187ms(); }
302 2 TR0=0;
C51 COMPILER V8.02 蝊线_?___乐2 12/01/2008 22:07:15 PAGE 6
303 2 j++;
304 2 } //回22222
305 1 } //回xxxxxx
306
307
308
309 void main()
310 {
311 1
312 1 EA=1; //总中断
313 1 TMOD=0x01; //timer0工作在方式1
314 1 IT0=1; //外部中断0触发方式控制位,下降沿触发
315 1 ET0=1; //允许定时器T0中断
316 1 EX0=1; //外部中断0(INT0)中断允许位
317 1 IP=0x01; //定义外部中断0优先于定时器中断的优先级
318 1
319 1 IR_OK=0;
320 1
321 1 while(1)
322 1 {
323 2
324 2 if(IR_OK==1)
325 2 {
326 3 sing_song();
327 3 }
328 2 }
329 1 }
330
331
332
333 void t0(void) interrupt 0 using 2//外部中断0的函数
334 {
335 1
336 1 EA=0; //总中断
337 1 IR_OK=1;
338 1 P0=P1;
339 1 song_number=P1;
340 1
341 1 EA=1; //总中断
342 1
343 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 238 ----
CONSTANT SIZE = 1081 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 1
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -