当前位置:文档之家› 微机原理课程设计—电子琴的设计之令狐文艳创作

微机原理课程设计—电子琴的设计之令狐文艳创作

课程设计任务书令狐文艳学生姓名:刘沛专业班级:电气0901指导教师:张锐工作单位:自动化学院题目:计算机电子琴软件软件设计初始条件:1.用于调试程序的IBM兼容PC机一台;2.安装DOS/WIN98操作系统或运行于DOS/ WIN98兼容方式;3. EDIT 等文本编辑器输入80x86汇编程序,MASM 5.0编译及链接程序。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.使用汇编语言设计一个运行于计算机的电子琴软件,软件应实现弹奏功或演奏。

其中弹奏:用户每按一琴键弹奏相应音符;演奏:按下某键后自动弹奏预存琴谱功能;还可以附加变调、变速和记录创作等其它功能。

2.说明书撰写格式应符合《课程设计说明书统一书写格式》。

时间安排:1.程序框图设计,3天2.编程,4天3.调试,3天4.编写设计报告,4天指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (I)1 设计任务和思路 (1)1.1设计任务 (1)1.2设计思路 (1)2更件部分工作原理 (2)2.1 8255工作原理 (2)2.2 8253工作原理 (2)3程序流程图 (4)3.1主程序流程图 (4)3.2演奏子程序流程 (5)3.3音乐播放子程序流程 (6)3.4弹奏子程序流程图 (6)3.5发音子程序流程图 (7)4各部分功能实现说明 (7)4.1 发音部分功能实现 (7)4.2 变调功能的实现 (8)4.3 弹奏功能的实现 (8)4.4演奏功能的实现 (9)4.4.1歌曲选择功能实现 (9)4.4.2 音乐播放功能实现 (9)5 程序运行结果 (10)结束语 (12)参考文献 (13)附录程序清单 (14)成绩评定表 (19)摘要汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。

利用汇编语言能够直接访问与硬件相关的存储器或I/O端口,从而最大限度地发挥硬件的功能。

本文主要介绍了利用汇编语言设计一个运行于计算机的电子琴软件,软件能够实现弹奏,演奏的功能,当按下弹奏键时,实现弹奏功能,发出音符对应频率的声音,按下演奏键时,实现演奏功能,播放预存的音乐,按下指定的音调选择按键后,选择低音,中音或高音,则分别用低音,中音或高音进行弹奏或演奏。

首先介绍了PC机内扬声器的控制电路,接着介绍了相关接口芯片8255和8253的内部结构和工作原理,接着讲述了各部分功能的具体实现方法。

关键词:汇编语言,8255,8253,扬声器计算机电子琴软件设计1 设计任务和思路1.1设计任务使用汇编语言设计一个运行于计算机的电子琴软件,软件应实现弹奏功能或演奏功能。

其中弹奏:用户每按一琴键弹奏相应音符;演奏:按下某键后自动弹奏预存琴谱功能;还可以附加变调、变速和记录创作等其它功能。

软件预想功能为:按数字1-8为弹奏功能;按字母p为演奏功能;按d选择低音,按z 选择中意,按g选择高音。

1.2设计思路电子琴的设计实际上就是要设计一个程序,能够通过该程序控制PC机内扬声器的发声规律,按下相应的按键后,扬声器能发出指定频率的声音。

PC机内的扬声器是通过并行接口芯片8255和定时芯片8253来控制发音的,其电路连接方式如下图所示。

图1 PC机内扬声器控制电路由图可知,扬声器是由8253通道2产生的方波信号和8255的PB1 相与后驱动发声的,且通道2的门信号由8255的PB0提供,要想让扬声器发声,PB0和PB1必须同时为高电平,因此,可以通过对8255的PB0和PB1的设置来控制扬声器的开通和关断,而其发音频率可以通过对8253通道2的计数初值的设置来控制。

所设计程序的任务就是要通过对按键的判断来设置8255的PB0和PB1输出电平的高低,以及8253通道2计数初值的设置。

计数初值N=时钟频率/音阶频率.各音阶的频率如下表所示。

2硬件部分工作原理2.1 8255工作原理8255的内部结构图如图2所示,它有3个数据端口,分为两组,A 组由A 口和C 口高四位组成,B 组由B 口和C 口低四位组成。

其方式控制字如图3所示。

图2 8255内部结构图PC 机内8255的A 口,B 口,C 口和控制口的端口地址分别为:60H,61H,62H,63H 。

2.2 8253工作原理8253芯片中有3个计数通道,称为通道0,1,2,它们与外部电路相连的信号线图3 8255方式控制字 方式控制字的特征位 D 0D 7 D 6 D 5 D 4 D 3 D 2 D 1 1A 组工作方式0 0——方式00 1——方式11 ⨯——方式2 B 组 工作方式 0——方式0 1——方式1 A 口 输入/输出 1——输入 0——输出 PC 7~PC 4 输入/输出 1——输入 0——输出 B 口 输入/输出 1——输入 0——输出 PC 3~PC 0 输入/输出 1——输入 0——输出有3根:CLK,GATE,OUT,CLK是脉冲输入端,GATE是门控信号,OUT是输出信号,计数器工作在减1状态。

