微机接口音乐点歌课程设计_第1页
微机接口音乐点歌课程设计_第2页
微机接口音乐点歌课程设计_第3页
微机接口音乐点歌课程设计_第4页
微机接口音乐点歌课程设计_第5页
免费预览已结束,剩余12页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、信息科学与技术学院微机原理与接口技术课程设计报告时 间:2111题目名称:音乐点歌学生姓名:11学 号:111专业年级:111指导教师:111概述汇编语言是计算机能够提供给用户使用的最快而有效的语言,也是能够利 用计算机所有特性并能直接控制硬件的唯一语言。 借助于汇编程序, 计算机本身 可以自动地把 汇编源程序翻译成用机器语言表示的目的程序,从而实现了程序 设计工作的部分自动化。1 课程设计的目的掌握一些程序设计的基本方法, 要指导主程序, 子程序以及推栈段的使用, . 了解通用发声程序 了解与掌握定时 .计数.音乐.频率.时间之间的关系, 学会用发 声程序的设计方法,学会用汇编语言编辑音乐程

2、序2 课程设计的要求 :1其中可选五首以上歌曲。2可以选速度3.选音调(AG调;每音调之间大约相差1.12倍,既C调比D调的频率 高 1.12 倍)4任意暂停5界面修饰。总体方案设计2.1主程序流程图图1主程序流程图2.2Music子程序流程图:图2 Music子程序流程图2.3 .发声原理图:图3发声原理图发声原理:I/O指令向设备寄存器(端计算机有两种产生声音的方法,一种方法是通过 口地址为61H)的第1位交替送1和0,使与第1位相连的扬声器脉冲门产生连 续的脉冲电流,驱动扬声器发出声音。另一种方法是利用 8254 (系统定时器) 中的2号定时器向扬声器发送不同频率的脉冲,使之产生音调高低

3、不同的声音, 这种产生声音的方法可使计算机演奏出各种乐曲。本程序选用定时器产生声音。ROMBIOS中的BEEF子程序能根据BL中给出的时间计数值控制8254定时器, 产生持续时间为1个或几个0.5秒、频率为896HZ的声音。通过对BEEP勺修改,可以使其产生任一频率的声音。用汇编语言编写的程序GENSOUN能使PC机发 出指定频率和指定延迟时间的声音,它是一个很好的通用发声程序。组成乐曲的 每个音符的频率值和持续时间是乐曲发声程序所必须的两组数据, 知道了音调及频率的关系后,就可以按照乐曲的乐谱将每个音符的频率和持续时间定义成两个 数据表,然后编程依次取出表中的频率值和时间值,调用GENSOU

