微机原理课程设计音乐播放器.docx

上传人:b****7 文档编号:16579267 上传时间:2023-07-14 格式:DOCX 页数:19 大小:195.46KB
下载 相关 举报
微机原理课程设计音乐播放器.docx_第1页
第1页 / 共19页
微机原理课程设计音乐播放器.docx_第2页
第2页 / 共19页
微机原理课程设计音乐播放器.docx_第3页
第3页 / 共19页
微机原理课程设计音乐播放器.docx_第4页
第4页 / 共19页
微机原理课程设计音乐播放器.docx_第5页
第5页 / 共19页
微机原理课程设计音乐播放器.docx_第6页
第6页 / 共19页
微机原理课程设计音乐播放器.docx_第7页
第7页 / 共19页
微机原理课程设计音乐播放器.docx_第8页
第8页 / 共19页
微机原理课程设计音乐播放器.docx_第9页
第9页 / 共19页
微机原理课程设计音乐播放器.docx_第10页
第10页 / 共19页
微机原理课程设计音乐播放器.docx_第11页
第11页 / 共19页
微机原理课程设计音乐播放器.docx_第12页
第12页 / 共19页
微机原理课程设计音乐播放器.docx_第13页
第13页 / 共19页
微机原理课程设计音乐播放器.docx_第14页
第14页 / 共19页
微机原理课程设计音乐播放器.docx_第15页
第15页 / 共19页
微机原理课程设计音乐播放器.docx_第16页
第16页 / 共19页
微机原理课程设计音乐播放器.docx_第17页
第17页 / 共19页
微机原理课程设计音乐播放器.docx_第18页
第18页 / 共19页
微机原理课程设计音乐播放器.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

微机原理课程设计音乐播放器.docx

《微机原理课程设计音乐播放器.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计音乐播放器.docx(19页珍藏版)》请在冰点文库上搜索。

微机原理课程设计音乐播放器.docx

微机原理课程设计音乐播放器

一、课程设计的任务和目的

课程设计题目:

音乐播放器

课程设计的实现目的:

本课程设计主要是通过汇编语言用软件编程的方法实现简单的音乐播放功能。

通过在《微机原理与接口技术》课程上所学的汇编知识和8253/8254芯片相关知识,来完成本课程设计;用汇编程序完成键控音乐播放器的,用8253/8254定时器来产生声音。

该播放器有若干首歌曲可以选择,开始时输出说明,要用户选择要播放的歌曲,然后根据用户按键进行播放、退出或出错提示。

通过课程设计环节来加强对所学知识的理解和应用。

二、课程设计相关知识

定时/计数器8253/58254

在微机及控制系统中,经常要用到定时信号。

如系统的日历时钟,动态存储器刷新。

对外部执行机构控制时也需要定时中断、定时检测、定时查询等。

定时的方法主要是两种:

软件定时:

利用指令的执行时间设计循环程序,使CPU执行延迟子程序的时间就是定时时间。

缺点:

执行延迟时,CPU一直被占用,降低了CPU的效率。

硬件定时:

用计数器/定时器作为主要硬件,在软件简单指令的控制下产生精确的时间延迟。

突出优点为计数时不占用CPU时间,如利用定时器/计数器产生中断信号,可建立多作业环境,提高了CPU效率。

作为定时器可用8253或者8254,二者功能基本相同,知识工作的最高频率不一样。

本实验就采用了8254,其主要功能为:

(1)每片上有3个独立的16位的减计数器通道。

(2)对于每个计数器,都可以单独作为定时器或计数器使用,并且都可以按照二进制或十进制来计数。

(3)每个通道都有6种工作方式,都可以通过程序设置或改变。

(4)每个计数器的速率可高达10MHz。

主要部分有:

数据总线缓冲器、读/写控制逻辑、控制字寄存器、计数通道0#、1#、2#:

内部结构如下图:

8254内部结构

8254外部引脚

8254芯片是具有24个引脚的双列直插式集成电路芯片,其引脚分布如图所示。

