📄 music.lst
字号:
C51 COMPILER V6.12 MUSIC 08/30/2005 21:50:23 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE MUSIC
OBJECT MODULE PLACED IN .\music.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE .\music.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg52.h>
2 #include <intrins.h>
3 sbit P32=P3^2;
4 unsigned char n=0; //n为节拍常数变量,全局变量
5 unsigned char code music[] ={
6 0x18, 0x30, 0x1C , 0x10,
7 0x20, 0x40, 0x1C , 0x10,
8 0x18, 0x10, 0x20 , 0x10,
9 0x1C, 0x10, 0x18 , 0x40,
10 0x1C, 0x20, 0x20 , 0x20,
11 0x1C, 0x20, 0x18 , 0x20,
12 0x20, 0x80, 0xFF , 0x20,
13 0x30, 0x1C, 0x10 , 0x18,
14 0x20, 0x15, 0x20 , 0x1C,
15 0x20, 0x20, 0x20 , 0x26,
16 0x40, 0x20, 0x20 , 0x2B,
17 0x20, 0x26, 0x20 , 0x20,
18 0x20, 0x30, 0x80 , 0xFF,
19 0x20, 0x20, 0x1C , 0x10,
20 0x18, 0x10, 0x20 , 0x20,
21 0x26, 0x20, 0x2B , 0x20,
22 0x30, 0x20, 0x2B , 0x40,
23 0x20, 0x20, 0x1C , 0x10,
24 0x18, 0x10, 0x20 , 0x20,
25 0x26, 0x20, 0x2B , 0x20,
26 0x30, 0x20, 0x2B , 0x40,
27 0x20, 0x30, 0x1C , 0x10,
28 0x18, 0x20, 0x15 , 0x20,
29 0x1C, 0x20, 0x20 , 0x20,
30 0x26, 0x40, 0x20 , 0x20,
31 0x2B, 0x20, 0x26 , 0x20,
32 0x20, 0x20, 0x30 , 0x80,
33 0x20, 0x30, 0x1C , 0x10,
34 0x20, 0x10, 0x1C , 0x10,
35 0x20, 0x20, 0x26 , 0x20,
36 0x2B, 0x20, 0x30 , 0x20,
37 0x2B, 0x40, 0x20 , 0x15,
38 0x1F, 0x05, 0x20 , 0x10,
39 0x1C, 0x10, 0x20 , 0x20,
40 0x26, 0x20, 0x2B , 0x20,
41 0x30, 0x20, 0x2B , 0x40,
42 0x20, 0x30, 0x1C , 0x10,
43 0x18, 0x20, 0x15 , 0x20,
44 0x1C, 0x20, 0x20 , 0x20,
45 0x26, 0x40, 0x20 , 0x20,
46 0x2B, 0x20, 0x26 , 0x20,
47 0x20, 0x20, 0x30 , 0x30,
48 0x20, 0x30, 0x1C , 0x10,
49 0x18, 0x40, 0x1C , 0x20,
50 0x20, 0x20, 0x26 , 0x40,
51 0x13, 0x60, 0x18 , 0x20,
52 0x15, 0x40, 0x13 , 0x40,
53 0x18, 0x80, 0x00
54 }; //格式为: 频率常数,节拍常数,频率常数,节拍常数
55 void time0_int() interrupt 1 //采用定时中断0 控制节拍
C51 COMPILER V6.12 MUSIC 08/30/2005 21:50:23 PAGE 2
56 {
57 1 TH0=0xdc;
58 1 TL0=0x00;
59 1 n--;
60 1 }
61 void delay (unsigned char m) //控制频率的延时程序
62 {
63 1 unsigned int a=3*m;
64 1 while(--a);
65 1 }
66 void delayms(unsigned int i) //延时程序,i是形式参数
67 {
68 1 unsigned int j;
69 1 for(;i>0;i--) //变量i由实际参数传入一个值,因此i不能赋初值
70 1 for(j=0;j<125;j++)
71 1 {;}
72 1 }
73 void main()
74 {
75 1 unsigned char p,m; //m为频率常数变量
76 1 unsigned char i=0;
77 1 TMOD=0x01;
78 1 TH0=0xdc;
79 1 TL0=0x00;
80 1 EA=1;
81 1 ET0=1;
82 1 play:while(1)
83 1 {
84 2 a: p=music[i];
85 2 if(p==0x00)
86 2 { i=0, delayms(1000);goto play;} //如果碰到结束符,延时约1秒,回到开始再来一遍
87 2 else if(p==0xff)
88 2 { i=i+1;delayms(10),TR0=0; goto a;} //若碰到休止符,延时100ms,继续取下一音符
89 2 else
90 2 {m=music[i++]; n=music[i++];} //取频率常数和节拍常数
91 2 TR0=1; //开定时器1
92 2 while(n!=0)
93 2 {P32=~P32;delay(m);} //等待节拍完成, 通过P1口输出音频
94 2 TR0=0; //关定时器1
95 2 }
96 1 }
97
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 140 ----
CONSTANT SIZE = 191 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
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 + -