音乐演奏程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
音乐演奏
1 总体要求与分析
1.1设计要求
本文主要编写一段音乐程序,该程序可以进行如下操作:按大写字母“A”,奏一首歌曲;按大写字母“B”;奏另一首歌曲,曲目自选,可重复操作。按Q 退出程序。
1.2设计思路分析
在IBM-PC/XT机中都带有8253-5定时/计数器,IBM-PC/AT中带有8254定时/计数器,这两种芯片功能十分类似。本文通过对8253-5定时/计数器芯片的操作实现音乐演奏。该声音接口通过汇编语言对8253-5的端口直接进行操作,可以不必要过多的使用BIOS的调用和DOS的调用。
计数器芯片有3个通道,各自具有专用功能。通道0时系统的始终节拍计时器,通道1专用于产生动态RAM的定时刷新信号,通道2用来控制计算机的扬声器的声音频率。该音乐演奏主要用到通道2的功能,使通道2工作在“方波发生器”方式,产生相应频率的音调送至喇叭驱动电路,使喇叭发出不同音调的声音。
使用8255A的PB
0控制通道2的计数,PB
1
控制通道2的输出对扬声器产生控制的
时间。
人机交互包括屏幕显示提示语以及人工输入相应参数,主要应用到BIOS的10H号中断调用以及DOS的21H号中断调用。BIOS的10H号中断调用用于显示器驱动,设置显示模式和光标位置;DOS的21H号中断调用用于单字符输入以及多字符输出显示。
音乐演奏实现的一个主要步骤是乐谱编程。通过相应的频率表将乐谱中对应的音符转化为计数器的计数初值,节奏通过延时程序转化为对喇叭发音时间的控制,从而实现音符和节拍的数字化。
2 方案设计
音乐的实现主要是对乐谱中的单音符按照一定的音符频率表转化为计数器的计数频率以及喇叭发声的控制时间,通过计数产生相应的控制动作。由此可以有两种方案比较和选择。
2.1 方案一
通过编程使用软件来实现计数和喇叭发声的时间设置,控制8255A并行I/O 接口驱动喇叭发声。CPU每执行一条指令需要耗费一定的时间,这样可以通过循环的方式设置好循环次数,实现软件计数,然后输出相应的高低电平,驱动喇叭发出对应频率和节拍的声音。
利用软件编程方式实现该功能的优点是可以减少硬件开支,便于调试和问题的查找。缺点是CPU开支太大,利用率不高,而且时间不够精准。
2.2 方案二
利用硬件实现频率计数和延时时间的控制,利用8253-5定时/计数器芯片和8255A并行I/O接口芯片。使8253的一个通道工作在“方波发生器”模式,实
端口实现发声时间的计数控制。这样可以精现对频率的计数;利用8255A的PB
3
确的控制时间,减少CPU的开支。
该方案的优点是控制精度提高,同时也减少CPU的开支。缺点是硬件开销比较多。
2.3 方案选择
本文要实现的功能所需要的硬件电路并不是太复杂,一般的IBM-PC/XT/AT 机家族都带有相应的硬件电路。在提高精度与简易程度的比较下,决定采用方案二,这样可以大大提高时间控制精度,同时减少软件程序的复杂度。
3 硬件电路
IBM-PC/XT内部8253电路图如图3-1所示。
图3-1 8253电路连接图
8253的通道0用于产生固定频率的始终节拍,通道1用于产生固定频率的的刷新信号,通道2用于产生频率信号,工作在方式3,计数值为6A4H=1190,方波输出频率为1.19MH Z。此信号频率决定扬声器的音调,通道2的控制字为0B6H。音乐产生主要用到通道2。
8253通道2的计数由8255A的PB
0控制,当PB
输出为高电平时,使门控GATE
2
为高电平。此时,8253通道2允许计数,故通道2的输出方波受PB
的控制,从而控制扬声器的音调高低。通道2的输出能否对扬声器产生持续控制还取决于
8255A的PB
1。当PB
1
为“0”时,OUT
2
不能通过“与门”;反之,则可以通过“与
门”控制扬声器。所以,扬声器发音时间的长短取决于8255A的PB
1
信号。另外CPU通过读8255A的C口,得知8253通道2的状态和扬声器驱动器的状态。
4 软件设计
4.1 屏幕显示设计
程序运行时,屏幕显示第一界面如下:
~~~~~Assembly Music Player~~~~~
---------------------
|PLEASE SELECT A MUSIC|
---------------------
A LIANGZHILAOHU
B ZHENGFU
Q EXIT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
选择A、B分别演奏相应的音乐,选择Q键结束程序运行。
当输入别的按键信号时,显示出错提示信息,界面如下:
ERROR! CHOOSE A B Q
PLEASE INPUT AGAIN!
~~~~~Assembly Music Player~~~~~
---------------------
|PLEASE SELECT A MUSIC|
---------------------
A LIANGZHILAOHU
B ZHENGFU
Q EXIT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
按照提示信息重新输入正确字符即可。
上述提示信息在数据段定义,类型为字节型。首先调用BIOS中断的10H号功能设置文本模式。程序如下:
MOV AH,00H ;BIOS 10子功能
MOV AL,02H ;80*25彩色文本模式
INT 10H ;BIOS 10功能调用