8254芯片的24个引脚分为两组,一组面向CPU,另一组面向外部设备,各个引脚及其所传送信号的情况,介绍如下:

8254的引脚

(1)D7~D0:

双向、三态数据线引脚,与系统的数据线连接,传送控制、数据及状态信息。

(2)RD:

来自于CPU的读控制信号输入引脚,低电平有效。

(3)WR:

来自于CPU的写控制信号输入引脚,低电平有效。

(4)CS:

芯片选择信号输入引脚,低电平有效。

(5)A1、A0:

地址信号输入引脚,用以选择8254芯片的通道及控制字寄存器。

(6).VCC及GND:

+5V电源及接地引脚。

(7)CLKi:

i=0,1,2,第i个通道的计数脉冲输入引脚,8254规定,加在CLK引脚的输入时钟信号的频率不得高于,即时钟周期不能小于380ns。

(8)GATEi:

i=0,1,2,第i个通道的门控信号输入引脚,门控信号的作用与通道的工作方式有关。

(9)OUTi:

i=0,1,2,第i个通道的定时/计数到信号输出引脚,输出信号的形式由通道的工作方式确定,此输出信号可用于触发其它电路工作,或作为向CPU发出的中断请求信号。

8254端口地址

8254控制字

说明:

(1)8254每个通道对输入CLK按二进制或二十进制从预置值开始减1计数,减到0时从OUT输出一个信号。

(2)8254编程时先写控制字,再写时间常数。

8254工作方式

(1)方式0:

计数结束产生中断方式

当写入控制字后,OUT变为低电平,当写入初值后立即开始计数,当计数结束时,变成高电平。

(2)方式1:

可编程单次脉冲方式

当初值装入后且GATE由低变高时,OUT变为低电平,计数结束变为高电平。

(3)方式2:

频率发生器方式

当初值装入时,OUT变为高;计数结束,OUT变为低。

该方式下如果计数未结束,但GATE为低时,立即停止计数,强制OUT变高,当GATE再变高时,便启动一次新的计数周期。

(4)方式3:

方波发生器

当装入初值后,在GATE上升沿启动计数,OUT输出高电平;当计数完成一半时,OUT输出低电平。

方式3与方式2的工作方式类似,也是在初始化完成后能重复循环计数,只是输出的波形不同。

(5)方式4:

软件出发选通方式

进入工作方式4,OUTi输出高电平。

装入计数值n后,如果GATE为高电平,则立即开始减“1”计数,直到计数值减到“0”为止,OUTi输出宽度为一个CLKi周期的负脉冲。

由软件装入的计数值只有一次有效,如果要继续操作,必须重新置入计数初值n。

如果在操作的过程中,GATE变为无效,则停止减“1”计数,到GATE再次有效时,重新从初值开始减“1”计数。

(6)方式5:

硬件触发方式计数

进入工作方式5,OUTi输出高电平,硬件触发信号由GATE端引入。

因此,开始时GATE应输入为0,装入计数初值n后,减“1”计数并不工作,一定要等到硬件触发信号由GATE端引入一个正阶跃信号,减“1”计数才会开始,待计数值计到“0”,OUTi将输出负脉冲,其宽度固定为一个CLKi周期,表示定时时间到或计数次数到。

三、程序设计思路

所有音乐都是由各个不同频率的音阶和其延续时间的长短来实现的。

不同的音乐是由各个音阶按某种排列各自播放一定时间形成的,将各音乐音阶和其延续时间存在数据段中,然后根据不同按键值选择不同的音阶和时间表,再使用计数器产生该音阶频率。

CPU通过对定时器的通道2(端口地址为42)进行编程,使其I/O寄存器接收一个控制声音频率的16位计数值,端口61H的最低控制通道2门控的开断。

以产生特殊的音响。

当定时器接收的计数值为533H时,能产生896Hz的声音,因此产生其他频率的计数值就可算出来:

533Hz×896÷频率=1234DC÷频率

在送出频率计数值之前,还要给方式寄存器送一个方式值,该数决定对哪一个通道编程,采用什么模式,送入通道的计数值是一字节还是两字节,是二进制码还是BCD码。

