ImageVerifierCode 换一换
格式:DOCX , 页数:62 ,大小:35.30KB ,
资源ID:8001733      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-8001733.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(电子琴综合实验报告汇编语言.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

电子琴综合实验报告汇编语言.docx

1、电子琴综合实验报告汇编语言基于分频原理的多功能电子琴+节拍器信息科学技术学院 电子学系 任伶 00548091摘要一,课题及完成情况简介:利用TPC-H实验箱上的8253实现二级分频,同时配合以8255A,与门和DAC0832,通过扬声器放音,实现两个八度音高(包括半音)的电子琴。在软硬件相互配合下,电子琴具有弹奏和播放已存乐曲的功能,音长可控,播放速度可选,拥有美观的图形界面模拟真实琴键,且琴键随弹奏有起伏变化。利用微机内部的8253,8255A和内置扬声器,与TPC-H实验板上的8255A和LED,实现节拍器,可产生长度和速度可控的2/4拍,3/4拍及4/4拍等,LED和内置扬声器同时对节

2、拍进行提示。二,关键词:8253,8255A,DAC0832,弹奏,录音,播放,用户选择目标要求一,基本功能:1. 以微机键盘模拟真实琴键,发出标准C大调音阶和其高八度音阶,包括半音2. 每个音可以任意长短发音,由用户的按键时间决定,模拟真实电子琴的发生效果二,附加功能:1. 通过编写汇编语言,实现可视化界面,便于用户操作;弹奏过程中,琴键随用户按键的按下和弹起有起落变化的效果2. 在弹奏过程中同步录音;播放已经录制的乐曲;播放速度由用户决定,由慢速,中速和快速等选择3. 将电子琴作为节拍器使用,输出各种节拍,有2/4拍,3/4拍及4/4拍等供用户选择,在节拍器输出的同时,有LED和微机内置扬

3、声器作为指示;拥有LED指示是真实节拍器没有而本课题独有的功能4. 节拍器的输出拍数有长短两种,拍速有快慢两种,均由用户选择设计和实施方案一,设计方案选择与论述电子琴的实现方案有多种,例如基于波形叠加原理和基于分频原理等。基于波形叠加原理,其核心在于数模转换过程,其实现的过程和需要的组件较简单;用到的芯片主要为DAC0832,数目太少,很难达到硬件使用能力的锻炼;而基于分频原理的电子琴实现能够给我更多的锻炼机会。基于分频原理,其核心在于对分频计数的控制,多变复杂;用到的芯片包括8253,8255A,DAC0832和与门等,包括了基于波形叠加原理用到的芯片,同时我对8253和8255A的应用更熟

4、练,便于方案可行性估计和软件调试;此方案下,TPC-H实验箱上的连线较多,更是一种对硬件处理能力的挑战。节拍器的实现主要依靠分频和并口数据传输。基于上述理由,我选择基于分频原理的方案来实现电子琴和节拍器的混合体。二,所选用方案的框图三,采用的部件(元器件),方法,算法可实现所要求的功能和指标1. 电子琴发声部分利用TPC-H实验箱上的8253,8255A,DAC0832和与门及相关电路连接(详见后续说明)实现电子琴弹奏和播放录音时的发声(二者算法基本一致),发生的频率和时长主要通过对用户输入(即按键)的判断,调用过程控制硬件完成。用户弹奏时,通过对按键的判断,即可知其音高,在数据列表中找到相应

5、计数初值,赋给8253计数器0和计数器1即可。在这里要说明的是,计数器0执行的一级分频用于确定音高(不同音符的计数初值不同);计数器1执行的二级分频用于控制程序将正弦波形的离散数值写入DAC0832,从而得到模拟正弦波驱动扬声器,其计数初值不因音高变化而变化,这是因为在一个正弦周期内写入的离散数值个数是固定的,而写入频率由计数器0的输出作为GATE1控制;此为使用二级分频的缘故。按键的时长由程序计数得到,在琴键按下时,8255A的PA0口输出为零,无按键时其输出为1,因此8255A的PA0 和8253 的OUT1相与后作为8255A的PC0输入,在琴键按下时控制程序中正弦波离散数值以其频率向D

6、AC0832 的写入,在琴键弹起时禁止此写入。对于播放录音的情况,程序从内存中读出一个音符的音高与时长,同理控制上述过程即可。不同按键与不同音符的对应关系如下(标准C大调音阶及其高八度音阶): 按键1234567890-=音符C#CD#DEF#FG#GA#AB按键QWERTYUIOP音符HC#HCHD#HDHEHF#HFHG#HGHA#HAHB通过用户选择,赋予播放速度变量不同的值,从而改变音符的时长,从而改变了乐曲的播放速度。2. 电子琴琴键显示部分在电子琴的图形界面设计上,采用像素点画图的方法。实现计算好电子琴静态界面各个部分的位置和大小,确定其颜色存入数据列表中,使用时调用,按照像素点的

7、颜色和数目等信息一次画出整个键盘。在用户弹奏时,需要显示相应琴键按下和弹起的效果。在判断音符时即确定它对应的琴键的图形中需要改动区域的像素的位置,大小和颜色,存入相应寄存器中,再调用KEYDOWN和KEYUP重新在上述区域逐点重画像素。3. 提示信息显示部分所有对用户的提示信息均以字符串的形式在屏幕上显示,用户的输入根据其逻辑关系驱动程序走向(详见后续说明)。4. 节拍器工作部分根据用户的选择,决定输出节拍的种类,长度和速度,并跳转到相应程序段,同时相应变量赋值。其中,长度即输出节拍的个数,速度决定程序延时。LED的L3L0点亮与否由TPC-H实验箱上的8255A的PA4PA1驱动,按一个节拍

8、周期中强弱拍的变化依次点亮。微机内部的8253和8255A驱动内置扬声器发出不同频率的声音,按一个节拍周期中强弱拍的变化规律与LED同时对用户作出节拍提示。四,电路原理图,软件流程图和主要软件模块说明1. 电路原理图2. 软件流程图 3. 主要软件模块说明(1)采用IBM-PC彩色图形方式,显示电子琴键盘的画面(a)绘制出键盘的静态效果其中,图形界面的数据缓冲区定义如下:色号6708对应颜色橙色白色黑色灰色KEYBOARD DB 179 DUP(6); 电子琴上部的橙色背景 ; 键盘中部 DB 6 DUP(6),8 DUP(7),7 DUP(0),5 DUP(7),7 DUP(0),8 DUP

9、(7),1 DUP(0) DB 8 DUP(7),7 DUP(0),5 DUP(7),7 DUP(0),5 DUP(7),7 DUP(0),8 DUP(7),1 DUP(0) DB 8 DUP(7),7 DUP(0),5 DUP(7),7 DUP(0),8 DUP(7),1 DUP(0) DB 8 DUP(7),7 DUP(0),5 DUP(7),7 DUP(0),5 DUP(7),7 DUP(0),8 DUP(7),6 DUP(6) DB 6 DUP(6),8 DUP(7),7 DUP(8),5 DUP(7),7 DUP(8),8 DUP(7),1 DUP(0) DB 8 DUP(7),7

10、DUP(8),5 DUP(7),7 DUP(8),5 DUP(7),7 DUP(8),8 DUP(7),1 DUP(0) DB 8 DUP(7),7 DUP(8),5 DUP(7),7 DUP(8),8 DUP(7),1 DUP(0) DB 8 DUP(7),7 DUP(8),5 DUP(7),7 DUP(8),5 DUP(7),7 DUP(8),8 DUP(7),6 DUP(6) ; 键盘下部 DB 6 DUP(6),11 DUP(7),1 DUP(0),11 DUP(7),1 DUP(0),11 DUP(7),1 DUP(0) DB 11 DUP(7),1 DUP(0),11 DUP(7)

11、,1 DUP(0),11 DUP(7),1 DUP(0),11 DUP(7),1 DUP(0) DB 11 DUP(7),1 DUP(0),11 DUP(7),1 DUP(0),11 DUP(7),1 DUP(0) DB 11 DUP(7),1 DUP(0),11 DUP(7),1 DUP(0),11 DUP(7),1 DUP(0),11 DUP(7),6 DUP(6) DB 6 DUP(6),11 DUP(8),1 DUP(0),11 DUP(8),1 DUP(0),11 DUP(8),1 DUP(0) DB 11 DUP(8),1 DUP(0),11 DUP(8),1 DUP(0),11

12、DUP(8),1 DUP(0),11 DUP(8),1 DUP(0) DB 11 DUP(8),1 DUP(0),11 DUP(8),1 DUP(0),11 DUP(8),1 DUP(0) DB 11 DUP(8),1 DUP(0),11 DUP(8),1 DUP(0),11 DUP(8),1 DUP(0),11 DUP(8),6 DUP(6)调用DRAW画出键盘的静态效果。;-DRAW-DRAW PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI MOV AX,DATA; 段寄存器初始化 MOV DS,AX MOV AH,0;

13、设置屏幕显示为320X200 MOV AL,0DH; 彩色图形(EGA) INT 10H MOV SI,0; 从第一个像素开始 MOV CX,66; 列 MOV DX,62; 行 LEA BX,KEYBOARD ; 绘制电子琴上部的橙色背景 PART1: MOV DI,BX+SI; 取像素值 MOV AX,DI MOV AH,0CH INT 10H INC DX CMP DX,82; 一行画完了吗? JNE PART1; 若没有则继续 MOV DX,62; 画下一行 INC SI INC CX CMP CX,245; 所有的行都画完了吗? JNZ PART1; 若没有则继续 ; 绘制电子琴中部

14、黑白键交替的情景 MOV CX,66 MOV DX,82 LEA BX,KEYBOARD; 现在SI=167 PART2: MOV DI,BX+SI MOV AX,DI MOV AH,0CH INT 10H INC DX CMP DX,101 JNE PART2 MOV DX, 82 INC SI INC CX CMP CX, 245 JNZ PART2;绘制电子琴中部灰白交替的情况(此处的灰色部分对应于上处的黑色部分,表示黑键;的立体感) MOV CX, 66 MOV DX, 101 LEA BX, KEYBOARD PART3: MOV DI,BX+SI MOV AX, DI MOV AH

15、, 0CH INT 10H INC DX CMP DX, 103 JNE PART3 MOV DX, 101 INC SI INC CX CMP CX, 245 JNZ PART3;绘制键盘的下部分,白色、中间夹着黑色线条表示不同的白键 MOV CX, 66 MOV DX, 103 LEA BX, KEYBOARD PART4: MOV DI, BX+SI MOV AX, DI MOV AH, 0CH INT 10H INC DX CMP DX, 116 JNE PART4 MOV DX, 103 INC SI INC CX CMP CX, 245 JNZ PART4;绘制键盘的下部分,将横坐

16、标方向上对应于上行白色的部分对应成灰色,显示立体感 MOV CX, 66 MOV DX, 116 LEA BX, KEYBOARD PART5: MOV DI, BX+SI MOV AX, DI MOV AH, 0CH INT 10H INC DX CMP DX, 119 JNE PART5 MOV DX, 116 INC SI INC CX CMP CX, 245 JNZ PART5 POP DI POP SI POP DX POP CX POP BX POP AX RETDRAW ENDP(b)调用KEYDOWN和KEYUP画出琴键按下和弹起的动态效果当白键按下时,对应白色键下面的灰色部分

17、将被涂成白色,等按键弹起时恢复灰色。当黑键按下时,对应黑色键下面的灰色部分将被涂成黑色,等按键弹起时恢复灰色。由于白键和黑键的宽度不一样,在下面相应位置将灰色覆盖的颜色也分别是白色和黑色,并且开始绘制的横纵坐标不一样,因此程序中用CX记录该开始涂的点的横坐标,DX记录纵坐标,COLOR1表示KEYUP中应涂上的颜色,LEN表示涂的纵向长度,WID表示涂的横向宽度。COLOR2表示KEYDOWN中应涂上的颜色。;-KEYDOWN-KEYDOWN PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI MOV SI,0 MOV DI,0

18、MOV AH,0CH MOV AL,COLOR1; 确定图样颜色 DOWN: INT 10H INC DX INC DI CMP DI,LEN; 长度方向画完了吗? JNE DOWN; 没画完则继续 SUB DX,LEN MOV DI,0 INC CX INC SI CMP SI,WID; 宽度方向画完了吗? JNE DOWN; 没画完则继续 POP DI POP SI POP DX POP CX POP BX POP AX RETKEYDOWN ENDP;-KEYUP-KEYUP PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH D

19、I MOV SI,0 MOV DI,0 MOV AH,0CH MOV AL,COLOR2; 确定图样颜色 UP: INT 10H INC DX INC DI CMP DI,LEN; 长度方向画完了吗? JNE UP; 没画完则继续 SUB DX,LEN MOV DI,0 INC CX INC SI CMP SI,WID; 宽度方向画完了吗? JNE UP; 没画完则继续 POP DI POP SI POP DX POP CX POP BX POP AX RETKEYUP ENDP(2)用户弹奏,实现不同音高输出和时长控制不同音高对应的初级分频计数初值记录在SCALE中: SCALE DW 47

20、6,450,424,402,378,356,336,316,300,282,268,252 DW 238,224,210,200,188,182,170,158,150,140,132,124DAC0832将正弦波的离散数值进行数模转换变为模拟量输出时使用的正弦波离散数值存储于SIN中(这是一个周期中对模拟正弦波进行32次等间隔抽样量化得到的结果): SIN DB 127,139,152,164,176,187,198,208 DB 217,225,233,239,244,249,252,253 DB 254,253,252,249,244,239,233,225 DB 217,208,198

21、,187,176,164,152,139 DB 127,115,102,90,78,67,56,46 DB 37,29,21,15,10,5,2,1 DB 0,1,2,5,10,15,21,29 DB 37,46,56,67,78,90,102,115以下程序段在按键已经完成音符判断的基础上实现声音的输出,音高和时长的记录存储(其中,BX存放频率数组指针偏移量): PLAY: CALL KEYDOWN; 画出键按下的图样 PUSH BX PUSH CX PUSH DX MOV DX,288H; 发声 MOV AL,1 OUT DX,AL MOV DI,BX; 存储频率(数组偏移量) INC D

22、I INC DI MOV AL,00110110B; 8253初始化,计数器0,读写16位 MOV DX,283H ; 工作方式3,二进制计数 OUT DX,AL MOV AX,BX+SI; 赋初值,即设定频率 MOV DX,280H OUT DX,AL MOV AL,AH OUT DX,AL MOV DX,283H MOV AL,01010110B;8253初始化,计数器1,低8位读写 OUT DX,AL;工作与方式3,二进制计数 MOV DX,281H;输出计数器初值,控制向DAC0832写入的频率 MOV AL,32 OUT DX,AL MOV BX,00H; 开始记录按键时长 PBEG

23、: PUSH SI LEA SI,SIN; 输出一个周期的正弦波形 MOV CX,32 L0: WAIT1: MOV DX,2B0H MOV AL,SI OUT DX,AL; 取得正弦量化数值,送入DAC MOV DX,28AH IN AL,DX CMP AL,01H; 分频控制信号的正半周期 JZ WAIT1 INC SI WAIT2: MOV DX,2B0H MOV AL,SI OUT DX,AL; 取得正弦量化数值,送入DAC MOV DX,28AH IN AL,DX CMP AL,00H; 分频控制信号的负半周期 JZ WAIT2 INC SI LOOP L0 POP SI INC B

24、X; 即输出一个周期的正弦波形,记录时长有一个增量 HOLD: IN AL,60H TEST AL,80H JZ PBEG; 如果按键未放开,继续记录 MOV DS:DI,BX; 存储按键时长 INC DI INC DI MOV AX,BUFFER; 缓冲区指针后移 INC AX INC AX INC AX INC AX MOV BUFFER,AX MOV DX,288H; 停止发声 MOV AL,0 OUT DX,AL MOV DX,2B0H; DAC输入为零,不发声 MOV AL,0 OUT DX,AL POP DX POP CX POP BX CALL KEYUP; 画出键恢复的图样(3

25、)调用LIST进行已存乐曲的播放MODE存放用户选择的播放速度模式(慢速,中速或快速),其值控制每个音的时长,从而达到控制乐曲速度的效果。;-LIST-LIST PROC NEAR LISTMENU: LEA DX,LMENU; 显示放录音时的菜单 MOV AH,09H INT 21H LIN: MOV AH,07H; 读入播放速度或返回主菜单的要求 INT 21H CMP AL,M JNZ FFF JMP MAINMENU; 返回主菜单 FFF: CMP AL,1 JNZ MMM MOV MODE,1; 快速播放 JMP NEXT MMM: CMP AL,2 JNZ LLL MOV MODE

26、,4; 中速播放 JMP NEXT LLL: CMP AL,3 JNZ LIN; 按错键了则重新读入 MOV MODE,8; 慢速播放 NEXT: LEA DX,LBEG; 显示播放录音时的提示语 MOV AH,09H INT 21H LI: LEA DI,BUFFER INC DI INC DI LIO: MOV BX,DI INC DI INC DI CMP BX,0FFFFH JZ LI_END; 如果是录音的结尾则结束播放,否则继续 MOV DX,288H; 使能喇叭,开始播放 MOV AL,1 OUT DX,AL MOV DX,283H MOV AL,00110110B; 8253初

27、始化,计数器0,16位读写 OUT DX,AL; 工作于方式3,二进制计数 MOV DX,280H; 输出计数初值,即控制声音的频率 MOV AX,BX+SI OUT DX,AL MOV AL,AH OUT DX,AL MOV DX,283H MOV AL,01010110B;8253初始化,计数器1,低8位读写 OUT DX,AL;工作与方式3,二进制计数 MOV DX,281H;输出计数器初值,控制向DAC0832写入的频率 MOV AL,32 OUT DX,AL MOV BX,DI; 取得声音时长 MOV AX,BX; 加以播放速度的控制 MUL MODE MOV BX,AX INC D

28、I INC DI DELAY: ; 延时输出声音 PUSH SI LEA SI,SIN; 输出一个周期的正弦波 MOV CX,32; 频率由计数器0和1的分频结果控制 L1: WAIT3: MOV DX,2B0H; 在分频输出方波为1时输出正弦波的第2n个值 MOV AL,SI; 其中n=0,1,2,.,31 OUT DX,AL; 将正弦波的数值写入DAC,由其转化为模拟量输出 MOV DX,28AH IN AL,DX CMP AL,01H JZ WAIT3 INC SI WAIT4: MOV DX,2B0H; 在分频输出方波为0时输出正弦波的第2n+1个值 MOV AL,SI OUT DX,

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

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