综合实验报告 714/2007 综合实验报告 00548154侯璐璐 1.摘要: (1)本次实验我实现的是一个电子琴 (2)本设计了四个功能:用户自由弹奏(音长由按键长短控制),软 件自带音乐的播放,辅助的L7-L1亮来显示当前弹奏得音阶 7-1,用户自己的音乐存储盒及播放。但程序写出来后只调好 了前两个功能,最后一个功能是最后考完调试成功的 (3)关键词:自动播放,用户弹奏,音阶判断,延时时间判断 2.目标要求: 本实验实现了基本功能:通过按键播放相应频率的声音,包括高 低中从7到1的音,音长可控,此外,鉴于一般电子琴应有的功能, 添加了音乐播放功能和辅助显示所弹奏音阶的功能,原本设计实现音 乐存储和播放,但没有在检査前调好,报告末尾附的程序是完全调好 的。交互界面以每到一个子程序给出相应的提示字符串实现。 3.和实施方案 (1)设计方案选择与论述 本实验的重点在于按键发出相应频率的声音,故决定用8253作 为分频器,选择通道0在方式3下工作。通过用户按键决定分频器的 分频系数,其中分频系数是分L(低),M(中),H(高)储存在数据段的三个 l/18
综合实验报告 7/4/2007 综合实验报告 00548154 侯璐璐 1. 摘要: (1) 本次实验我实现的是一个电子琴。 (2) 本设计了四个功能:用户自由弹奏(音长由按键长短控制),软 件自带音乐的播放,辅助的 L7-L1 亮来显示当前弹奏得音阶 7-1,用户自己的音乐存储盒及播放。但程序写出来后只调好 了前两个功能,最后一个功能是最后考完调试成功的。 (3)关键词:自动播放,用户弹奏,音阶判断,延时时间判断 2. 目标要求: 本实验实现了基本功能:通过按键播放相应频率的声音,包括高 低中从 7 到 1 的音,音长可控,此外,鉴于一般电子琴应有的功能, 添加了音乐播放功能和辅助显示所弹奏音阶的功能,原本设计实现音 乐存储和播放,但没有在检查前调好,报告末尾附的程序是完全调好 的。交互界面以每到一个子程序给出相应的提示字符串实现。 3. 和实施方案 (1)设计方案选择与论述 本实验的重点在于按键发出相应频率的声音,故决定用 8253 作 为分频器,选择通道 0 在方式 3 下工作。通过用户按键决定分频器的 分频系数,其中分频系数是分 L(低),M(中),H(高)储存在数据段的三个 1/18
综合实验报告 714/2007 长为7的数组中的。另外为了避免21个音阶21按键引起的混乱,决 定只用7个按键,即键盘上的1-7数字键,另加L,MH三个按键进行 低中高音控制,用户可在弹奏时左手控制高低中右手进行1-7的弹奏, 较为清晰方便。除此之外考虑一般电子琴都有音乐播放的功能,故设 计软件自带音乐,用户在主菜单进行选择进入自动播放就可以听音 乐,其播放算法与用户弹奏的基本一致,留待后面介绍。再次,为了 使弹奏更有动感,设计用实验台上的指示灯L1-L7显示当前弹奏或播 放的音阶1-7,这是由8255的C端口来控制的。作为拓展,希望实 现用户自己存储音乐并播放的功能,结果在检查前时间太紧,没有调 试成功,存储阶段出了问题,在7月2号和3号在实验室调试实现。 (2)方案框图 扬声器 LI-L7 C端口 A端口 8253 8255A CPU处理 键盘输入 (3)细致分析 2/18
综合实验报告 7/4/2007 长为 7 的数组中的。另外为了避免 21 个音阶 21 按键引起的混乱,决 定只用 7 个按键,即键盘上的 1-7 数字键,另加 L,M,H 三个按键进行 低中高音控制,用户可在弹奏时左手控制高低中右手进行 1-7 的弹奏, 较为清晰方便。除此之外考虑一般电子琴都有音乐播放的功能,故设 计软件自带音乐,用户在主菜单进行选择进入自动播放就可以听音 乐,其播放算法与用户弹奏的基本一致,留待后面介绍。再次,为了 使弹奏更有动感,设计用实验台上的指示灯 L1-L7 显示当前弹奏或播 放的音阶 1-7,这是由 8255 的 C 端口来控制的。作为拓展,希望实 现用户自己存储音乐并播放的功能,结果在检查前时间太紧,没有调 试成功,存储阶段出了问题,在 7 月 2 号和 3 号在实验室调试实现。 (2)方案框图 CPU 处理 L1-L7 8253 扬声器 键盘输入 A 端口 8255A C 端口 (3)细致分析 2/18
综合实验报告 714/2007 件 用了TPC-H微机接口实验箱上的8255A,8253,CPU,指示灯 L7-L1 方法和算 洇 本实验的核心部分是发出见长可控的一定频率的声音,由于本实 验将21个音阶分成了高低中,用户可以先输入表示低中高的字母 LMH再按键1-7弹奏,程序在处理用户输入时也分两步两种情形处 理,首先,要正确地取出分频系数。对用户输入的字符进行判断,若 是LMH之一则事先将相应的七个分频系数的数据段变量初始地址 放入固定寄存器(如BX)供之后取分频系数之用,然后用户应该输入 1-7音阶,结合之前的初始地址寄存器即可取出相应的分频系数。然 后的重点就在于控制发音的长短。这部分开始并不会,请教同学后知 道可以通过查询微机内部的60H端口来判断是否一直有键按下从而 实现按键控制音长,若键一直按下则调用延时程序块,否则停止发音。 再者,通过实验箱8255A的A端口的PA0和PA1分别控制实验箱8253 的通道0的 GATE和OUT0,其中PA0直接与 GAtE相连,PA1与 OUT0相与后输出到扬声器,于是通过控制8255A的A端口的值 控制是否对扬声器输岀相应频率的方波发生,至此,核心模块的算法 介绍完毕。它是实现弹奏和自动播放的基础。 它又可以分成几个小的模块,发声子模块,延时子模块,页面信 息子模块,判断子模块,发声前的初始化子模块等,可以将整体划分 为相对独立但又彼此逻辑相关的部分,较为清晰的展现整个流程。 3/18
综合实验报告 7/4/2007 部件 用了 TPC-H 微机接口实验箱上的 8255A,8253,CPU,指示灯 L7-L1 方法和算法 本实验的核心部分是发出见长可控的一定频率的声音,由于本实 验将 延时子模块,页面信 息子 21 个音阶分成了高低中,用户可以先输入表示低中高的字母 L,M,H,再按键 1-7 弹奏,程序在处理用户输入时也分两步两种情形处 理,首先,要正确地取出分频系数。对用户输入的字符进行判断,若 是 L,M,H 之一则事先将相应的七个分频系数的数据段变量初始地址 放入固定寄存器(如 BX),供之后取分频系数之用,然后用户应该输入 1-7 音阶,结合之前的初始地址寄存器即可取出相应的分频系数。然 后的重点就在于控制发音的长短。这部分开始并不会,请教同学后知 道可以通过查询微机内部的 60H 端口来判断是否一直有键按下从而 实现按键控制音长,若键一直按下则调用延时程序块,否则停止发音。 再者,通过实验箱8255A的A端口的PA0和PA1分别控制实验箱8253 的通道 0 的 GATE0 和 OUT0,其中 PA0 直接与 GATE0 相连,PA1 与 OUT0 相与后输出到扬声器,于是通过控制 8255A 的 A 端口的值 控制是否对扬声器输出相应频率的方波发生,至此,核心模块的算法 介绍完毕。它是实现弹奏和自动播放的基础。 它又可以分成几个小的模块,发声子模块, 模块,判断子模块,发声前的初始化子模块等,可以将整体划分 为相对独立但又彼此逻辑相关的部分,较为清晰的展现整个流程。 3/18
综合实验报告 714/2007 而在弹奏和播放音乐基于功能的差别算法也加了不同的东西,例 如弹奏时为了将用户所弹奏音乐进行存储,需要两个寄存器SⅠ和DI 分别用于记录所弹奏有效音符和对应得延时,并依次存入相应的缓冲 BUF和TIME1,供之后的用户选择是否存入音乐盒2 弹奏相应音符前的显示灯辅助显示作为一项与弹奏算法相对独 立的功能,又独立模块 DISPLAY实现,只要在每次发音前调用即可。 另外还有一些辅助的模块,如各模块间的衔接,弹奏相应音阶前 的辅助显示指示灯,或是判断转移的中转站(因为程序太长),判断转 移一次跳不过去,这会增加程序的不清晰度,但通过去意义直观的名 字可以尽量解决。 (4)电路框图和软件流程图以及主要软件模块说明 电路框图如下 280H-283H 288H—28BH PAO GATO 8253 CLOCKO IMHZ 扬声器 由于整个软件流程图太长,将针对每个重要子模块给出它们的分
综合实验报告 7/4/2007 而在弹奏和播放音乐基于功能的差别算法也加了不同的东西,例 如弹 奏算法相对独 立的 的辅 程图以及主要软件模块说明 奏时为了将用户所弹奏音乐进行存储,需要两个寄存器 SI 和 DI 分别用于记录所弹奏有效音符和对应得延时,并依次存入相应的缓冲 BUF 和 TIME1,供之后的用户选择是否存入音乐盒 2 弹奏相应音符前的显示灯辅助显示作为一项与弹 功能,又独立模块 DISPLAY 实现,只要在每次发音前调用即可。 另外还有一些辅助的模块,如各模块间的衔接,弹奏相应音阶前 助显示指示灯,或是判断转移的中转站(因为程序太长),判断转 移一次跳不过去,这会增加程序的不清晰度,但通过去意义直观的名 字可以尽量解决。 (4)电路框图和软件流 电路框图如下: 由于整个软件流程图太长,将针对每个重要子模块给出它们的分 PA0 CS PC0 8255A PA1 PC7 L0 L7 CS GATE0 8253 CLOCK0 OUT0 1MHZ 扬声器 280H—283H 288H—28BH 4/18
综合实验报告 714/2007 析说明和流程图,再以它们为单位画出整个过程的简化流程图。 由于自动播放与用户弹奏的发声算法基本相似,将以用户弹奏为 例给出流程图 发声子模块BEEP程序代码如下: BEEP PROC NEAR PUSH DI PUSHAX;保护 MOV ALO0110110B 8253控制字,计数器0,先读写;低字节,再 ;读写高字节,方式3,二进制计数 MOV DX. 283H OUT DXAL POP AX AND ALOFH DEC AL ADD ALAL MOV.OOH MOV DLAX MOVAX, BX+DI 取出分频系数(字变量) MOV DX. 280H OUT DX.AL MOV ALAH OUT DXAL MOV DX. 288H IN AL DX MOVAHAL 暂存8255A端口的值 OR AL. 03H ,允许计数器计数并输出分频后方 ;波 OUT DXAL 5/18
综合实验报告 7/4/2007 析说 为 例给 BEEP 程序代码如下: BE 保护 10B ;8253 控制字,计数器 0,先读写;低字节,再 AL +DI] ;取出分频系数(字变量) H L ;暂存 8255A 端口的值 分频后方 OUT DX,AL 明和流程图,再以它们为单位画出整个过程的简化流程图。 由于自动播放与用户弹奏的发声算法基本相似,将以用户弹奏 出流程图 发声子模块 EP PROC NEAR PUSH DI PUSH AX; MOV AL,001101 ;读写高字节,方式 3,二进制计数 MOV DX,283H OUT DX,AL POP AX AND AL,0FH DEC AL ADD AL, MOV AH,00H MOV DI,AX MOV AX,[BX MOV DX,280H OUT DX,AL MOV AL,AH OUT DX,AL MOV DX,288 IN AL,DX MOV AH,A OR AL,03H ;允许计数器计数并输出 ;波 5/18