初学单片机,基于51单片机的电子琴演奏音乐的程序代码
昨天我们在《初学单片机,想不通周杰伦的《菊花台》怎样被单片机演奏出来?》一文中聊了单片机如何演奏一段简谱音乐,之后在实物上进行的验证。
在实际程序运行时,发现了一个问题:音乐速度太快。
然后重新分析原因,发现在节拍的时间描述上有一个错误,今天更正一下:1/32节拍对应的不是31.25毫秒,应该是 125毫秒;1/4节拍对应的是1秒。按照文中节拍表,定时器2的定时时间为4毫秒。那么在定时器2定时时间依旧为1ms的情况下,节拍表做了如下修正,如图:
修正后的节拍表
由于蜂鸣器的表现比较差,音质不太理想,但是我们是本着学习设计思路的目的,也就暂且忍受一下这正确但不优美的音乐吧。。。
按照前文的思路,对两首歌曲的简谱进行了翻译,丢给了单片机去演奏。下面是录制的效果:
温馨提示:声音比较尖锐,建议调小音量或耳机拿出耳孔试听。
第一段,相信你能听出来:
第二段,就是前文举例的《菊花台》:
关于《单片机电子琴》实物的制作,以及“text格式转换bin格式”的方法,可以参考前面几篇文章,例如:《初学单片机,基于51单片机的电子琴还需要程序代码》。
操作说明:在前文基础上,保留前面10个按键的原有功能,最后两个按键改成了两首内置音乐的选择键。
附:修改后编译完成的单片机下载用程序代码(text格式需转换):
02 03 C3 B2 A6 32 FF FF FF FF FF 02 00 03 E4 FD
D2 A6 12 04 D4 C2 A6 12 04 D4 12 04 D4 0D BD BE
EF 12 04 D4 02 04 D4 43 8E 04 75 D7 20 75 D6 D1
53 8E EF 43 AF 04 22 02 0C 00 00 01 0B 00 01 0A
2E 02 08 00 00 00 75 96 40 E4 F5 95 F5 B2 F5 B1
C2 A6 22 43 8E 80 E4 F5 89 C2 8C D2 A9 22 FF FF
FF FF FF 02 02 2A 00 00 71 CC 79 C7 88 6C 95 78
A1 17 A6 6B B0 31 B8 E6 BC E4 C4 36 CA BC D0 8C
D3 36 06 02 08 02 09 02 09 01 08 01 09 08 06 01
05 03 06 02 08 02 09 02 09 01 08 01 09 02 06 09
06 02 08 02 09 02 09 01 08 01 09 08 06 01 05 03
08 02 06 02 05 01 06 01 05 01 04 01 05 02 02 09
02 02 05 09 08 02 06 09 05 01 04 01 02 09 08 02
06 02 05 01 06 01 05 01 04 01 05 02 02 09 00 05
04 02 05 02 06 09 08 02 09 09 0D 02 0C 02 0B 03
09 02 08 04 09 02 08 02 06 02 05 02 04 03 02 02
04 02 05 09 06 02 05 03 04 02 05 02 06 09 08 02
09 09 0D 02 0C 02 0B 03 0C 02 0B 04 08 09 06 02
0A 02 0B 02 04 02 05 02 06 04 05 09 04 02 04 06
04 06 06 09 05 02 06 03 00 03 06 02 08 02 06 02
05 02 06 04 04 09 05 02 06 02 08 02 06 03 05 09
04 02 05 03 00 03 06 09 08 01 06 01 09 02 08 09
09 02 08 03 06 02 08 04 06 03 05 02 06 02 08 03
06 02 05 04 04 03 05 04 06 09 05 02 06 03 00 03
06 02 08 02 06 02 05 02 06 04 04 09 05 02 06 02
08 02 06 03 05 09 04 02 05 03 00 03 06 09 08 01
06 01 09 02 08 09 09 02 08 03 06 02 08 04 06 03
05 02 06 02 08 03 06 02 05 02 05 02 04 02 04 05
00 05 04 02 05 02 06 09 08 02 09 09 0D 02 0C 02
0B 03 09 02 08 04 09 02 08 02 06 02 05 02 04 03
02 02 04 02 05 03 05 02 04 02 05 03 04 02 05 02
06 03 06 02 08 02 09 09 0D 02 0C 02 0B 03 0C 02
0B 04 08 09 06 02 0A 02 0B 02 04 02 05 02 06 04
05 04 04 06 00 00 00 7D 00 FA 01 F4 03 E8 07 D0
0B B8 0F A0 01 77 02 EE 05 DC C0 E0 C0 83 C0 82
C0 D0 75 D0 00 C0 06 C0 07 C3 E5 0D 95 0A E5 0C
94 00 40 03 02 03 13 E5 09 94 00 E5 08 94 00 40
0B E5 09 15 09 70 02 15 08 02 03 20 E5 0B 70 36
E5 0D 25 E0 FF E5 0C 33 FE 74 83 2F F5 82 74 00
3E F5 83 E4 93 25 E0 24 16 F5 82 E4 34 02 F5 83
E4 93 F5 08 74 01 93 F5 09 C2 8C C2 A6 74 82 2F
F5 82 74 00 80 3A E5 0B 64 01 70 59 E5 0D 25 E0
FF E5 0C 33 FE 74 DF 2F F5 82 74 00 3E F5 83 E4
93 25 E0 24 16 F5 82 E4 34 02 F5 83 E4 93 F5 08
74 01 93 F5 09 C2 8C C2 A6 74 DE 2F F5 82 74 00
3E F5 83 E4 93 FF 25 E0 24 67 F5 82 E4 34 00 F5
83 E4 93 F5 8A EF 25 E0 24 66 F5 82 E4 34 00 F5
83 E4 93 F5 8C E5 8A D3 94 00 40 04 7F 01 80 02
7F 00 E5 8C 4F 60 02 D2 8C 05 0D E5 0D 70 11 05
0C 80 0D C2 8C 53 8E EF C2 A6 75 08 00 75 09 00
D0 07 D0 06 D0 D0 D0 82 D0 83 D0 E0 32 7C 0C 75
0E 0C 12 00 46 12 00 53 12 00 27 D2 AF 12 00 0E
12 04 4F AC 07 EC C3 94 0C 50 35 E5 0E 6C 60 28
8C 0E C2 8C C2 A6 EC 25 E0 24 67 F5 82 E4 34 00
F5 83 E4 93 F5 8A EC 25 E0 24 66 F5 82 E4 34 00
F5 83 E4 93 F5 8C D2 8C 75 0C 00 85 0A 0D 80 15
30 8C 12 C3 E5 0D 95 0A E5 0C 94 00 40 07 C2 8C
75 0E 0C C2 A6 BC 0A 12 12 00 0E E4 F5 0B 75 0A
2E F5 0C F5 0D 43 8E 10 80 96 EC 64 0B 70 91 12
00 0E 75 0B 01 75 0A 9C E4 F5 0C F5 0D 43 8E 10
02 03 40 78 7F E4 F6 D8 FD 75 81 0F 02 04 0A 02
03 2D E4 93 A3 F8 E4 93 A3 40 03 F6 80 01 F2 08
DF F4 80 29 E4 93 A3 F8 54 07 24 0C C8 C3 33 C4
54 0F 44 20 C8 83 40 04 F4 56 80 01 46 F6 DF E4
80 0B 01 02 04 08 10 20 40 80 90 00 37 E4 7E 01
93 60 BC A3 FF 54 3F 30 E5 09 54 1F FE E4 93 A3
60 01 0E CF 54 C0 25 E0 60 A8 40 B8 E4 93 A3 FA
E4 93 A3 F8 E4 93 A3 C8 C5 82 C8 CA C5 83 CA F0
A3 C8 C5 82 C8 CA C5 83 CA DF E9 DE E7 80 BE 79
0C E5 A0 44 C0 FE E5 B0 44 03 7C 00 24 00 FF EC
3E FE EF 78 02 CE A2 E7 13 CE 13 D8 F8 FD AC 06
F4 70 02 EC F4 60 5A E4 F5 0F 12 04 D4 E5 A0 44
C0 FE E5 B0 44 03 7A 00 24 00 FF EA 3E FE EF 78
02 CE A2 E7 13 CE 13 D8 F8 6D 70 02 EE 6C 60 03
AF 01 22 05 0F E5 0F D3 94 A0 50 CE E4 FB 74 01
7E 00 A8 03 08 80 05 C3 33 CE 33 CE D8 F9 F4 FF
EE F4 FE EF B5 05 06 EE B5 04 02 A9 03 0B BB 0C
DD AF 01 22 7F 02 7E 72 DE FE DF FC 22
今天接着昨天的话题聊到了前面的设计思路在实物上的应用,如果您感兴趣可以动手试一下,欢迎在评论区留言交流,或者分享给更多朋友。。。
初学单片机,想不通周杰伦的《菊花台》怎样被单片机演奏出来?
前面我们制作了一块简单的线路板——单片机电子琴,小小满足了一下成为音乐“家”的梦想(也就是在自己家里弹奏音乐的梦想)。
可是就这么完事是不是太草率了?不行!我们还得给它增加新的功能。
今天我们一起聊聊如何让单片机播放一段音乐,请跟我来。。。
如何翻译简谱给单片机?单片机播放音乐——分析简谱思维导图
单片机没有眼睛,他只认识程序代码,所以我们要把有用的东西翻译给他使用,这样单片机才能为我们演奏一段音乐。
通过上面的图片,我们知道有用的两样东西是频率和节拍。
解决频率和节拍问题:
解决频率问题:
前面几篇文章中,我们在设计单片机电子琴的时候已经解决了这个问题。就是利用单片机的定时器,通过改变定时器的初装值来改变输出音频信号的频率,产生相应频率的声音。
解决节拍问题:
参照简谱,我们把一秒作为参考时间长度,然后把1/32秒作为最小单位,制作一个节拍表。同样利用单片机的另一个定时器来产生不同的时间,对应到每个频率所占用的时间节拍长度。
单片机播放音乐——节拍表
回顾以前制作的频率表(表中增加了休止符):
单片机播放音乐——频率表
单片机程序设计思路:
我们要用到的是两张表的索引号。
节拍表的索引号0对应的是1/32节拍(31.25约32毫秒),索引号1、2、3分别对应的是1/16(62.5约63)、1/8(125)、1/4(250),以此类推。
频率表的索引号已经在图中标注好了。
下面我们节选周杰伦的歌曲《菊花台》中的一段简谱说明一下如何制作音乐数据表:
单片机播放音乐——简谱翻译详解示例图
从图中我们能够看出来,蓝色的数字是两个一组的,第一个数字是频率的索引号,第二个数字是节拍的索引号。
单片机是如何演奏这段音乐的呢?首先读取第一组数字,通过索引号查《频率表》,把《频率表》中的值“0xa6,0X6b”赋值给定时器0的初装值寄存器,单片机就会连续输出中音“3”的声音;紧接着通过第二个数字索引号查《节拍表》的定时参数为250毫秒(1/4节拍),根据参数用定时器2进行计时,直到计时到了参数对应的时间,就完成了第一个音符的音频输出。接下来读取第二组数字。。。以此类推,直到演奏完所有音符。
以上就是用单片机演奏音乐的一种设计思路。
今天就聊到这里,如果您感兴趣,记得关注头条号/春天说,欢迎在评论区留言,或者分享给更多朋友。。。
相关问答
单片机 乐谱编辑器怎么用?单片机乐谱编辑器是一种用于编辑乐谱并将其转换为单片机可执行代码的工具。下面是使用单片机乐谱编辑器的基本步骤:1.打开单片机乐谱编辑器,创建一个新项目...
在座的同志 有谁能回答一下吗!湖北专业的 简谱 工具软件, 简谱 ...[回答]1掌握几种工具软件:如MATLAB、PROTEL、EWB。2掌握一种编程语言:如VC。3掌握几种控制器:如PLC、ARM、单片机、工控机等。熟悉一种便可。我觉着你可...
行家们跪求解答!!可靠的高空作业升降平台车租赁厂商,高空...[回答]不知道你所说的乐谱是什么样的记谱法的谱子。如果是五线谱,其中的升降号有两种不同的用法——临时升降音记号和固定升降音记号;数字简谱中则只有临...
行家们谁能赐教:优质宏雨全托服务怎么报名,宏雨全托服务什...[回答]用定时器T0的中断实现渴望主题曲的播放#includereg51.h//包含51单片机寄存器定义的头文件sbitsound=P3^7;//将sound位定义为P3.7unsignedintC;//储....
麻烦大仙们,楼主请问,邯郸机制净化板批发价,机制净化板款...[回答]AVR的,如果是51单片机改一改定时器就行,电路图简单就不发了,你照你的开发板电路图弄就行了!#includeiom16v.h//包含型号头文件#includemacros.h//包...