微机原理课程设计—电子琴的设计(3)

2018-12-23 23:36

武汉理工大学《微机原理与接口技术》课程设计说明书

4.2 变调功能的实现

扬声器发音的频率是由8253产生方波的频率决定的,而方波频率又是由通道的计数初值来决定的,因此可以通过改变通道的计数初值来实现变调功能。计数初值N=时钟频率/音阶频率,时钟频率为1.19318MHZ=1234DCH,可以将相应音调对应的时钟频率存入内存单元,当选择相应的音调时,计算计数初值时,采用对应的时钟频率值,具体程序如下。

cmp al,'d' ;为d则选择低音 jne j1

mov num2,50 jmp choice

j1:cmp al,'z' ;为z则选择中音

jne j2

mov num2,12h jmp choice

j2:cmp al,'g' ;为g则选择高音 jne loop0

mov num2,06h

其中,num1和num2中存放的是时钟频率值,num1中固定为34DCH,选择低音时,num2值设为50,中音时设为12H,高音时设为06H。计算计数初值程序如下:

mov ax,num1

mov dx,num2 div 音符频率

通过这样的设置,即可实现电子琴的变调功能。

4.3 弹奏功能的实现

当按键为数字1-8时,选择弹奏功能,通过对按键的判断,求得其偏移地址,然后通过查表得其相应频率值,再由上述计算计数初值的方法求得计数初值,然后将计数初值送人8253的通道2,最后调用发音子程序即实现弹奏功能。具体程序段如下:

sub al,31h ;求偏移量 shl al,1

mov bl,al ;保存偏移量 mov bh,0

mov ax,num1 ;计算计数初值 mov dx,num2

div word ptr[tab+bx]

mov bx,ax ;保存计数初值

8

武汉理工大学《微机原理与接口技术》课程设计说明书

4.3 演奏功能的实现

4.3.1 歌曲选择功能实现

当按键为p时,选择演奏功能,播放预存的音乐,由于预存了两首歌曲,因

此需进行选择,按下p后,显示输入提示信息,按1或2选择对应的歌曲,然后调用相应的音乐播放子程序,播放完后显示输入提示信息,按q退出,按c继续。具体程序实现如下:

loop2: mov dx,offset mesg1 ;显示输入提示信息

mov ah,09h int 21h

mov ah,07h ;从键盘读入一个字符 int 21h

cmp al,'q' ;为q则退出 je choice

cmp al,'1' ;为1则选择歌曲1 jne next1 call music1 jmp loop3

next1:cmp al,'2' ;为2则选择歌曲2

jne loop2 ;不为q,1,2则重新选择 call music2

loop3:mov dx,offset mesg2 ;播放完后显示输入提示信息

mov ah,09h int 21h

mov ah,7 ;从键盘读入一个字符 int 21h

cmp al,'q' ;为q则返回 je choice

cmp al,'c' ;为c则继续播放 je loop2 jmp loop3

4.3.2 音乐播放功能实现

选择歌曲后,调用对应的音乐播放子程序,音乐播放需用到循环结构,

首先将计数器清零,接着计数器自增1,求得偏移量,然后通过查表的到相应的频率,再计算计数初值,将计数初值送人8253计数通道,调用发音子程序,若计数器的值大于歌曲长度,则返回。具体程序段如下。

9

武汉理工大学《微机原理与接口技术》课程设计说明书

mov cl,0 ;将计数器清零

ad:inc cl ;计数器值自增1

cmp cl,31 ;计数器值若大于歌曲长度,则返回 je return

mov al,cl

sub al,1 ;求偏移量 shl al,1

mov bl,al ;保存偏移量 mov bh,0

mov ax,num1 ;计算计数初值 mov dx,num2

div word ptr[song2+bx] mov bx,ax

call speaker ;调用发音子程序 jmp ad

5 程序运行结果

运行程序后,显示如下界面,等待输入字符。

图11 程序运行结果图1