4、N程序发出各 种声音。但GENSOUI程序产生的声音不仅与输入频率有关,而且与 CPU有关。如果 80X86的工作频率为 8MHZ(如 IBM PS/ 2-25 型),贝U T=125ns (1 /8MHz=125n9 ,那么上面程序产生的时间延迟就要短的多。在80286中,LOOP旨令只需8个执行周期,而不是17个执行周期,这也会使延迟时间缩短很多。因此,从PC/ AT开始,对所有的80286, 80386,80486和In tel Pen tium计算机,IBM都提供一种利用硬件产生时间延迟的方法,这种方法不仅与频率无关,也与CPU无关。方 法是通过监控端口 61H的PB4,使PB4每15

5、.08US触发一次,以产生一个固定不 变的时间基准。在IBM PCATBIOS中的WAITF子程序,就是一个产生NX 15.08us时间延迟的程序。调用 WAITF子程序时,CX寄存器必须装入15.08US的倍数N。利用WAITF子程序能获得任意的延迟时间,而再不必考虑CPU的型号和工作频率。依此原理可以进一步修改通用发声程序GENSOUND使其不再依赖CPU的 工作频率。GENSOUND序中的10ms延迟时间是通过执行循环指令来获得的,现在可以用 WAITF子程序来取代它,计数值设置为 663 (10ms/ 15.08us=663 )。本 系统将修改后的通用子程序改名为 SOUNDF延迟时间

6、表仍为10ms。(二)编曲原理利用计算机控制发声的原理, 可以编写演奏乐曲的程序。 乐曲是按照一定的高低、 长短和强弱关系组成的音调。 在一首乐曲中, 每个音符的音高和音长与频率和节 拍有关。组成乐曲的每个音符的频率值和持续时间是乐曲程序发声所需要的两个 数据。对于频率值,用WaveC中的信号发生器输出262HZ 294HZ 330HZ、349HZ、 392HZ 440HZ 494HZ 523HZ的信号相当于 C调的 dou, ruai,mi,fa,sou, la,si,dou。而音符的持续时间是根据乐曲的速度及每个音符的节拍数来确定 的。在 4/4 (四四拍)中,四分音符为 1 拍,每小节

7、4 拍,全音符持续 4 拍,二 分音符持续 2 拍,四分音符持续 1 拍。八分音符持续半拍等。 如果给全音符分配 1s(100 X 10ms)的时间,则二分音符的持续时间为 0.5s(50 X 10ms),四分音符的 持续时间为0.25s(25 X 10ms),八分音符的持续时间为 0.125(12.5 X 10ms)。知 道音调与频率和时间的关系, 就可以按照乐曲的曲谱将每个音符的频率和持续时 间定义成两个数据表,然后编写程序依次取出表中的频率值和时间值,调用 SOUND程序发出各种声音。这次课程设计的设计思想是在熟练掌握汇编程序的设计方法的基础上, 利用 通用发生程序编写音乐程序 组成音乐

8、的每个音符的频率值和持续时间是音乐程 序发声所需要的两个数据, 根据音调与频率和时间之间的关系, 把要编辑的音乐 的每个音符的频率和持续时间定义成两个数据表,进而把它们写入通用发声程 序,音乐程序就完成。在编制此音乐演奏程序时,应该知道 ROMBIOS中有个BEEP子程序,这能根 据BL中组出的时间计数值控制8254定时器,产生持续时间为1个或几个0.5秒, 频率为896HZ的声音,我们可以利用并修改 BEEP使其产生任一频率的声音。 首先要了解计算机是如何产生声音和乐曲的。 找出相关程序源代码, 弄清楚各功 能的环节间的联系、 联接方法, 搞清楚单调与频率和时间的关系, 利用计算机控制发声的

9、原理, 依照基本的算法思想写程序, 测试,更正,扩充功能, 修饰细节。 本次设计在具体设计过程中的整体设计思路如下:该程序主要分成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 作为乐曲的结束符, 也可用其他的特殊值来代替。发声原理计算机有两种产生声音的方法, 一种方法

10、是通过 I/O 指令向设备寄存器 (端 口地址为61H的第1位交替送1和0,使与第1位相连的扬声器脉冲门产生连 续的脉冲电流,驱动扬声器发出声音。另一种方法是利用 8254(系统定时器) 中的 2 号定时器向扬声器发送不同频率的脉冲,使之产生音调高低不同的声音, 这种产生声音的方法可使计算机演奏出各种乐曲。本程序选用定时器产生声音。ROMBIOS中的BEEF子程序能根据BL中给出的时间计数值控制8254定时器, 产生持续时间为1个或几个0.5秒、频率为896HZ的声音。通过对BEEP勺修改,可以使其产生任一频率的声音。用汇编语言编写的程序gensound亡使PC机发知道了音调及出指定频率和指定

11、延迟时间的声音, 它是一个很好的通用发声程序。 组成乐曲的 每个音符的频率值和持续时间是乐曲发声程序所必须的两组数据, 频率的关系后, 就可以按照乐曲的乐谱将每个音符的频率和持续时间定义成两个数据表,然后编程依次取出表中的频率值和时间值,调用GENSOUN程序发出各 种声音。但GENSOUI程序产生的声音不仅与输入频率有关,而且与 CPUt关。如果 80X86的工作频率为 8MHZ(如 IBM PS/ 2-25 型),贝U T=125ns (1 /8MHz=125n9 ,那么上面程序产生的时间延迟就要短的多。在80286中,LOOP旨令只需8个执行周期,而不是 17个执行周期,这也会使延迟时间

12、缩短很多。因此,从 PC/ AT 开始,对所有的80286, 80386, 80486和In tel Pen tium计算机,IBM都提供一 种利用硬件产生时间延迟的方法,这种方法不仅与频率无关,也与CPU无关。方 法是通过监控端口 61H的PB4,使PB4每15.08US触发一次,以产生一个固定不 变的时间基准。在IBM PCATBIOS中的WAITF子程序,就是一个产生NX 15.08us 时间延迟的程序。调用 WAITF子程序时,CX寄存器必须装入15.08US的倍数N。利用WAITF子程序能获得任意的延迟时间,而再不必考虑CPU的型号和工作频率。依此原理可以进一步修改通用发声程序GEN

13、SOUNDS其不再依赖CPU的 工作频率。GENSOUI程疗中的10ms延迟时间是通过执行循环指令来获得的,现 在可以用 WAITF子程序来取代它,计数值设置为 663 (10ms/ 15.08us=663 )。本 系统将修改后的通用子程序改名为 SOUNDF延迟时间表仍为10ms二)编曲原理利用计算机控制发声的原理, 可以编写演奏乐曲的程序。 乐曲是按照一定的高低、 长短 和强弱关系组成的音调。 在一首乐曲中, 每个音符的音高和音长与频率和节拍有关。 组成乐 曲的每个音符的频率值和持续时间是乐曲程序发声所需要的两个数据。对于频率值,用WaveCN中的信号发生器输出 262HZ、294HZ 3

14、30HZ、349HZ、392HZ、440HZ、494HZ、523HZ的信号相当于 C调的dou,ruai ,mi,fa,sou, la,si,dou。而音符的持续时间是根据乐曲的速度及每个音符的节拍数来确定的。在 4/4(四四拍)中,四分音符为 1 拍,每小节 4拍,全音符持续 4 拍,二分音符持续 2 拍,四分音符持续 1 拍。八分音符持续半拍等。如果给全音符分配1s(100 X 10ms)的时间,则二分音符的持续时间为0.5s(50 X 10ms),四分音符的持续时间为 0.25s(25 X 10ms),八分音符的持续时间为0.125(12.5 X 10ms)。知道音调与SOUND程序发出

15、各种声音。频率和时间的关系,就可以按照乐曲的曲谱将每个音符的频率和持续时间定义成两个数据 表,然后编写程序依次取出表中的频率值和时间值,调用5系统的主要功能:给用户提供 5首已经写好的短曲,根据用户的选 择演奏乐曲,演奏完一首乐曲后跳回起始状态,如此 循环,直到用户输入结束的信息为止。源程序:*STACK SEGMENT PARA STACK 'STACK'DB 64 DUP('STACK.')STACK ENDSDSEG SEGMENT PARA 'DATA'MESS1 DB 50 DUP(' '),'Now the m

16、usic is <<Happy birthday to you>>',13,10,'$'MESS2 DB 50 DUP(' '),'Now the music is <<Mary had a littlelamb>>',13,10,'$'MESS3 DB 50 DUP(' '),'Now the music is <<Taihu boat>>',13,10,'$'MESS4 DB 50 DUP('

17、 '),'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,10DB 5 DUP(' '),'*1:Happy birthday to you;*',13,10DB 5 DUP(' '),

18、'*2:Mary had a little lamb;*',13,10DB 5 DUP(' '),'*4:Exit;*',13,10DB 5 DUP(' '),'*',13,10DB 5 DUP(' '),'please chioce the number of music:','$',13,10 change DB 125 DUP(' '),'error! please change anther NO.: ','$'

19、 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 -1MUS_FREG_m dw 262,262,294,262,349,330dw 262,262,294,262,392,349 dw 262,262,523,440,349,330,294 dw 466,466,440,262,392,349

20、 dw -1MUS_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 -1MUS_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/2dw50*3/2

21、,50*3/2,100*3/2,100*3/2,100*3/2,100*3/2,300*3/2dw 50*3/2,50*3/2,100*3/2,100*3/2,100*3/2,200*3/2MUS_TIME_q dw 50,50,100,100,100,200dw 50,50,100,100,100,200dw 50,50,100,100,100,100,300dw 50,50,100,100,100,200mus_freg1_l dw330*4/5,294*4/5,262*4/5,294*4/5,330*4/5,330*4/5,330*4/5dw 294*4/5,294*4/5,294*4/

22、5,330*4/5,392*4/5,392*4/5 dw330*4/5,294*4/5,262*4/5,294*4/5,330*4/5,330*4/5,330*4/5,330*4/5dw 294*4/5,294*4/5,330*4/5,294*4/5,262*4/5dw -1mus_freg1_m dw 330,294,262,294,330,330,330dw 294,294,294,330,392,392dw 330,294,262,294,330,330,330,330dw 294,294,330,294,262dw -1mus_freg1_hdw 330*2,294*2,262*2,2

23、94*2,330*2,330*2,330*2dw 294*2,294*2,294*2,330*2,392*2,392*2dw 330*2,294*2,262*2,294*2,330*2,330*2,330*2,330*2dw 294*2,294*2,330*2,294*2,262*2dw -1mus_time1_sdw 6 dup(25),50dw 12 dup(25),100mus_time1_q dw 6 dup(20),40dw 2 dup(20,20,40)dw 12 dup(20),80DSEG ENDSdw 2 dup(25,25,50)CODE SEGMENT PARA '

24、;DATA' assume cs:code,ds:dseg,ss:stack music proc far mov ax,dseg mov ds,ax rotate:LEA DX,MENUmov ah, 9 ;显示 int 21hchg:mov ah,1 ;扫描接收字符 int 21h cmp al,'1' je one cmp al,'2' je twocmp al,'4' je endmusLEA DX,change mov ah,09 int 21h jmp chg ENDMUS: mov ax,4c00h int 21hONE:l

25、ea dx,mess1 mov ah,09 int 21h yindiao:lea dx,mess5mov ah,09int 21hmov ah,01 int 21h cmp al,'h' je one_h cmp al,'m' je one_m cmp al,'l' je one_l sudu: lea dx,mess4mov ah,09int 21hmov ah,01 int 21h cmp al,'s' je one_s cmp al,'q' je one_qone_h: LEA SI,mus_FREG_h

26、jmp suduone_m: LEA SI,MUS_FREG_m jmp suduone_l: LEA SI,MUS_FREG_l jmp suduone_s: LEA BP,DS:MUS_TIME_s JMP SOUNDone_q: LEA BP,DS:MUS_TIME_qJMP SOUND two:lea dx,mess2 mov ah,09 int 21h yindiao1:lea dx,mess5 mov ah,09 int 21h mov ah,01 int 21h cmp al,'h' je two_h cmp al,'m' je two_m cmp

27、 al,'l' je two_l sudu1: lea dx,mess4 mov ah,09 int 21h mov ah,01 int 21h cmp al,'s' je two_s cmp al,'q' je two_qtwo_h: LEA SI,mus_FREG1_h jmp sudutwo_m: LEA SI,MUS_FREG1_m jmp sudutwo_l:LEA SI,MUS_FREG1_ljmp sudutwo_s: LEA BP,DS:MUS_TIME1_s JMP SOUNDtwo_q: LEA BP,DS:MUS_TIME1

28、_q SOUND:freq:mov di,si cmp di,-1 je rmov bx,ds:bp call soundf add si,2 add bp,2 jmp freq r: JMP rotatemusic endpsoundfproc near push push push push push mov outmov mov div out mov out in mov or outax bx cx dx di al,0b6h 43h,al dx,12h ax,348ch di 42h,al al,ah42h,al al,61h ah,alal,3 61h,alwait1:mov callcx,663 waitfdelay:soundfloop dec jnz mov out pop pop pop pop pop ret endpdelay bx wait1al,ah 61h,al di dx cx bxaxwaitf proc nearush1andaxal,61hal, 10hcmpal, ahjewaitf1movah,a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论