├── .gitattributes
├── .gitignore
├── LICENSE
├── README.md
├── beep
├── beep.uvopt
├── beep.uvproj
├── main.c
├── music_data.c
├── music_data.h
└── 电路图.png
├── dac
├── dac.uvopt
├── dac.uvproj
├── main.c
├── music_data.c
├── music_data.h
└── 电路图.png
├── pwm
├── main.c
├── music_data.c
├── music_data.h
├── pwm.uvopt
├── pwm.uvproj
└── 电路图.png
└── scripts
├── beep.json
├── flower dance.wav
├── tone_to_loop_count.py
├── wav_to_code.py
└── wav_to_pwm.py
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | *.egg-info/
24 | .installed.cfg
25 | *.egg
26 |
27 | # PyInstaller
28 | # Usually these files are written by a python script from a template
29 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
30 | *.manifest
31 | *.spec
32 |
33 | # Installer logs
34 | pip-log.txt
35 | pip-delete-this-directory.txt
36 |
37 | # Unit test / coverage reports
38 | htmlcov/
39 | .tox/
40 | .coverage
41 | .coverage.*
42 | .cache
43 | nosetests.xml
44 | coverage.xml
45 | *.cover
46 | .hypothesis/
47 |
48 | # Translations
49 | *.mo
50 | *.pot
51 |
52 | # Django stuff:
53 | *.log
54 | local_settings.py
55 |
56 | # Flask stuff:
57 | instance/
58 | .webassets-cache
59 |
60 | # Scrapy stuff:
61 | .scrapy
62 |
63 | # Sphinx documentation
64 | docs/_build/
65 |
66 | # PyBuilder
67 | target/
68 |
69 | # Jupyter Notebook
70 | .ipynb_checkpoints
71 |
72 | # pyenv
73 | .python-version
74 |
75 | # celery beat schedule file
76 | celerybeat-schedule
77 |
78 | # SageMath parsed files
79 | *.sage.py
80 |
81 | # Environments
82 | .env
83 | .venv
84 | env/
85 | venv/
86 | ENV/
87 |
88 | # Spyder project settings
89 | .spyderproject
90 | .spyproject
91 |
92 | # Rope project settings
93 | .ropeproject
94 |
95 | # mkdocs documentation
96 | /site
97 |
98 | # mypy
99 | .mypy_cache/
100 |
101 |
102 | .idea/
103 | /bin/
104 | *.bak
105 | *.plg
106 | *.lst
107 | *.m51
108 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 xfgryujk
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # c51-play-music
2 | 51单片机播放音乐
3 |
4 | ## 相关博客
5 | * [51单片机播放音乐(一):蜂鸣器](https://blog.csdn.net/xfgryujk/article/details/84309970)
6 | * [51单片机播放音乐(二):DA转换播放任意波形](https://blog.csdn.net/xfgryujk/article/details/84349735)
7 | * [51单片机播放音乐(三):PWM播放任意波形](https://blog.csdn.net/xfgryujk/article/details/84479505)
8 |
9 | ## 编译方法
10 | ### 蜂鸣器
11 | 1. 将[蜂鸣器乐谱](https://github.com/xfgryujk/mml2beep)放到`scripts/beep.json`
12 | 2. 运行`scripts/tone_to_loop_count.py`
13 | 3. 编译`beep/beep.uvproj`
14 |
15 | ### DA转换
16 | 1. 将音频文件剪辑到大约10秒,重采样到大约5000Hz采样率,保存到`scripts/flower dance.wav`
17 | 2. 运行`scripts/wav_to_code.py`
18 | 3. 编译`dac/dac.uvproj`
19 |
20 | ### PWM
21 | 1. 将音频文件剪辑到大约10秒,重采样到大约5000Hz采样率,保存到`scripts/flower dance.wav`
22 | 2. 运行`scripts/wav_to_pwm.py`
23 | 3. 编译`pwm/pwm.uvproj`
24 |
--------------------------------------------------------------------------------
/beep/beep.uvproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 1.0
5 |
6 | ### uVision Project, (C) Keil Software
7 |
8 |
9 |
10 | beep
11 | 0x0
12 | MCS-51
13 |
14 |
15 | AT89C51
16 | Atmel
17 | IRAM(0-0x7F) IROM(0-0xFFF) CLOCK(24000000)
18 |
19 | "LIB\STARTUP.A51" ("Standard 8051 Startup Code")
20 |
21 | 2976
22 | REGX51.H
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | 0
33 | F:\Keil\C51\BIN\
34 |
35 |
36 |
37 | Atmel\
38 |
39 | 0
40 | 0
41 | 0
42 | 0
43 | 1
44 |
45 | ..\bin\
46 | beep
47 | 1
48 | 0
49 | 1
50 | 1
51 | 1
52 | .\
53 | 0
54 | 0
55 | 0
56 |
57 | 0
58 | 0
59 |
60 |
61 | 0
62 | 0
63 |
64 |
65 | 0
66 | 0
67 |
68 |
69 | 0
70 | 0
71 |
72 |
73 | 0
74 | 0
75 |
76 |
77 | 0
78 | 0
79 |
80 | 0
81 |
82 |
83 |
84 | 0
85 | 0
86 | 0
87 | 0
88 | 0
89 | 1
90 | 0
91 | 0
92 | 0
93 | 0
94 | 3
95 |
96 |
97 | 65535
98 |
99 |
100 | S8051.DLL
101 |
102 | DP51.DLL
103 | -p51
104 | S8051.DLL
105 |
106 | TP51.DLL
107 | -p51
108 |
109 |
110 |
111 | 0
112 | 0
113 | 0
114 | 0
115 | 16
116 |
117 |
118 | 1
119 | 1
120 | 1
121 | 1
122 | 1
123 | 1
124 | 1
125 | 1
126 | 0
127 |
128 |
129 | 0
130 | 1
131 | 0
132 | 1
133 | 1
134 | 1
135 | 0
136 | 1
137 |
138 | 0
139 | -1
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 | 1
159 | 0
160 | 0
161 | 0
162 | 0
163 | -1
164 |
165 |
166 | "" ()
167 |
168 |
169 |
170 |
171 | 0
172 | 0
173 | 2
174 | 0
175 | 0
176 | 0
177 | 0
178 | 0
179 | 0
180 | 1
181 | 0
182 | 1
183 | 0
184 | 0
185 | 0
186 | 0
187 | 0
188 | 0
189 | 0
190 | 0
191 | 0
192 | 0
193 | 0
194 | 0
195 | 0
196 | 0
197 | 0
198 | 0
199 | 0
200 | 0
201 | 0
202 | 0
203 | 0
204 | 0
205 | 0
206 | 0
207 | 0
208 | 0
209 | 0
210 | 0
211 | 0
212 |
213 |
214 | 0
215 | 0x0
216 | 0xffff
217 |
218 |
219 | 0
220 | 0x0
221 | 0x0
222 |
223 |
224 | 0
225 | 0x0
226 | 0x0
227 |
228 |
229 | 0
230 | 0x0
231 | 0x0
232 |
233 |
234 | 0
235 | 0x0
236 | 0x0
237 |
238 |
239 | 0
240 | 0x0
241 | 0x0
242 |
243 |
244 | 0
245 | 0x0
246 | 0x0
247 |
248 |
249 | 0
250 | 0x0
251 | 0x0
252 |
253 |
254 | 1
255 | 0x0
256 | 0x1000
257 |
258 |
259 | 0
260 | 0x0
261 | 0x80
262 |
263 |
264 | 0
265 | 0x0
266 | 0x0
267 |
268 |
269 | 0
270 | 0x0
271 | 0x0
272 |
273 |
274 | 0
275 | 0x0
276 | 0x0
277 |
278 |
279 |
280 |
281 | 0
282 | 0
283 | 1
284 | 0
285 | 1
286 | 3
287 | 8
288 | 2
289 | 1
290 | 1
291 | 0
292 | 0
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 | 0
302 | 1
303 | 0
304 | 0
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 | 0
314 | 0
315 | 1
316 | 0
317 | 2
318 | 1
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 | Source Group 1
348 |
349 |
350 | main.c
351 | 1
352 | .\main.c
353 |
354 |
355 | music_data.c
356 | 1
357 | .\music_data.c
358 |
359 |
360 | music_data.h
361 | 5
362 | .\music_data.h
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
--------------------------------------------------------------------------------
/beep/main.c:
--------------------------------------------------------------------------------
1 | #include
2 |
3 | #include "music_data.h"
4 |
5 | // 引脚定义
6 | #define beepOut P1_0
7 |
8 | int main() {
9 | beepOut = 0;
10 | while (1) {
11 | unsigned int i, j, k;
12 | for (i = 0; i < NOTES_LEN; ++i) {
13 | if (notes[i][0] == DELAY_COUNT) // 延时
14 | for (j = 0; j < notes[i][1]; ++j);
15 | else {
16 | for (j = 0; j < notes[i][1]; ++j) {
17 | for (k = 0; k < notes[i][0]; ++k);
18 | beepOut = 1;
19 | for (k = 0; k < notes[i][0]; ++k);
20 | beepOut = 0;
21 | }
22 | }
23 | }
24 | }
25 |
26 | return 0;
27 | }
28 |
--------------------------------------------------------------------------------
/beep/music_data.c:
--------------------------------------------------------------------------------
1 | const unsigned int code notes[][2] = {
2 | {18, 1099}, {21, 979}, {23, 872}, {25, 823}, {28, 733}, {31, 653},
3 | {28, 733}, {23, 436}, {23, 218}, {25, 206}, {23, 218}, {25, 206},
4 | {23, 218}, {37, 138}, {31, 327}, {25, 412}, {23, 436}, {18, 549},
5 | {15, 327}, {18, 275}, {15, 327}, {14, 367}, {17, 291}, {18, 275},
6 | {21, 245}, {17, 291}, {18, 275}, {21, 245}, {23, 218}, {25, 206},
7 | {28, 183}, {35, 146}, {23, 436}, {23, 436}, {25, 206}, {21, 122},
8 | {31, 82}, {18, 412}, {31, 82}, {18, 275}, {23, 109}, {21, 489},
9 | {18, 137}, {17, 145}, {18, 137}, {21, 122}, {37, 69}, {23, 327},
10 | {23, 327}, {25, 103}, {23, 109}, {25, 206}, {31, 82}, {37, 138},
11 | {31, 163}, {46, 54}, {28, 92}, {46, 109}, {25, 103}, {31, 82},
12 | {46, 54}, {23, 109}, {46, 54}, {31, 490}, {46, 109}, {28, 92},
13 | {46, 109}, {46, 54}, {35, 73}, {28, 92}, {23, 109}, {21, 122},
14 | {23, 109}, {41, 123}, {25, 103}, {41, 61}, {23, 109}, {21, 122},
15 | {31, 82}, {15, 327}, {18, 137}, {17, 145}, {15, 327}, {18, 137},
16 | {17, 145}, {15, 163}, {25, 103}, {28, 92}, {25, 103}, {23, 109},
17 | {21, 122}, {18, 137}, {17, 145}, {18, 275}, {23, 109}, {21, 122},
18 | {18, 275}, {37, 69}, {35, 73}, {31, 82}, {28, 92}, {31, 82},
19 | {35, 73}, {31, 82}, {23, 109}, {25, 103}, {23, 109}, {28, 183},
20 | {23, 109}, {25, 103}, {28, 183}, {31, 82}, {35, 73}, {31, 82},
21 | {35, 73}, {37, 69}, {35, 73}, {31, 82}, {28, 92}, {25, 103},
22 | {23, 109}, {28, 183}, {23, 109}, {25, 103}, {23, 218}, {25, 103},
23 | {23, 109}, {25, 103}, {28, 92}, {25, 103}, {23, 109}, {21, 122},
24 | {18, 137}, {17, 145}, {15, 163}, {15, 327}, {18, 137}, {17, 145},
25 | {15, 327}, {18, 137}, {17, 145}, {15, 163}, {25, 103}, {28, 92},
26 | {25, 103}, {23, 109}, {21, 122}, {18, 137}, {17, 145}, {18, 275},
27 | {23, 109}, {21, 122}, {18, 275}, {37, 69}, {35, 73}, {31, 82},
28 | {28, 92}, {31, 82}, {35, 73}, {31, 82}, {23, 109}, {25, 103},
29 | {23, 109}, {28, 183}, {23, 109}, {25, 103}, {28, 183}, {31, 82},
30 | {35, 73}, {31, 82}, {35, 73}, {37, 69}, {35, 73}, {31, 82},
31 | {28, 92}, {25, 103}, {23, 109}, {28, 183}, {23, 109}, {25, 103},
32 | {23, 218}, {25, 103}, {23, 109}, {25, 103}, {28, 92}, {25, 103},
33 | {23, 109}, {21, 122}, {18, 137}, {17, 145}, {15, 163}, {18, 275},
34 | {23, 109}, {21, 122}, {18, 275}, {21, 122}, {23, 109}, {21, 122},
35 | {25, 103}, {23, 109}, {21, 122}, {18, 137}, {21, 122}, {23, 109},
36 | {25, 103}, {23, 218}, {28, 92}, {25, 103}, {23, 218}, {46, 54},
37 | {41, 61}, {37, 69}, {35, 73}, {37, 69}, {41, 61}, {37, 69},
38 | {23, 109}, {25, 103}, {23, 109}, {28, 183}, {23, 109}, {25, 103},
39 | {28, 183}, {31, 82}, {35, 73}, {31, 82}, {35, 73}, {37, 69},
40 | {35, 73}, {31, 82}, {28, 92}, {25, 103}, {23, 109}, {28, 183},
41 | {23, 109}, {25, 103}, {23, 218}, {25, 103}, {28, 92}, {25, 103},
42 | {23, 109}, {21, 122}, {23, 109}, {25, 103}, {23, 109}, {28, 92},
43 | {25, 103}, {23, 109}, {23, 109}, {18, 137}, {17, 145}, {15, 327},
44 | {18, 549}, {21, 122}, {18, 137}, {17, 145}, {25, 103}, {21, 122},
45 | {28, 183}, {28, 92}, {23, 109}, {21, 122}, {18, 275}, {23, 109},
46 | {25, 206}, {25, 103}, {15, 163}, {17, 145}, {18, 137}, {25, 103},
47 | {15, 163}, {23, 109}, {14, 183}, {23, 109}, {14, 183}, {15, 163},
48 | {17, 291}, {14, 183}, {23, 109}, {15, 163}, {23, 109}, {15, 163},
49 | {17, 145}, {18, 137}, {23, 109}, {15, 163}, {23, 109}, {14, 183},
50 | {15, 163}, {17, 145}, {14, 183}, {15, 163}, {17, 145}, {14, 183},
51 | {21, 122}, {12, 206}, {14, 183}, {21, 122}, {31, 82}, {25, 103},
52 | {23, 109}, {21, 122}, {31, 82}, {18, 137}, {31, 163}, {31, 82},
53 | {18, 137}, {21, 122}, {23, 109}, {21, 245}, {31, 163}, {18, 137},
54 | {17, 145}, {18, 137}, {21, 122}, {37, 69}, {21, 367}, {23, 218},
55 | {37, 69}, {25, 103}, {23, 109}, {37, 69}, {31, 82}, {25, 103},
56 | {23, 109}, {18, 137}, {15, 163}, {12, 206}, {12, 218}, {12, 206},
57 | {14, 183}, {15, 163}, {17, 145}, {15, 163}, {17, 145}, {18, 137},
58 | {21, 122}, {14, 183}, {21, 122}, {23, 109}, {25, 103}, {23, 109},
59 | {25, 103}, {28, 92}, {31, 82}, {28, 92}, {31, 82}, {35, 73},
60 | {31, 82}, {28, 92}, {35, 73}, {23, 109}, {31, 82}, {25, 103},
61 | {28, 92}, {31, 82}, {23, 109}, {31, 82}, {31, 82}, {21, 122},
62 | {31, 82}, {18, 137}, {31, 82}, {31, 82}, {31, 82}, {18, 137},
63 | {31, 82}, {17, 145}, {31, 82}, {15, 163}, {28, 92}, {14, 183},
64 | {31, 82}, {15, 163}, {31, 82}, {17, 145}, {37, 69}, {18, 137},
65 | {37, 138}, {37, 69}, {23, 109}, {23, 109}, {21, 122}, {37, 69},
66 | {18, 137}, {35, 73}, {17, 145}, {37, 69}, {18, 137}, {37, 69},
67 | {21, 122}, {46, 54}, {23, 109}, {46, 109}, {46, 54}, {28, 92},
68 | {25, 103}, {23, 109}, {23, 218}, {23, 218}, {23, 109}, {23, 109},
69 | {23, 109}, {31, 82}, {23, 109}, {28, 92}, {46, 109}, {46, 54},
70 | {35, 73}, {28, 92}, {23, 109}, {21, 122}, {23, 109}, {41, 123},
71 | {25, 206}, {23, 109}, {21, 122}, {31, 82}, {18, 137}, {23, 218},
72 | {31, 82}, {18, 137}, {31, 82}, {17, 145}, {31, 82}, {15, 163},
73 | {28, 92}, {14, 183}, {31, 82}, {15, 163}, {31, 82}, {17, 145},
74 | {37, 69}, {18, 137}, {37, 138}, {37, 69}, {23, 109}, {23, 109},
75 | {21, 122}, {37, 69}, {18, 137}, {35, 73}, {17, 145}, {37, 69},
76 | {18, 137}, {37, 69}, {21, 122}, {35, 73}, {23, 109}, {46, 109},
77 | {46, 54}, {28, 92}, {25, 103}, {23, 109}, {23, 218}, {23, 109},
78 | {25, 103}, {23, 109}, {31, 82}, {23, 109}, {25, 103}, {23, 109},
79 | {28, 92}, {23, 109}, {25, 103}, {23, 109}, {28, 92}, {23, 109},
80 | {25, 103}, {23, 109}, {25, 103}, {31, 82}, {41, 61}, {23, 218},
81 | {41, 61}, {21, 245}, {18, 69}, {18, 69}, {18, 69}, {18, 69},
82 | {18, 69}, {18, 69}, {18, 69}, {18, 69}, {18, 69}, {18, 69},
83 | {18, 69}, {18, 69}, {18, 69}, {18, 69}, {18, 69}, {18, 69},
84 | {21, 61}, {21, 61}, {21, 61}, {21, 61}, {21, 61}, {21, 61},
85 | {21, 61}, {21, 61}, {21, 61}, {21, 61}, {21, 61}, {21, 61},
86 | {21, 61}, {21, 61}, {21, 61}, {21, 61}, {23, 54}, {23, 54},
87 | {23, 54}, {23, 54}, {23, 54}, {23, 54}, {23, 54}, {23, 54},
88 | {23, 54}, {23, 54}, {23, 54}, {23, 54}, {23, 54}, {23, 54},
89 | {23, 54}, {23, 54}, {25, 51}, {25, 51}, {25, 51}, {25, 51},
90 | {25, 51}, {25, 51}, {25, 51}, {25, 51}, {25, 51}, {25, 51},
91 | {25, 51}, {25, 51}, {25, 51}, {25, 51}, {25, 51}, {25, 51},
92 | {28, 46}, {28, 46}, {28, 46}, {28, 46}, {28, 46}, {28, 46},
93 | {28, 46}, {28, 46}, {28, 46}, {28, 46}, {28, 46}, {28, 46},
94 | {28, 46}, {28, 46}, {28, 46}, {28, 46}, {31, 41}, {31, 41},
95 | {31, 41}, {31, 41}, {31, 41}, {31, 41}, {31, 41}, {31, 41},
96 | {31, 41}, {31, 41}, {31, 41}, {31, 41}, {31, 41}, {31, 41},
97 | {31, 41}, {31, 41}, {28, 46}, {28, 46}, {28, 51}, {28, 51},
98 | {28, 51}, {28, 51}, {28, 51}, {28, 51}, {28, 51}, {28, 51},
99 | {28, 51}, {28, 51}, {28, 51}, {28, 51}, {28, 51}, {28, 51},
100 | {25, 57}, {25, 57}, {25, 57}, {25, 57}, {25, 57}, {25, 57},
101 | {25, 57}, {25, 57}, {25, 57}, {25, 57}, {25, 57}, {25, 57},
102 | {25, 57}, {25, 57}, {25, 57}, {25, 57}, {37, 1104},
103 | };
104 |
--------------------------------------------------------------------------------
/beep/music_data.h:
--------------------------------------------------------------------------------
1 | #define DELAY_COUNT 65535
2 | #define NOTES_LEN 605
3 | extern const unsigned int code notes[][2];
4 |
--------------------------------------------------------------------------------
/beep/电路图.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xfgryujk/c51-play-music/d882ca571a1feba5c82f13c96d283fd74dbc5831/beep/电路图.png
--------------------------------------------------------------------------------
/dac/dac.uvopt:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 1.0
5 |
6 | ### uVision Project, (C) Keil Software
7 |
8 |
9 | *.c
10 | *.s*; *.src; *.a*
11 | *.obj
12 | *.lib
13 | *.txt; *.h; *.inc
14 | *.plm
15 | *.cpp
16 |
17 |
18 |
19 | 0
20 | 0
21 |
22 |
23 |
24 | dac
25 | 0x0
26 | MCS-51
27 |
28 | 24000000
29 |
30 | 1
31 | 1
32 | 1
33 | 0
34 |
35 |
36 | 0
37 | 65535
38 | 0
39 | 0
40 | 0
41 |
42 |
43 | 120
44 | 65
45 | 8
46 | .\
47 |
48 |
49 | 1
50 | 1
51 | 1
52 | 0
53 | 1
54 | 1
55 | 0
56 | 1
57 | 0
58 | 0
59 | 0
60 | 0
61 |
62 |
63 | 1
64 | 1
65 | 1
66 | 1
67 | 1
68 | 1
69 | 1
70 | 0
71 | 0
72 |
73 |
74 | 1
75 | 0
76 | 1
77 |
78 | 255
79 |
80 |
81 | 0
82 | Data Sheet
83 | DATASHTS\ATMEL\AT89C51_DS.PDF
84 |
85 |
86 | 1
87 | Instruction Set Manual
88 | DATASHTS\ATMEL\AT_C51ISM.PDF
89 |
90 |
91 |
92 | S8051.DLL
93 |
94 | DP51.DLL
95 | -p51
96 | S8051.DLL
97 |
98 | TP51.DLL
99 | -p51
100 |
101 |
102 | 1
103 | 0
104 | 1
105 | 1
106 | 1
107 | 1
108 | 1
109 | 1
110 | 1
111 | 1
112 | 0
113 | 1
114 | 1
115 | 1
116 | 0
117 | 1
118 | 0
119 | 0
120 | -1
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 | 0
135 | 1
136 | 0
137 | 0
138 | 0
139 | 0
140 | 0
141 | 0
142 | 0
143 | 0
144 | 0
145 | 0
146 | 0
147 | 0
148 | 0
149 | 0
150 | 0
151 | 0
152 | 0
153 | 0
154 | 0
155 | 0
156 | 0
157 | 0
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 | Source Group 1
166 | 1
167 | 0
168 | 0
169 |
170 | 1
171 | 1
172 | 1
173 | 0
174 | 0
175 | 0
176 | 0
177 | 0
178 | 0
179 | 0
180 | .\main.c
181 | main.c
182 |
183 |
184 | 1
185 | 2
186 | 1
187 | 0
188 | 0
189 | 0
190 | 0
191 | 0
192 | 0
193 | 0
194 | .\music_data.c
195 | music_data.c
196 |
197 |
198 | 1
199 | 3
200 | 5
201 | 0
202 | 0
203 | 0
204 | 0
205 | 0
206 | 0
207 | 0
208 | .\music_data.h
209 | music_data.h
210 |
211 |
212 |
213 |
214 | Default
215 | 1
216 | Build
217 | 0
218 |
219 | Default
220 | 1
221 |
222 | 59392
223 | 1
224 | File
225 | 0
226 |
227 | 0
228 |
229 | 1
230 | 2
231 | 3
232 | 0
233 | 0
234 | 0
235 | 0
236 | 0
237 | 0
238 | 0
239 | 0
240 | 0
241 | 100
242 | 0
243 | 1
244 | 0
245 |
246 |
247 | 59398
248 | 2
249 | Build
250 | 0
251 |
252 | 0
253 |
254 | 1
255 | 2
256 | 3
257 | 0
258 | 0
259 | 0
260 | 0
261 | 0
262 | 0
263 | 0
264 | 0
265 | 0
266 | 100
267 | 0
268 | 0
269 | 0
270 |
271 |
272 | 59399
273 | 3
274 | Debug
275 | 0
276 |
277 | 0
278 |
279 | 1
280 | 2
281 | 3
282 | 0
283 | 0
284 | 0
285 | 0
286 | 0
287 | 0
288 | 0
289 | 0
290 | 0
291 | 100
292 | 0
293 | 1
294 | 0
295 |
296 |
297 | 197
298 | 4
299 | Build Output
300 | 0
301 |
302 | 0
303 |
304 | 1
305 | 2
306 | 4
307 | 0
308 | 0
309 | 0
310 | 210
311 | 600
312 | 0
313 | 0
314 | 250
315 | 600
316 | 100
317 | 1
318 | 0
319 | 0
320 |
321 |
322 | 198
323 | 5
324 | Command
325 | 197
326 |
327 | 197
328 |
329 | 1
330 | 4
331 | 2
332 | 0
333 | 0
334 | 0
335 | 210
336 | 600
337 | 0
338 | 0
339 | 250
340 | 600
341 | 100
342 | 1
343 | 1
344 | 0
345 |
346 |
347 | 199
348 | 6
349 | Find in Files
350 | 197
351 |
352 | 197
353 |
354 | 1
355 | 4
356 | 2
357 | 0
358 | 0
359 | 0
360 | 210
361 | 600
362 | 0
363 | 0
364 | 250
365 | 600
366 | 100
367 | 0
368 | 0
369 | 0
370 |
371 |
372 | 38007
373 | 7
374 | Browse
375 | 197
376 |
377 | 197
378 |
379 | 1
380 | 4
381 | 2
382 | 0
383 | 0
384 | 0
385 | 210
386 | 600
387 | 0
388 | 0
389 | 250
390 | 600
391 | 100
392 | 0
393 | 0
394 | 0
395 |
396 |
397 | 1939
398 | 8
399 | UART #1
400 | 197
401 |
402 | 197
403 |
404 | 1
405 | 4
406 | 2
407 | 0
408 | 0
409 | 0
410 | 210
411 | 600
412 | 0
413 | 0
414 | 250
415 | 600
416 | 100
417 | 0
418 | 0
419 | 0
420 |
421 |
422 | 1940
423 | 9
424 | UART #2
425 | 197
426 |
427 | 197
428 |
429 | 1
430 | 4
431 | 2
432 | 0
433 | 0
434 | 0
435 | 210
436 | 600
437 | 0
438 | 0
439 | 250
440 | 600
441 | 100
442 | 0
443 | 0
444 | 0
445 |
446 |
447 | 1941
448 | 10
449 | UART #3
450 | 197
451 |
452 | 197
453 |
454 | 1
455 | 4
456 | 2
457 | 0
458 | 0
459 | 0
460 | 210
461 | 600
462 | 0
463 | 0
464 | 250
465 | 600
466 | 100
467 | 0
468 | 0
469 | 0
470 |
471 |
472 | 1942
473 | 11
474 | UART #4
475 | 197
476 |
477 | 197
478 |
479 | 1
480 | 4
481 | 2
482 | 0
483 | 0
484 | 0
485 | 210
486 | 600
487 | 0
488 | 0
489 | 250
490 | 600
491 | 100
492 | 0
493 | 0
494 | 0
495 |
496 |
497 | 1944
498 | 12
499 | Call Stack
500 | 197
501 |
502 | 197
503 |
504 | 1
505 | 2
506 | 2
507 | 0
508 | 0
509 | 0
510 | 600
511 | 210
512 | 0
513 | 0
514 | 600
515 | 250
516 | 50
517 | 0
518 | 1
519 | 0
520 |
521 |
522 | 1507
523 | 13
524 | Call Stack
525 | 1944
526 |
527 | 197
528 |
529 | 1
530 | 4
531 | 2
532 | 0
533 | 0
534 | 0
535 | 600
536 | 210
537 | 0
538 | 0
539 | 600
540 | 250
541 | 50
542 | 0
543 | 1
544 | 0
545 |
546 |
547 | 1935
548 | 14
549 | Locals
550 | 1944
551 |
552 | 197
553 |
554 | 1
555 | 4
556 | 2
557 | 0
558 | 0
559 | 0
560 | 210
561 | 600
562 | 0
563 | 0
564 | 250
565 | 600
566 | 100
567 | 0
568 | 1
569 | 0
570 |
571 |
572 | 1936
573 | 15
574 | Watch 1
575 | 1944
576 |
577 | 197
578 |
579 | 1
580 | 4
581 | 2
582 | 0
583 | 0
584 | 0
585 | 210
586 | 600
587 | 0
588 | 0
589 | 250
590 | 600
591 | 100
592 | 0
593 | 1
594 | 0
595 |
596 |
597 | 1937
598 | 16
599 | Watch 2
600 | 1944
601 |
602 | 197
603 |
604 | 1
605 | 4
606 | 2
607 | 0
608 | 0
609 | 0
610 | 210
611 | 600
612 | 0
613 | 0
614 | 250
615 | 600
616 | 100
617 | 0
618 | 0
619 | 0
620 |
621 |
622 | 1465
623 | 17
624 | Memory 1
625 | 1944
626 |
627 | 197
628 |
629 | 1
630 | 4
631 | 2
632 | 0
633 | 0
634 | 0
635 | 210
636 | 600
637 | 0
638 | 0
639 | 250
640 | 600
641 | 100
642 | 0
643 | 1
644 | 0
645 |
646 |
647 | 1466
648 | 18
649 | Memory 2
650 | 1944
651 |
652 | 197
653 |
654 | 1
655 | 4
656 | 2
657 | 0
658 | 0
659 | 0
660 | 210
661 | 600
662 | 0
663 | 0
664 | 250
665 | 600
666 | 100
667 | 0
668 | 0
669 | 0
670 |
671 |
672 | 1467
673 | 19
674 | Memory 3
675 | 1944
676 |
677 | 197
678 |
679 | 1
680 | 4
681 | 2
682 | 0
683 | 0
684 | 0
685 | 210
686 | 600
687 | 0
688 | 0
689 | 250
690 | 600
691 | 100
692 | 0
693 | 0
694 | 0
695 |
696 |
697 | 1468
698 | 20
699 | Memory 4
700 | 1944
701 |
702 | 197
703 |
704 | 1
705 | 4
706 | 2
707 | 0
708 | 0
709 | 0
710 | 210
711 | 600
712 | 0
713 | 0
714 | 250
715 | 600
716 | 100
717 | 0
718 | 0
719 | 0
720 |
721 |
722 | 1506
723 | 21
724 | Symbols
725 | 1944
726 |
727 | 197
728 |
729 | 1
730 | 4
731 | 2
732 | 0
733 | 0
734 | 0
735 | 210
736 | 600
737 | 0
738 | 0
739 | 250
740 | 600
741 | 100
742 | 0
743 | 1
744 | 0
745 |
746 |
747 | 1005
748 | 22
749 | Project
750 | 0
751 |
752 | 0
753 |
754 | 1
755 | 2
756 | 1
757 | 0
758 | 0
759 | 0
760 | 600
761 | 210
762 | 0
763 | 0
764 | 600
765 | 250
766 | 100
767 | 0
768 | 1
769 | 0
770 |
771 |
772 | 109
773 | 23
774 | Books
775 | 1005
776 |
777 | 1005
778 |
779 | 1
780 | 4
781 | 2
782 | 0
783 | 0
784 | 0
785 | 600
786 | 210
787 | 0
788 | 0
789 | 600
790 | 250
791 | 100
792 | 0
793 | 0
794 | 0
795 |
796 |
797 | 195
798 | 24
799 | Functions
800 | 1005
801 |
802 | 1005
803 |
804 | 1
805 | 4
806 | 2
807 | 0
808 | 0
809 | 0
810 | 600
811 | 210
812 | 0
813 | 0
814 | 600
815 | 250
816 | 100
817 | 0
818 | 0
819 | 0
820 |
821 |
822 | 196
823 | 25
824 | Templates
825 | 1005
826 |
827 | 1005
828 |
829 | 1
830 | 4
831 | 2
832 | 0
833 | 0
834 | 0
835 | 600
836 | 210
837 | 0
838 | 0
839 | 600
840 | 250
841 | 100
842 | 0
843 | 0
844 | 0
845 |
846 |
847 | 38003
848 | 26
849 | Registers
850 | 1005
851 |
852 | 1005
853 |
854 | 1
855 | 4
856 | 2
857 | 0
858 | 0
859 | 0
860 | 600
861 | 210
862 | 0
863 | 0
864 | 600
865 | 250
866 | 100
867 | 1
868 | 1
869 | 0
870 |
871 |
872 | 35885
873 | 27
874 | not set
875 | 0
876 |
877 | 0
878 |
879 | 1
880 | 2
881 | 2
882 | 0
883 | 0
884 | 0
885 | 600
886 | 210
887 | 0
888 | 0
889 | 600
890 | 250
891 | 100
892 | 0
893 | 0
894 | 0
895 |
896 |
897 | 35886
898 | 28
899 | not set
900 | 35885
901 |
902 | 35885
903 |
904 | 1
905 | 4
906 | 2
907 | 0
908 | 0
909 | 0
910 | 600
911 | 210
912 | 0
913 | 0
914 | 600
915 | 250
916 | 100
917 | 0
918 | 0
919 | 0
920 |
921 |
922 | 35887
923 | 29
924 | not set
925 | 35885
926 |
927 | 35885
928 |
929 | 1
930 | 4
931 | 2
932 | 0
933 | 0
934 | 0
935 | 600
936 | 210
937 | 0
938 | 0
939 | 600
940 | 250
941 | 100
942 | 0
943 | 0
944 | 0
945 |
946 |
947 | 35888
948 | 30
949 | not set
950 | 35885
951 |
952 | 35885
953 |
954 | 1
955 | 4
956 | 2
957 | 0
958 | 0
959 | 0
960 | 600
961 | 210
962 | 0
963 | 0
964 | 600
965 | 250
966 | 100
967 | 0
968 | 0
969 | 0
970 |
971 |
972 | 35889
973 | 31
974 | not set
975 | 35885
976 |
977 | 35885
978 |
979 | 1
980 | 4
981 | 2
982 | 0
983 | 0
984 | 0
985 | 600
986 | 210
987 | 0
988 | 0
989 | 600
990 | 250
991 | 100
992 | 0
993 | 0
994 | 0
995 |
996 |
997 | 35890
998 | 32
999 | not set
1000 | 35885
1001 |
1002 | 35885
1003 |
1004 | 1
1005 | 4
1006 | 2
1007 | 0
1008 | 0
1009 | 0
1010 | 600
1011 | 210
1012 | 0
1013 | 0
1014 | 600
1015 | 250
1016 | 100
1017 | 0
1018 | 0
1019 | 0
1020 |
1021 |
1022 | 35891
1023 | 33
1024 | not set
1025 | 35885
1026 |
1027 | 35885
1028 |
1029 | 1
1030 | 4
1031 | 2
1032 | 0
1033 | 0
1034 | 0
1035 | 600
1036 | 210
1037 | 0
1038 | 0
1039 | 600
1040 | 250
1041 | 100
1042 | 0
1043 | 0
1044 | 0
1045 |
1046 |
1047 | 35892
1048 | 34
1049 | not set
1050 | 35885
1051 |
1052 | 35885
1053 |
1054 | 1
1055 | 4
1056 | 2
1057 | 0
1058 | 0
1059 | 0
1060 | 600
1061 | 210
1062 | 0
1063 | 0
1064 | 600
1065 | 250
1066 | 100
1067 | 0
1068 | 0
1069 | 0
1070 |
1071 |
1072 | 35893
1073 | 35
1074 | not set
1075 | 35885
1076 |
1077 | 35885
1078 |
1079 | 1
1080 | 4
1081 | 2
1082 | 0
1083 | 0
1084 | 0
1085 | 600
1086 | 210
1087 | 0
1088 | 0
1089 | 600
1090 | 250
1091 | 100
1092 | 0
1093 | 0
1094 | 0
1095 |
1096 |
1097 | 35894
1098 | 36
1099 | not set
1100 | 35885
1101 |
1102 | 35885
1103 |
1104 | 1
1105 | 4
1106 | 2
1107 | 0
1108 | 0
1109 | 0
1110 | 600
1111 | 210
1112 | 0
1113 | 0
1114 | 600
1115 | 250
1116 | 100
1117 | 0
1118 | 0
1119 | 0
1120 |
1121 |
1122 | 35895
1123 | 37
1124 | not set
1125 | 35885
1126 |
1127 | 35885
1128 |
1129 | 1
1130 | 4
1131 | 2
1132 | 0
1133 | 0
1134 | 0
1135 | 600
1136 | 210
1137 | 0
1138 | 0
1139 | 600
1140 | 250
1141 | 100
1142 | 0
1143 | 0
1144 | 0
1145 |
1146 |
1147 | 35896
1148 | 38
1149 | not set
1150 | 35885
1151 |
1152 | 35885
1153 |
1154 | 1
1155 | 4
1156 | 2
1157 | 0
1158 | 0
1159 | 0
1160 | 600
1161 | 210
1162 | 0
1163 | 0
1164 | 600
1165 | 250
1166 | 100
1167 | 0
1168 | 0
1169 | 0
1170 |
1171 |
1172 | 35897
1173 | 39
1174 | not set
1175 | 35885
1176 |
1177 | 35885
1178 |
1179 | 1
1180 | 4
1181 | 2
1182 | 0
1183 | 0
1184 | 0
1185 | 600
1186 | 210
1187 | 0
1188 | 0
1189 | 600
1190 | 250
1191 | 100
1192 | 0
1193 | 0
1194 | 0
1195 |
1196 |
1197 | 35898
1198 | 40
1199 | not set
1200 | 35885
1201 |
1202 | 35885
1203 |
1204 | 1
1205 | 4
1206 | 2
1207 | 0
1208 | 0
1209 | 0
1210 | 600
1211 | 210
1212 | 0
1213 | 0
1214 | 600
1215 | 250
1216 | 100
1217 | 0
1218 | 0
1219 | 0
1220 |
1221 |
1222 | 35899
1223 | 41
1224 | not set
1225 | 35885
1226 |
1227 | 35885
1228 |
1229 | 1
1230 | 4
1231 | 2
1232 | 0
1233 | 0
1234 | 0
1235 | 600
1236 | 210
1237 | 0
1238 | 0
1239 | 600
1240 | 250
1241 | 100
1242 | 0
1243 | 0
1244 | 0
1245 |
1246 |
1247 | 35900
1248 | 42
1249 | not set
1250 | 35885
1251 |
1252 | 35885
1253 |
1254 | 1
1255 | 4
1256 | 2
1257 | 0
1258 | 0
1259 | 0
1260 | 600
1261 | 210
1262 | 0
1263 | 0
1264 | 600
1265 | 250
1266 | 100
1267 | 0
1268 | 0
1269 | 0
1270 |
1271 |
1272 | 35901
1273 | 43
1274 | not set
1275 | 35885
1276 |
1277 | 35885
1278 |
1279 | 1
1280 | 4
1281 | 2
1282 | 0
1283 | 0
1284 | 0
1285 | 600
1286 | 210
1287 | 0
1288 | 0
1289 | 600
1290 | 250
1291 | 100
1292 | 0
1293 | 0
1294 | 0
1295 |
1296 |
1297 | 35902
1298 | 44
1299 | not set
1300 | 35885
1301 |
1302 | 35885
1303 |
1304 | 1
1305 | 4
1306 | 2
1307 | 0
1308 | 0
1309 | 0
1310 | 600
1311 | 210
1312 | 0
1313 | 0
1314 | 600
1315 | 250
1316 | 100
1317 | 0
1318 | 0
1319 | 0
1320 |
1321 |
1322 | 35903
1323 | 45
1324 | not set
1325 | 35885
1326 |
1327 | 35885
1328 |
1329 | 1
1330 | 4
1331 | 2
1332 | 0
1333 | 0
1334 | 0
1335 | 600
1336 | 210
1337 | 0
1338 | 0
1339 | 600
1340 | 250
1341 | 100
1342 | 0
1343 | 0
1344 | 0
1345 |
1346 |
1347 | 35904
1348 | 46
1349 | not set
1350 | 35885
1351 |
1352 | 35885
1353 |
1354 | 1
1355 | 4
1356 | 2
1357 | 0
1358 | 0
1359 | 0
1360 | 600
1361 | 210
1362 | 0
1363 | 0
1364 | 600
1365 | 250
1366 | 100
1367 | 0
1368 | 0
1369 | 0
1370 |
1371 |
1372 | 35905
1373 | 47
1374 | not set
1375 | 35885
1376 |
1377 | 35885
1378 |
1379 | 1
1380 | 4
1381 | 2
1382 | 0
1383 | 0
1384 | 0
1385 | 600
1386 | 210
1387 | 0
1388 | 0
1389 | 600
1390 | 250
1391 | 100
1392 | 0
1393 | 0
1394 | 0
1395 |
1396 |
1397 | 203
1398 | 48
1399 | Disassembly
1400 | 0
1401 |
1402 | 0
1403 |
1404 | 1
1405 | 2
1406 | 3
1407 | 0
1408 | 0
1409 | 0
1410 | 210
1411 | 600
1412 | 0
1413 | 0
1414 | 250
1415 | 600
1416 | 100
1417 | 0
1418 | 1
1419 | 0
1420 |
1421 |
1422 | 1913
1423 | 49
1424 | Instruction Trace
1425 | 203
1426 |
1427 | 203
1428 |
1429 | 1
1430 | 4
1431 | 2
1432 | 0
1433 | 0
1434 | 0
1435 | 600
1436 | 210
1437 | 0
1438 | 0
1439 | 600
1440 | 250
1441 | 100
1442 | 0
1443 | 0
1444 | 0
1445 |
1446 |
1447 | 35824
1448 | 50
1449 | Logic Analyzer
1450 | 0
1451 |
1452 | 0
1453 |
1454 | 1
1455 | 6
1456 | 0
1457 | 0
1458 | 0
1459 | 0
1460 | 210
1461 | 600
1462 | 0
1463 | 0
1464 | 250
1465 | 600
1466 | 1
1467 | 0
1468 | 0
1469 | 0
1470 |
1471 |
1472 | 343
1473 | 51
1474 | Performance Analyzer
1475 | 203
1476 |
1477 | 203
1478 |
1479 | 1
1480 | 4
1481 | 2
1482 | 0
1483 | 0
1484 | 0
1485 | 210
1486 | 600
1487 | 0
1488 | 0
1489 | 250
1490 | 600
1491 | 100
1492 | 0
1493 | 0
1494 | 0
1495 |
1496 |
1497 | 204
1498 | 52
1499 | Performance Analyzer
1500 | 203
1501 |
1502 | 203
1503 |
1504 | 1
1505 | 4
1506 | 2
1507 | 0
1508 | 0
1509 | 0
1510 | 210
1511 | 600
1512 | 0
1513 | 0
1514 | 250
1515 | 600
1516 | 100
1517 | 0
1518 | 0
1519 | 0
1520 |
1521 |
1522 | 346
1523 | 53
1524 | Code Coverage
1525 | 203
1526 |
1527 | 203
1528 |
1529 | 1
1530 | 4
1531 | 2
1532 | 0
1533 | 0
1534 | 0
1535 | 210
1536 | 600
1537 | 0
1538 | 0
1539 | 250
1540 | 600
1541 | 100
1542 | 0
1543 | 0
1544 | 0
1545 |
1546 |
1547 |
1548 |
1549 |
1550 |
--------------------------------------------------------------------------------
/dac/dac.uvproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 1.0
5 |
6 | ### uVision Project, (C) Keil Software
7 |
8 |
9 |
10 | dac
11 | 0x0
12 | MCS-51
13 |
14 |
15 | AT89C51
16 | Atmel
17 | IRAM(0-0x7F) IROM(0-0xFFF) CLOCK(24000000)
18 |
19 | "LIB\STARTUP.A51" ("Standard 8051 Startup Code")
20 |
21 | 2976
22 | REGX51.H
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | 0
33 |
34 |
35 |
36 | Atmel\
37 | Atmel\
38 |
39 | 0
40 | 0
41 | 0
42 | 0
43 | 1
44 |
45 | ..\bin\
46 | dac
47 | 1
48 | 0
49 | 1
50 | 1
51 | 1
52 | .\
53 | 0
54 | 0
55 | 0
56 |
57 | 0
58 | 0
59 |
60 |
61 | 0
62 | 0
63 |
64 |
65 | 0
66 | 0
67 |
68 |
69 | 0
70 | 0
71 |
72 |
73 | 0
74 | 0
75 |
76 |
77 | 0
78 | 0
79 |
80 | 0
81 |
82 |
83 |
84 | 0
85 | 0
86 | 0
87 | 0
88 | 0
89 | 1
90 | 0
91 | 0
92 | 0
93 | 0
94 | 3
95 |
96 |
97 | 65535
98 |
99 |
100 | S8051.DLL
101 |
102 | DP51.DLL
103 | -p51
104 | S8051.DLL
105 |
106 | TP51.DLL
107 | -p51
108 |
109 |
110 |
111 | 0
112 | 0
113 | 0
114 | 0
115 | 16
116 |
117 |
118 | 1
119 | 1
120 | 1
121 | 1
122 | 1
123 | 1
124 | 1
125 | 1
126 | 0
127 |
128 |
129 | 0
130 | 1
131 | 0
132 | 1
133 | 1
134 | 1
135 | 0
136 | 1
137 |
138 | 0
139 | -1
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 | 0
159 | 0
160 | 0
161 | 0
162 | 0
163 | -1
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 | 0
172 | 0
173 | 2
174 | 0
175 | 0
176 | 0
177 | 0
178 | 0
179 | 0
180 | 1
181 | 0
182 | 1
183 | 0
184 | 0
185 | 0
186 | 0
187 | 0
188 | 0
189 | 0
190 | 0
191 | 0
192 | 0
193 | 0
194 | 0
195 | 0
196 | 0
197 | 0
198 | 0
199 | 0
200 | 0
201 | 0
202 | 0
203 | 0
204 | 0
205 | 0
206 | 0
207 | 0
208 | 0
209 | 0
210 | 0
211 | 0
212 |
213 |
214 | 0
215 | 0x0
216 | 0x10000
217 |
218 |
219 | 0
220 | 0x0
221 | 0x0
222 |
223 |
224 | 0
225 | 0x0
226 | 0x0
227 |
228 |
229 | 0
230 | 0x0
231 | 0x0
232 |
233 |
234 | 0
235 | 0x0
236 | 0x0
237 |
238 |
239 | 0
240 | 0x0
241 | 0x0
242 |
243 |
244 | 0
245 | 0x0
246 | 0x0
247 |
248 |
249 | 0
250 | 0x0
251 | 0x0
252 |
253 |
254 | 1
255 | 0x0
256 | 0x1000
257 |
258 |
259 | 0
260 | 0x0
261 | 0x80
262 |
263 |
264 | 0
265 | 0x0
266 | 0x0
267 |
268 |
269 | 0
270 | 0x0
271 | 0x0
272 |
273 |
274 | 0
275 | 0x0
276 | 0x0
277 |
278 |
279 |
280 |
281 | 0
282 | 0
283 | 1
284 | 0
285 | 1
286 | 3
287 | 8
288 | 2
289 | 1
290 | 1
291 | 0
292 | 0
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 | 0
302 | 1
303 | 0
304 | 0
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 | 0
314 | 0
315 | 1
316 | 0
317 | 2
318 | 1
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 | Source Group 1
348 |
349 |
350 | main.c
351 | 1
352 | .\main.c
353 |
354 |
355 | music_data.c
356 | 1
357 | .\music_data.c
358 |
359 |
360 | music_data.h
361 | 5
362 | .\music_data.h
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
--------------------------------------------------------------------------------
/dac/main.c:
--------------------------------------------------------------------------------
1 | #include
2 |
3 | #include "music_data.h"
4 |
5 | // 引脚定义
6 | #define wavOut P2
7 |
8 | unsigned int iPcmData = 0;
9 |
10 | void Init() {
11 | // 开启中断
12 | EA = 1;
13 | ET0 = 1;
14 | // 定时器0工作方式2(8位自动重载定时器)
15 | TMOD = 0x2;
16 | TH0 = TL0 = INIT_TH0;
17 | wavOut = pcmData[iPcmData];
18 | // 开启定时器
19 | TR0 = 1;
20 | }
21 |
22 | int main() {
23 | Init();
24 | while (1);
25 |
26 | return 0;
27 | }
28 |
29 | void HandleTimer0() interrupt 1 {
30 | wavOut = pcmData[iPcmData];
31 | if (++iPcmData >= PCM_DATA_LEN)
32 | iPcmData = 0;
33 | }
34 |
--------------------------------------------------------------------------------
/dac/music_data.h:
--------------------------------------------------------------------------------
1 | #define INIT_TH0 72
2 | #define PCM_DATA_LEN 48213
3 | extern const unsigned char code pcmData[];
4 |
--------------------------------------------------------------------------------
/dac/电路图.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xfgryujk/c51-play-music/d882ca571a1feba5c82f13c96d283fd74dbc5831/dac/电路图.png
--------------------------------------------------------------------------------
/pwm/main.c:
--------------------------------------------------------------------------------
1 | #include
2 |
3 | #include "music_data.h"
4 |
5 | // 引脚定义
6 | #define pwmOut P1_0
7 |
8 | unsigned int iPwmData = 0;
9 |
10 | void Init() {
11 | // 开启中断
12 | EA = 1;
13 | ET0 = 1;
14 | ET1 = 1;
15 | // 定时器0工作方式2(8位自动重载定时器)
16 | // 定时器1工作方式1(16位定时器)
17 | TMOD = 0x12;
18 |
19 | TH0 = TL0 = INIT_TL0;
20 | TH1 = 255;
21 | TL1 = pwmData[iPwmData];
22 |
23 | pwmOut = 1;
24 | // 开启定时器
25 | TR0 = 1;
26 | TR1 = 1;
27 | }
28 |
29 | int main() {
30 | Init();
31 | while (1);
32 |
33 | return 0;
34 | }
35 |
36 | // 定时器0,输出高电平,周期为PWM载波周期
37 | void HandleTimer0() interrupt 1 {
38 | pwmOut = 1;
39 | if (++iPwmData >= PWM_DATA_LEN)
40 | iPwmData = 0;
41 |
42 | TH1 = 255;
43 | TL1 = pwmData[iPwmData];
44 |
45 | TR1 = 1;
46 | }
47 |
48 | // 定时器1,输出低电平,周期根据占空比定
49 | void HandleTimer1() interrupt 3 {
50 | pwmOut = 0;
51 | TR1 = 0;
52 | }
53 |
--------------------------------------------------------------------------------
/pwm/music_data.h:
--------------------------------------------------------------------------------
1 | #define SAMPLE_RATE 5000
2 | // #define INIT_TH0 255
3 | #define INIT_TL0 72
4 | #define PWM_DATA_LEN 48213
5 | extern const unsigned char code pwmData[];
6 |
--------------------------------------------------------------------------------
/pwm/pwm.uvopt:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 1.0
5 |
6 | ### uVision Project, (C) Keil Software
7 |
8 |
9 | *.c
10 | *.s*; *.src; *.a*
11 | *.obj
12 | *.lib
13 | *.txt; *.h; *.inc
14 | *.plm
15 | *.cpp
16 |
17 |
18 |
19 | 0
20 | 0
21 |
22 |
23 |
24 | pwm
25 | 0x0
26 | MCS-51
27 |
28 | 24000000
29 |
30 | 1
31 | 1
32 | 1
33 | 0
34 |
35 |
36 | 0
37 | 65535
38 | 0
39 | 0
40 | 0
41 |
42 |
43 | 120
44 | 65
45 | 8
46 | .\
47 |
48 |
49 | 1
50 | 1
51 | 1
52 | 0
53 | 1
54 | 1
55 | 0
56 | 1
57 | 0
58 | 0
59 | 0
60 | 0
61 |
62 |
63 | 1
64 | 1
65 | 1
66 | 1
67 | 1
68 | 1
69 | 1
70 | 0
71 | 0
72 |
73 |
74 | 1
75 | 0
76 | 1
77 |
78 | 255
79 |
80 |
81 | 0
82 | Data Sheet
83 | DATASHTS\ATMEL\AT89C51_DS.PDF
84 |
85 |
86 | 1
87 | Instruction Set Manual
88 | DATASHTS\ATMEL\AT_C51ISM.PDF
89 |
90 |
91 |
92 | S8051.DLL
93 |
94 | DP51.DLL
95 | -p51
96 | S8051.DLL
97 |
98 | TP51.DLL
99 | -p51
100 |
101 |
102 | 1
103 | 0
104 | 1
105 | 1
106 | 1
107 | 1
108 | 1
109 | 1
110 | 1
111 | 1
112 | 0
113 | 1
114 | 1
115 | 1
116 | 0
117 | 1
118 | 0
119 | 0
120 | -1
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 | 0
135 | 1
136 | 0
137 | 0
138 | 0
139 | 0
140 | 0
141 | 0
142 | 0
143 | 0
144 | 0
145 | 0
146 | 0
147 | 0
148 | 0
149 | 0
150 | 0
151 | 0
152 | 0
153 | 0
154 | 0
155 | 0
156 | 0
157 | 0
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 | Source Group 1
166 | 1
167 | 0
168 | 0
169 |
170 | 1
171 | 1
172 | 1
173 | 0
174 | 0
175 | 0
176 | 0
177 | 0
178 | 0
179 | 0
180 | .\main.c
181 | main.c
182 |
183 |
184 | 1
185 | 2
186 | 1
187 | 0
188 | 0
189 | 0
190 | 0
191 | 0
192 | 0
193 | 0
194 | .\music_data.c
195 | music_data.c
196 |
197 |
198 | 1
199 | 3
200 | 5
201 | 0
202 | 0
203 | 0
204 | 0
205 | 0
206 | 0
207 | 0
208 | .\music_data.h
209 | music_data.h
210 |
211 |
212 |
213 |
214 | Default
215 | 1
216 | Build
217 | 0
218 |
219 | Default
220 | 1
221 |
222 | 59392
223 | 1
224 | File
225 | 0
226 |
227 | 0
228 |
229 | 1
230 | 2
231 | 3
232 | 0
233 | 0
234 | 0
235 | 0
236 | 0
237 | 0
238 | 0
239 | 0
240 | 0
241 | 100
242 | 0
243 | 1
244 | 0
245 |
246 |
247 | 59398
248 | 2
249 | Build
250 | 0
251 |
252 | 0
253 |
254 | 1
255 | 2
256 | 3
257 | 0
258 | 0
259 | 0
260 | 0
261 | 0
262 | 0
263 | 0
264 | 0
265 | 0
266 | 100
267 | 0
268 | 0
269 | 0
270 |
271 |
272 | 59399
273 | 3
274 | Debug
275 | 0
276 |
277 | 0
278 |
279 | 1
280 | 2
281 | 3
282 | 0
283 | 0
284 | 0
285 | 0
286 | 0
287 | 0
288 | 0
289 | 0
290 | 0
291 | 100
292 | 0
293 | 1
294 | 0
295 |
296 |
297 | 197
298 | 4
299 | Build Output
300 | 0
301 |
302 | 0
303 |
304 | 1
305 | 2
306 | 4
307 | 0
308 | 0
309 | 0
310 | 210
311 | 600
312 | 0
313 | 0
314 | 250
315 | 600
316 | 100
317 | 1
318 | 0
319 | 0
320 |
321 |
322 | 198
323 | 5
324 | Command
325 | 197
326 |
327 | 197
328 |
329 | 1
330 | 4
331 | 2
332 | 0
333 | 0
334 | 0
335 | 210
336 | 600
337 | 0
338 | 0
339 | 250
340 | 600
341 | 100
342 | 1
343 | 1
344 | 0
345 |
346 |
347 | 199
348 | 6
349 | Find in Files
350 | 197
351 |
352 | 197
353 |
354 | 1
355 | 4
356 | 2
357 | 0
358 | 0
359 | 0
360 | 210
361 | 600
362 | 0
363 | 0
364 | 250
365 | 600
366 | 100
367 | 0
368 | 0
369 | 0
370 |
371 |
372 | 38007
373 | 7
374 | Browse
375 | 197
376 |
377 | 197
378 |
379 | 1
380 | 4
381 | 2
382 | 0
383 | 0
384 | 0
385 | 210
386 | 600
387 | 0
388 | 0
389 | 250
390 | 600
391 | 100
392 | 0
393 | 0
394 | 0
395 |
396 |
397 | 1939
398 | 8
399 | UART #1
400 | 197
401 |
402 | 197
403 |
404 | 1
405 | 4
406 | 2
407 | 0
408 | 0
409 | 0
410 | 210
411 | 600
412 | 0
413 | 0
414 | 250
415 | 600
416 | 100
417 | 0
418 | 0
419 | 0
420 |
421 |
422 | 1940
423 | 9
424 | UART #2
425 | 197
426 |
427 | 197
428 |
429 | 1
430 | 4
431 | 2
432 | 0
433 | 0
434 | 0
435 | 210
436 | 600
437 | 0
438 | 0
439 | 250
440 | 600
441 | 100
442 | 0
443 | 0
444 | 0
445 |
446 |
447 | 1941
448 | 10
449 | UART #3
450 | 197
451 |
452 | 197
453 |
454 | 1
455 | 4
456 | 2
457 | 0
458 | 0
459 | 0
460 | 210
461 | 600
462 | 0
463 | 0
464 | 250
465 | 600
466 | 100
467 | 0
468 | 0
469 | 0
470 |
471 |
472 | 1942
473 | 11
474 | UART #4
475 | 197
476 |
477 | 197
478 |
479 | 1
480 | 4
481 | 2
482 | 0
483 | 0
484 | 0
485 | 210
486 | 600
487 | 0
488 | 0
489 | 250
490 | 600
491 | 100
492 | 0
493 | 0
494 | 0
495 |
496 |
497 | 1944
498 | 12
499 | Call Stack
500 | 197
501 |
502 | 197
503 |
504 | 1
505 | 2
506 | 2
507 | 0
508 | 0
509 | 0
510 | 600
511 | 210
512 | 0
513 | 0
514 | 600
515 | 250
516 | 50
517 | 0
518 | 1
519 | 0
520 |
521 |
522 | 1507
523 | 13
524 | Call Stack
525 | 1944
526 |
527 | 197
528 |
529 | 1
530 | 4
531 | 2
532 | 0
533 | 0
534 | 0
535 | 600
536 | 210
537 | 0
538 | 0
539 | 600
540 | 250
541 | 50
542 | 0
543 | 1
544 | 0
545 |
546 |
547 | 1935
548 | 14
549 | Locals
550 | 1944
551 |
552 | 197
553 |
554 | 1
555 | 4
556 | 2
557 | 0
558 | 0
559 | 0
560 | 210
561 | 600
562 | 0
563 | 0
564 | 250
565 | 600
566 | 100
567 | 0
568 | 1
569 | 0
570 |
571 |
572 | 1936
573 | 15
574 | Watch 1
575 | 1944
576 |
577 | 197
578 |
579 | 1
580 | 4
581 | 2
582 | 0
583 | 0
584 | 0
585 | 210
586 | 600
587 | 0
588 | 0
589 | 250
590 | 600
591 | 100
592 | 0
593 | 1
594 | 0
595 |
596 |
597 | 1937
598 | 16
599 | Watch 2
600 | 1944
601 |
602 | 197
603 |
604 | 1
605 | 4
606 | 2
607 | 0
608 | 0
609 | 0
610 | 210
611 | 600
612 | 0
613 | 0
614 | 250
615 | 600
616 | 100
617 | 0
618 | 0
619 | 0
620 |
621 |
622 | 1465
623 | 17
624 | Memory 1
625 | 1944
626 |
627 | 197
628 |
629 | 1
630 | 4
631 | 2
632 | 0
633 | 0
634 | 0
635 | 210
636 | 600
637 | 0
638 | 0
639 | 250
640 | 600
641 | 100
642 | 0
643 | 1
644 | 0
645 |
646 |
647 | 1466
648 | 18
649 | Memory 2
650 | 1944
651 |
652 | 197
653 |
654 | 1
655 | 4
656 | 2
657 | 0
658 | 0
659 | 0
660 | 210
661 | 600
662 | 0
663 | 0
664 | 250
665 | 600
666 | 100
667 | 0
668 | 0
669 | 0
670 |
671 |
672 | 1467
673 | 19
674 | Memory 3
675 | 1944
676 |
677 | 197
678 |
679 | 1
680 | 4
681 | 2
682 | 0
683 | 0
684 | 0
685 | 210
686 | 600
687 | 0
688 | 0
689 | 250
690 | 600
691 | 100
692 | 0
693 | 0
694 | 0
695 |
696 |
697 | 1468
698 | 20
699 | Memory 4
700 | 1944
701 |
702 | 197
703 |
704 | 1
705 | 4
706 | 2
707 | 0
708 | 0
709 | 0
710 | 210
711 | 600
712 | 0
713 | 0
714 | 250
715 | 600
716 | 100
717 | 0
718 | 0
719 | 0
720 |
721 |
722 | 1506
723 | 21
724 | Symbols
725 | 1944
726 |
727 | 197
728 |
729 | 1
730 | 4
731 | 2
732 | 0
733 | 0
734 | 0
735 | 210
736 | 600
737 | 0
738 | 0
739 | 250
740 | 600
741 | 100
742 | 0
743 | 1
744 | 0
745 |
746 |
747 | 1005
748 | 22
749 | Project
750 | 0
751 |
752 | 0
753 |
754 | 1
755 | 2
756 | 1
757 | 0
758 | 0
759 | 0
760 | 600
761 | 210
762 | 0
763 | 0
764 | 600
765 | 250
766 | 100
767 | 0
768 | 1
769 | 0
770 |
771 |
772 | 109
773 | 23
774 | Books
775 | 1005
776 |
777 | 1005
778 |
779 | 1
780 | 4
781 | 2
782 | 0
783 | 0
784 | 0
785 | 600
786 | 210
787 | 0
788 | 0
789 | 600
790 | 250
791 | 100
792 | 0
793 | 0
794 | 0
795 |
796 |
797 | 195
798 | 24
799 | Functions
800 | 1005
801 |
802 | 1005
803 |
804 | 1
805 | 4
806 | 2
807 | 0
808 | 0
809 | 0
810 | 600
811 | 210
812 | 0
813 | 0
814 | 600
815 | 250
816 | 100
817 | 0
818 | 0
819 | 0
820 |
821 |
822 | 196
823 | 25
824 | Templates
825 | 1005
826 |
827 | 1005
828 |
829 | 1
830 | 4
831 | 2
832 | 0
833 | 0
834 | 0
835 | 600
836 | 210
837 | 0
838 | 0
839 | 600
840 | 250
841 | 100
842 | 0
843 | 0
844 | 0
845 |
846 |
847 | 38003
848 | 26
849 | Registers
850 | 1005
851 |
852 | 1005
853 |
854 | 1
855 | 4
856 | 2
857 | 0
858 | 0
859 | 0
860 | 600
861 | 210
862 | 0
863 | 0
864 | 600
865 | 250
866 | 100
867 | 1
868 | 1
869 | 0
870 |
871 |
872 | 35885
873 | 27
874 | not set
875 | 0
876 |
877 | 0
878 |
879 | 1
880 | 2
881 | 2
882 | 0
883 | 0
884 | 0
885 | 600
886 | 210
887 | 0
888 | 0
889 | 600
890 | 250
891 | 100
892 | 0
893 | 0
894 | 0
895 |
896 |
897 | 35886
898 | 28
899 | not set
900 | 35885
901 |
902 | 35885
903 |
904 | 1
905 | 4
906 | 2
907 | 0
908 | 0
909 | 0
910 | 600
911 | 210
912 | 0
913 | 0
914 | 600
915 | 250
916 | 100
917 | 0
918 | 0
919 | 0
920 |
921 |
922 | 35887
923 | 29
924 | not set
925 | 35885
926 |
927 | 35885
928 |
929 | 1
930 | 4
931 | 2
932 | 0
933 | 0
934 | 0
935 | 600
936 | 210
937 | 0
938 | 0
939 | 600
940 | 250
941 | 100
942 | 0
943 | 0
944 | 0
945 |
946 |
947 | 35888
948 | 30
949 | not set
950 | 35885
951 |
952 | 35885
953 |
954 | 1
955 | 4
956 | 2
957 | 0
958 | 0
959 | 0
960 | 600
961 | 210
962 | 0
963 | 0
964 | 600
965 | 250
966 | 100
967 | 0
968 | 0
969 | 0
970 |
971 |
972 | 35889
973 | 31
974 | not set
975 | 35885
976 |
977 | 35885
978 |
979 | 1
980 | 4
981 | 2
982 | 0
983 | 0
984 | 0
985 | 600
986 | 210
987 | 0
988 | 0
989 | 600
990 | 250
991 | 100
992 | 0
993 | 0
994 | 0
995 |
996 |
997 | 35890
998 | 32
999 | not set
1000 | 35885
1001 |
1002 | 35885
1003 |
1004 | 1
1005 | 4
1006 | 2
1007 | 0
1008 | 0
1009 | 0
1010 | 600
1011 | 210
1012 | 0
1013 | 0
1014 | 600
1015 | 250
1016 | 100
1017 | 0
1018 | 0
1019 | 0
1020 |
1021 |
1022 | 35891
1023 | 33
1024 | not set
1025 | 35885
1026 |
1027 | 35885
1028 |
1029 | 1
1030 | 4
1031 | 2
1032 | 0
1033 | 0
1034 | 0
1035 | 600
1036 | 210
1037 | 0
1038 | 0
1039 | 600
1040 | 250
1041 | 100
1042 | 0
1043 | 0
1044 | 0
1045 |
1046 |
1047 | 35892
1048 | 34
1049 | not set
1050 | 35885
1051 |
1052 | 35885
1053 |
1054 | 1
1055 | 4
1056 | 2
1057 | 0
1058 | 0
1059 | 0
1060 | 600
1061 | 210
1062 | 0
1063 | 0
1064 | 600
1065 | 250
1066 | 100
1067 | 0
1068 | 0
1069 | 0
1070 |
1071 |
1072 | 35893
1073 | 35
1074 | not set
1075 | 35885
1076 |
1077 | 35885
1078 |
1079 | 1
1080 | 4
1081 | 2
1082 | 0
1083 | 0
1084 | 0
1085 | 600
1086 | 210
1087 | 0
1088 | 0
1089 | 600
1090 | 250
1091 | 100
1092 | 0
1093 | 0
1094 | 0
1095 |
1096 |
1097 | 35894
1098 | 36
1099 | not set
1100 | 35885
1101 |
1102 | 35885
1103 |
1104 | 1
1105 | 4
1106 | 2
1107 | 0
1108 | 0
1109 | 0
1110 | 600
1111 | 210
1112 | 0
1113 | 0
1114 | 600
1115 | 250
1116 | 100
1117 | 0
1118 | 0
1119 | 0
1120 |
1121 |
1122 | 35895
1123 | 37
1124 | not set
1125 | 35885
1126 |
1127 | 35885
1128 |
1129 | 1
1130 | 4
1131 | 2
1132 | 0
1133 | 0
1134 | 0
1135 | 600
1136 | 210
1137 | 0
1138 | 0
1139 | 600
1140 | 250
1141 | 100
1142 | 0
1143 | 0
1144 | 0
1145 |
1146 |
1147 | 35896
1148 | 38
1149 | not set
1150 | 35885
1151 |
1152 | 35885
1153 |
1154 | 1
1155 | 4
1156 | 2
1157 | 0
1158 | 0
1159 | 0
1160 | 600
1161 | 210
1162 | 0
1163 | 0
1164 | 600
1165 | 250
1166 | 100
1167 | 0
1168 | 0
1169 | 0
1170 |
1171 |
1172 | 35897
1173 | 39
1174 | not set
1175 | 35885
1176 |
1177 | 35885
1178 |
1179 | 1
1180 | 4
1181 | 2
1182 | 0
1183 | 0
1184 | 0
1185 | 600
1186 | 210
1187 | 0
1188 | 0
1189 | 600
1190 | 250
1191 | 100
1192 | 0
1193 | 0
1194 | 0
1195 |
1196 |
1197 | 35898
1198 | 40
1199 | not set
1200 | 35885
1201 |
1202 | 35885
1203 |
1204 | 1
1205 | 4
1206 | 2
1207 | 0
1208 | 0
1209 | 0
1210 | 600
1211 | 210
1212 | 0
1213 | 0
1214 | 600
1215 | 250
1216 | 100
1217 | 0
1218 | 0
1219 | 0
1220 |
1221 |
1222 | 35899
1223 | 41
1224 | not set
1225 | 35885
1226 |
1227 | 35885
1228 |
1229 | 1
1230 | 4
1231 | 2
1232 | 0
1233 | 0
1234 | 0
1235 | 600
1236 | 210
1237 | 0
1238 | 0
1239 | 600
1240 | 250
1241 | 100
1242 | 0
1243 | 0
1244 | 0
1245 |
1246 |
1247 | 35900
1248 | 42
1249 | not set
1250 | 35885
1251 |
1252 | 35885
1253 |
1254 | 1
1255 | 4
1256 | 2
1257 | 0
1258 | 0
1259 | 0
1260 | 600
1261 | 210
1262 | 0
1263 | 0
1264 | 600
1265 | 250
1266 | 100
1267 | 0
1268 | 0
1269 | 0
1270 |
1271 |
1272 | 35901
1273 | 43
1274 | not set
1275 | 35885
1276 |
1277 | 35885
1278 |
1279 | 1
1280 | 4
1281 | 2
1282 | 0
1283 | 0
1284 | 0
1285 | 600
1286 | 210
1287 | 0
1288 | 0
1289 | 600
1290 | 250
1291 | 100
1292 | 0
1293 | 0
1294 | 0
1295 |
1296 |
1297 | 35902
1298 | 44
1299 | not set
1300 | 35885
1301 |
1302 | 35885
1303 |
1304 | 1
1305 | 4
1306 | 2
1307 | 0
1308 | 0
1309 | 0
1310 | 600
1311 | 210
1312 | 0
1313 | 0
1314 | 600
1315 | 250
1316 | 100
1317 | 0
1318 | 0
1319 | 0
1320 |
1321 |
1322 | 35903
1323 | 45
1324 | not set
1325 | 35885
1326 |
1327 | 35885
1328 |
1329 | 1
1330 | 4
1331 | 2
1332 | 0
1333 | 0
1334 | 0
1335 | 600
1336 | 210
1337 | 0
1338 | 0
1339 | 600
1340 | 250
1341 | 100
1342 | 0
1343 | 0
1344 | 0
1345 |
1346 |
1347 | 35904
1348 | 46
1349 | not set
1350 | 35885
1351 |
1352 | 35885
1353 |
1354 | 1
1355 | 4
1356 | 2
1357 | 0
1358 | 0
1359 | 0
1360 | 600
1361 | 210
1362 | 0
1363 | 0
1364 | 600
1365 | 250
1366 | 100
1367 | 0
1368 | 0
1369 | 0
1370 |
1371 |
1372 | 35905
1373 | 47
1374 | not set
1375 | 35885
1376 |
1377 | 35885
1378 |
1379 | 1
1380 | 4
1381 | 2
1382 | 0
1383 | 0
1384 | 0
1385 | 600
1386 | 210
1387 | 0
1388 | 0
1389 | 600
1390 | 250
1391 | 100
1392 | 0
1393 | 0
1394 | 0
1395 |
1396 |
1397 | 203
1398 | 48
1399 | Disassembly
1400 | 0
1401 |
1402 | 0
1403 |
1404 | 1
1405 | 2
1406 | 3
1407 | 0
1408 | 0
1409 | 0
1410 | 210
1411 | 600
1412 | 0
1413 | 0
1414 | 250
1415 | 600
1416 | 100
1417 | 0
1418 | 1
1419 | 0
1420 |
1421 |
1422 | 1913
1423 | 49
1424 | Instruction Trace
1425 | 203
1426 |
1427 | 203
1428 |
1429 | 1
1430 | 4
1431 | 2
1432 | 0
1433 | 0
1434 | 0
1435 | 600
1436 | 210
1437 | 0
1438 | 0
1439 | 600
1440 | 250
1441 | 100
1442 | 0
1443 | 0
1444 | 0
1445 |
1446 |
1447 | 35824
1448 | 50
1449 | Logic Analyzer
1450 | 0
1451 |
1452 | 0
1453 |
1454 | 1
1455 | 6
1456 | 0
1457 | 0
1458 | 0
1459 | 0
1460 | 210
1461 | 600
1462 | 0
1463 | 0
1464 | 250
1465 | 600
1466 | 1
1467 | 0
1468 | 0
1469 | 0
1470 |
1471 |
1472 | 343
1473 | 51
1474 | Performance Analyzer
1475 | 203
1476 |
1477 | 203
1478 |
1479 | 1
1480 | 4
1481 | 2
1482 | 0
1483 | 0
1484 | 0
1485 | 210
1486 | 600
1487 | 0
1488 | 0
1489 | 250
1490 | 600
1491 | 100
1492 | 0
1493 | 0
1494 | 0
1495 |
1496 |
1497 | 204
1498 | 52
1499 | Performance Analyzer
1500 | 203
1501 |
1502 | 203
1503 |
1504 | 1
1505 | 4
1506 | 2
1507 | 0
1508 | 0
1509 | 0
1510 | 210
1511 | 600
1512 | 0
1513 | 0
1514 | 250
1515 | 600
1516 | 100
1517 | 0
1518 | 0
1519 | 0
1520 |
1521 |
1522 | 346
1523 | 53
1524 | Code Coverage
1525 | 203
1526 |
1527 | 203
1528 |
1529 | 1
1530 | 4
1531 | 2
1532 | 0
1533 | 0
1534 | 0
1535 | 210
1536 | 600
1537 | 0
1538 | 0
1539 | 250
1540 | 600
1541 | 100
1542 | 0
1543 | 0
1544 | 0
1545 |
1546 |
1547 |
1548 |
1549 |
1550 |
--------------------------------------------------------------------------------
/pwm/pwm.uvproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 1.0
5 |
6 | ### uVision Project, (C) Keil Software
7 |
8 |
9 |
10 | pwm
11 | 0x0
12 | MCS-51
13 |
14 |
15 | AT89C51
16 | Atmel
17 | IRAM(0-0x7F) IROM(0-0xFFF) CLOCK(24000000)
18 |
19 | "LIB\STARTUP.A51" ("Standard 8051 Startup Code")
20 |
21 | 2976
22 | REGX51.H
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | 0
33 |
34 |
35 |
36 | Atmel\
37 | Atmel\
38 |
39 | 0
40 | 0
41 | 0
42 | 0
43 | 1
44 |
45 | ..\bin\
46 | pwm
47 | 1
48 | 0
49 | 1
50 | 1
51 | 1
52 | .\
53 | 0
54 | 0
55 | 0
56 |
57 | 0
58 | 0
59 |
60 |
61 | 0
62 | 0
63 |
64 |
65 | 0
66 | 0
67 |
68 |
69 | 0
70 | 0
71 |
72 |
73 | 0
74 | 0
75 |
76 |
77 | 0
78 | 0
79 |
80 | 0
81 |
82 |
83 |
84 | 0
85 | 0
86 | 0
87 | 0
88 | 0
89 | 1
90 | 0
91 | 0
92 | 0
93 | 0
94 | 3
95 |
96 |
97 | 65535
98 |
99 |
100 | S8051.DLL
101 |
102 | DP51.DLL
103 | -p51
104 | S8051.DLL
105 |
106 | TP51.DLL
107 | -p51
108 |
109 |
110 |
111 | 0
112 | 0
113 | 0
114 | 0
115 | 16
116 |
117 |
118 | 1
119 | 1
120 | 1
121 | 1
122 | 1
123 | 1
124 | 1
125 | 1
126 | 0
127 |
128 |
129 | 0
130 | 1
131 | 0
132 | 1
133 | 1
134 | 1
135 | 0
136 | 1
137 |
138 | 0
139 | -1
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 | 0
159 | 0
160 | 0
161 | 0
162 | 0
163 | -1
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 | 0
172 | 0
173 | 2
174 | 0
175 | 0
176 | 0
177 | 0
178 | 0
179 | 0
180 | 1
181 | 0
182 | 1
183 | 0
184 | 0
185 | 0
186 | 0
187 | 0
188 | 0
189 | 0
190 | 0
191 | 0
192 | 0
193 | 0
194 | 0
195 | 0
196 | 0
197 | 0
198 | 0
199 | 0
200 | 0
201 | 0
202 | 0
203 | 0
204 | 0
205 | 0
206 | 0
207 | 0
208 | 0
209 | 0
210 | 0
211 | 0
212 |
213 |
214 | 0
215 | 0x0
216 | 0x10000
217 |
218 |
219 | 0
220 | 0x0
221 | 0x0
222 |
223 |
224 | 0
225 | 0x0
226 | 0x0
227 |
228 |
229 | 0
230 | 0x0
231 | 0x0
232 |
233 |
234 | 0
235 | 0x0
236 | 0x0
237 |
238 |
239 | 0
240 | 0x0
241 | 0x0
242 |
243 |
244 | 0
245 | 0x0
246 | 0x0
247 |
248 |
249 | 0
250 | 0x0
251 | 0x0
252 |
253 |
254 | 1
255 | 0x0
256 | 0x1000
257 |
258 |
259 | 0
260 | 0x0
261 | 0x80
262 |
263 |
264 | 0
265 | 0x0
266 | 0x0
267 |
268 |
269 | 0
270 | 0x0
271 | 0x0
272 |
273 |
274 | 0
275 | 0x0
276 | 0x0
277 |
278 |
279 |
280 |
281 | 0
282 | 0
283 | 1
284 | 0
285 | 1
286 | 3
287 | 8
288 | 2
289 | 1
290 | 1
291 | 0
292 | 0
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 | 0
302 | 1
303 | 0
304 | 0
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 | 0
314 | 0
315 | 1
316 | 0
317 | 2
318 | 1
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 | Source Group 1
348 |
349 |
350 | main.c
351 | 1
352 | .\main.c
353 |
354 |
355 | music_data.c
356 | 1
357 | .\music_data.c
358 |
359 |
360 | music_data.h
361 | 5
362 | .\music_data.h
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
--------------------------------------------------------------------------------
/pwm/电路图.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xfgryujk/c51-play-music/d882ca571a1feba5c82f13c96d283fd74dbc5831/pwm/电路图.png
--------------------------------------------------------------------------------
/scripts/beep.json:
--------------------------------------------------------------------------------
1 | [[659, 1667], [587, 1667], [523, 1667], [494, 1667], [440, 1667], [392, 1667], [440, 1667], [523, 833], [523, 417], [494, 417], [523, 417], [494, 417], [523, 417], [330, 417], [392, 833], [494, 833], [523, 833], [659, 833], [784, 417], [659, 417], [784, 417], [880, 417], [698, 417], [659, 417], [587, 417], [698, 417], [659, 417], [587, 417], [523, 417], [494, 417], [440, 417], [349, 417], [523, 833], [523, 833], [494, 417], [587, 208], [392, 208], [659, 625], [392, 208], [659, 417], [523, 208], [587, 833], [659, 208], [698, 208], [659, 208], [587, 208], [330, 208], [523, 625], [523, 625], [494, 208], [523, 208], [494, 417], [392, 208], [330, 417], [392, 417], [262, 208], [440, 208], [262, 417], [494, 208], [392, 208], [262, 208], [523, 208], [262, 208], [392, 1250], [262, 417], [440, 208], [262, 417], [262, 208], [349, 208], [440, 208], [523, 208], [587, 208], [523, 208], [294, 417], [494, 208], [294, 208], [523, 208], [587, 208], [392, 208], [784, 417], [659, 208], [698, 208], [784, 417], [659, 208], [698, 208], [784, 208], [494, 208], [440, 208], [494, 208], [523, 208], [587, 208], [659, 208], [698, 208], [659, 417], [523, 208], [587, 208], [659, 417], [330, 208], [349, 208], [392, 208], [440, 208], [392, 208], [349, 208], [392, 208], [523, 208], [494, 208], [523, 208], [440, 417], [523, 208], [494, 208], [440, 417], [392, 208], [349, 208], [392, 208], [349, 208], [330, 208], [349, 208], [392, 208], [440, 208], [494, 208], [523, 208], [440, 417], [523, 208], [494, 208], [523, 417], [494, 208], [523, 208], [494, 208], [440, 208], [494, 208], [523, 208], [587, 208], [659, 208], [698, 208], [784, 208], [784, 417], [659, 208], [698, 208], [784, 417], [659, 208], [698, 208], [784, 208], [494, 208], [440, 208], [494, 208], [523, 208], [587, 208], [659, 208], [698, 208], [659, 417], [523, 208], [587, 208], [659, 417], [330, 208], [349, 208], [392, 208], [440, 208], [392, 208], [349, 208], [392, 208], [523, 208], [494, 208], [523, 208], [440, 417], [523, 208], [494, 208], [440, 417], [392, 208], [349, 208], [392, 208], [349, 208], [330, 208], [349, 208], [392, 208], [440, 208], [494, 208], [523, 208], [440, 417], [523, 208], [494, 208], [523, 417], [494, 208], [523, 208], [494, 208], [440, 208], [494, 208], [523, 208], [587, 208], [659, 208], [698, 208], [784, 208], [659, 417], [523, 208], [587, 208], [659, 417], [587, 208], [523, 208], [587, 208], [494, 208], [523, 208], [587, 208], [659, 208], [587, 208], [523, 208], [494, 208], [523, 417], [440, 208], [494, 208], [523, 417], [262, 208], [294, 208], [330, 208], [349, 208], [330, 208], [294, 208], [330, 208], [523, 208], [494, 208], [523, 208], [440, 417], [523, 208], [494, 208], [440, 417], [392, 208], [349, 208], [392, 208], [349, 208], [330, 208], [349, 208], [392, 208], [440, 208], [494, 208], [523, 208], [440, 417], [523, 208], [494, 208], [523, 417], [494, 208], [440, 208], [494, 208], [523, 208], [587, 208], [523, 208], [494, 208], [523, 208], [440, 208], [494, 208], [523, 208], [523, 208], [659, 208], [698, 208], [784, 417], [659, 833], [587, 208], [659, 208], [698, 208], [494, 208], [587, 208], [440, 417], [440, 208], [523, 208], [587, 208], [659, 417], [523, 208], [494, 417], [494, 208], [784, 208], [698, 208], [659, 208], [494, 208], [784, 208], [523, 208], [880, 208], [523, 208], [880, 208], [784, 208], [698, 417], [880, 208], [523, 208], [784, 208], [523, 208], [784, 208], [698, 208], [659, 208], [523, 208], [784, 208], [523, 208], [880, 208], [784, 208], [698, 208], [880, 208], [784, 208], [698, 208], [880, 208], [587, 208], [988, 208], [880, 208], [587, 208], [392, 208], [494, 208], [523, 208], [587, 208], [392, 208], [659, 208], [392, 417], [392, 208], [659, 208], [587, 208], [523, 208], [587, 417], [392, 417], [659, 208], [698, 208], [659, 208], [587, 208], [330, 208], [587, 625], [523, 417], [330, 208], [494, 208], [523, 208], [330, 208], [392, 208], [494, 208], [523, 208], [659, 208], [784, 208], [988, 208], [1047, 208], [988, 208], [880, 208], [784, 208], [698, 208], [784, 208], [698, 208], [659, 208], [587, 208], [880, 208], [587, 208], [523, 208], [494, 208], [523, 208], [494, 208], [440, 208], [392, 208], [440, 208], [392, 208], [349, 208], [392, 208], [440, 208], [349, 208], [523, 208], [392, 208], [494, 208], [440, 208], [392, 208], [523, 208], [392, 208], [392, 208], [587, 208], [392, 208], [659, 208], [392, 208], [392, 208], [392, 208], [659, 208], [392, 208], [698, 208], [392, 208], [784, 208], [440, 208], [880, 208], [392, 208], [784, 208], [392, 208], [698, 208], [330, 208], [659, 208], [330, 417], [330, 208], [523, 208], [523, 208], [587, 208], [330, 208], [659, 208], [349, 208], [698, 208], [330, 208], [659, 208], [330, 208], [587, 208], [262, 208], [523, 208], [262, 417], [262, 208], [440, 208], [494, 208], [523, 208], [523, 417], [523, 417], [523, 208], [523, 208], [523, 208], [392, 208], [523, 208], [440, 208], [262, 417], [262, 208], [349, 208], [440, 208], [523, 208], [587, 208], [523, 208], [294, 417], [494, 417], [523, 208], [587, 208], [392, 208], [659, 208], [523, 417], [392, 208], [659, 208], [392, 208], [698, 208], [392, 208], [784, 208], [440, 208], [880, 208], [392, 208], [784, 208], [392, 208], [698, 208], [330, 208], [659, 208], [330, 417], [330, 208], [523, 208], [523, 208], [587, 208], [330, 208], [659, 208], [349, 208], [698, 208], [330, 208], [659, 208], [330, 208], [587, 208], [349, 208], [523, 208], [262, 417], [262, 208], [440, 208], [494, 208], [523, 208], [523, 417], [523, 208], [494, 208], [523, 208], [392, 208], [523, 208], [494, 208], [523, 208], [440, 208], [523, 208], [494, 208], [523, 208], [440, 208], [523, 208], [494, 208], [523, 208], [494, 208], [392, 208], [294, 208], [523, 417], [294, 208], [587, 417], [659, 104], [659, 104], [659, 104], [659, 104], [659, 104], [659, 104], [659, 104], [659, 104], [659, 104], [659, 104], [659, 104], [659, 104], [659, 104], [659, 104], [659, 104], [659, 104], [587, 104], [587, 104], [587, 104], [587, 104], [587, 104], [587, 104], [587, 104], [587, 104], [587, 104], [587, 104], [587, 104], [587, 104], [587, 104], [587, 104], [587, 104], [587, 104], [523, 104], [523, 104], [523, 104], [523, 104], [523, 104], [523, 104], [523, 104], [523, 104], [523, 104], [523, 104], [523, 104], [523, 104], [523, 104], [523, 104], [523, 104], [523, 104], [494, 104], [494, 104], [494, 104], [494, 104], [494, 104], [494, 104], [494, 104], [494, 104], [494, 104], [494, 104], [494, 104], [494, 104], [494, 104], [494, 104], [494, 104], [494, 104], [440, 104], [440, 104], [440, 104], [440, 104], [440, 104], [440, 104], [440, 104], [440, 104], [440, 104], [440, 104], [440, 104], [440, 104], [440, 104], [440, 104], [440, 104], [440, 104], [392, 104], [392, 104], [392, 104], [392, 104], [392, 104], [392, 104], [392, 104], [392, 104], [392, 104], [392, 104], [392, 104], [392, 104], [392, 104], [392, 104], [392, 104], [392, 104], [440, 104], [440, 104], [440, 115], [440, 115], [440, 115], [440, 115], [440, 115], [440, 115], [440, 115], [440, 115], [440, 115], [440, 115], [440, 115], [440, 115], [440, 115], [440, 115], [494, 115], [494, 115], [494, 115], [494, 115], [494, 115], [494, 115], [494, 115], [494, 115], [494, 115], [494, 115], [494, 115], [494, 115], [494, 115], [494, 115], [494, 115], [494, 115], [330, 3346]]
--------------------------------------------------------------------------------
/scripts/flower dance.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xfgryujk/c51-play-music/d882ca571a1feba5c82f13c96d283fd74dbc5831/scripts/flower dance.wav
--------------------------------------------------------------------------------
/scripts/tone_to_loop_count.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | 将beep谱(频率、持续时间)转换为循环次数
4 | """
5 |
6 | import json
7 |
8 | # 晶振频率(Hz)
9 | CRYSTAL_FREQUENCY = 11059200
10 | # 计数周期(机器周期)(s)
11 | COUNT_PERIOD = 1 / (CRYSTAL_FREQUENCY / 12)
12 | # 一次循环几个机器周期,通过定时器实验得到
13 | COUNT_PER_LOOP = 38
14 | # 一次循环时间(ms)
15 | MS_PER_LOOP = COUNT_PERIOD * 1000 * COUNT_PER_LOOP
16 |
17 |
18 | def tone_to_loop_count(notes, output_path):
19 | res = []
20 | for frequency, duration in notes:
21 | if frequency == 0:
22 | # 延时
23 | loop_count = 65535
24 | period_count = round(duration / MS_PER_LOOP)
25 | else:
26 | period = 1000 / frequency
27 | loop_count = round(period / 2 / MS_PER_LOOP)
28 | period_count = round(duration / period)
29 | # 最低频率0.185,loop_count = 65534
30 | assert 0 <= loop_count <= 65535, f'frequency = {frequency}, loop_count = {loop_count},不在unsigned int范围内'
31 | # 把一个时间过长的音符拆成多个音符
32 | while period_count > 65535:
33 | res.append((loop_count, 65535))
34 | period_count -= 65535
35 | res.append((loop_count, period_count))
36 |
37 | with open(output_path + '.h', 'w') as f:
38 | f.write(f"""#define DELAY_COUNT 65535
39 | #define NOTES_LEN {len(res)}
40 | extern const unsigned int code notes[][2];
41 | """)
42 |
43 | with open(output_path + '.c', 'w') as f:
44 | f.write('const unsigned int code notes[][2] = {\n')
45 | for i in range(0, len(res), 6):
46 | f.write('\t')
47 | for loop_count, period_count in res[i: i + 6]:
48 | f.write(f'{{{loop_count}, {period_count}}}, ')
49 | f.write('\n')
50 | f.write('};\n')
51 |
52 |
53 | def main():
54 | with open('beep.json') as f:
55 | notes = json.load(f)
56 | tone_to_loop_count(notes, '../beep/music_data')
57 |
58 |
59 | if __name__ == '__main__':
60 | main()
61 |
--------------------------------------------------------------------------------
/scripts/wav_to_code.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | 将wav文件中的PCM波形转换为C语言数组代码
4 | """
5 |
6 | import wave
7 |
8 | import numpy as np
9 |
10 | # 晶振频率(Hz)
11 | CRYSTAL_FREQUENCY = 11059200
12 | # 计数周期(s)
13 | COUNT_PERIOD = 1 / (CRYSTAL_FREQUENCY / 12)
14 |
15 |
16 | def wav_to_code(wav_path, output_path):
17 | with wave.open(wav_path, 'rb') as f:
18 | n_channels, sample_width, frame_rate, n_frames, _, _ = f.getparams()
19 | assert sample_width in (1, 2), '只支持8位或16位采样'
20 | frame_period = 1 / frame_rate
21 | pcm = f.readframes(n_frames)
22 |
23 | th0 = 256 - int(frame_period / COUNT_PERIOD)
24 | assert th0 >= 0, '采样率太低' # 最低频率3600Hz
25 |
26 | if sample_width == 1:
27 | pcm = np.fromstring(pcm, np.int8)
28 | # 取第一个声道
29 | pcm = pcm.reshape(n_frames, n_channels)[:, 0]
30 | pcm += 128
31 | else:
32 | pcm = np.fromstring(pcm, np.int16).astype(np.int32)
33 | pcm = pcm.reshape(n_frames, n_channels)[:, 0]
34 | pcm = (pcm + 32768) // 256
35 | # 防溢出
36 | for index in np.where(pcm < 0):
37 | pcm[index] = 0
38 | for index in np.where(pcm > 255):
39 | pcm[index] = 255
40 |
41 | with open(output_path + '.h', 'w') as f:
42 | f.write(f"""#define INIT_TH0 {th0}
43 | #define PCM_DATA_LEN {len(pcm)}
44 | extern const unsigned char code pcmData[];
45 | """)
46 |
47 | with open(output_path + '.c', 'w') as f:
48 | f.write('const unsigned char code pcmData[] = (\n')
49 | for i in range(0, len(pcm), 32):
50 | f.write('\t"')
51 | for sample in pcm[i: i + 32]:
52 | f.write(f'\\x{sample:02X}')
53 | f.write('"\n')
54 | f.write(');\n')
55 |
56 |
57 | def main():
58 | wav_to_code('flower dance.wav', '../dac/music_data')
59 |
60 |
61 | if __name__ == '__main__':
62 | main()
63 |
--------------------------------------------------------------------------------
/scripts/wav_to_pwm.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | 将wav文件中的PCM波形转换为PWM高电平持续时间C语言数组代码
4 | """
5 |
6 | import wave
7 |
8 | import numpy as np
9 |
10 | # 晶振频率(Hz)
11 | CRYSTAL_FREQUENCY = 11059200
12 | # 计数周期(s)
13 | COUNT_PERIOD = 1 / (CRYSTAL_FREQUENCY / 12)
14 |
15 |
16 | def wav_to_pwm(wav_path, output_path):
17 | with wave.open(wav_path, 'rb') as f:
18 | n_channels, sample_width, frame_rate, n_frames, _, _ = f.getparams()
19 | assert sample_width in (1, 2), '只支持8位或16位采样'
20 | frame_period = 1 / frame_rate
21 | pcm = f.readframes(n_frames)
22 |
23 | # 定时器0初始计数,影响PWM载波频率。载波频率越高越好,这里只取载波频率 = 采样频率
24 | init_count = 65536 - int(frame_period / COUNT_PERIOD)
25 | init_th0 = init_count // 256
26 | # 如果采样周期太长,每个周期需要2字节编码,浪费空间。最低频率3600Hz
27 | assert init_th0 == 255, '采样率太低'
28 | init_tl0 = init_count % 256
29 |
30 | if sample_width == 1:
31 | pcm = np.fromstring(pcm, np.int8).astype(np.float)
32 | # 取第一个声道
33 | pcm = pcm.reshape(n_frames, n_channels)[:, 0]
34 | # 方波下的面积在本周期占的比例,作为PWM方波占空比
35 | duty_cycles = (pcm + 128) / 256
36 | else:
37 | pcm = np.fromstring(pcm, np.int16).astype(np.float)
38 | pcm = pcm.reshape(n_frames, n_channels)[:, 0]
39 | duty_cycles = (pcm + 32768) / 65536
40 | # 定时器1在每个周期的初始计数,影响高电平时间
41 | init_tl1s = 256 - (duty_cycles * (frame_period / COUNT_PERIOD)).astype(np.int32)
42 | # 防溢出
43 | for index in np.where(init_tl1s < 0):
44 | init_tl1s[index] = 0
45 | for index in np.where(init_tl1s > 255):
46 | init_tl1s[index] = 255
47 |
48 | with open(output_path + '.h', 'w') as f:
49 | f.write(f"""#define SAMPLE_RATE {frame_rate}
50 | // #define INIT_TH0 {init_th0}
51 | #define INIT_TL0 {init_tl0}
52 | #define PWM_DATA_LEN {len(init_tl1s)}
53 | extern const unsigned char code pwmData[];
54 | """)
55 |
56 | with open(output_path + '.c', 'w') as f:
57 | f.write('const unsigned char code pwmData[] = (\n')
58 | for i in range(0, len(init_tl1s), 32):
59 | f.write('\t"')
60 | for init_tl1 in init_tl1s[i: i + 32]:
61 | f.write(f'\\x{init_tl1:02X}')
62 | f.write('"\n')
63 | f.write(');\n')
64 |
65 |
66 | def main():
67 | wav_to_pwm('flower dance.wav', '../pwm/music_data')
68 |
69 |
70 | if __name__ == '__main__':
71 | main()
72 |
--------------------------------------------------------------------------------