📄 无线遥控音乐.lst
字号:
192 0x32,0x32,0x32,0x41,0x51,0x54,0x51,0x71,
193 0x72,0x72,0x72,0x81,0xA1,0xA2,0x82,0x72,0x51,0x41,
194 0x42,0x42,0x44,0x32,0x51,0x61,
195 0x72,0x42,0x44,0x52,0x41,0x31,
196 0x34,0x52,0x41,0x31,0x34,0x52,0x42,
197 0x52,0x32,0x52,0x81,0x71,0x74,0x51,0x71,
198 0x82,0x81,0x71,0x72,0x81,0x71,0x74,0x51,0x41,0x31,
199 0x42,0x41,0x51,0x42,0x31,0x41,0x44,0x52,0x41,0x31,
200 0x34,0x52,0x41,0x31,0x34,0x52,0x42,
201 0x52,0x32,0x52,0x81,0x71,0x74,0x51,0x41,
202 0x82,0x82,0xA2,0x71,0x81,0x72,0x71,0x51,0x41,0x31,
203 0x44,0x41,0x31,0x41,0x51,0x44,0x52,0x52,
204 0x42,0x31,0x34,0x52,0x41,0x31,
205 0x42,0x31,0x34,
206 0xFF};
207
208
209 //第八首 偏偏喜欢你
210 unsigned char code song8[]={
211 0XC2,0XB2,
212 0X36,0X52,0X42,0X32,0X11,0XC1,0XB2,
213 0XC6,0X12,0XC4,0X12,0XC2,
214 0X76,0XA2,0X82,0X72,0X51,0X41,0X32,
215 0X4C,0X42,0X32,
216 0X74,0X82,0X74,0X82,0X72,
217 0X52,0X41,0X38,0X32,0X42,
218 0X16,0XC2,0X72,0X52,0X42,0X42,
219 0X3C,0XC2,0XB2,
220 0X36,0X52,0X42,0X32,0X11,0XC1,0XB2,
221 0XC6,0X12,0XC4,0X12,0XC2,
222 0X76,0XA2,0X82,0X72,0X51,0X41,0X32,
223 0X4C,0X42,0X32,
224 0X76,0X82,0X74,0X82,0X72,
225 0X53,0X41,0X38,0X32,0X42,
226 0X16,0XC2,0X72,0X52,0X41,0X51,0X12,
227 0XCC,0XC2,0XB2,
228 0X16,0XC2,0X72,0X52,0X42,0X42,
229 0X3C,0X32,0X32,
230 0X26,0X22,0X24,0X42,0X32,
231 0x22,0x12,0x18,0x02,0x52,
232 0X46,0X12,0X44,0X72,0X82,
233 0X5C,0X52,0X52,
234 0X46,0X42,0X74,0X42,0X32,
235 0X36,0X42,0X58,
236 0X82,0X72,0X62,0X52,0X46,0X32,
237 0X3C,0X12,0XB2,
238 0X36,0X52,0X42,0X32,0X11,0XC1,0XB2,
239 0XC6,0X12,0XC4,0X12,0XC2,
240 0X76,0XA2,0X82,0X72,0X51,0X41,0X32,
C51 COMPILER V8.02 蝊线_?___乐 12/02/2008 18:41:25 PAGE 5
241 0X48,0X02,0X42,0X52,0X62,
242 0X76,0X82,0X74,0X82,0X72,
243 0X56,0X41,0X38,0X32,0X22,
244 0X16,0XC2,0X72,0X52,0X42,0X42,
245 0X3C,0X04,0X04,0X04,0X04,
246 0xFF};
247
248
249 unsigned char code* code songs[]={song0,song1,song2,song3,song4,song5,song6,
250 song7,song8}; //指向8首歌
251
252
253 /*C调各音符频率与计数初值T的对照表*/
254 unsigned char code yin[30]={0xFF,0xFF,0xFB,0x90,0xFC,0x0C,0xFC,0x44,
255 0xFC,0xAC,0xFD,0x09,0xFD,0x34,0xFD,0x82,
256 0xFD,0xC8,0xFE,0x06,0xFE,0x22,0xFA,0X15,
257 0XFB,0x04,0xFA,0x67,0xFE,0x85};
258
259
260 /*****延时1ms****/
261 void delay1ms(void)
262 {
263 1 unsigned char i,j;
264 1 for(i=2;i>0;i--)
265 1 for(j=230;j>0;j--) ;
266 1 }
267
268
269 /*延时1/4拍时间即187ms*/
270 void delay187ms()
271
272 {
273 1 unsigned char i,j;
274 1 for(i=255;i>0;i--)
275 1 {
276 2 for(j=120;j>0;j--)
277 2 {
278 3 if(wl_OK==1) {break;}
279 3 }
280 2 }
281 1 }
282
283
284
285
286
287 /******每个音符的发声******/
288 void timer0() interrupt 1 using 1 //定时器T0
289 {
290 1 TH0=yin[2*l];
291 1 TL0=yin[2*l+1];
292 1 SPK = !SPK;
293 1
294 1 }
295
296
297
298 /******演奏函数******/
299 void sing_song()
300 {
301 1 unsigned int data j; //取码指针
302 1 unsigned char data i; //用于循环
C51 COMPILER V8.02 蝊线_?___乐 12/02/2008 18:41:25 PAGE 6
303 1 unsigned char data k; //几个1/4拍
304 1 wl_OK=0; //不能少掉!!!!
305 1 song=songs[song_number];
306 1 j=0;
307 1 while(*(song+j)!=0xFF) //是否取到结束码
308 1 {
309 2 if(wl_OK==1){break;} //这一句很重要的!!!!!
310 2 k=*(song+j)&0x0F; //后4位为多少个1/4拍
311 2 l=*(song+j)>>4; //song(song+j)[]中所放的每个字节
312 2 //前4位乘2表示为音符频率在数组yin[]中的位置
313 2
314 2 TH0=yin[2*l]; //置初值
315 2 TL0=yin[2*l+1];
316 2 TR0=1; //起动定时器0
317 2 if ((yin[2*l]==0xff)&&(yin[2*l+1]==0xff)) //如果取到的都是休止符,则不输出音频
318 2 {
319 3 TR0=0;SPK=1;
320 3 }
321 2 for(i=k;i>0;--i) //节拍K为多少就执行多少个1/4拍
322 2 { delay187ms(); }
323 2 TR0=0;
324 2 j++;
325 2 } //回22222
326 1 } //回xxxxxx
327
328 /******端口值读取函数*****/
329 void Getch()
330 {
331 1
332 1 P1=0x0f; //先对P2置数,进行行扫描//
333 1 if(P1!=0x0f) //判断端口数据是否变化//
334 1 {
335 2 delay1ms(); //软件延时//
336 2 if(P1!=0x0f) //确认端口数据变化//
337 2 {
338 3 P0=P1; //送到P0口显示第几首音乐
339 3 song_number=P1; //调整音乐曲目
340 3 }
341 2 }
342 1 }
343
344 /*****主函数*****/
345 void main()
346 {
347 1
348 1 EA=1; //总中断
349 1 TMOD=0x01; //timer0工作在方式1
350 1 IT0=1; //外部中断0触发方式控制位,下降沿触发
351 1 ET0=1; //允许定时器T0中断
352 1 EX0=1; //外部中断0(INT0)中断允许位
353 1 IP=0x01; //定义外部中断0优先于定时器中断的优先级
354 1
355 1
356 1 P0=0x00;
357 1
358 1 wl_OK=0;
359 1
360 1 while(1)
361 1 {
362 2 if(wl_OK==1)
363 2 sing_song(); //演奏
364 2 else P0=0; //等待
C51 COMPILER V8.02 蝊线_?___乐 12/02/2008 18:41:25 PAGE 7
365 2 }
366 1 }
367
368 /*****外部中断*****/
369 void t0(void) interrupt 0 using 2//外部中断0的函数
370 {
371 1
372 1 EA=0; //关总中断
373 1 wl_OK=1; //接到无线信号
374 1 Getch(); //端口扫描
375 1 EA=1; //开总中断
376 1
377 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 288 ----
CONSTANT SIZE = 1087 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 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 + -