📄 ex5-4.lst
字号:
C51 COMPILER V8.02 EX5_4 02/27/2009 21:06:12 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE EX5_4
OBJECT MODULE PLACED IN ex5-4.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE ex5-4.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 标题:范例 5-4
3 版本:1.0
4 Target:89S51
5 程序描述:这个程序利用89S51演奏生日快乐的歌曲 */
6 /* ***************************************************** */
7 #include <REGX51.H>
8 void delay(unsigned char n); //函数delay()存在 文件delay.c
9 code unsigned song[]={
10 0xfc,0xd1,0xc1,0xb1,0xc1,0xd4,0xc1,0xd1,0xf1,0xc1,0xd6,0xc1,0xd1, 0xcc,0x01,0xc1,0xb1,0x91,0x81, 0x94,0x81
-,0x91,0xb1,0x81,0x98,
11 0x86,0x62,0x84,0xb2,0xc2,0xd6,0xc1,0xd1,0xf6,0xd2, 0xc6,0xc2,0x01,0xc2,0xc2,0xb2,0x92,0xb8,0x41,0x51,0x61,
-0x51,0x61,0x81,0x41,0x51,
12 0x62,0xd4,0x01,0xd2,0x01,0xd8, 0xc2,0xc1,0xd1,0xd2,0xc2,0xb4,0x92,0x82, 0x66,0x52,0x42,0xb2,0xb2,0x92, 0x8
-8,0x01,0x81,0x61,0x84,0x01,0x82,
13 0x92,0xb2,0xb2,0x92,0xb4,0xc1,0xb1,0x91,0x81, 0x62,0x82,0x82,0x81,0x91,0x84,0x42,0x52, 0x62,0x82,0x82,0xb2
-,0x92,0x82,0x62,0x52, 0x46,0xb2,0x92,0x82,0x61,0x51,0x42,
14 0x56,0x82,0x82,0x62,0x62,0x52, 0x42,0x42,0x52,0x62,0x86,0x01,0x82, 0x62,0x82,0x82,0xb2,0xb2,0xc2,0xc2,0xc2
-,0xc1,0xd1, 0xcf,
15 0xb6,0xc2,0xd4,0xc2,0xb2,0x92,0xb2,0xb2,0x92,0x84,0x64,0x01, 0x66,0x82,0x81,0x91,0x82,0x61,0x51,0x42, 0x5c
-,0x62,0x82,
16 0x86,0x92,0x82,0x62,0x84,0x92,0xb2,0xb2,0xc2,0xd8, 0xc6,0x01,0xc2,0xc2,0xc2,0xb2,0x91,0xb1, 0xbf,0x01, 0xb
-f,0x00};
17 code int note[]={
18 0x0000,0xFB03,0xFB8E,0xFC0B,0xFC43,0xFCAB,0xFD08,0xFD32,
19
20 0xFD81,0xFDC7,0xFE05,0xFE21,0xFE55,0xFE83,0xFE99,0xFEC0};
21 unsigned char i=0;
22 unsigned char hi_note,low_note;
23 void Delay(unsigned int a)
24 {
25 1 unsigned char i;
26 1 while(a--)
27 1 for(i=0;i<125;i++);
28 1 }
29 static void timer1_isr(void) interrupt TF1_VECTOR using 2
30 {
31 1 TR1=0;
32 1 TL1=low_note;
33 1 TH1=hi_note;
34 1 TR1=1;
35 1 P0_5=~P0_5;
36 1 }
37 static void timer1_initialize(void)
38 {
39 1 EA=0;
40 1 TR1=0;
41 1 TMOD = 0X10;
42 1 ET1=1;
43 1 EA=1;
44 1 }
45 void singing()
46 {
47 1 unsigned int beat,temp;
48 1 i=0;
C51 COMPILER V8.02 EX5_4 02/27/2009 21:06:12 PAGE 2
49 1 do {
50 2 temp=song[i]; // 读出乐谱的一个byte
51 2 if (temp==0) { // 如果是0就表示音乐结束
52 3 TR1=0; // 停止计时计数器1
53 3 return; // 返回
54 3 }
55 2 beat=temp & 0x0f; //取出低阶的4位,这是拍子
56 2 temp=(temp >> 4) & 0x0f; //取出高阶4位当成音符的频率
57 2 if (temp==0) TR1=0; //如果拍子是0就表示休止符
58 2 else {
59 3 hi_note=note[temp] >> 8; //根据音符的频率得到Timer1计数值
60 3 low_note=note[temp] & 0x00FF;
61 3 TR1=1; //启动计时计数器1
62 3 }
63 2 Delay(140*beat); // 延迟拍子的时间
64 2 i++;
65 2 } while(1);
66 1 }
67 void main (void) {
68 1 timer1_initialize();
69 1 do {
70 2 singing();
71 2 } while (1); // 无穷循环
72 1 }
73
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 170 ----
CONSTANT SIZE = 390 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 2
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 + -