1、电子琴设计微机原理课程设计332020年4月19日文档仅供参考,不当之处,请联系改正。微机原理课程设计电子琴设计一、 设计内容编写一实现电子琴的程序,并实现若干扩展功能。基本功能:用键盘输入对应的七个音阶,经过实验箱的喇叭发出声音,并经过七段数码管显示输入音阶;扩展功能:1、在程序中可预设多首曲目,按一键能够进入预设子菜单,对要播放的曲目进行选择,并实现播放该曲目。 2、程序运行时有友好的用户介面。 3. 当弹奏不同音阶时,双色点阵LED显示器显示不同的图案二、元件与仪器1计时器82532并行控制器8255A3实验台三、设计原理、思路及流程图1、 设计原理(1)对于一个特定的/转换接口电路,C
2、PU执行一条输出指令将数据送入/, 即可在其输出端得到一定的电压输出。给/转换器输入按正弦规律变化的数据, 在其输出端即可产生正弦波。对于音乐,每个音阶都有确定的频率。 各音阶标称频率值: (2)产生一个正弦波的数据可取32个(小于亦可),不同频率的区别,可经过调节向转换器输出数据的时间间隔,例如:发频率为261。1HZ,周期为1/261.1=3.83ms,输出数据的时间间隔为3.83ms/320.12ms. 定时时间能够由8253配合8255来实现。按下某键后发音时间的长短能够由发出的正弦波的个数多少来控制。本程序中设置默认长度为60个正弦波。(3)实验台上的七段数码管为共阴型,段码采用同相
3、驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。 (4) 点阵LED显示器是将许多LED类似矩阵一样排列在一起组成的显示器件,双色点阵LED是在每一个点阵的位置上有红绿或红黄或红白两种不同颜色的发光二极管。当微机输出的控制信号使得点阵中有些LED发光,有些不发光,即可显示出特定的信息,包括汉字、图形等。车站广场由微机控制的点阵LED大屏幕广告宣传牌随处可见。(5)实验仪上设有一个共阳极88点阵的红黄两色LED显示器,其点阵结构如图所示。该点阵对外引出24条线,其中8条行线,8条红色列线,8条黄色列线。若使某一种颜色、某一个LED发光,只要将与其相连的行线加高电平,
4、列线加低电平即可。例如欲显示汉字“年”,采用逐列循环发光。首先由“年”的点阵轮廓,确定点阵代码(如图所示)根据“年”的点阵代码,确定逐列循环发光的顺序如下: 行代码输出 44H; 红色列代码输 01H;第一列2个红色LED发光。 行代码输出 54H; 红色列代码输 02H;第二列3个红色LED发光。 行代码输出 54H; 红色列代码输 04H;第三列3个红色LED发光。 行代码输出 7FH; 红色列代码输 08H;第四列7个红色LED发光。 行代码输出 54H; 红色列代码输 10H;第五列3个红色LED发光。 行代码输出 DCH; 红色列代码输 20 H;第六列5个红色LED发光。 行代码输
5、出 44H; 红色列代码输 40 H;第七列2个红色LED发光。 行代码输出 24H; 红色列代码输 80 H;第八列2个红色LED发光。2、 电路连接图如下:(1)8253和8255连接如下(2).实验仪上的点阵LED及驱动电路的行代码、红色列代码、黄色列代码各用一片74LS273锁存。行代码输出的数据经过行驱动器7407加至点阵的8条行线上,红和黄列代码的输出数据经过驱动器DS75452反相后分别加至红和黄的列线上。行锁存器片选信号为CS1,红色列锁存器片选信号为CS2,黄色列锁存器片选信号为CS3。分别接上298h,2a0h,2a8h.3设计思路在本次课程设计中,根据复杂程序设计思想模块
6、化程序设计,分析和确定程序总体设计目标:电子琴基本功能及部分扩展功能后,将总体目标划分为若干模块(子程序,具体可见下)。程序设计的思路按以下顺序进行:1 分析与确定程序总体设计目标2 将总体目标划分为若干模块3 定义每个模块的具体任务,明确它与其它模块间的通信方式4 编写源程序,进行调试,包括:简单电子琴主程序结合实验指导书的两程序,将其分为若干个子程序,实现简单的播放和显示音阶的功能。发音子程序本子程序实现放音功能。首先从键盘读出键码,判断,如果键码不是18(9除外)即依然处于音阶输入准备状态,如果是,即求出相应的时间常数的序号,取60次32个正弦波数据,播放32个数据,组成一个正弦波。播放
7、60次后,然后判断是否有按键,如果有就进入死循环,直到下次按键为止。放歌子程序 本子程序实现播放预置在程序中的歌曲,并加上一个选择子程序段,可经过选择进入不同曲目,进而实现播放不同的歌曲,播放时直接调用放音子程序Led显示子程序 本程序实现从键盘输入一位十进制数字(09),在七段数码管上显示出来。显示广告版子程序 本子程序实现在广告板上在输入不同音阶时有我们自行设计的图案显示。输入不同图案相关的代码,然后调用图案显示判断程序段。对其进行判断,然后进入图案显示代码,最终显示不同的图案。源程序整体程序开始,显示提示信息,接着调用发音子程序,实现发音和显示。接着对9键进行判断、当9按下时,调用放音子
8、程序。然后iujinru选择,选择喜欢的歌曲并进行播放。当检测到esc时,退出。当每一个都检测不到时,退回到调用发音子程序,继续发音显示。从而实现有扩展功能的电子琴。5 模块连接,形成完整的程序6 编写程序文档4流程图以下用主程序与子程序配合流程图其进行说明。(1)主程序流程图开始调用发音子程序使用键盘输入是否1到8键放音子程序 NY退出是esc键是否9键NY调用广告版子程序Led子程序 Y(2)发音子程序流程图(3)led显示子程序(4)显示广告板子程序(5)放音子程序开始调用发音子程序用键盘输入喜欢歌曲的序号(1-3)是否1到3键放音子程序 YNY退出是esc键是否9键Y调用广告版子程序L
9、ed子程序 NN四、源程序STACK SEGMENT PARA STACKSTACK DB 100 DUP(0)STACK ENDSDATA SEGMENTIOPORTEQU 0C400H-0280HIO8255AEQU IOPORT+288HIO8255CEQU IOPORT+28AHIO8255BEQU IOPORT+28BHIO8253AEQU IOPORT+280HIO8253BEQU IOPORT+283HIO0832AEQU IOPORT+290HPROTEQU 0C400H-280HPROTHEQU PROT+298HPROTLREQU PROT+2A0HPROTLYEQU PR
10、OT+2A8HDATA1 DB 80H,96H,0AEH,0C5H,0D8H,0E9H,0F5H,0FDH DB 0FFH,0FDH,0F5H,0E9H,0D8H,0C5H,0AEH,96H DB 80H,66H,4EH,38H,25H,15H,09H,04H DB 00H,04H,09H,15H,25H,38H,4EH,66H;正弦波数据LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHMESG1 DB 0DH,0AH,INPUT A NUM (1-8=PLAY PIANO,9=PLAY MUSIC,ESC=EXIT):,0DH,0AH,$MESG2
11、 DB 0DH,0AH,PLEASE CHOOSE THE MUSIC YOU LIKE(1-AAA,2-BBB) :,0DH,0AH,$TIME DB 120,110,100,90,81,72,55,42;发不同音时8253的计数器初值NUM DB ?;NUM为8253计数器初值的序号-MESS DB STRIKE ANY KEY,RETURN TO DOS!,0AH,0DH,$MIN1 DB 00H,01H,02H,03H,04H,05H,06H,07HCOUNT DB 0JNUM DB ? ;JNUM用来存储输入数字MUSIC DB 30H,31H,31H,35H,35H,36H,36H
12、,35H,30H,30H,34H,34H,33H,33H,32H,32H,31H,100 DUP(30H);,35H,35H,34H,34H,33H,33H,32H,35H,35H,34H,34H,33H,33H,32H,31H,31H,35H,35H,36H,36H,35H,34H,34H,33H,33H,3;2H,32H,31H,QMUSIC DB ?DOWN DB 31H,32H,33H,34H,35H,36H,37H,38H,38H,37H,36H,35H,34H,33H,32H,31H,100 DUP(30H)PP DB ?TT DB ?LMUSIC EQU 45BUFF1 DB 0
13、0H,00H,18H,3CH,3CH,18H,00H,00HBUFF2 DB 00H,1EH,0AH,46H,62H,50H,78H,00HBUFF3 DB 00H,06H,06H,60H,60H,06H,06H,00HBUFF4 DB 24H,66H,0E7H,00H,00H,0E7H,66H,24HBUFF5 DB 42H,0E7H,42H,18H,18H,42H,0E7H,42HBUFF6 DB 66H,24H,81H,0C3H,0C3H,81H,24H,66HBUFF7 DB 24H,66H,00H,0DBH,0DBH,00H,66H,24HBUFF8 DB 0CBH,99H,10H,
14、0C6H,63H,08H,99H,0D3HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV TT,1 MOV AX,DATAMOV DS,AXMOV DX,IO8255B ;使8255的A口为输出方式MOV AX,92HOUT DX,AL MOV QMUSIC,0 JMP SSSZERO: MOV QMUSIC,0SSS: CMP QMUSIC,LMUSIC JE ZERO CMP QMUSIC,0 JE SSS4 JMP SSS3SSS4: MOV DX,OFFSET MESG1 MOV AH,9INT 21H ;显示提示信息 MOV
15、 AH,7INT 21H ;从键盘接收字符,不回显SSS3: CMP AL,39H JE PLAY0 CMP QMUSIC,0 JE OO JMP PLAYOO:CMP AL,1BHJE EXIT ;若为ESC键,则转EXIT CMP AL,30H JE SOFTDLY ;MOV DI ,OFFESET RECORD ; MOV DI ,AL ; INC DI CMP AL,31HJL SSSCMP AL,38HJG SSS ;若不在1-8之间转SSS MOV JNUM,ALSUB AL,31HMOV NUM,AL ;求出相应的时间常数的序号MOV CX,60 ;取60次32个正弦波数据SSS
16、2: MOV AL,JNUMSUB AL,30H ;将所得字符的ASCII码减30HMOV BX,OFFSET LED ;BX为数码表的起始地址XLAT ;求出相应的段码MOV DX,IO8255C ;从8255的C口输出OUT DX,ALDDD:MOV SI,0LLL:MOV AL,DATA1SI ;取正弦波数据MOV DX,IO0832AOUT DX,AL ;放音CALL DELAY ;调延时子程序INC SICMP SI,32 ;是否取完32个数据JL LLL ;若没有,则继续LOOP DDD ;总循环次数60是否完,没有,则继续 MOV CX,0002H CALL NIAN ;- CA
17、LL NIAN ;CALL NIANJMP SSS ;转SSSEXIT:MOV AH,4CHINT 21HPLAY0:CMP TT,1 JE TT1 MOV DX,OFFSET MESG2MOV AH,9INT 21H ;显示子菜单 MOV AH,7INT 21H ;输入子菜单命令 MOV PP,ALPLAY: MOV AL,QMUSIC CMP PP,32H JE PLAY2 CMP PP,31H JNE PLAY0 MOV BX,OFFSET MUSICPLAY3: XLAT MOV CL,QMUSIC ADD CL,01H MOV QMUSIC,CL JMP OOTT1: MOV TT,
18、0 MOV PP,32HPLAY2: MOV BX,OFFSET DOWN JMP PLAY3SOFTDLY: MOV BL,10DELAY4: MOV CX ,0FFFFHWAIT3: LOOP WAIT3 DEC BL JNZ DELAY4 JMP SSSDELAY PROC NEAR ;延时子程序CCC1:MOV BX,OFFSET TIMEMOV DX,IO8253B ;置8253通道0为方式0工作MOV AL,10HOUT DX,ALMOV AL,NUM ;取相应的时间常数XLATMOV DX,IO8253AOUT DX,AL ;向8253通道0输出KKK:MOV DX,IO8255
19、AIN AL,DX ;从8255A口读一字节TEST AL,01 ;判PA0口是否为1JZ KKK ;若不为1,则转KKKRET ;子程序返回DELAY ENDPNIAN PROC NEARSTART2: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MESSAGN: MOVCX,80HD2: MOVSI,OFFSET MIN1 MOVAH,01H PUSHCX MOVCX,0008HNEXT: MOV AL,JNUM CALL BUFF MOVDX,PROTH OUTDX,AL MOVAL,AH MOVDX,PROTLR OUTDX,AL ;显示第一行红 SHLAH
20、,01 INCSI PUSH CX MOVCX,0FFFFHDELAY2: LOOP DELAY2 ;延时 POPCX LOOP NEXT POPCX CALL DELAY LOOP D2 MOVAL,00 MOVDX,PROTLR OUTDX,AL CMP QMUSIC,0 JE C1 RETC1: MOVAH,01 INT16H JNZ BACKAGN1: MOVCX,80H ;AGN1为显示黄色D1: MOVSI,OFFSET MIN1 MOVAH,01 PUSH CX MOVCX,0008HNEXT1: MOV AL,JNUM CALL BUFF MOVDX,PROTH OUTDX,A
21、L MOVAL,AH MOVDX,PROTLY OUTDX,AL SHLAH,01 INCSI PUSHCX MOVCX,0FFFFHDELAY1: LOOP DELAY1 MOVCX,0FFFFHDELAY3: LOOP DELAY3 POPCX LOOP NEXT1 POPCX CALL DELAY LOOPD1 MOVAL,00 MOVDX,PROTLY OUTDX,AL CMP QMUSIC,0 JE C2 RETC2: MOVAH,01 INT16H JNZ BACK JMP AGNBACK: RET;-DELAY0 PROCNEAR ;延迟子程序 PUSHCX MOVCX,0FFF
22、FHCCC: LOOPCCC POPCX RETDELAY0 ENDP;-;-BUFF PROC NEAR ; 代码选择判断子程序JUDGE1: CMP AL,31H JE L1 CMP AL,32H JE L2 CMP AL,33H JE L3 CMP AL,34H JE L4 CMP AL,35H JE L5 CMP AL,36H JE L6 CMP AL,37H JE L7 CMP AL,38H JE L8 ;JMP A2L1: MOVAL,SI MOVBX,OFFSET BUFF1 XLAT RET ;得到第一行码L2: MOVAL,SI MOVBX,OFFSET BUFF2 XLAT
23、 RETL3: MOVAL,SI MOVBX,OFFSET BUFF3 XLAT RETL4: MOVAL,SI MOVBX,OFFSET BUFF4 XLAT RETL5: MOVAL,SI MOVBX,OFFSET BUFF5 XLAT RETL6: MOVAL,SI MOVBX,OFFSET BUFF6 XLAT RETL7: MOVAL,SI MOVBX,OFFSET BUFF7 XLAT RETL8: MOVAL,SI MOVBX,OFFSET BUFF8 XLAT RETBUFF ENDPNIAN ENDP CODE ENDSEND START五、调试情况及其分析源程序完成后,进行
24、子程序与程序的调试工作,程序调试过程、完成情况及其分析按以下顺序进行:1 主程序简单电子琴功能主程序要求完成的功能有:电子琴简单功能实现及将音阶用数码管显示,主程序由电子琴实验程序有机组成,两个程序简单拼凑在一齐是不能实现的。经过实际调试和修改,将原电子琴程序改为2个子程序:(实现播放音阶)和(实现播放音阶时延时);并加入了数码管显示的子程序以及广告版显示图案程序。然后播放预存歌曲由放歌子程序完成。调试后,主程序能实现课程设计要求的功能,而且界面清晰、操作容易。2 子程序放歌(已预存)功能 此功能将一首预存的歌曲播放,此功能能够调用放音的子程序实现,唯一不同就是根据键盘的输入控制,选择播放的缓
25、存区是预存歌缓存区。然后经过键盘选择所要播放的歌曲曲目3 源程序整体功能 将各子程序调试完成后,进行最后的源程序整体功能调试。调试过程中我们注意到:a 程序模块化(功能分为若干子程序)能使源程序清晰,调试简单,因此在调试中我们还将源程序进一步模块化。b 注意子程序之间的通信方式,c 调用子程序前,使用push/pop保护了一些子程序会用到的主程序同时会用到的寄存器,保证调用之后主程序的顺利执行。 在调试过程中出现的一些小问题,我们都根据以上3点总结出的经验作为原则进行调试,调试过程十分顺利。最后根据电子琴的实际用途加上了一些必要清晰的提示性语句,使界面更加友好。六、 实验总结:微机原理与应用这
26、门课程刚刚于上学期结束,可是由于以前我们实验课时实在是太少了,还有经过寒假的放松,因此这次试验刚开始时最大的感觉就是以前学过的东西要不就是忘记了,或是记得的东西很难一下子拿出来应用。这个不但是在微机原理这门课,包括其它的课程设计也是开始会遇到知识与应用衔接不起来的困境。经过老师的提示及相关实验指导书的资料我们找到了入手点,这点也是我觉得题目设置的比较合理的一点:在已有基础题目的基础上加入创新内容。在基础功能的实现上并没有遇到问题,主要也是有参考内容的知道,同时经过参考内容更好的把握了设计的整体思路及各个模块的细节。可是在拓展功能上就有不少的问题。就如我所做的电子琴来说,基本功能的程序已经在那里
27、,可是如何使它能够同时用数码管显示音阶呢?我们就找到了数码管显示的相关程序,可是直接相拼接显然是不行的,她们的端口还有重叠的地方,还有就是8255,8253两块芯片的相关使用指令,这些都是关系到我们程序是否实现功能的所在。我们经过翻阅相关资料,逐步解决了相关的问题,然后我们同时也想到了将我们的电子琴做得与众不同,因此想到了旁边的点阵LED显示器,为了使我们的计划成功,同样的我们也翻阅了很多的资料,最后终于完成。最后在老师的提示下,我们完成了在程序中预置歌曲的功能,还有开机音乐,可是在录制歌曲时出现了问题。我们试了很久,可是最后还是无果而终,留下了一丝遗憾。也希望在以后的实际问题中,能够得到相关解决。也希望老师能够在汇编这一方面多给我们指导。除了微机相关的知识,我经过这个实验更深刻了体会了数字与模拟之间的关系和相互转换的规律。七、 关于微机原理课程,实验课及课程设计的建议和意见经过之前是微机实验和此次课程设计感触最深的一点就是:就是上学期我们微机实验课的课时是在是太少啦,以致于留给我们做实验的时间实在是太少了,因此我们虽然完成了书本知识的学习,可是我们能够真正运用的东西太少了。因此这次的课程设计提供给我们这个绝好的机会,让我们能得到学以致用的机会。我希望以后这样能够让我们动手体验的机会能够更多一些。
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100