📄 sound.lst
字号:
C51 COMPILER V7.10 SOUND 08/29/2005 13:01:45 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE SOUND
OBJECT MODULE PLACED IN .\out\SOUND.obj
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE c\SOUND.C BROWSE INTVECTOR(0XC000) DEBUG OBJECTEXTEND PRINT(.
-\lst\SOUND.lst) OBJECT(.\out\SOUND.obj)
line level source
1
2 #include "..\h\globle.h"
3 #include "..\h\io_pin.h"
4 #include <intrins.h>
5 #define MUSIC_END 0x00
6 #define FREQ 16000000
7
8 extern void Delay100uS(word);
9
10 void sound(void)
11 {
12 1 SOUND_PIN=0;
13 1 Delay100uS(2000); //delay 200ms
14 1 SOUND_PIN=1;
15 1 }
16 void error_sound(void)
17 {
18 1 sound();
19 1 Delay100uS(2000); //delay 200ms
20 1 sound();
21 1 }
22 //--------------------------------------------------------------------------//
23 //标 题: 单片机IO口播放乐曲 #define FREQ 11059200 //
24 //版 本: V1.00 //
25 //创建人: 徐文军 E-mail:xuwenjun@21cn.com //
26 //日 期: 02-11-5 //
27 //描 述: 单片机利用T1中断在IO口P1.0输出乐曲 //
28 //--------------------------------------------------------------------------//
29 //说 明: //
30 // 单片机用T1中断在IO口P1.0输出乐曲(在P1.0口与VCC间接一喇叭即可听到) //
31 // 1.由于输出的是方波,比较难听:-)你也可以将波形细分用DA输出正弦波 //
32 // 2.由于T1频繁中断,任何其他中断发生都会是乐曲打顿,只适合试验 //
33 // 3.优化音符编码:一个字节中包含节拍、音符、升降调,可区分数据和命令//
34 // 同时人工将音符译为机器码非常容易。(格式看下面实例)//
35 //--------------------------------------------------------------------------//
36
37 //音符码格式:| D7 |D6 D5 D4| D3 |D2 D1 D0|
38 // |变调| 节拍|升降| 音符 |
39
40 //功能码格式:| D7 D6 D5 D4 | D3 D2 D1 D0|
41 // |高4位=0时是功能码|根据低4位散转 |
42 //最后字节为功能码必须==0x00退出
43
44
45 /*********************************************/
46 byte code music_tab1[]={ //梁祝
47 0xcb, //示例:0xcb=1100 1011B,即升调,4/16拍,3Mi低音
48 0x35,0x16,0xb9,0x12,0x96,0x99,0xa5,
49 0xbd,0x99,0x96,0x15,0x13,0x15,0x62,
50 0x32,0x13,0xa7,0x26,0x25,0x16,0xa9,0x22,
51 0xa3,0xa9,0x96,0x15,0x16,0x99,0xe5,
52 0xbb,0x15,0xa7,0xaa,0x96,0x99,0xd5,
53 0x13,0x15,0x23,0x15,0x16,0x17,0x9a,0xd6,0x15,0x16,
54 0xb9,0x12,0x25,0x23,0x23,0x22,0x13,0x12,0x21,0x96,0x15,
C51 COMPILER V7.10 SOUND 08/29/2005 13:01:45 PAGE 2
55 0x43,0xc9,0x96,0x99,0x96,0x15,0x13,0x15,0x16,0x99,
56 0xd5,
57 MUSIC_END, //最后字节为功能码必须==0x00退出
58 };
59 byte code music_tab2[]={ //康定情歌
60 0x23,0x25,0x26,0x16,0x15, 0x36,0x13,0x42,
61 0x23,0x25,0x26,0x16,0x15, 0x26,0x53,
62 0x23,0x25,0x26,0x16,0x15, 0x26,0x23,0x42,
63 0x25,0x23,0x12,0x13,0x12,0x11, 0x22,0xd6,
64 0x26,0xda, 0x25,0x53, 0x12,0x11,0xd6,
65 0xad,0x23,0x12,0x13,0x12,0x11, 0x22,0xd6,
66 MUSIC_END,
67 };
68 byte code music_tab3[]={ //美酒加咖啡
69 0x55,0x23,0x25,0x26,0xa9,0x22, 0x73,
70 0x45,0x25,0x26,0x23,0x22,0x21,0x23, 0x72,
71 0x52,0x23,0x45,0x43, 0x22,0x21,0xa6,0x25,0x66,
72 0xc9,0xa6,0x25,0x23,0x25,0x26,0xa9, 0xf5,
73 0x45,0x23,0x25,0x46,0xc9, 0x22,0x13,0x12,0x21,0x22,0x63,
74 0x22,0x23,0x25,0x26,0x25,0x23,0x22,0x21, 0x72,
75 0x52,0x23,0x45,0x43, 0x22,0x21,0xa6,0x25,0x66,
76 0xb9,0x12,0x23,0x25,0x22,0xa5,0xab,0x22, 0x71,
77 MUSIC_END,
78 };
79 byte code music_tab4[]={ //北国之春
80 0x15,0x16,0x75, 0x15,0x16,0x55,0x13,0x15,0x16,0x15,0x16,0x99,0x12,0x13,
81 0x65,0x45,0x13,0x12,0x11,0x12, 0x73,
82 0x62,0x42,0x12,0x11,0x96,0x15, 0x76,
83 0x55,0x23,0x45,0xa9,0x22, 0x53,0x12,0x13,0x65,
84 0x52,0x22,0x42,0x21,0xa6, 0xe9,0x91,0x12,0x13,0x12,0x13,0x15,0x99,0x12, //以上为过门
85 0x20,0x23,0x23,0x23,0x63, 0x22,0x23,0x23,0x22,0x41,0xa6,0x25,
86 0x53,0x22,0x21,0xa9,0x21,0xa6, 0x75,
87 0x26,0xa9,0x21,0xa6,0xc9,0x12,0x11,0x96,0x15,
88 0x23,0x25,0x25,0x26,0x45,0x21,0x22,
89 0x13,0x35,0x25,0xa9,0xa6,0x25,0x23,0x22, 0x71,
90 0x52,0x25,0x45,0x13,0x15,0x13,0x12, 0x21,0x41,0x22,0x43,0x45,
91 0x23,0x25,0x26,0xa9,0x42,0x12,0x33, 0x72,
92 0x51,0x22,0x43,0x22,0x21, 0xc6,0xc9,0x29,0xc6,0x45,0x23,0x23,
93 0x53,0x25,0x26,0x25,0x13,0x12,0x21, 0x62,0x42,0x23,0x25,
94 0x55,0x26,0x25,0x23,0x45, 0x26,0xa9,0x21,0x22,0x63,
95 0x52,0x22,0x22,0x13,0x12,0x21,0xa6,0xf9,
96 MUSIC_END,
97 };
98
99 /***************************************************************/
100
101 void PlayMusic(byte index)
102 {
103 1 extern void music_play(byte *);
104 1 byte *p;
105 1
106 1 switch(index)
107 1 {
108 2 case 1:p=music_tab1;break;
109 2 case 2:p=music_tab2;break;
110 2 case 3:p=music_tab3;break;
111 2 case 4:p=music_tab4;break;
112 2 default:break;
113 2 }
114 1
115 1 music_play(p);
116 1 }
C51 COMPILER V7.10 SOUND 08/29/2005 13:01:45 PAGE 3
117
118
119 byte code music_l_tab[8]={0,1,2,3,4,6,8,16};//节拍延时单位
120 byte code music_freq_tab[64]={ //音符定时器值表
121 0xff,0xea, //0 休止符
122 255-FREQ/24/131/256, //256-FREQ/24/x/256 //1 do 高字节
123 256-FREQ/24/131%256, //256-FREQ/24/x%256 //1 do 低字节
124 255-FREQ/24/147/256,256-FREQ/24/147%256, //2 re
125 255-FREQ/24/165/256,256-FREQ/24/165%256, //3 mi
126 255-FREQ/24/175/256,256-FREQ/24/175%256, //4 fa
127 255-FREQ/24/196/256,256-FREQ/24/196%256, //5 suo
128 255-FREQ/24/221/256,256-FREQ/24/221%256, //6 la
129 255-FREQ/24/248/256,256-FREQ/24/248%256, //7 xi
130
131 0xff,0xea, //0 休止符
132 255-FREQ/24/262/256,256-FREQ/24/262%256, //1 do
133 255-FREQ/24/294/256,256-FREQ/24/294%256, //2 re
134 255-FREQ/24/330/256,256-FREQ/24/330%256, //3 mi
135 255-FREQ/24/350/256,256-FREQ/24/350%256, //4 fa
136 255-FREQ/24/393/256,256-FREQ/24/393%256, //5 suo
137 255-FREQ/24/441/256,256-FREQ/24/441%256, //6 la
138 255-FREQ/24/495/256,256-FREQ/24/495%256, //7 xi
139
140 0xff,0xea, //0 休止符
141 255-FREQ/24/525/256,256-FREQ/24/525%256, //1 do
142 255-FREQ/24/589/256,256-FREQ/24/589%256, //2 re
143 255-FREQ/24/661/256,256-FREQ/24/661%256, //3 mi
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -