《流行音乐乐曲演奏程序》由会员分享,可在线阅读,更多相关《流行音乐乐曲演奏程序(19页珍藏版)》请在金锄头文库上搜索。
1、汇编语言程序设计课程设计说明书第 1 页 共 19 页流行音乐乐曲演奏程序一、 需求说明1、 通过一个较大型实用程序的设计与实现,综合运用所学知识,加深理解和掌握。同时培养学生分析问题和解决问题的能力,以及自学能力。2、 编写用键盘选择计算机演奏歌曲的程序,歌曲清单至少包括 3 首;3、 程序应该有操作提示、输入和输出,界面追求友好,最好是菜单式的界面;4、 设计若干用例(测试数据) ,上机测试程序并分析所设计的程序; 二、 设计说明1、简要分析为了编写一个流行音乐乐曲演奏程序,分析时按照课程设计的要求必须要有操作提示、输入和输出。在界面设计时应该追求友好,能够使用户便于使用该程序。而且按照课
2、题要求最好能够实现菜单式的界面,进一步提高该程序界面的友好性。同时,在设计分析时也必须解决发声问题。分析设计时按照课本 P383(10.4 通用发声程序)所示的设计方法解决发声问题。2、 概要分析2.1 用户界面以下是显示音乐菜单的字符串msgmenu db* ,0dh,0ahdb*The pop music menu is that: * ,0dh,0ahdb* * ,0dh,0ahdb*1:dahai * ,0dh,0ah ;张宇生大海db*2:dongfengpo * ,0dh,0ah;周杰伦东风破db*3:dashetou * ,0dh,0ah;吴克群大舌头db* ,0dh,0ah,$
3、2.2 模块定义、原理2.2.2 提示选择乐曲msgchoose db 0dh,0ah,Input the number(13) to choose the music you want,input:,$汇编语言程序设计课程设计说明书第 2 页 共 19 页在出现菜单时,同时出现选择乐曲模块,帮助用户认识菜单和操作菜单的方法。2.2.2 提示音乐播放msgdoingdb 0dh,0ah,0dh,0ahdb 0dh,0ah, Now,playing the pop music which you chose!Please enjoying.db 0dh,0ah,0dh,0ah,$在用户选择所选音
4、乐,程序演奏音乐时,同时显示以上程序段,提示用户系统已经在演奏所选流行歌曲。2.2.3 提示输入字符错误msgerror db 0dh,0ah,0dh,0ah,0dh,0ah,! sorry, you input a wrong number!,0dh,0ahdb please try to choose from 1 to 3 again!,input:,$如果出现用户输入字符不符合程序定义的字符串时,程序显示以上模块段,提示用户操作错误,同时程序转回菜单,提示用户重新操作。2.2.4 乐曲频率表和节拍表以下节选大舌头流行乐曲的频率表和节拍表,其余乐曲见源程序段。freq_dashetou
5、dw 524,524,524,524,494,524,588,524 ;频率表dw 524,524,524,524,494,524,494,392dw 524,524,524,524,494,524,588,524dw 330,330,294,294,262,330,300,262dw 524,524,524,524,494,524,588,524dw 524,524,524,524,494,524,494,392dw 524,524,524,524,494,524,588,524dw 330,330,294,294,262,330,300,262 dw -1 time_dashetou dw
6、 500,500,500,500,1000,500,500,500 ;节拍表dw 500,500,500,500,1000,500,500,500dw 500,500,500,500,1000,500,500,500汇编语言程序设计课程设计说明书第 3 页 共 19 页dw 500,500,500,250,250,500,500,1000dw 500,500,500,500,1000,500,500,500dw 500,500,500,500,1000,500,500,500dw 500,500,500,500,1000,500,500,500dw 500,500,500,250,250,50
7、0,500,10002.2.5 乐曲处理模块以下节选第一乐曲的处理模块,其余乐曲可见源程序。music1:dispmsg msgdoing ;music1 处理程序段mov si,offset freq_dahaimov di,offset time_dahaim1: mov cx,sicmp cx,-1 ;-1 用于判断是否结束歌曲je nextmov bx,dicall gensoundadd si,2 ;取下一频率值add di,2 ;取下一节拍值jmp m12.2.6 音乐处理模块gensound proc nearpush dxmov al,0b6h ; 向计数器写控制数out 43
8、h,al ; 方式 3、双字节写和二进制计数方式写到控制口mov dx,08h ; 设置被除数mov ax,3208hdiv cx ; 其商为预置值out 42h,al ; 先送 LSBmov al,ah 汇编语言程序设计课程设计说明书第 4 页 共 19 页out 42h,al ; 后送 MSBin al,61h ; 读端口原值mov ah,alor al,3out 61h,al ; 接通扬声器l2: push ush axmov dx,8hmov ax,0f05hs1: sub ax,1sbb dx,0jnz s1pop axpop dxdec bxjnz l2mov al,ah ; 写回
9、 61h 端口值,关闭扬声器out 61h,alpop dxretgensound endpgensound 程序能产生 1965535Hz 的声音,这个频率的下限 19Hz 是使除法不产生溢出的最小的 DI 值。其上限实际上是多余的,因为人们最高能够听到的音频约为20000Hz。2.2.7 音符的频率表1234567低音131147165175196220247中音262294330349392220494高音524588660698784880984汇编语言程序设计课程设计说明书第 5 页 共 19 页13?2.3 数据流图流行乐曲程序演示流程图YNNY三、 详细的算法描述3.1 主程序表
10、述 code segment assume cs:code,ds:data begin:mov ax,datamov ds,ax next: dispmsg msgmenu初始化键盘输入结束符?结束菜单选择调用 GENSOUNDDI频率表 BX节拍表汇编语言程序设计课程设计说明书第 6 页 共 19 页dispmsg msgchoose;提示菜单及输入数字inputbegin:mov ah,01h int 21hcmp al,q ;输入 q 则退出je exitcmp al,1 ;比较数字4?ja doagainand ax,000fh;将 ASCII 码转换成数字,以便后面指向 table
11、表里对应的地址dec ax ;减 1,对应地址shl ax,1 ;相当于 ax*2,因为 table 里的相邻偏移地址是 2mov bx,axjmp tablebx ;间接转移:IPto choose the music you want,input:,$;提示输入字符错误msgerror db 0dh,0ah,0dh,0ah,0dh,0ah,! sorry, you input a wrong number!,0dh,0ahdb please try to choose from 1 to 3 again!,input:,$;以下是显示音乐菜单的字符串msgmenu db* ,0dh,0ah
12、db*The pop music menu is that: * ,0dh,0ahdb* * ,0dh,0ahdb*1:dahai * ,0dh,0ah ;张宇生大海db*2:dongfengpo * ,0dh,0ah ;周杰伦东风破db*3:dashetou * ,0dh,0ah ;吴克群大舌头db* ,0dh,0ah,$;以下对应为各乐曲的频率表和节拍时间表freq_dahai dw 196,220dw 262,262,262,262,262,220,196dw 262,262,262,262,294,262,220,262dw 294,294,294,294,294,262,220dw
13、294,294,294,294,330,294,330,392dw 440,440,392,440,392,330dw 294,294,330,294,262,220,196,220dw 262,262,262,262,262,220dw 262,196,220汇编语言程序设计课程设计说明书第 10 页 共 19 页dw 440,440,392,440,524,440dw 392,330,294,262,220,196,220dw 262,262,262,262,294,262dw 262,330,392dw 440,440,440,440,524,440dw 392,392,392,440,
14、392,330,294dw 262,262,262,262,294dw 330,330,294dw 262,262,262,262,524,440dw 392,392,392,440,392,330,392dw 440,524,524,440,392dw 392,330,392dw 440,440,440,440,524,440dw 392,392,392,440,392,330,294dw 262,262,262,262,392dw 330,330,294dw 262,262,262,262,294,330dw 392,392,330,392,330,392dw 440dw 9,9,196,660,294,294,262dw 262,-1 ;最后一个以“1”控制结束