其位组合的格式如下:

当通道2用于发声时,采用的是模式3,在模式3下,输出线为“1”和为“0”的时间各占计数时间的一半,因而产生一系列间隔均匀的脉冲。

产生指定频率声音的程序段如下:

MOVAL,0B6H

OUT43H,AL;43H为8254的控制字端口

MOVDX,12H

MOVAX,34DCH

DIVDI;(DI)=频率

OUT42H,AL;42H为8254的通道2端口

MOVAL,AH

MOV42H,AL

从定时器输出的方波信号,经功率放大和滤波后驱动扬声器。

送到扬声器的信号还受到了从并行接口芯片8255(端口地址为61H)来的双重控制,端口61H的最低位控制通道2的门控开断,以产生特殊的音频信号,端口61H的PA1位和定时器的输出信号同时作为与门的输入,PA0和PA1位可由程序决定为0还是为1。

显然只有PA0和PA1都是1时,才能使扬声器发出声音。

控制音长的时间可以简单地通过反复执行指令来得到。

我们知道执行2801次LOOP指令约需要10MS的时间。

因此用10MS的倍数值来控制扬声器开关的时间间隔,就可控制发声的音长了。

实现程序如下:

INAL,61H

MOVAH,AL

ORAL,3

OUT61H,AL;开扬声器

L:

MOVCX,2801

DY:

LOOPDY

DECBX

JNZL

MOVAL,AH

OUT61H,AL;关扬声器

四、功能流程图及子程序说明

1、总流程图

MAIN程序:

MAIN程序是总程序,输出说明,等待用户按键并读取键值。

根据不同的按键选择调用播音子程序播放不同的歌曲。

2、音乐播放子程序流程图

PLAY子程序:

PLAY子程序是播音子程序,SI指向音节表中的频率,BP指向音节表中的时间。

从SI的指向的音节表中取一个频率,只要不是-1,即有效就再读取时间,然后计算计数初值送入计数器,产生各种频率。

开启扬声器,根据所取的时间调用若干次延时子程序。

这段时间扬声器就发出该频率的声音,延时结束,就关闭扬声器,调用音节之间的小延时程序。

最后修改SI和BP,指向下一个频率,重复上面的工作

DELAY子程序和DELAY_OFF子程序:

两个都是子程序,采用空操作循环多次的方法,只是第二个延时时间较短,大概为5ms。

五、试验结果截屏:

初始界面:

如果按错了键,会出现如下界面:

如果选择正确,将出现如下界面:

六、参考文献

【1】李长青.微机原理与接口技术.徐州:

中国矿业大学出版社,2006

【2】沈美明.汇编语言程序设计实验教程.北京:

清华大学出版社,2002年

【3】周明德.微机原理与接口技术.北京:

人民邮电出版社,2002年

七、总结

在本次设计中,可以说是一次成功的经验。

在我们学完了《微型计算机原理与接口技术》这门课的基础上来做这个设计,通过设计后,使我们对这门课的理论知识的理解有很大程度上的加强。

微机原理这门课程本身是一门实验性和工程性很强的专业技术课,因此不仅要重视理论教学,更应注意实践技能的培养和训练。

课程设计是这门课程的一个重要环节,通过课程设计,巩固、加深和拓宽了学习的理解,本课程设计的重点目标是使用汇编语言,而不过多涉及硬件方面的太多知识。

在编程方面我通过本次课程设计学到了很多。

一开始面对很长的程序往往有畏难情绪,感觉无法下手,没办法只能硬着头皮啃下去,多看几个和音乐播放有关的汇编程序,然后我就能慢慢看懂了并理解了别的作者的设计思路。

然后再根据自己的思路,对照本人在图书馆借的汇编语言指导书慢慢编写符合自己思路的程序。

一次写出来的程序肯定不会是正确的,还需要进一步调试它。

检查程序过程中,在充分思考的基础上多次实验是检查改正程序的良方。

编写程序的过程中,体会最深的是子程序的调用和程序的条理问题,一个程序就算功能实现了,但是也要使主程序和子程序的条理分明,易读性高,才能算一个比较好的程序。