其内部结构图和方式控制字格式如图4,图5所示。

其中当计数器工作在方式3时,输出信号为方波信号。

图4 8253内部结构图图5 8253控制字格式PC机内8253的通道0,通道1,通道2,控制口的端口地址分别为:40H,41H,42,43H。

因为扬声器是由通道2来控制的,故应选择通道2,工作方式选为方式3,输出的信号则为方波信号。

3程序流程图3.1主程序流程图主程序的流程图如下图所示:图6 主程序流程图3.2演奏子程序流程图当按键为p为时,调用音乐播放子程序,音乐播放子程序的流程图如下图所示。

图7 音乐播放子程序流程图3.3 音乐播放子程序流程图演奏时,通过判断按键为1或2来调用音乐播放子程序1或2,音乐播放子程序流程图如图8所示。

图8 音乐播放子程序流程图3.4弹奏子程序流程图当按键为1-8时,调用演奏子程序,演奏子程序的流程图如下图所示:图9 演奏子程序流程图3.5 发音子程序流程图在弹奏和演奏时都需调用发音子程序,发音子程序的作用是控制扬声器的发音,其流程图如下:图10 发音子程序流程图4 各部分功能实现说明4.1 发音部分功能实现由更件的连接形式可知,扬声器的开断是由8255的PB0和PB1以及8253通道2同时控制的,PB0和PB1同时为高电平时,扬声器开,有一个为低电平时,扬声器关断,又知8255 B口地址为61H,8253通道2地址为42H,控制口地址为43H。

具体程序编写如下。

8253初始化程序段:mov al,10110110b ;选择8253的通道2,并设置为工作方式3out 43h,almov ax,bxout 42h,al ;将计数初值的低8位写入计数通道mov al,ahout 42h,al ;将计数初值的高8位写入计数通道开扬声器程序段:in al,61h ;读入B口数据or al,03h ;将PB0 和PB1置1out 61h,al ;将设置好的数据送回B口关扬声器程序段:in al,61h ;读入B口数据and al,0fch ;将PB0 和PB1置0out 61h,a ;将设置好的数据送回B口4.2 变调功能的实现扬声器发音的频率是由8253产生方波的频率决定的,而方波频率又是由通道的计数初值来决定的,因此可以通过改变通道的计数初值来实现变调功能。

计数初值N=时钟频率/音阶频率,时钟频率为1.19318MHZ=1234DCH,可以将相应音调对应的时钟频率存入内存单元,当选择相应的音调时,计算计数初值时,采用对应的时钟频率值,具体程序如下。

cmp al,'d' ;为d则选择低音jne j1mov num2,50jmp choicej1:cmp al,'z' ;为z则选择中音jne j2mov num2,12hjmp choicej2:cmp al,'g' ;为g则选择高音jne loop0mov num2,06h其中,num1和num2中存放的是时钟频率值,num1中固定为34DCH,选择低音时,num2值设为50,中音时设为12H,高音时设为06H。

计算计数初值程序如下:mov ax,num1mov dx,num2div 音符频率通过这样的设置,即可实现电子琴的变调功能。

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

具体程序段如下:sub al,31h ;求偏移量shl al,1mov bl,al ;保存偏移量mov bh,0mov ax,num1 ;计算计数初值mov dx,num2div word ptr[tab+bx]mov bx,ax ;保存计数初值4.3 演奏功能的实现4.3.1 歌曲选择功能实现当按键为p时,选择演奏功能,播放预存的音乐,由于预存了两首歌曲,因此需进行选择,按下p后,显示输入提示信息,按1或2选择对应的歌曲,然后调用相应的音乐播放子程序,播放完后显示输入提示信息,按q退出,按c继续。

具体程序实现如下:loop2: mov dx,offset mesg1 ;显示输入提示信息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 choicecmp al,'c' ;为c则继续播放je loop2jmp loop34.3.2 音乐播放功能实现选择歌曲后,调用对应的音乐播放子程序,音乐播放需用到循环结构,首先将计数器清零,接着计数器自增1,求得偏移量,然后通过查表的到相应的频率,再计算计数初值,将计数初值送人8253计数通道,调用发音子程序,若计数器的值大于歌曲长度,则返回。

具体程序段如下。

mov cl,0 ;将计数器清零ad:inc cl ;计数器值自增1cmp cl,31 ;计数器值若大于歌曲长度,则返回je returnmov al,clsub al,1 ;求偏移量shl al,1mov bl,al ;保存偏移量mov bh,0mov ax,num1 ;计算计数初值mov dx,num2div word ptr[song2+bx]mov bx,axcall speaker ;调用发音子程序jmp ad5 程序运行结果运行程序后,显示如下界面,等待输入字符。

相关主题