当前位置:文档之家› 电子琴设计(微机原理课程设计)

电子琴设计(微机原理课程设计)

. . ..微机原理课程设计电子琴设计一、设计内容编写一实现电子琴的程序,并实现若干扩展功能。

基本功能:用键盘输入对应的七个音阶,通过实验箱的喇叭发出声音,并通过七段数码管显示输入音阶;扩展功能:1、在程序中可预设多首曲目,按一键可以进入预设子菜单,对要播放的曲目进行选择,并实现播放该曲目。

2、程序运行时有友好的用户介面。

3. 当弹奏不同音阶时,双色点阵LED显示器显示不同的图案二、元件与仪器1.计时器82532.并行控制器8255A3.实验台三、设计原理、思路及流程图1、设计原理(1)对于一个特定的D/A转换接口电路,CPU执行一条输出指令将数据送入D/A,即可在其输出端得到一定的电压输出。

给D/A转换器输入按正弦规律变化的数据,在其输出端即可产生正弦波。

对于音乐,每个音阶都有确定的频率。

各音阶标称频率值:(2)产生一个正弦波的数据可取32个(小于亦可),不同频率的区别,可通过调节向D/A转换器输出数据的时间间隔,例如:发"1"频率为261。

1HZ,周期为1/261.1=3.83ms,输出数据的时间间隔为3.83ms/32=0.12ms. 定时时间可以由8253配合8255来实现。

按下某键后发音时间的长短可以由发出的正弦波的个数多少来控制。

本程序中设置默认长度为60个正弦波。

(3)实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。

(4) 点阵LED显示器是将许多LED类似矩阵一样排列在一起组成的显示器件,双色点阵LED是在每一个点阵的位置上有红绿或红黄或红白两种不同颜色的发光二极管。

当微机输出的控制信号使得点阵中有些LED发光,有些不发光,即可显示出特定的信息,包括汉字、图形等。

车站广场由微机控制的点阵LED大屏幕广告宣传牌随处可见。

(5)实验仪上设有一个共阳极8×8点阵的红黄两色LED显示器,其点阵结构如图所示。

该点阵对外引出24条线,其中8条行线,8条红色列线,8条黄色列线。

若使某一种颜色、某一个LED发光,只要将与其相连的行线加高电平,列线加低电平即可。

例如欲显示汉字“年”,采用逐列循环发光。

首先由“年”的点阵轮廓,确定点阵代码(如图所示)根据“年”的点阵代码,确定逐列循环发光的顺序如下:①行代码输出 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发光。

⑦行代码输出 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.设计思路在本次课程设计中,根据复杂程序设计思想——模块化程序设计,分析和确定程序总体设计目标:电子琴基本功能及部分扩展功能后,将总体目标划分为若干模块(子程序,具体可见下)。

程序设计的思路按以下顺序进行:1.分析与确定程序总体设计目标2.将总体目标划分为若干模块3.定义每个模块的具体任务,明确它与其他模块间的通信方式4.编写源程序,进行调试,包括:简单电子琴主程序结合实验指导书的两程序,将其分为若干个子程序,实现简单的播放和显示音阶的功能。

发音子程序本子程序实现放音功能。

首先从键盘读出键码,判断,如果键码不是1-8(9除外)即仍然处于音阶输入准备状态,如果是,即求出相应的时间常数的序号,取60次32个正弦波数据,播放32个数据,组成一个正弦波。

播放60次后,然后判断是否有按键,如果有就进入死循环,直到下次按键为止。

放歌子程序本子程序实现播放预置在程序中的歌曲,并加上一个选择子程序段,可通过选择进入不同曲目,进而实现播放不同的歌曲,播放时直接调用放音子程序Led显示子程序本程序实现从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。

显示广告版子程序本子程序实现在广告板上在输入不同音阶时有我们自行设计的图案显示。

输入不同图案相关的代码,然后调用图案显示判断程序段。

对其进行判断,然后进入图案显示代码,最终显示不同的图案。

源程序整体程序开始,显示提示信息,接着调用发音子程序,实现发音和显示。

接着对9键进行判断、当9按下时,调用放音子程序。

然后iujinru选择,选择喜欢的歌曲并进行播放。

