演奏乐曲程序设计

演奏乐曲程序设计

ID:14752891

大小:128.00 KB

页数:16页

时间:2018-07-30

演奏乐曲程序设计_第1页
演奏乐曲程序设计_第2页
演奏乐曲程序设计_第3页
演奏乐曲程序设计_第4页
演奏乐曲程序设计_第5页
资源描述:

《演奏乐曲程序设计》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、武汉理工大学《汇编语言程序设计》课程设计说明书演奏乐曲程序设计1.设计目的及要求:(1)学习程序设计的基本方法和技能,熟练掌握用汇编语言设计,编写,调试和运行程序的方法。(2)了解扬声器的工作原理并运用两种方法发声。(3)运用发声原理调用子程序来完成乐曲程序的设计。(4)能完整演奏一首乐曲,演奏的重复次数可以控制,由键盘输入控制值。按“Q”键退出。2.设计环境与工具:DOS操作系统。编辑,汇编,连接,调试工具:edit、masm、link、debug3.设计完成时间:在2008年元月14日完成程序验收,元月15日上交课程设计说明书。4.设

2、计内容及原理:4.1扬声器结构特点:在计算机中有一个可编程时间间隔定时器8253/54(programmableintervaltimer,PIT),它能根据程序提供的计算值和工作模式,产生各种形状和各种频率的计数/定时脉冲,提供给系统的各个部件使用。PC机上的大多数I/O都是由主板上的8255可编程序外围接口芯片(PPI)管理的。PPI包括三个8位寄存器,两个用于输入功能,一个用与输出功能。输入寄存器分配的I/O端口号为60H和62H,输出寄存器分配的I/O端口号为61H。有PPI输出寄存器中的0和1两位来控制扬声器的驱动方式。下图为扬

3、声器的驱动系统图:16武汉理工大学《汇编语言程序设计》课程设计说明书4.2扬声器发声原理:4.2.1两种方式扬声器出声方式分为两种,位触发方式和定时器发声。位触发方式是直接控制输出端口61H的PB1交替为1或为0,以产生一个脉冲电流,经过放大器后控制扬声器交替地接通与断开,从而推动扬声器的纸盆振动,发出不同音高和音长的声音。另一种方式是利用8253/54定时器来驱动扬声器,这在下面的设计思路里面会有详细的介绍。乐曲构成原理:4.2.2乐曲构成由于把很多发声程序“结合”就构成理论上的曲子,所以利用计算机控制发声的原理,可以编写演奏乐曲的音调

4、。在一首乐曲中,每个音符的音高和音长与频率和节拍有关。组成乐曲的每个音符的频率值和持续时间是乐曲程序发声所需要的两个数据。音符的持续时间是根据乐曲的速度及每个音符的节拍数来确定。在4/4(四四拍)中,四分音符为1拍,每小节4拍,全音符持续4拍,二分音符持续2拍,四分音符持续1拍,八分音符持续半拍等。如果给全音符分配1s(100*10ms)的时间,则二分音符的持续时间为0。5s(50*10ms),四分音符的持续时间为0。25s(25*10ms),八分音符的持续时间为0。125s(12.5*10ms)。4.3设计算法:16武汉理工大学《汇编语

5、言程序设计》课程设计说明书4.3.1音阶表一首乐曲是由不同频率和节拍的音调组成的,因此编写乐曲程序的关键是控制驱动脉冲的频率和持续时间。下面是两个八度的音阶表:音名CDEFGABC音符12345671频率262294330349392440494523音名CDEFGAB音符1234567频率1311471651751962202474.3.2设置频率(持续时间)和延迟时间方案1:利用位触发方式演奏乐曲,,程序须将音符的频率转化为控制脉冲宽度的计数值,原理如下图所示:若音频为freq,则脉冲周期为1/freq,一个半波形(脉宽)所需的时间就

6、为1/(2*freq)秒,用这个时间值来控制输出端口61H的第一位1/0的延迟时间,也就是控制了开关电路所产生脉冲的频率,从而驱动扬声器产生一定频率的音响。1/(2*freq)秒的延迟时间可简单地通过loop指令的循环来取得,16武汉理工大学《汇编语言程序设计》课程设计说明书我们知道2801次loop指令循环执行的时间是10ms,所以1秒钟时间约执行2801*100次loop指令。1/(2*freq)=(2801*100)/(2*freq)=(2801*50)/freq位触发方式发生程序段模式如下:inal,61hmovah,alanda

7、l,11111100b;关断定时器通道2的门控sound:xoral,2;触发61h端口第1位out61h,almovcx,dx;(dx)=控制脉宽的计数值wait:loopwait;延时循环decbx;(bx)=脉冲持续的时间jnzsoundmoval,ahout61h,al;恢复61h窗口乐曲中的节拍决定了个音频持续的时间,如二分音符为2拍,持续时间取0.5秒,(50*10ms),我们就把10ms的倍数50作为2拍的计数值,同理,1拍的计数值是25,1/2的计数值是12……。这样,按照一首乐曲的曲谱将各音符的频率和节拍计数值定义为两个

8、数据表,作为程序控制发声的数据。对于位触发式的发声方法,还需将节拍计数值再扩大6-10倍:movax,8mulbxmovbx,ax;(bx)=扩大8倍的节拍计数值方案2:利用定时器发声。这里是

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。