📄 musicbox.lst
字号:
C51 COMPILER V7.00 MUSICBOX 01/18/2007 14:46:49 PAGE 1
C51 COMPILER V7.00, 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
stmt level source
1 /**********************************************************************/
2 #include "AT89X51.H"
3
4 unsigned char m; //m为频率常数
5 unsigned char n; //n为节拍常数
6 unsigned char i;
7
8 sbit bell=P3^7;
9
10
11 unsigned char code music_tab[] ={
12 0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数,
13 0x20, 0x40, 0x1C , 0x10,
14 0x18, 0x10, 0x20 , 0x10,
15 0x1C, 0x10, 0x18 , 0x40,
16 0x1C, 0x20, 0x20 , 0x20,
17 0x1C, 0x20, 0x18 , 0x20,
18 0x20, 0x80, 0xFF , 0x20,
19 0x30, 0x1C, 0x10 , 0x18,
20 0x20, 0x15, 0x20 , 0x1C,
21 0x20, 0x20, 0x20 , 0x26,
22 0x40, 0x20, 0x20 , 0x2B,
23 0x20, 0x26, 0x20 , 0x20,
24 0x20, 0x30, 0x80 , 0xFF,
25 0x20, 0x20, 0x1C , 0x10,
26 0x18, 0x10, 0x20 , 0x20,
27 0x26, 0x20, 0x2B , 0x20,
28 0x30, 0x20, 0x2B , 0x40,
29 0x20, 0x20, 0x1C , 0x10,
30 0x18, 0x10, 0x20 , 0x20,
31 0x26, 0x20, 0x2B , 0x20,
32 0x30, 0x20, 0x2B , 0x40,
33 0x20, 0x30, 0x1C , 0x10,
34 0x18, 0x20, 0x15 , 0x20,
35 0x1C, 0x20, 0x20 , 0x20,
36 0x26, 0x40, 0x20 , 0x20,
37 0x2B, 0x20, 0x26 , 0x20,
38 0x20, 0x20, 0x30 , 0x80,
39 0x20, 0x30, 0x1C , 0x10,
40 0x20, 0x10, 0x1C , 0x10,
41 0x20, 0x20, 0x26 , 0x20,
42 0x2B, 0x20, 0x30 , 0x20,
43 0x2B, 0x40, 0x20 , 0x15,
44 0x1F, 0x05, 0x20 , 0x10,
45 0x1C, 0x10, 0x20 , 0x20,
46 0x26, 0x20, 0x2B , 0x20,
47 0x30, 0x20, 0x2B , 0x40,
48 0x20, 0x30, 0x1C , 0x10,
49 0x18, 0x20, 0x15 , 0x20,
50 0x1C, 0x20, 0x20 , 0x20,
51 0x26, 0x40, 0x20 , 0x20,
52 0x2B, 0x20, 0x26 , 0x20,
53 0x20, 0x20, 0x30 , 0x30,
54 0x20, 0x30, 0x1C , 0x10,
55 0x18, 0x40, 0x1C , 0x20,
C51 COMPILER V7.00 MUSICBOX 01/18/2007 14:46:49 PAGE 2
56 0x20, 0x20, 0x26 , 0x40,
57 0x13, 0x60, 0x18 , 0x20,
58 0x15, 0x40, 0x13 , 0x40,
59 0x18, 0x80, 0x00
60 };
61
62
63 void time0(void) interrupt 1 using 1 //产生10MS精确定时
64 { TH0=(65536-10000)/256;
65 1 TL0=(65536-10000)%256;
66 1 n--;
67 1 }
68 void delayms(unsigned char a) //微秒延时程序
69 {
70 1 while(--a);
71 1 }
72 void delay(void) //延迟程序
73 {
74 1 int i,j;
75 1 for(i=50;i--;i>0)
76 1 for(j=10000;j--;j>0)
77 1 ;
78 1 }
79
80 void main()
81 {
82 1 P2=0;
83 1 TMOD=(TMOD&0xf0)|0x01;
84 1 TH0=(65536-10000)/256;
85 1 TL0=(65536-10000)%256;
86 1 EA=1;
87 1 ET0=1;
88 1 TR0=0;
89 1 while(1)
90 1 {
91 2 switch(music_tab[i])
92 2 {
93 3 case 0x00:
94 3 i=0;delay(); break; // 曲终停顿一定时间
95 3 case 0xff:
96 3 i=i+1;delayms(100);break; //遇到休止符停顿一定时间100微秒,再取下一个频率
97 3 default:
98 3 m=music_tab[i++];n=music_tab[i++];//取频率到m,取节拍到n
99 3
100 3 TR0=1;
101 3 while(n!=0)
102 3 {
103 4 bell=!bell;
104 4 delayms(4*m);//调整产生的频率,可以通过在m前的值来修正音调的高低
105 4
106 4 }
107 3 TR0=0;
108 3 }
109 2 }
110 1 }
111
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 138 ----
CONSTANT SIZE = 191 ----
XDATA SIZE = ---- ----
C51 COMPILER V7.00 MUSICBOX 01/18/2007 14:46:49 PAGE 3
PDATA SIZE = ---- ----
DATA SIZE = 3 ----
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 + -