当检测到esc时,退出。

当每一个都检测不到时,退回到调用发音子程序,继续发音显示。

从而实现有扩展功能的电子琴。

5.模块连接,形成完整的程序6.编写程序文档4.流程图以下用主程序与子程序配合流程图其进行说明。

(1)主程序流程图(2)发音子程序流程图(3)led显示子程序(4)显示广告板子程序(5)放音子程序四、源程序STACK SEGMENT PARA STACK'STACK'DB 100 DUP(0)STACK ENDSDATA SEGMENTIOPORT EQU 0C400H-0280HIO8255A EQU IOPORT+288HIO8255C EQU IOPORT+28AHIO8255B EQU IOPORT+28BHIO8253A EQU IOPORT+280HIO8253B EQU IOPORT+283HIO0832A EQU IOPORT+290HPROT EQU 0C400H-280HPROTH EQU PROT+298HPROTLR EQU PROT+2A0HPROTLY EQU PROT+2A8HDATA1 DB 80H,96H,0AEH,0C5H,0D8H,0E9H,0F5H,0FDHDB 0FFH,0FDH,0F5H,0E9H,0D8H,0C5H,0AEH,96HDB 80H,66H,4EH,38H,25H,15H,09H,04HDB 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=PLAYMUSIC,ESC=EXIT):',0DH,0AH,'$'MESG2 DB 0DH,0AH,'PLEASE CHOOSE THE MUSIC YOULIKE(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 DB30H,31H,31H,35H,35H,36H,36H,35H,30H,30H,34H,34H,33H,33H,32H,32H,31H,100DUP(30H);,35H,35H,34H,34H,33H,33H,32H,35H,35H,34H,34H,33H,33H,32H,31H,31H,35H,3 5H,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 00H,00H,18H,3CH,3CH,18H,00H,00HBUFF2 DB 00H,1EH,0AH,46H,62H,50H,78H,00HBUFF3 DB 00H,06H,06H,60H,60H,06H,06H,00H BUFF4 DB 24H,66H,0E7H,00H,00H,0E7H,66H,24H BUFF5 DB 42H,0E7H,42H,18H,18H,42H,0E7H,42H BUFF6 DB 66H,24H,81H,0C3H,0C3H,81H,24H,66H BUFF7 DB 24H,66H,00H,0DBH,0DBH,00H,66H,24H BUFF8 DB 0CBH,99H,10H,0C6H,63H,08H,99H,0D3HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV TT,1MOV AX,DATAMOV DS,AXMOV DX,IO8255B ;使8255的A口为输出方式MOV AX,92HOUT DX,ALMOV QMUSIC,0JMP SSSZERO: MOV QMUSIC,0SSS: CMP QMUSIC,LMUSICJE ZEROCMP QMUSIC,0JE SSS4JMP SSS3SSS4: MOV DX,OFFSET MESG1MOV AH,9INT 21H ;显示提示信息MOV AH,7INT 21H ;从键盘接收字符,不回显SSS3: CMP AL,39HJE PLAY0CMP QMUSIC,0JE OOJMP PLAYOO: CMP AL,1BHJE EXIT ;若为ESC键,则转EXITCMP AL,30HJE SOFTDLY;MOV DI ,OFFESET RECORD; MOV [DI] ,AL; INC DICMP AL,31HJL SSSCMP AL,38HJG SSS ;若不在'1'-'8'之间转SSSMOV JNUM,ALSUB AL,31HMOV NUM,AL ;求出相应的时间常数的序号MOV CX,60 ;取60次32个正弦波数据SSS2: 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,DATA1[SI] ;取正弦波数据MOV DX,IO0832AOUT DX,AL ;放音CALL DELAY ;调延时子程序INC SICMP SI,32 ;是否取完32个数据JL LLL ;若没有,则继续LOOP DDD ;总循环次数60是否完,没有,则继续 MOV CX,0002HCALL NIAN ;------------------------ CALL NIAN;CALL NIANJMP SSS ;转SSSEXIT: MOV AH,4CHINT 21HPLAY0: CMP TT,1JE TT1MOV DX,OFFSET MESG2MOV AH,9INT 21H ;显示子菜单MOV AH,7INT 21H ;输入子菜单命令MOV PP,ALPLAY: MOV AL,QMUSICCMP PP,32HJE PLAY2CMP PP,31HJNE PLAY0MOV BX,OFFSET MUSICPLAY3: XLATMOV CL,QMUSICADD CL,01HMOV QMUSIC,CLJMP OOTT1: MOV TT,0MOV PP,32HPLAY2: MOV BX,OFFSET DOWNJMP PLAY3SOFTDLY: MOV BL,10DELAY4: MOV CX ,0FFFFHWAIT3: LOOP WAIT3DEC BLJNZ DELAY4JMP 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,IO8255AIN AL,DX ;从8255A口读一字节TEST AL,01 ;判PA0口是否为1JZ KKK ;若不为1,则转KKKRET ;子程序返回DELAY ENDPNIAN PROC NEARSTART2: MOV AX,DATAMOV DS,AXMOV DX,OFFSET MESSAGN: MOV CX,80HD2: MOV SI,OFFSET MIN1MOV AH,01HPUSH CXMOV CX,0008HNEXT: MOV AL,JNUMCALL BUFFMOV DX,PROTHOUT DX,ALMOV AL,AHMOV DX,PROTLROUT DX,AL ;显示第一行红SHL AH,01INC SIPUSH CXMOV CX,0FFFFHDELAY2: LOOP DELAY2 ;延时POP CXLOOP NEXTPOP CXCALL DELAYLOOP D2MOV AL,00MOV DX,PROTLROUT DX,ALCMP QMUSIC,0JE C1RETC1: MOV AH,01INT 16HJNZ BACKAGN1: MOV CX,80H ;AGN1为显示黄色D1: MOV SI,OFFSET MIN1MOV AH,01PUSH CXMOV CX,0008HNEXT1: MOV AL,JNUMCALL BUFFMOV DX,PROTHOUT DX,ALMOV AL,AHMOV DX,PROTLYOUT DX,ALSHL AH,01INC SIPUSH CXMOV CX,0FFFFHDELAY1: LOOP DELAY1MOV CX,0FFFFHDELAY3: LOOP DELAY3POP CXLOOP NEXT1POP CXCALL DELAYLOOP D1MOV AL,00MOV DX,PROTLYOUT DX,ALCMP QMUSIC,0JE C2RETC2: MOV AH,01INT 16HJNZ BACKJMP AGNBACK: RET;---------------------------------------------------------------- DELAY0 PROC NEAR ;延迟子程序 PUSH CXMOV CX,0FFFFHCCC: LOOP CCCPOP CXRETDELAY0 ENDP;--------------------------------------------------------------------- ;-------------------------------------------------------------------- BUFF PROC NEAR ; 代码选择判断子程序JUDGE1: CMP AL,31HJE L1CMP AL,32HJE L2CMP AL,33HJE L3CMP AL,34HJE L4CMP AL,35HJE L5CMP AL,36HJE L6CMP AL,37HJE L7CMP AL,38HJE L8;JMP A2L1: MOV AL,[SI]MOV BX,OFFSET BUFF1XLATRET ;得到第一行码L2: MOV AL,[SI]MOV BX,OFFSET BUFF2XLATRETL3: MOV AL,[SI]MOV BX,OFFSET BUFF3XLATRETL4: MOV AL,[SI]MOV BX,OFFSET BUFF4XLATRETL5: MOV AL,[SI]MOV BX,OFFSET BUFF5XLATRETL6: MOV AL,[SI]MOV BX,OFFSET BUFF6XLATRETL7: MOV AL,[SI]MOV BX,OFFSET BUFF7XLATRETL8: MOV AL,[SI]MOV BX,OFFSET BUFF8XLATRETBUFF ENDPNIAN ENDPCODE ENDSEND START五、调试情况及其分析源程序完成后,进行子程序与程序的调试工作,程序调试过程、完成情况及其分析按以下顺序进行:1.主程序简单电子琴功能主程序要求完成的功能有:电子琴简单功能实现及将音阶用数码管显示,主程序由电子琴实验程序有机组成,两个程序简单拼凑在一齐是不能实现的。

相关主题