音乐演奏课程设计
谱为每一个音符规定一个演奏时间。在遇到一首不熟悉歌曲时,初期很难确定每 个音符的演唱时间,而调试程序的需大量的时间。但可以这样认为为每一个音符 规定一个“单位时间”。
单位时间*N=音符的演唱时间 其中,N 为调试参数,一首歌曲只有一个调试参数。设计程序时用 EQU 伪指 令定义调试参数初值先行估算,调试时再修改它。 如何确定每个音符演奏的单位时间呢?我们知道,音符的节奏分为一拍、半 拍、1/4 拍等等。如果在一首歌曲中,音符演奏的时间最短时间为 1/8 拍,我们 就规定一拍音符的单位时间为 8,半拍音符的单位时间为 4,1/4 拍音符的单位 时间为 2,1/8 拍音符的单位 时间 1。编程时,首先将一个音符的频率值转换成 计数器初值写入 2 号计数器,然后将音符的单位时间乘以调试参数 N,再调用延 时子程序,就可以控制音符的演奏时间了,调试时,只需要改变调试参数 N 即可。
将与一个频率对应的计数器初值写入 2 号计数器,扬声器就发出相应的音调,计 数器初值的计算公式如下:
山东交通学院
音乐演奏设计说明书
NO.03
____________________________________________________
计数器初值=1193182/输出频率
其中,1193182Hz 转换成十六进制为 1234DEH,因此在打开扬声器的条件下,
tablt3 db 4,4,12,4,4,4,4,12,8 db 4,4,4,4,4,4,4,12,4 db 4,4,4,4,4,4,12,4 db 4,12,4,4,4,4,12,24
单位时间表
n1 equ 10000 n2 equ 1500 data ends
;调试参数
stack segment 'stack' db 200 dup(?)
附录 B 音符频率表···················06
附录 C 程序代码····················07
参考文献···························11
山东交通学院
音乐演奏设计说明书
NO.01
____________________________________________________
下图给出了本设计的程序参考流程图。
开始
Y 退出
显示提示信息
接受键盘输入
是‘A’?
N 是‘B’?
N
是‘C’? N
是‘Q’? N
Y
调用第一首 Y
调用第二首 Y
调用第三首
显示出错信息
山东交通学院
音乐演奏设计说明书
NO.05
___________________________________________________
微机原理与接口技术
课程设计任务书
题目 系 (部) 专业 班级 学生姓名 学号
音乐演奏设计 信息工程系 自动化 052 张维杭 050817212
月 日至
月日共 周
指导教师(签字) 系 主 任(签字)
年 月日
山东交通学院
音乐演奏设计说明书
NO.1
____________________________________________________
附录 B
音符频率表
编程产生各种音符的音频时可参照下表:
山东交通学院
音乐演奏设计说明书
NO.07
1
2
3
4
5
6
7
.
.
.
.
.
.
.
A
221
248
278
294
330
371
416
B
248
278
312
330
171
416
467
C
131
147
165
175
196
221
248
D
147
165
185
196
221
245
278
山东交通学院
音乐演奏设计说明书
NO.02
____________________________________________________
2.发声控制
发声系统受 8255A 芯片(口地址为 60H~63H)的两根输出线 PB0 和 PB1 的控制, PB0 输出的高电平使计数器正常工作,PB1 输出高电平打开输出控制门,因此执行 下面的 OPEN 子程序可以打开扬声器,执行下面的 CLOSE 子程序可以打开扬声器。
open proc
;打开扬声器子程序
push ax
in al,61h
or al,03h
out 61h,al
pop ax
ret
open endp
close proc
;关闭扬声器子程序
push ax
in al,61h
and al,0fch
ouse endp
3.演奏单音符 一首乐曲由若干音符组成,一个音符对应一个频率。
目录
[一] 摘要··························01
[二] 关键字························01
[三] 设计内容······················01
[四] 设计目的······················01
[五] 设计要求······················01
音乐演奏
一,摘要:
随着计算机在人们生活中的普遍应用,我没在工业生产生活应用计算机外, 我没还可以用计算机干什么呢?基于这点我作一点在于乐方面的设计,用 PC 机 的 8254 芯片实现音乐的演奏。
二,关键字:
音乐,PC 机,8254 芯片。
三.设计内容:
PC 机扬声器演奏音乐。
四.设计目的:
了解 PC 机扬声器系统的电路结构、学习用扬声器发声的编程方法。
tabf1 dw -1,294,294,495,441,393,294,589,589,294,495,441 dw 393,330,330,330,525,495,441,330,330,0
tabf2 dw -1,441,441,441,441,371,393,441,589,495 dw 495,495,495,393,495,441,441,0
附录 C
程序代码
data segment top db 0dh,0ah,'input A replay <ling er xiang ding dan>!',0dh,0ah
db 'input B replay <tong zhuo de ni>!',0dh,0ah db 'input C replay <yi shen you ni>!',0dh,0ah db 'input Q quit!!',0dh,0ah db 'please input:','$' error db 0dh,0ah,'the input error,please input again!',0dh,0ah,'$'
_八.操作说明
在具体实现时,由于各计算机的速度不同,乐曲演奏的速度存在差异,所以 可以适当调整延时子程序的时间参数。
九.心得体会
在本次课程设计中,我觉得自己在用汇编语言编程序方面还是相当的欠缺 的。这次课程设计主要用汇编语言编写的程序来实现扬声器的音乐演奏,使我对 汇编语言的运用有了更深一步的了解,且此次实验是与接口技术联系在一起的, 涉及到 8253 计数器及 8255A 芯片的运用,对芯片的应用有了进一步的认识。
通过此次课程设计,我感到不仅实际动手能力有所提高,而且对硬件的开发 流程也有了一定的了解,进一步激发了我学习专业知识的兴趣,并能够结合实际 存在的问题在专业领域内进行更深入的学习。
附录 A
山东交通学院
音乐演奏设计说明书
NO.06
____________________________________________________
低于此范围的是次声波,高于此声波的是超声波,人耳都听不见。由于底频率实 现起来比较困难,所以可以让计数器产生一个很高的频率,例如,若休止符的频 率为“-1”,那么经过汇编之后,就是 65536Hz,这么搞的频率人耳已经听不到 了。此外,对于连续演唱懂得同音符,可适当修改起频率值,以便产生略微的差 别,从而具备节拍感,以达到最佳效果.
;频率表
山东交通学院
音乐演奏设计说明书
NO.08
____________________________________________________
tablt1 db 4,4,4,4,4,4,12,4,4,4,4,4,4 ; db 12,4,4,4,4,4,12,4,4
tablt2 db 4,2,4,4,4,4,4,12,12,4 db 4,4,4,4,4,12,4,4
(2)休止符的处理 歌曲中的休止符应如何处理呢?遇到休止符应该不发声,理论上可以用关闭
扬声器的方法实现,但在编程时用这中方法处理太麻烦。 但可以利用人耳的声学特点来实现。人耳可听的声音范围是 15Hz~25 Hz,
山东交通学院
音乐演奏设计说明书
NO.04
____________________________________________________
七.方案论证
(1) 频率表和时间表 设计程序时,数据段设置两张“表”,一张是频率表,将与音符对应的频率
值依次写入表中,另一张是时间表,依次存放每个音符的单位时间。当然,频率 表和时间表的表项要一一对应,不能错位,频率表的最后一个表项为 0,作为重 复演唱或者停止演唱的标志。在接通扬声器的情况下,依次取出频率表中的频率 值,转换成计数器初值写入 2 号的计数器,依次取出时间表中的单位时间和调试 参数 N 相乘,然后再调用延时子程序即可得到延时时间,也就是音符的演奏时间。