1、课程设计任务书学生姓名: 刘沛 专业班级: 电气 0901 指导教师: 张 锐 工作单位: 自动化学院 题 目: 计算机电子琴软件软件设计 初始条件:1.用于调试程序的 IBM 兼容 PC 机一台;2.安装 DOS/WIN98 操作系统或运行于 DOS/ WIN98 兼容方式;3. EDIT 等文本编辑器输入 80x86 汇编程序, MASM 5.0 编译及链接程序。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.使用汇编语言设计一个运行于计算机的电子琴软件,软件应实现弹奏功或演奏。其中弹奏:用户每按一琴键弹奏相应音符;演奏:按下某键后自动弹奏预存琴谱功能
2、;还可以附加变调、变速和记录创作等其它功能。2.说明书撰写格式应符合课程设计说明书统一书写格式 。时间安排:1.程序框图设计,3 天2.编程,4 天3.调试,3 天4.编写设计报告,4 天指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目录摘要I1 设计任务和思路11.1 设计任务11.2 设计思路12 更件部分工作原理22.1 8255 工作原理22.2 8253 工作原理23 程序流程图43.1 主程序流程图43.2 演奏子程序流程53.3 音乐播放子程序流程63.4 弹奏子程序流程图63.5 发音子程序流程图 74 各部分功能实现说明74.1 发音部分功能实现74.2 变
3、调功能的实现84.3 弹奏功能的实现84.4 演奏功能的实现94.4.1 歌曲选择功能实现94.4.2 音乐播放功能实现95 程序运行结果10结束语12参考文献13附录 程序清单14成绩评定表19武汉理工大学微机原理与接口技术课程设计说明书摘要汇 编 语 言 是 一 种 功 能 很 强 的 程 序 设 计 语 言 , 也 是 利 用 计 算 机 所 有 硬 件特 性 并 能 直 接 控 制 硬 件 的 语 言 。 利 用 汇 编 语 言 能 够 直 接 访 问 与 硬 件 相 关 的存 储 器 或 I/O 端 口 , 从 而 最 大 限 度 地 发 挥 硬 件 的 功 能 。 本文主要介绍了利
4、用汇编语言设计一个运行于计算机的电子琴软件,软件能够实现弹奏,演奏的功能,当按下弹奏键时,实现弹奏功能,发出音符对应频率的声音,按下演奏键时,实现演奏功能,播放预存的音乐,按下指定的音调选择按键后,选择低音,中音或高音,则分别用低音,中音或高音进行弹奏或演奏。首先介绍了 PC 机内扬声器的控制电路,接着介绍了相关接口芯片 8255 和 8253 的内部结构和工作原理,接着讲述了各部分功能的具体实现方法。关键词:汇编语言,8255,8253,扬声器 武汉理工大学微机原理与接口技术课程设计说明书0计算机电子琴软件设计1 设计任务和思路1.1 设计任务使用汇编语言设计一个运行于计算机的电子琴软件,软
5、件应实现弹奏功能或演奏功能。其中弹奏:用户每按一琴键弹奏相应音符;演奏:按下某键后自动弹奏预存琴谱功能;还可以附加变调、变速和记录创作等其它功能。软件预想功能为:按数字 1-8 为弹奏功能;按字母 p 为演奏功能;按 d 选择低音,按 z选择中意,按 g 选择高音。1.2 设计思路电子琴的设计实际上就是要设计一个程序,能够通过该程序控制 PC 机内扬声器的发声规律,按下相应的按键后,扬声器能发出指定频率的声音。PC 机内的扬声器是通过并行接口芯片 8255 和定时芯片 8253 来控制发音的,其电路连接方式如下图所示。图 1 PC 机内扬声器控制电路由图可知,扬声器是由 8253 通道 2 产
6、生的方波信号和 8255 的 PB1 相与后驱动发声的,且通道 2 的门信号由 8255 的 PB0 提供,要想让扬声器发声,PB0和 PB1 必须同时为高电平,因此,可以通过对 8255 的 PB0 和 PB1 的设置来控制扬声器的开通和关断,而其发音频率可以通过对 8253 通道 2 的计数初值的设置来控制。所设计程序的任务就是要通过对按键的判断来设置 8255 的 PB0 和 PB1 输出电平的高低,以及 8253 通道 2 计数初值的设置。计数初值 N=时钟频率/音阶频率.各音阶的频率如下表所示。表 1 各音符频率表音符 1 2 3 4 5 6 7频率(低) 131 147 165 1
7、75 196 220 247频率(中) 262 294 330 349 392 440 494频率(高) 524 588 660 698 784 880 9888255A PB1 PB0 CLK2 8253GATE2 OUT2 读入 B 口数据or al,03h ;将 PB0 和 PB1 置 1out 61h,al ;将设置好的数据送回 B 口关扬声器程序段:in al,61h ;读入 B 口数据8253 初始化开扬声器延时关扬声器返回武汉理工大学微机原理与接口技术课程设计说明书7and al,0fch ;将 PB0 和 PB1 置 0out 61h,a ;将设置好的数据送回 B 口4.2 变
8、调功能的实现扬声器发音的频率是由 8253 产生方波的频率决定的,而方波频率又是由通道的计数初值来决定的,因此可以通过改变通道的计数初值来实现变调功能。计数初值 N=时钟频率/音阶频率,时钟频率为 1.19318MHZ=1234DCH,可以将相应音调对应的时钟频率存入内存单元,当选择相应的音调时,计算计数初值时,采用对应的时钟频率值,具体程序如下。cmp al,d ;为 d 则选择低音jne j1mov num2,50jmp choice j1:cmp al,z ;为 z 则选择中音jne j2mov num2,12hjmp choicej2:cmp al,g ;为 g 则选择高音jne lo
9、op0mov num2,06h其中,num1 和 num2 中存放的是时钟频率值,num1 中固定为 34DCH,选择低音时,num2 值设为 50,中音时设为 12H,高音时设为 06H。计算计数初值程序如下:mov ax,num1mov dx,num2div 音符频率通过这样的设置,即可实现电子琴的变调功能。4.3 弹奏功能的实现当按键为数字 1-8 时,选择弹奏功能,通过对按键的判断,求得其偏移地址,然后通过查表得其相应频率值,再由上述计算计数初值的方法求得计数初值,然后将计数初值送人 8253 的通道 2,最后调用发音子程序即实现弹奏功能。具体程序段如下:sub al,31h ;求偏移
10、量shl al,1mov bl,al ;保存偏移量mov bh,0mov ax,num1 ;计算计数初值mov dx,num2div word ptrtab+bxmov bx,ax ;保存计数初值武汉理工大学微机原理与接口技术课程设计说明书84.3 演奏功能的实现4.3.1 歌曲选择功能实现当按键为 p 时,选择演奏功能,播放预存的音乐,由于预存了两首歌曲,因此需进行选择,按下 p 后,显示输入提示信息,按 1 或 2 选择对应的歌曲,然后调用相应的音乐播放子程序,播放完后显示输入提示信息,按 q 退出,按c 继续。具体程序实现如下:loop2: mov dx,offset mesg1 ;显示
11、输入提示信息mov ah,09hint 21hmov ah,07h ;从键盘读入一个字符int 21hcmp al,q ;为 q 则退出je choicecmp al,1 ;为 1 则选择歌曲 1jne next1call music1jmp loop3next1:cmp al,2 ;为 2 则选择歌曲 2jne loop2 ;不为 q,1,2 则重新选择call music2loop3:mov dx,offset mesg2 ;播放完后显示输入提示信息 mov ah,09hint 21hmov ah,7 ;从键盘读入一个字符int 21hcmp al,q ;为 q 则返回je choicec
12、mp al,c ;为 c 则继续播放je loop2jmp loop34.3.2 音乐播放功能实现选择歌曲后,调用对应的音乐播放子程序,音乐播放需用到循环结构,首先将计数器清零,接着计数器自增 1,求得偏移量,然后通过查表的到相应的频率,再计算计数初值,将计数初值送人 8253 计数通道,调用发音子程序,若计数器的值大于歌曲长度,则返回。具体程序段如下。武汉理工大学微机原理与接口技术课程设计说明书9mov cl,0 ;将计数器清零ad:inc cl ;计数器值自增 1cmp cl,31 ;计数器值若大于歌曲长度,则返回je returnmov al,cl sub al,1 ;求偏移量shl a
13、l,1mov bl,al ;保存偏移量mov bh,0mov ax,num1 ;计算计数初值mov dx,num2div word ptrsong2+bxmov bx,axcall speaker ;调用发音子程序jmp ad5 程序运行结果运行程序后,显示如下界面,等待输入字符。图 11 程序运行结果图 1按提示输入字符,按 q 则退出,按 d 选择低音,按 z 选择中音,按 g 选择高音,选择音调后,显示如下界面:图 12 程序运行结果图 2等待输入字符,按 q 则退出,按 p 则演奏,按数字 1-8 则弹奏。按下 p 后,程序运行如下:武汉理工大学微机原理与接口技术课程设计说明书10图
14、13 程序运行结果图 3按提示输入字符,按下 q 则返回,按下 1 或 2 进行歌曲选择,歌曲播放完后程序运行如下:图 14 程序运行结果图 4按提示按下键盘,若按下 q,则推出,若按下 c,则继续播放歌曲。下面是按下 c 后的运行结果: 图 15 程序运行结果图 5武汉理工大学微机原理与接口技术课程设计说明书11结束语通过这次课程设计,我从中学到了许多从课本上学不到的东西,锻炼了自己编程的能力,最后程序运行时能够实现目标,我感到很有成就感,从中也获得了很多乐趣,当然,最重要的是加深了我对课本理论知识的理解。当刚看到这个课设题目时,我感到无从下手,因为我都不知道 PC 机的内部具体结构,从理论
15、课上只是了解了 CPU 的结构和工作原理,以及几个接口芯片的工作原理,还有汇编语言的一些基本指令。但我没有被吓到,我冷静下来思考后,发现其本质就是控制 PC 机内扬声器的发音,通过查阅资料我了解了 PC机内扬声器的电路连接形式,发现它是由接口芯片 8255 和 8253 共同控制的,8255 的 PB0 作为 8253 通道 2 的门信号,而 8255 的 PB1 和 8253 通道 2 的输出相与后的信号作为扬声器的驱动信号,了解了其内部接线方式后,思路也就有了,要想让扬声器发声,8255 的 PB0 和 PB1 必须同时为高电平,其中之一为低电平时,扬声器就不能发声,而发声的音调则可通过改
16、变 8253 的计数初值来实现,接下来的任务就是通过编程来控制 8255 和 8253,从而间接地控制扬声器的发声规律,而 8255 和 8253 这两个接口芯片在理论课上都已介绍过,对其工作原理和编程方法都有一定的了解,看到这些熟悉的内容时,我淡定了很多。有了思路之后,我并没有急着写程序,因为我怀疑是不是每台 PC 机的扬声器接线方式都是这样的,所以我开始只编了一段控制扬声器发音的程序,来看看程序运行时扬声器到底发不发音,结果发声了,这让我很惊喜,也很有动力,更加激发了我的兴趣,接下来我就开始编写实现指定功能的程序了,首先是最简单的弹奏功能,通过对按键的判断来发出相应频率的声音,因为要判断按
17、键,所以很自然地就想到了 CMP 指令,在计算计数初值时,因为要用到相应音符的频率,所以需要将按键转换为音符的频率,我开始想用课本上常见的 XLAT 换码指令,但 AL 存放的数最大为 128,很明显容量不够,于是我采用了基址+变址的寻址方法,在编程的过程中,由于要程序实现多个功能,所以用子程序的结构会比较方便,需要完成某个功能时,只需调用相应子程序就可以了,这样会使得程序的结构清楚明了;在开扬声器和关扬声器之间需要一定的延时,当把计数器置为 0ffffh 时,延时还是显得太短,于是延时我采用了 AX 和 CX 相配合的方式,使得延时达到预期的目的;在完成基本功能后,我还试着加上一些附加功能,
18、比如变调,录音,通过我的不断尝试,终于把变调功能实现了,但录音功能没能像预期的那样。总之,这次课程设计让我学到了许多从课本上学不到的知识,加深了对理论知识的理解,激发了我对汇编语言的兴趣。上理论课时,只是老师讲,我们听,那些指令让我感到很枯燥,因为不知道它到底有什么作用,而这次课程设计刚好把这些指令应用到了实际中来,加深了对各种指令功能的理解,最后功能实现时,感到很有成就感,觉得汇编语言很神奇,激发了我对它的兴趣。武汉理工大学微机原理与接口技术课程设计说明书12参考文献1 彭虎,周佩玲 .微机原理与接口技术(第二版).电子工业出版社,20102 陈慧杰. 计算机扬声器发声的控制. 内蒙古民族大
19、学出版社,20013 Peter Abel 著,沈美明等译. IBM PC 汇编语言设计程序. 人民邮电出版社,20024 冯继超.微机原理实验指导书.武汉理工大学出版社,2010武汉理工大学微机原理与接口技术课程设计说明书13附录 程序清单data segmentmesg db press q to quit,press d or z or h to chose yin diao,0ah,0dh,$mesg1 db press q to return,press 1 or 2 to chose music,0ah,0dh,$mesg2 db press q to return,press c
20、 to continue,0ah,0dh,$mesg3 db press q to return,press p to play music,press 18 to hand play,0ah,0dh,$ num1 dw 34dchnum2 dw 12htab dw 262,294,330,347,392,440,494,524 song1 dw 262,294,330,262,262,294,330,262dw 330,347,392,330,347,392,392,440dw 392,347,330,262,392,440,392,347dw 330,262,392,262,392,392
21、,262,392 ;两只老虎 song2 dw 330,330,347,392,392,347,330,294dw 262,262,294,330,330,294,294,330dw 330,347,392,392,347,330,294,262dw 262,294,330,294,262,262 ;欢乐颂 data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axloop0:mov dx,offset mesg ;显示输入提示信息mov ah,09hint 21loop1:mov ah,07h ;读入字符int
22、21hcmp al,q ;为 q 则退出je donecmp al,d ;为 d,选择低音jne j1mov num2,50jmp choice 武汉理工大学微机原理与接口技术课程设计说明书14j1:cmp al,z ;为 z 选择中音 jne j2mov num2,12hjmp choicej2:cmp al,g ;为 g 选择高音jne loop0mov num2,06hchoice:mov dx,offset mesg3mov ah,09hint 21hput1:mov ah,07hint 21hcmp al,q ;为 q 则返回je loop0cmp al,p ;为 p 选择演奏jne
23、 next call playjmp put1next: cmp al,1 ;为 1-8,选择弹奏jl loop1cmp al,8jg put1call handjmp put1hand proc near ;弹奏子程序 sub al,31hshl al,1mov bl,almov bh,0mov ax,num1mov dx,num2div word ptrtab+bxmov bx,axcall speakerrethand endp武汉理工大学微机原理与接口技术课程设计说明书15play proc near ;演奏子程序loop2: mov dx,offset mesg1mov ah,09h
24、int 21hmov ah,07h ;读入字符int 21hcmp al,q ;为 q 则返回je choicecmp al,1 ;为 1,播放歌曲 1jne next1call music1jmp loop3next1:cmp al,2 ;为 2,播放歌曲 2jne loop2call music2loop3:mov dx,offset mesg2mov ah,09h int 21hmov ah,7 ;读入字符int 21h cmp al,q ;为 q 则退出je choicecmp al,c ;为 c 则继续je loop2jmp loop3retplay endpmusic1 proc
25、near ;音乐 1 播放子程序mov cl,0ad:inc clcmp cl,33je returnmov al,clsub al,1 ;取偏移量shl al,1mov bl,al ;保存偏移量mov bh,0mov ax,num1 ;计算计数初值mov dx,num2武汉理工大学微机原理与接口技术课程设计说明书16div word ptrsong1+bxmov bx,axcall speakerjmp adreturn:retmusic1 endp music2 proc near ;音乐 2 播放子程序mov cl,0ad:inc clcmp cl,31je returnmov al,c
26、lsub al,1shl al,1mov bl,almov bh,0mov ax,num1mov dx,num2div word ptrsong2+bxmov bx,axcall speakerjmp adreturn:retmusic2 endpspeaker proc near ;发音子程序mov al,10110110bout 43h,almov ax,bxout 42h,almov al,ahout 42h,al ;8253 初始化in al,61h ;开扬声器or al,03hout 61h,al call delayin al,61h ;关扬声器and al,0fchout 61h
27、,al武汉理工大学微机原理与接口技术课程设计说明书17retspeaker endpdelay proc near ;延时子程序push axpush cxmov ax,12loop4:mov cx,0ffffhloop5:loop loop5dec axjnz loop4pop cxpop axretdelay endpdone:mov ax,4c00hint 21hcode ends end start武汉理工大学微机原理与接口技术课程设计说明书18本科生课程设计成绩评定表姓 名 刘沛 性 别 男专业、班级 电气 0901 班课程设计题目: 计算机电子琴软件设计课程设计答辩或质疑记录:成绩评定依据:评定项目1.选题合理、目的明确(10 分)2.设计方案正确、具有可行性、创新性(20 分)3.设计结果(20 分)4 态度认真、学习刻苦、遵守纪律(10 分)5.设计报告的规范化、参考文献充分(20 分)6.答辩(20 分)7.总分(100 分)最终评定成绩(以优、良、中、及格、不及格评定)武汉理工大学微机原理与接口技术课程设计说明书19指导教师签字: 年 月 日