按提示输入字符,按q则退出,按d选择低音,按z选择中音,按g选择高音,选择音调后,显示如下界面:

图12 程序运行结果图2

等待输入字符,按q则退出,按p则演奏,按数字1-8则弹奏。按下p后,程序运行如下:

10

武汉理工大学《微机原理与接口技术》课程设计说明书

图13 程序运行结果图3

按提示输入字符,按下q则返回,按下1或2进行歌曲选择,歌曲播放完后程序运行如下:

图14 程序运行结果图4

按提示按下键盘,若按下q,则推出,若按下c,则继续播放歌曲。下面是按下c后的运行结果:

图15 程序运行结果图5

11

武汉理工大学《微机原理与接口技术》课程设计说明书

结束语

通过这次课程设计,我从中学到了许多从课本上学不到的东西,锻炼了自己编程的能力,最后程序运行时能够实现目标,我感到很有成就感,从中也获得了很多乐趣,当然,最重要的是加深了我对课本理论知识的理解。 当刚看到这个课设题目时,我感到无从下手,因为我都不知道PC机的内部具体结构,从理论课上只是了解了CPU的结构和工作原理,以及几个接口芯片的工作原理,还有汇编语言的一些基本指令。但我没有被吓到,我冷静下来思考后,发现其本质就是控制PC机内扬声器的发音,通过查阅资料我了解了PC机内扬声器的电路连接形式,发现它是由接口芯片8255和8253共同控制的,8255的PB0作为8253通道2的门信号,而8255的PB1和8253通道2的输出相与后的信号作为扬声器的驱动信号,了解了其内部接线方式后,思路也就有了,要想让扬声器发声,8255的PB0和PB1必须同时为高电平,其中之一为低电平时,扬声器就不能发声,而发声的音调则可通过改变8253的计数初值来实现,接下来的任务就是通过编程来控制8255和8253,从而间接地控制扬声器的发声规律,而8255和8253这两个接口芯片在理论课上都已介绍过,对其工作原理和编程方法都有一定的了解,看到这些熟悉的内容时,我淡定了很多。 有了思路之后,我并没有急着写程序,因为我怀疑是不是每台PC机的扬声器接线方式都是这样的,所以我开始只编了一段控制扬声器发音的程序,来看看程序运行时扬声器到底发不发音,结果发声了,这让我很惊喜,也很有动力,更加激发了我的兴趣,接下来我就开始编写实现指定功能的程序了,首先是最简单的弹奏功能,通过对按键的判断来发出相应频率的声音,因为要判断按键,所以很自然地就想到了CMP指令,在计算计数初值时,因为要用到相应音符的频率,所以需要将按键转换为音符的频率,我开始想用课本上常见的XLAT换码指令,但AL存放的数最大为128,很明显容量不够,于是我采用了基址+变址的寻址方法,在编程的过程中,由于要程序实现多个功能,所以用子程序的结构会比较方便,需要完成某个功能时,只需调用相应子程序就可以了,这样会使得程序的结构清楚明了;在开扬声器和关扬声器之间需要一定的延时,当把计数器置为0ffffh时,延时还是显得太短,于是延时我采用了AX和CX相配合的方式,使得延时达到预期的目的;在完成基本功能后,我还试着加上一些附加功能,比如变调,录音,通过我的不断尝试,终于把变调功能实现了,但录音功能没能像预期的那样。 总之,这次课程设计让我学到了许多从课本上学不到的知识,加深了对理论知识的理解,激发了我对汇编语言的兴趣。上理论课时,只是老师讲,我们听,那些指令让我感到很枯燥,因为不知道它到底有什么作用,而这次课程设计刚好把这些指令应用到了实际中来,加深了对各种指令功能的理解,最后功能实现时,感到很有成就感,觉得汇编语言很神奇,激发了我对它的兴趣。

12


微机原理课程设计—电子琴的设计(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:石油华东《信息系统安全技术》2018年秋学期在线作业(一)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: