




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
信息科学与技术学院微机原理与接口技术课程设计报告题目名称: 音乐点歌 学生姓名: 11 学 号: 111 专业年级: 111 指导教师: 111 时 间:2111 一 概述 汇编语言是计算机能够提供给用户使用的最快而有效的语言,也是能够利用计算机所有特性并能直接控制硬件的唯一语言。借助于汇编程序,计算机本身可以自动地把 汇编源程序翻译成用机器语言表示的目的程序,从而实现了程序设计工作的部分自动化。1课程设计的目的掌握一些程序设计的基本方法,要指导主程序,子程序以及推栈段的使用,.了解通用发声程序了解与掌握定时.计数.音乐.频率.时间之间的关系,学会用发声程序的设计方法,学会用汇编语言编辑音乐程序2课程设计的要求:1 其中可选五首以上歌曲。2 可以选速度 3 选音调(AG调;每音调之间大约相差1.12倍,既C调比D调的频率高1.12倍)4 任意暂停5 界面修饰。二 总体方案设计2.1主程序流程图: 开始 输入字符 判断是否为4 Y N 判断是否为1 结束 Y N 判断是否为2调用宏ADDRESS选择速度,频率 Y Music子程序调用宏ADDRESS选择速度,频率 Music子程序图1 主程序流程图2.2Music子程序流程图:DI= -1返回DOS界面并重新输入字符GENSOUND子程序取下一频率值和下一时间值开始结束 图2 Music子程序流程图2.3发声原理图:图3 发声原理图发声原理:计算机有两种产生声音的方法,一种方法是通过I/O指令向设备寄存器(端口地址为61H)的第1位交替送1和0,使与第1位相连的扬声器脉冲门产生连续的脉冲电流,驱动扬声器发出声音。另一种方法是利用8254(系统定时器)中的2号定时器向扬声器发送不同频率的脉冲,使之产生音调高低不同的声音,这种产生声音的方法可使计算机演奏出各种乐曲。本程序选用定时器产生声音。ROM BIOS中的BEEP子程序能根据BL中给出的时间计数值控制8254定时器,产生持续时间为1个或几个0.5秒、频率为896HZ的声音。通过对BEEP的修改,可以使其产生任一频率的声音。用汇编语言编写的程序GENSOUND,能使PC机发出指定频率和指定延迟时间的声音,它是一个很好的通用发声程序。组成乐曲的每个音符的频率值和持续时间是乐曲发声程序所必须的两组数据,知道了音调及频率的关系后,就可以按照乐曲的乐谱将每个音符的频率和持续时间定义成两个数据表,然后编程依次取出表中的频率值和时间值,调用GENSOUND程序发出各种声音。但GENSOUND程序产生的声音不仅与输入频率有关,而且与CPU有关。如果80X86的工作频率为8MHZ(如IBM PS/ 2-25型),则T=125ns(1 /8MHz=125ns),那么上面程序产生的时间延迟就要短的多。在80286中,LOOP指令只需8个执行周期,而不是17个执行周期,这也会使延迟时间缩短很多。因此,从PC/ AT开始,对所有的80286,80386,80486和Intel Pentium计算机,IBM都提供一种利用硬件产生时间延迟的方法,这种方法不仅与频率无关,也与CPU无关。方法是通过监控端口61H的PB4,使PB4每15.08us触发一次,以产生一个固定不变的时间基准。在IBM PC AT BIOS中的WAITF子程序,就是一个产生N15.08us时间延迟的程序。调用WAITF子程序时,CX寄存器必须装入15.08us的倍数N。利用WAITF子程序能获得任意的延迟时间,而再不必考虑CPU的型号和工作频率。依此原理可以进一步修改通用发声程序GENSOUND,使其不再依赖CPU的工作频率。GENSOUND程序中的10ms延迟时间是通过执行循环指令来获得的,现在可以用WAITF子程序来取代它,计数值设置为663(10ms/ 15.08us=663)。本系统将修改后的通用子程序改名为SOUNDF,延迟时间表仍为10ms。(二)编曲原理利用计算机控制发声的原理,可以编写演奏乐曲的程序。乐曲是按照一定的高低、长短和强弱关系组成的音调。在一首乐曲中,每个音符的音高和音长与频率和节拍有关。组成乐曲的每个音符的频率值和持续时间是乐曲程序发声所需要的两个数据。对于频率值,用WaveCN中的信号发生器输出262HZ、294HZ、 330HZ、 349HZ、392HZ、440HZ、494HZ、523HZ的信号相当于C调的dou,ruai,mi,fa,sou,la,si,dou。而音符的持续时间是根据乐曲的速度及每个音符的节拍数来确定的。在4/4(四四拍)中,四分音符为1拍,每小节4拍,全音符持续4拍,二分音符持续2拍,四分音符持续1拍。八分音符持续半拍等。如果给全音符分配1s(10010ms)的时间,则二分音符的持续时间为0.5s(5010ms),四分音符的持续时间为0.25s(2510ms),八分音符的持续时间为0.125(12.510ms)。知道音调与频率和时间的关系,就可以按照乐曲的曲谱将每个音符的频率和持续时间定义成两个数据表,然后编写程序依次取出表中的频率值和时间值,调用SOUNDF程序发出各种声音。这次课程设计的设计思想是在熟练掌握汇编程序的设计方法的基础上,利用通用发生程序编写音乐程序组成音乐的每个音符的频率值和持续时间是音乐程序发声所需要的两个数据,根据音调与频率和时间之间的关系,把要编辑的音乐的每个音符的频率和持续时间定义成两个数据表,进而把它们写入通用发声程序,音乐程序就完成。在编制此音乐演奏程序时,应该知道ROM BIOS 中有个BEEP子程序,这能根据BL中组出的时间计数值控制8254定时器,产生持续时间为1个或几个0.5秒,频率为896HZ的声音,我们可以利用并修改BEEP,使其产生任一频率的声音。首先要了解计算机是如何产生声音和乐曲的。找出相关程序源代码,弄清楚各功能的环节间的联系、联接方法,搞清楚单调与频率和时间的关系,利用计算机控制发声的原理,依照基本的算法思想写程序,测试,更正,扩充功能,修饰细节。本次设计在具体设计过程中的整体设计思路如下:该程序主要分成1根据音阶表和简谱为演奏的乐曲定义一个频率表mus_freq和一个时间表mus_time。2分别将两个表的偏移地址放入SI和BP。lea si, mus_freqlea bp, ds:mus_time3从表中取出音符的频率放入DI,取出音符的持续时间(实际上是10ms的倍数)放入BX。mov di, simov bx, ds:bp频率表中最后一个数据-1作为乐曲的结束符,也可用其他的特殊值来代替。发声原理计算机有两种产生声音的方法,一种方法是通过I/O指令向设备寄存器(端口地址为61H)的第1位交替送1和0,使与第1位相连的扬声器脉冲门产生连续的脉冲电流,驱动扬声器发出声音。另一种方法是利用8254(系统定时器)中的2号定时器向扬声器发送不同频率的脉冲,使之产生音调高低不同的声音,这种产生声音的方法可使计算机演奏出各种乐曲。本程序选用定时器产生声音。ROM BIOS中的BEEP子程序能根据BL中给出的时间计数值控制8254定时器,产生持续时间为1个或几个0.5秒、频率为896HZ的声音。通过对BEEP的修改,可以使其产生任一频率的声音。用汇编语言编写的程序GENSOUND,能使PC机发出指定频率和指定延迟时间的声音,它是一个很好的通用发声程序。组成乐曲的每个音符的频率值和持续时间是乐曲发声程序所必须的两组数据,知道了音调及频率的关系后,就可以按照乐曲的乐谱将每个音符的频率和持续时间定义成两个数据表,然后编程依次取出表中的频率值和时间值,调用GENSOUND程序发出各种声音。但GENSOUND程序产生的声音不仅与输入频率有关,而且与CPU有关。如果80X86的工作频率为8MHZ(如IBM PS/ 2-25型),则T=125ns(1 /8MHz=125ns),那么上面程序产生的时间延迟就要短的多。在80286中,LOOP指令只需8个执行周期,而不是17个执行周期,这也会使延迟时间缩短很多。因此,从PC/ AT开始,对所有的80286,80386,80486和Intel Pentium计算机,IBM都提供一种利用硬件产生时间延迟的方法,这种方法不仅与频率无关,也与CPU无关。方法是通过监控端口61H的PB4,使PB4每15.08us触发一次,以产生一个固定不变的时间基准。在IBM PC AT BIOS中的WAITF子程序,就是一个产生N15.08us时间延迟的程序。调用WAITF子程序时,CX寄存器必须装入15.08us的倍数N。利用WAITF子程序能获得任意的延迟时间,而再不必考虑CPU的型号和工作频率。依此原理可以进一步修改通用发声程序GENSOUND,使其不再依赖CPU的工作频率。GENSOUND程序中的10ms延迟时间是通过执行循环指令来获得的,现在可以用WAITF子程序来取代它,计数值设置为663(10ms/ 15.08us=663)。本系统将修改后的通用子程序改名为SOUNDF,延迟时间表仍为10ms。(二)编曲原理利用计算机控制发声的原理,可以编写演奏乐曲的程序。乐曲是按照一定的高低、长短和强弱关系组成的音调。在一首乐曲中,每个音符的音高和音长与频率和节拍有关。组成乐曲的每个音符的频率值和持续时间是乐曲程序发声所需要的两个数据。对于频率值,用WaveCN中的信号发生器输出262HZ、294HZ、 330HZ、 349HZ、392HZ、440HZ、494HZ、523HZ的信号相当于C调的dou,ruai,mi,fa,sou,la,si,dou。而音符的持续时间是根据乐曲的速度及每个音符的节拍数来确定的。在4/4(四四拍)中,四分音符为1拍,每小节4拍,全音符持续4拍,二分音符持续2拍,四分音符持续1拍。八分音符持续半拍等。如果给全音符分配1s(10010ms)的时间,则二分音符的持续时间为0.5s(5010ms),四分音符的持续时间为0.25s(2510ms),八分音符的持续时间为0.125(12.510ms)。知道音调与频率和时间的关系,就可以按照乐曲的曲谱将每个音符的频率和持续时间定义成两个数据表,然后编写程序依次取出表中的频率值和时间值,调用SOUNDF程序发出各种声音。5系统的主要功能:给用户提供5首已经写好的短曲,根据用户的选择演奏乐曲,演奏完一首乐曲后跳回起始状态,如此循环,直到用户输入结束的信息为止。源程序:;* STACK SEGMENT PARA STACK STACK DB 64 DUP(STACK.) STACK ENDS;* DSEG SEGMENT PARA DATAMESS1 DB 50 DUP( ),Now the music is ,13,10,$ MESS2 DB 50 DUP( ),Now the music is ,13,10,$ MESS3 DB 50 DUP( ),Now the music is ,13,10,$ MESS4 DB 50 DUP( ),please input the speed (s/q),13,10,$ MESS5 DB 50 DUP( ),please input the yiliang (h/m/l),13,10,$ MENU DB 5 DUP(13,10) DB 5 DUP( ),*,13,10 DB 5 DUP( ),*1:Happy birthday to you; *,13,10 DB 5 DUP( ),*2:Mary had a little lamb; *,13,10 DB 5 DUP( ),*4:Exit; *,13,10 DB 5 DUP( ),*,13,10 DB 5 DUP( ),please chioce the number of music:,$,13,10 change DB 125 DUP( ),error! please change anther NO.: ,$ MUS_FREG_l dw 262/2,262/2,294/2,262/2,349/2,330/2 dw 262/2,262/2,294/2,262/2,392/2,349/2 dw 262/2,262/2,523/2,440/2,349/2,330/2,294/2 dw 466/2,466/2,440/2,262/2,392/2,349/2 dw -1 MUS_FREG_m dw 262,262,294,262,349,330 dw 262,262,294,262,392,349 dw 262,262,523,440,349,330,294 dw 466,466,440,262,392,349 dw -1 MUS_FREG_h dw 262*2,262*2,294*2,262*2,349*2,330*2 dw 262*2,262*2,294*2,262*2,392*2,349*2 dw 262*2,262*2,523*2,440*2,349*2,330*2,294*2 dw 466*2,466*2,440*2,262*2,392*2,349*2 dw -1 MUS_TIME_s dw 50*3/2,50*3/2,100*3/2,100*3/2,100*3/2,200*3/2 dw 50*3/2,50*3/2,100*3/2,100*3/2,100*3/2,200*3/2 dw 50*3/2,50*3/2,100*3/2,100*3/2,100*3/2,100*3/2,300*3/2 dw 50*3/2,50*3/2,100*3/2,100*3/2,100*3/2,200*3/2 MUS_TIME_q dw 50,50,100,100,100,200 dw 50,50,100,100,100,200 dw 50,50,100,100,100,100,300 dw 50,50,100,100,100,200 mus_freg1_l dw 330*4/5,294*4/5,262*4/5,294*4/5,330*4/5,330*4/5,330*4/5 dw 294*4/5,294*4/5,294*4/5,330*4/5,392*4/5,392*4/5 dw 330*4/5,294*4/5,262*4/5,294*4/5,330*4/5,330*4/5,330*4/5,330*4/5 dw 294*4/5,294*4/5,330*4/5,294*4/5,262*4/5 dw -1 mus_freg1_m dw 330,294,262,294,330,330,330 dw 294,294,294,330,392,392 dw 330,294,262,294,330,330,330,330 dw 294,294,330,294,262 dw -1 mus_freg1_h dw 330*2,294*2,262*2,294*2,330*2,330*2,330*2 dw 294*2,294*2,294*2,330*2,392*2,392*2 dw 330*2,294*2,262*2,294*2,330*2,330*2,330*2,330*2 dw 294*2,294*2,330*2,294*2,262*2 dw -1 mus_time1_s dw 6 dup(25),50 dw 2 dup(25,25,50) dw 12 dup(25),100 mus_time1_q dw 6 dup(20),40 dw 2 dup(20,20,40) dw 12 dup(20),80 DSEG ENDS;* CODE SEGMENT PARA DATA assume cs:code,ds:dseg,ss:stack music proc far mov ax,dseg mov ds,ax rotate:LEA DX,MENU mov ah, 9 ;显示 int 21hchg: mov ah,1 ;扫描接收字符 int 21h cmp al,1 je one cmp al,2 je two cmp al,4 je endmus LEA DX,change mov ah,09 int 21h jmp chg ENDMUS: mov ax,4c00h int 21h ONE: lea dx,mess1 mov ah,09 int 21hyindiao:lea dx,mess5mov ah,09int 21hmov ah,01int 21hcmp al,hje one_hcmp al,mje one_mcmp al,lje one_lsudu:lea dx,mess4mov ah,09int 21hmov ah,01int 21hcmp al,sje one_scmp al,qje one_qone_h: LEA SI,mus_FREG_hjmp suduone_m: LEA SI,MUS_FREG_mjmp suduone_l: LEA SI,MUS_FREG_ljmp suduone_s: LEA BP,DS:MUS_TIME_s JMP SOUNDone_q: LEA BP,DS:MUS_TIME_q JMP SOUND two: lea dx,mess2 mov ah,09 int 21hyindiao1:lea dx,mess5mov ah,09int 21hmov ah,01int 21hcmp al,hje two_hcmp al,mje two_mcmp al,lje two_lsudu1:lea dx,mess4mov ah,09int 21hmov ah,01int 21hcmp al,sje two_scmp al,qje two_q two_h: LEA SI,mus_FREG1_hjmp sudu two_m: LEA SI,MUS_FREG1_mjmp sudu two_l: LEA SI,MUS_FREG1_ljmp sudu two_s: LEA BP,DS:MUS_TIME1_s JMP SOUND two_q: LEA BP,DS:MUS_TIME1_q SOUND:freq: mov di,si cmp di,-1 je r mov bx,ds:bp call soundf add si,2 add bp,2 jmp freq r: JMP rotate music endp;*soundf proc near push ax push bx push cx push dx push di mov al,0b6h out 43h,al mov dx,12h mov ax,348ch div di out 42h,al mov al,ah out 42h,al in al,61h mov ah,al or al,3 out 61h,alwait1: mov cx,663 call waitfdelay: loop delay dec bx jnz wait1 mov al,ah out 61h,al pop di pop dx pop cx pop bx pop ax retsoundf endpwaitf proc near push axwaitf1: in al,61h and al, 10h cmp al, ah je waitf1 mov ah,al loop w
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版监控系统维保合同范本
- 2024版单位车辆出租协议
- 2025年事业单位工勤技能-河北-河北水文勘测工四级(中级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-河北-河北工程测量工四级(中级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-广西-广西家禽饲养员四级(中级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西医技工一级(高级技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西保健按摩师一级(高级技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-广东-广东动物检疫员五级(初级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东下水道养护工五级(初级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-安徽-安徽机械冷加工一级(高级技师)历年参考题库典型考点含答案解析
- 诱思探究理论
- 浅析中国保险业发展现状
- 铣床日常点检保养记录表
- 农产品贮藏与加工教案
- 04某污水处理厂630kW柔性支架光伏发电项目建议书
- 2022中国移动通信集团重庆限公司招聘上岸笔试历年难、易错点考题附带参考答案与详解
- 北师大版九年级数学上九年级第一二单元综合数学试题
- 二级建造师成绩复核申请
- GB/T 25702-2010复摆颚式破碎机颚板磨耗
- GB 29541-2013热泵热水机(器)能效限定值及能效等级
- 住宅项目实测实量操作指引(图文并茂)
评论
0/150
提交评论