收藏 分销(赏)

音乐演奏汇编语言程序设计.pdf

上传人:快乐****生活 文档编号:4755535 上传时间:2024-10-12 格式:PDF 页数:17 大小:234.24KB
下载 相关 举报
音乐演奏汇编语言程序设计.pdf_第1页
第1页 / 共17页
音乐演奏汇编语言程序设计.pdf_第2页
第2页 / 共17页
点击查看更多>>
资源描述
目录音乐演奏汇编语言程序设计音乐演奏汇编语言程序设计.1前言前言.11 总体方案论证总体方案论证.11.1 功能分析.11.2 方案设计说明.21.2.1 音乐的代码化.21.2.2 音乐演奏的硬件配合.21.2.3 音乐演奏的软件设计.22.程序流程图设计及其说明程序流程图设计及其说明.32.1 主流程图说明.32.2 音乐播放流程图说明.32.3 字符输入及执行操作流程图说明.33.软件设计关键问题或程序段落的说明软件设计关键问题或程序段落的说明.63.1 字符串显示程序.63.2 数据段与外观设计程序.63.3 音乐演奏.84.程序调试说明、结果记录及分析程序调试说明、结果记录及分析.85.课程设计收获及心得体会课程设计收获及心得体会.10参考文献参考文献.11附录附录.12源程序代码.12武汉理工大学微机原理与接口技术课程设计说明书1音乐演奏汇编语言程序设计前言随着科技的高速发展,计算机已经经过了好几代的更新,然而计算机的运行的基本原理依然没有改变的。而今,我们通过一个学期的学习,已经初步了解了计算机的基本结构和原理,并且已经学会了用汇编语言进行基本的程序编写。而本次课程设计的主要目的就是巩固所学过的知识,用汇编语言熟练地运用三大结构,进一步掌握一些指令的功能、掌握子程序的定义及调用和 INT 21H、INT10H 中断的使用,同时熟练运用通用寄存器和堆栈来进行编写一个完整的具有某种特定功能的程序。在本次课程设计中,考察了我们编程的技巧、运用 Debug 动态调试工具进行程序的调试的能力。同时,本道设计题目还检查了学生对汇编语言这门课程的基本知识的掌握程度。只有掌握汇编语言基本编程方法,掌握程序各部分功能及其相互联系、相互作用,并要熟悉基本的音乐知识,才能独立的把程序写出来,才能把程序写好。1 总体方案论证1.1 功能分析在此次设计中,第一个重点就是音乐播放的控制,要想能按照正常的频率和节拍播放出音乐,就需要合理的设计出给蜂鸣器的频率值和播放的时间。这样就能比较准确的把音乐按一定的节奏播放出来。如果我们要想加快播放速度,我们可以改变每一节拍的播放时间,如果我们改变了播放的频率值,那么歌曲也就相应的改变了。第二个重点就是我们要能够根据键盘上输入的数据,合理的做出相应的应答操作,特别是在演奏过程中,我们还要求实时的检测键盘是否有输入,同时还要不能影响音乐播放的效果,并且由于我们对于键盘的输入并非是外部中断,因此实时的扫描键盘同时播放音乐的实现有一定的难度。武汉理工大学微机原理与接口技术课程设计说明书21.2 方案设计说明我们根据上面的功能分析,同时通过查阅相关资料,了解了计算机的内部结构的同时还清楚的理解了 DOS 中的 21H 和 10H 中断的调用,因此我们设计出如下方案:1.2.1 音乐的代码化我们首先收集了 2 首简单的歌曲,同时还带有相应的音谱,通过查阅相关的音乐资料,了解了节拍的概念和各音符所对应的频率,而后我们把每一首歌曲都转化成两个数据段,一个是把各个音符翻译成相应的频率值,第二是把相应的节拍转化成对应的时间值,来控制播放每一个音符所对应的时间。这样我们在播放歌曲时,同时调用频率值和时间值就可以把相应的歌曲播放出来了。1.2.2 音乐演奏的硬件配合我们了解到在计算机的主板上有 8253、8255 和蜂鸣器,同时了解到蜂鸣器的驱动是通过 8255 和 8253 共同控制的,我们通过对 8253 的通道 2 进行写数据来控制蜂鸣器的声音频率,再通过 8255 来控制播放时间的长短,就通过这样的巧妙配合来达到播放完整音乐的效果。1.2.3 音乐演奏的软件设计软件设计是本设计的重点,在软件设计中,我们要给 8253 和 8255 写数据,同时还要检测键盘输入的值,并根据输入的值,执行相应的代码来控制音乐的播放。首先我们在一开始先显示音乐菜单,然后调用 DOS 中 21H 的 07 中断来接收键盘上的数据,在此过程中,程序在等待中,直到键盘上有键按下,程序才进行相应的操作。当键盘输入一个值后,我们首先判断输入的值是否为“e”,如果是,那就退出程序,如果不是,我们再检测输入的数是否在 1-2 之间,如果是,那就调用相应的播放音乐的程序,否则无动作。在音乐播放中,我们要实时地扫描键盘是否有值输入,如果用 DOS 中 21H 的 01 中断肯定是不行的,因为执行这个中断程序会等待,无法继续播放音乐。因此我们采用中武汉理工大学微机原理与接口技术课程设计说明书3断 21H 中的 0bH,这个中断不会等待,只会检查标准输入设备上是否有字符可读。然后我们通过检测 AL 中的值是否为 0FFH,来判断键盘是否有值输入。如果键盘上有键输入,那么 AL 中会返回一个 0FFH 的值,否则就会返回 00H。如果有,我们再判断这个输入的值是否为“p”,如果是,我们就停止音乐的播放,否则继续播放音乐,由于程序运行非常快,这样我们就不会感觉到音乐有停顿现象。实现和音乐演奏的同时实时扫描键盘的功能。当音乐开始播放后,若不输入任何指令,则该歌曲一直循环下去。在音乐暂停后,按“c”值继续音乐播放,按“e”值退出,按“1”或“2”切歌。然后我们调用 DOS 中 21H 的 07 中断来接收键盘上的数据,在此过程中,程序在等待中,直到键盘上有键按下,然后我们按输入的数进行相应的操作。2.程序流程图设计及其说明在此次设计中,我们包括了三个流程图,一个主流程图和两个子流程图,具体如下所示:2.1 主流程图说明在主流程图的设计中,我们首先显示输入提示,然后从键盘中输入一个字符,如果那个字符不是 1、2 或者 e,那么就继续等待,否则就要做一些操作了。如果这个是“e”,那么就结束程序,如果在 1-2 之间,那么就调用音乐播放程序。2.2 音乐播放流程图说明在音乐播放流程图中,我们设计执行播放相应的歌曲的操作,同时实时的检测键盘的输入。如果键盘有输入,就调用字符输入及执行操作程序。否则就继续播放歌曲。2.3 字符输入及执行操作流程图说明在这个流程图中,我们设计了它具有输入字符同时检测的功能。如果我们检测到输入的字符不是“p”,那么就重新返回到音乐播放流程图中,继续播放音乐,否则就暂停播放音乐。同时等待字符再输入。如果输入的字符是“c”,那么就继续播放歌曲,如果输武汉理工大学微机原理与接口技术课程设计说明书4入的字符是“e”,那么就退出程序。图音乐播放流程图图主流程图 开始显示歌曲菜单提示输入选择判断输入的数是否为 e结束是否判断输入的数是否在 12 之间调用播放歌曲程序否是播放相应歌曲调用 DOS 中断扫描键盘缓冲区判断是否有键输入调用键值输入和执行操作程序判断是否播放完循环播放该歌曲是否否是调用播放歌曲程序暂停播放音乐显示提示输入判断输入的值是否为 C 或 c调用播放歌曲程序判断输入的值是否为 E 或 e返回主程序,显示音乐菜单,提示输入是是否否是图 字符输入及执行操作流程图武汉理工大学微机原理与接口技术课程设计说明书5判断输入值是否为 p否接受键盘缓冲区里的键值暂停播放音乐是调用播放歌曲程序等待按键输入判断输入的值是否为 c是调用播放歌曲程序判断输入的值是否为 e否否是图字符输入及执行操作流程图结束武汉理工大学微机原理与接口技术课程设计说明书63.软件设计关键问题或程序段落的说明3.1 字符串显示程序disp macro message ;用来调用显示字符串的宏mov dx,offset messagemov ah,9int 21hendm在这个宏定义中我们调用了一个 DOS 中 21H 的 09H 中断,此中段的功能是在屏幕上显示一串字符。3.2 数据段与外观设计程序stack segment para stack stack db 100 dup(0)stack endsdata segmentmenu1 db*songs menu*,0ah,0dh,$menu2 db*1.merry *,0ah,0dh,$menu3 db*2.star *,0ah,0dh,$menu4 db*,0ah,0dh,$menu5 db p:pause c:continue e:exit,0ah,0dh,$designers db designed by tanwenan renzhipeng linjian,0ah,0dh,$school db WHUT Electrical engineering and automation 1105,0ah,0dh,$merry_frequency dw 330,294,262,294,330,330,330,294,294,294,330,392,392 dw 330,294,262,294,330,330,330,330,294,294,330,294,262,0merry_time dw 10000,10000,10000,10000,10000,10000,50*400,10000,10000,20000,10000,10000,20000dw 10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,40000star_frequency dw 262,262,392,392,440,440,392,349,349,330,330,294,294,262 dw 2 dup(392,392,349,349,330,330,294)dw 262,262,392,392,440,440,392,349,349,330,330,294,294,262,0star_time dw 3 dup(6 dup(25*400),50*400,6 dup(25*400),50*400)data endscode segment assume cs:code,ds:data,ss:stackstartmain:mov ax,data mov ds,ax武汉理工大学微机原理与接口技术课程设计说明书7 mov ax,3 ;bios 0 号调用,设置为 80*25 彩色 int 10h mov al,0 ;bios 6 号调用,清屏 mov ah,6 int 10h mov dx,0819h ;bios 2 号调用,设置光标位置 mov ah,2 int 10h disp menu1 ;显示菜单 mov dx,0919h mov ah,2 int 10h disp menu2 mov dx,0a19h mov ah,2 int 10h disp menu3 mov dx,0b19h mov ah,2 int 10h disp menu4 mov dx,0c19h mov ah,2 int 10h disp menu5 mov dx,0d15h mov ah,2 int 10h mov ah,09 ;bios 9 号调用,设置颜色为红色 mov bl,0ch mov cx,39 int 10h disp designers mov dx,0e11h mov ah,2 int 10h mov ah,09 mov bl,0ch mov cx,47 int 10h disp school武汉理工大学微机原理与接口技术课程设计说明书83.3 音乐演奏Moval,0b6h;向计数器写 控制字Out43h,al ;方式 3、双字节写和二进制计数方式写到控制口Movdx,12h ;设置被除数Movax,3280hDivdi ;其商 ax 为预置值Out42h,al ;先送 LSBMoval,ahOut42h,al;后送 MSBInal,61h ;读端口原值Mov ah,alOral,3Out61h,al ;接通扬声器Waitf1:mov cx,100 ;扬声器开通时间,即为节拍delay1:Loopdelay1在此程序段中,我们首先对 8253 进行设置,设置成方式 3、双字节和二进制计数方式。然后对 8253 写入定时数值,使得其输出一定的频率。然后对 8255 写入数据,控制蜂鸣器的响时间的长短,来达到播放一首歌的目的。4.程序调试说明、结果记录及分析在调试的过程中,通过听取了老师的建议,我们小组在查找资料后,通过讨论在原有的程序上面增加了外观设计,最终显示结果如下图:武汉理工大学微机原理与接口技术课程设计说明书9图 4 程序运行图当输入“1”时,名为“merry”的音乐开始响起,当按下“p”时,音乐停止播放。此时若键入“c”,继续播放暂停的音乐;若输入“e”则退出程序。武汉理工大学微机原理与接口技术课程设计说明书105.课程设计收获及心得体会本次课程设计采用小组设计的方式,本小组三位同学的任务分工如下:XXX主要负责主要功能程序设计与调试以及 PPT 的制作。XXX主要负责外观程序设计和课程设计说明书的完成。XXX主要负责音乐代码搜集和课程设计说明书的完成。通过此次课程设计的上机与理论学习,我们小组成员均感受颇深。此次课程设计让我们了解到编写程序的复杂性,最起码了解到编写程序时必需要很细心。为了编写程序方便,所以需要分块分功能实现,对于这一点,我们通过画流程图就能很好地解决问题。同时也了解到上机操作实践的重要,这样有助于书本知识的系统化,现实化,更有利于自己的查漏补缺。书本上的知识是死的,能够在现实中运用的知识才是活的。再者,通过这次课程设计,也促进了我们的同学之间互相学习,通过编写程序,增加了学习的积极性和趣味性。通过课程实践,巩固加深对课堂教学内容的理解,提高学生运用汇编语言进行程序设计和动态调试程序的能力,培养同学克服困难的毅力和精神,提高学生综合解决问题的能力。武汉理工大学微机原理与接口技术课程设计说明书11参考文献1温冬蝉,沈美明.IBM PC 汇编程序设计.北京:清华大学出版社,2002.32齐志儒,高福祥.汇编语言程序设计.北京:清华大学出版社,2001.13龚尚福.微型计算机汇编语言程序设计.西安:西安电子科技大学出版社,2003.74朱玉龙,任文岚.汇编语言程序设计.北京:清华大学出版社,2003.85周佩玲.微机原理与接口技术.北京:电子工业出版社,2007.6武汉理工大学微机原理与接口技术课程设计说明书12附录源程序代码disp macro message ;用来调用显示字符串的宏 mov dx,offset message mov ah,9 int 21h endmstack segment para stack stack db 100 dup(0)stack endsdata segmentmenu1 db*songs menu*,0ah,0dh,$menu2 db*1.merry *,0ah,0dh,$menu3 db*2.star *,0ah,0dh,$menu4 db*,0ah,0dh,$menu5 db p:pause c:continue e:exit,0ah,0dh,$designers db designed by XXX XXX XXX,0ah,0dh,$school db WHUT Electrical engineering and automation 1105,0ah,0dh,$merry_frequency dw 330,294,262,294,330,330,330,294,294,294,330,392,392 dw 330,294,262,294,330,330,330,330,294,294,330,294,262,0 merry_time dw 10000,10000,10000,10000,10000,10000,50*400,10000,10000,20000,10000,10000,20000dw 10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,40000star_frequency dw 262,262,392,392,440,440,392,349,349,330,330,294,294,262 dw 2 dup(392,392,349,349,330,330,294)dw 262,262,392,392,440,440,392,349,349,330,330,294,294,262,0star_time dw 3 dup(6 dup(25*400),50*400,6 dup(25*400),50*400)data endscode segment assume cs:code,ds:data,ss:stackstartmain:mov ax,data mov ds,ax mov ax,3 ;bios 0 号调用,设置为 80*25 彩色 int 10h mov al,0 ;bios 6 号调用,清屏 mov ah,6 int 10h武汉理工大学微机原理与接口技术课程设计说明书13 mov dx,0819h ;bios 2 号调用,设置光标位置 mov ah,2 int 10h disp menu1 ;显示菜单 mov dx,0919h mov ah,2 int 10h disp menu2 mov dx,0a19h mov ah,2 int 10h disp menu3 mov dx,0b19h mov ah,2 int 10h disp menu4 mov dx,0c19h mov ah,2 int 10h disp menu5 mov dx,0d15h mov ah,2 int 10h mov ah,09 ;bios 9 号调用,设置颜色为红色 mov bl,0ch mov cx,39 int 10h disp designers mov dx,0e11h mov ah,2 int 10h mov ah,09 mov bl,0ch mov cx,47 int 10h disp schoolreturn:mov ah,07h ;等待按键选择 int 21h cmp al,1 ;选择歌曲 1 jz music1 cmp al,2 ;选择歌曲 2 jz music2 cmp al,e ;退出武汉理工大学微机原理与接口技术课程设计说明书14 jz exit jnz returnmusic1:lea si,merry_frequency ;取歌曲 1 音符 lea bp,merry_time ;取歌曲 2 节拍again1:mov di,si cmp di,0 ;0 用于判断是否结束歌曲 je music1 mov bx,bp call speaker ;调用音乐发声子程序 add si,2 ;取下一个音符 add bp,2 ;取下一个节拍 mov ah,0bh ;扫描键盘,用 0bh,不用停止歌曲播放的扫描 int 21h cmp al,0ffh ;有按键,调到暂停处理程序 jz key1 jmp again1 ;没有按键,继续播放exit:jmp game_overmusic2:lea si,star_frequency;歌曲 2 的处理与歌曲 1 的一样 lea bp,star_timeagain2:mov di,si cmp di,0 je music2 mov bx,bp call speaker add si,2 add bp,2 mov ah,0bh int 21h cmp al,0ffh jz key2 jmp again2key1:mov ah,07h int 21h cmp al,p ;按键为 p,暂停 jz pause1 jnz again1pause1:mov ah,07h ;利用 dos 的 07h 调用等待按键来暂停歌曲 int 21h cmp al,e ;按键为 e,退出 jz game_over cmp al,c ;按键为 c,继续 jz again1 cmp al,2 ;按键为 2,切歌切到 2武汉理工大学微机原理与接口技术课程设计说明书15 jz music2 jnz pause1 key2:mov ah,07h int 21h cmp al,p jz pause2 jnz again2pause2:mov ah,07h int 21h cmp al,e jz game_over cmp al,1 jz music1 cmp al,c jz again2 jnz pause2game_over:mov ah,4ch int 21h ;*音乐处理子程序*speaker proc push ax ;保护现场 push bxpush cxpush dxpush dimov al,0b6h ;向计数器写控制字 out 43h,al ;方式 3、双字节写和二进制计数方式写到控制口mov dx,12h ;设置被除数 mov ax,3280hdiv di ;其商 ax 为预置值out 42h,al ;先送 LSBmov al,ah out 42h,al ;后送 MSBin al,61h ;读端口原值 mov ah,al or al,03hout 61h,al ;接通扬声器 wait1:mov cx,100 ;扬声器开通时间,即为节拍 delay1:loop delay1dec bxjnz wait1 mov al,ah ;写回 61h 端口值,关闭扬声器 out 61h,al 武汉理工大学微机原理与接口技术课程设计说明书16pop di ;恢复现场pop dxpop cxpop bxpop axretspeaker endpcode endsend startmain
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服