调试程序中,学习了DEBUG的使用,DEBUG对检查程序的错误作用很大。

同时,也要灵活使用各种调试方法,来缩小寻找错误的范围。

书到用时方恨少。

在课程设计过程中,我才体会到这句话的深意。

课堂上学的8254的知识和汇编语言都太少,还不足以完成本次课设,为此我经常跑图书馆借了各种各样的工具书。

有的书用处较大,有的书仅能用到一小块知识,就是这样,一步步在知识的海洋里我寻觅着自己需要的东西,确实克服了不少困难,解决了不少问题。

或许坎坷才能更好的使人成长。

在这次的课程设计中,我的收获是不但做出了一个符合要求的音乐播放器,而且为自己积累了一些宝贵的经验。

同时我也对音乐方面的频率知识有了一些认识,我想如果不是本次课程设计中用到这方面知识,我这辈子可能没有机会去接触这方面的知识了。

这,或许也是我比别的同学多出的一点收获吧!

六、附录

1、源程序代码:

SSEGSEGMENTPARASTACK'stack'

dw100hdup(0);Resizethestackbychangingthenumber'100'

SSEGENDS

DSEGSEGMENT

INFO1DB0DH,0AH,'--------------------------',0DH,0AH,'THEREARE3SONGS:

',0DH,0AH,0DH,0AH,'$'

INFO2DB'BIRTHDAY',0DH,0AH,'$'

INFO3DB'',0DH,0AH,'$'

INFO4DB'',0DH,0AH,'$'

INFO5DB'',0DH,0AH,'$'

INFO6DB'YOUHAVECHOSEN:

$'

INFO7DB'THANKYOUFORYOURUSE',0DH,0AH,'$'

INFO8DB'---------------------------',0DH,0AH,'PRESSTHEKEYTOSELECTSONG!

',0DH,0AH,'$'

INFO9DB0DH,0AH,'-------------------',0DH,0AH,'|INVALIDSELECTION|',0DH,0AH,'-------------------',0DH,0AH,'$'

FREG1DW2dup(262),294,262,349,262,262,294,262,392,249,262,262,523,440,349;曲1的频率

DW330,294,466,266,440,349,392,349,-1

TIME1DW1,1,2,2,2,4,1,1,2,2,2,4,1,1,2,2,2,2,4,1,1,2,2,2,4;曲1的时间

FREG2DW330,294,262,294,3DUP(330);曲2的频率

DW3DUP(294),330,392,392

DW330,294,262,294,4DUP(330)

DW294,294,330,294,262,-1

TIME2DW6DUP

(1),2;曲2的时间

DW2DUP(1,1,2)

DW12DUP

(1),4

FREG3DW330,392,330,294,330,392,330,294,330,330,392,330,294,262,294,330,392,294;曲3的频率

DW262,262,220,196,220,262,294,332,262,-1

TIME3DW3DUP

(2),1,1,2,1,1,4;曲3的时间

DW2DUP(2,2,1,1),4

DW3DUP(2,1,1,1),4

DSEGENDS

CSEGSEGMENT

assumecs:

CSEG,ds:

DSEG,es:

DSEG,ss:

SSEG

INITPROC;初始化程序

movax,dseg

movds,ax

moves,ax

INITENDP

MAINPROC;程序入口

callINIT

RE:

MOVDX,28BH;关闭扬声器

MOVAL,89H

OUTDX,AL

MOVDX,28AH

INAL,DX

MOVDX,288H

OUTDX,AL

LEADX,INFO1;输出说明信息

MOVAH,09H

INT21H

LEADX,INFO2

INT21H

LEADX,INFO3

INT21H

LEADX,INFO4

INT21H

LEADX,INFO5

INT21H

LEADX,INFO8

INT21H

MOVAH,01H;读取按键

INT21H

CMPAL,'1';根据不同的按键播放不同的曲子

JEMUSIC1

CMPAL,'2'

JEMUSIC2

CMPAL,'3'

JEMUSIC3

CMPAL,'0'

JEEXIT

LEADX,INFO9;无效选择,输出错误提示

MOVAH,09H

INT21H

JMPRE

MUSIC1:

MOVSI,OFFSETFREG1;指向曲1的表

MOVBP,OFFSETTIME1

CALLPLAY

JMPRE

MUSIC2:

MOVSI,OFFSETFREG2;指向曲2的表

MOVBP,OFFSETTIME2

CALLPLAY

JMPRE

MUSIC3:

MOVSI,OFFSETFREG3;指向曲3的表

MOVBP,OFFSETTIME3

CALLPLAY

JMPRE

EXIT:

MOVDX,28BH;关闭扬声器

MOVAL,89H

OUTDX,AL

MOVDX,28AH

INAL,DX

MOVDX,288H

OUTDX,AL

LEADX,INFO7;输出欢迎使用信息,增加界面友好度

MOVAH,09H

INT21H

movax,4c00h;Theendoftheprogram,returntothesystem

int21h

MAINENDP

PLAYPROC;PLAY子程序,功能上面介绍过

L1:

MOVBX,DS:

[SI];取频率

CMPBX,-1;看是否有效

JEL0;无效就退出

MOVCX,DS:

[BP];读取时间

MOVDL,CL;保存时间

ADDDL,30H

MOVAH,02H

INT21H

MOVDX,0FH;计算计数初值,1M的十六进制为0F4240H

MOVAX,4240H

DIVBX

MOVBX,AX

MOVDX,283H;设置计数器工作方式

MOVAL,36H

OUTDX,AL

MOVDX,280H;输入计数初值

MOVAX,BX

OUTDX,AL

MOVAL,AH

OUTDX,AL

MOVDX,28BH;开扬声器

MOVAL,89H

OUTDX,AL

MOVDX,28AH

INAL,DX

NOTAL

MOVDX,288H

OUTDX,AL

ROD:

CALLDELAY;延时

LOOPROD

MOVDX,28BH;关扬声器

MOVAL,89H

OUTDX,AL

MOVDX,28AH

INAL,DX

MOVDX,288H

OUTDX,AL

CALLDELAY_OFF;音节间延时

ADDSI,2

ADDBP,2

JMPL1

L0:

RET

PLAYENDP

DELAYPROC;延时子程序

PUSHAX

PUSHBX

PUSHCX

PUSHDX

MOVBX,09FH

LL1:

MOVCX,0FFFFH;循环这么多次

LOP:

LOOPLOP

DECBX

JNZLL1

POPDX

POPCX

POPBX

POPAX

RET

DELAYENDP

DELAY_OFFPROC

PUSHAX

PUSHBX

PUSHCX

PUSHDX

MOVBX,0FH

LL2:

MOVCX,0CFFFH

LOP2:

LOOPLOP2

DECBX

JNZLL2

POPDX

POPCX

POPBX

POPAX

RET

DELAY_OFFENDP

CSEGENDS

ENDMAIN

 

2、各个音符的对应频率表:

音符 频率/HZ半周期/us 音符 频率/HZ 半周期/us

低1DO  262     1908   #4FA#   740     0676

#1DO#  277     1805   中5SO   784     0638

低2RE  294     1700   #5SO#   831     0602

#2RE#  311     1608   中6LA   880     0568

低3M   330     1516   #6LA#   932     0536

低4FA  349     1433   中7SI   988     0506

#4FA#  370     1350   高1DO   1046    0478

低5SO  392     1276   #DO#    1109    0451

#5SO#  415     1205   高2RE   1175    0426

低6LA  440     1136   #2RE#   1245    0402

#6LA#  466     1072   高3M    1318    0372

低7SI  494     1012   高4FA   1397    0358

中1DO  523     0956   #4FA#   1480    0338

#1DO#  554     0903   高5SO   1568    0319

中2RE  578     0842   #5S0#   1661    0292

#2RE#  622     0804   高6LA   1760    0284

中3M   659     0759   #6LA#   1865    0268

中4FA  698     0716   高7SI   1976    0253

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2