电子琴研发设计微机原理课程研发设计.docx

上传人:b****2 文档编号:18636670 上传时间:2023-08-24 格式:DOCX 页数:25 大小:243.18KB
下载 相关 举报
电子琴研发设计微机原理课程研发设计.docx_第1页
第1页 / 共25页
电子琴研发设计微机原理课程研发设计.docx_第2页
第2页 / 共25页
电子琴研发设计微机原理课程研发设计.docx_第3页
第3页 / 共25页
电子琴研发设计微机原理课程研发设计.docx_第4页
第4页 / 共25页
电子琴研发设计微机原理课程研发设计.docx_第5页
第5页 / 共25页
电子琴研发设计微机原理课程研发设计.docx_第6页
第6页 / 共25页
电子琴研发设计微机原理课程研发设计.docx_第7页
第7页 / 共25页
电子琴研发设计微机原理课程研发设计.docx_第8页
第8页 / 共25页
电子琴研发设计微机原理课程研发设计.docx_第9页
第9页 / 共25页
电子琴研发设计微机原理课程研发设计.docx_第10页
第10页 / 共25页
电子琴研发设计微机原理课程研发设计.docx_第11页
第11页 / 共25页
电子琴研发设计微机原理课程研发设计.docx_第12页
第12页 / 共25页
电子琴研发设计微机原理课程研发设计.docx_第13页
第13页 / 共25页
电子琴研发设计微机原理课程研发设计.docx_第14页
第14页 / 共25页
电子琴研发设计微机原理课程研发设计.docx_第15页
第15页 / 共25页
电子琴研发设计微机原理课程研发设计.docx_第16页
第16页 / 共25页
电子琴研发设计微机原理课程研发设计.docx_第17页
第17页 / 共25页
电子琴研发设计微机原理课程研发设计.docx_第18页
第18页 / 共25页
电子琴研发设计微机原理课程研发设计.docx_第19页
第19页 / 共25页
电子琴研发设计微机原理课程研发设计.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

电子琴研发设计微机原理课程研发设计.docx

《电子琴研发设计微机原理课程研发设计.docx》由会员分享,可在线阅读,更多相关《电子琴研发设计微机原理课程研发设计.docx(25页珍藏版)》请在冰点文库上搜索。

电子琴研发设计微机原理课程研发设计.docx

电子琴研发设计微机原理课程研发设计

 

微机原理课程设计

电子琴设计

 

一、设计内容

编写一实现电子琴的程序,并实现若干扩展功能。

基本功能:

用键盘输入对应的七个音阶,通过实验箱的喇叭发出声音,并通过七段数码管显示输入音阶;

扩展功能:

1、在程序中可预设多首曲目,按一键可以进入预设子菜单,对要播放的曲目进行选择,并实现播放该曲目。

矚慫润厲钐瘗睞枥庑赖。

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

3.当弹奏不同音阶时,双色点阵LED显示器显示不同的图案

二、元件与仪器

1.计时器8253

2.并行控制器8255A

3.实验台

三、设计原理、思路及流程图

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;红色列代码输20H;第六列5个红色LED发光。

⑦行代码输出44H;红色列代码输40H;第七列2个红色LED发光。

⑧行代码输出24H;红色列代码输80H;第八列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)放音子程序

贓熱俣阃歲匱阊邺镓騷。

 

四、源程序

STACKSEGMENTPARASTACK'STACK'

DB100DUP(0)

STACKENDS

DATASEGMENT

IOPORTEQU0C400H-0280H

IO8255AEQUIOPORT+288H

IO8255CEQUIOPORT+28AH

IO8255BEQUIOPORT+28BH

IO8253AEQUIOPORT+280H

IO8253BEQUIOPORT+283H

IO0832AEQUIOPORT+290H

PROTEQU0C400H-280H

PROTHEQUPROT+298H

PROTLREQUPROT+2A0H

PROTLYEQUPROT+2A8H

DATA1DB80H,96H,0AEH,0C5H,0D8H,0E9H,0F5H,0FDH

DB0FFH,0FDH,0F5H,0E9H,0D8H,0C5H,0AEH,96H

DB80H,66H,4EH,38H,25H,15H,09H,04H

DB00H,04H,09H,15H,25H,38H,4EH,66H;正弦波数据

LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH坛摶乡囂忏蒌鍥铃氈淚。

MESG1DB0DH,0AH,'INPUTANUM(1--8=PLAYPIANO,9=PLAYMUSIC,ESC=EXIT):

',0DH,0AH,'$'蜡變黲癟報伥铉锚鈰赘。

MESG2DB0DH,0AH,'PLEASECHOOSETHEMUSICYOULIKE(1-AAA,2-BBB):

',0DH,0AH,'$'買鲷鴯譖昙膚遙闫撷凄。

TIMEDB120,110,100,90,81,72,55,42;发不同音时8253的计数器初值綾镝鯛駕櫬鹕踪韦辚糴。

NUMDB?

;NUM为8253计数器初值的序号--

MESSDB'STRIKEANYKEY,RETURNTODOS!

',0AH,0DH,'$'驅踬髏彦浃绥譎饴憂锦。

MIN1DB00H,01H,02H,03H,04H,05H,06H,07H

COUNTDB0

JNUMDB?

;JNUM用来存储输入数字

MUSICDB30H,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,35H,36H,36H,35H,34H,34H,33H,33H,3;2H,32H,31H,猫虿驢绘燈鮒诛髅貺庑。

QMUSICDB?

DOWNDB31H,32H,33H,34H,35H,36H,37H,38H,38H,37H,36H,35H,34H,33H,32H,31H,100DUP(30H)锹籁饗迳琐筆襖鸥娅薔。

PPDB?

TTDB?

LMUSICEQU45

BUFF1DB00H,00H,18H,3CH,3CH,18H,00H,00H

BUFF2DB00H,1EH,0AH,46H,62H,50H,78H,00H

BUFF3DB00H,06H,06H,60H,60H,06H,06H,00H

BUFF4DB24H,66H,0E7H,00H,00H,0E7H,66H,24H

BUFF5DB42H,0E7H,42H,18H,18H,42H,0E7H,42H

BUFF6DB66H,24H,81H,0C3H,0C3H,81H,24H,66H

BUFF7DB24H,66H,00H,0DBH,0DBH,00H,66H,24H

BUFF8DB0CBH,99H,10H,0C6H,63H,08H,99H,0D3H

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVTT,1

MOVAX,DATA

MOVDS,AX

MOVDX,IO8255B;使8255的A口为输出方式

MOVAX,92H

OUTDX,AL

MOVQMUSIC,0

JMPSSS

ZERO:

MOVQMUSIC,0

SSS:

CMPQMUSIC,LMUSIC

JEZERO

CMPQMUSIC,0

JESSS4

JMPSSS3

SSS4:

MOVDX,OFFSETMESG1

MOVAH,9

INT21H;显示提示信息

MOVAH,7

INT21H;从键盘接收字符,不回显

SSS3:

CMPAL,39H

JEPLAY0

CMPQMUSIC,0

JEOO

JMPPLAY

OO:

CMPAL,1BH

JEEXIT;若为ESC键,则转EXIT

CMPAL,30H

JESOFTDLY

;MOVDI,OFFESETRECORD

;MOV[DI],AL

;INCDI

 

CMPAL,31H

JLSSS

CMPAL,38H

JGSSS;若不在'1'-'8'之间转SSS

MOVJNUM,AL

SUBAL,31H

MOVNUM,AL;求出相应的时间常数的序号

MOVCX,60;取60次32个正弦波数据

SSS2:

MOVAL,JNUM

SUBAL,30H;将所得字符的ASCII码减30H

MOVBX,OFFSETLED;BX为数码表的起始地址

XLAT;求出相应的段码

MOVDX,IO8255C;从8255的C口输出

OUTDX,AL

DDD:

MOVSI,0

LLL:

MOVAL,DATA1[SI];取正弦波数据

MOVDX,IO0832A

OUTDX,AL;放音

CALLDELAY;调延时子程序

INCSI

CMPSI,32;是否取完32个数据

JLLLL;若没有,则继续

LOOPDDD;总循环次数60是否完,没有,则继续

MOVCX,0002H

CALLNIAN;------------------------

CALLNIAN

;CALLNIAN

JMPSSS;转SSS

EXIT:

MOVAH,4CH

INT21H

PLAY0:

CMPTT,1

JETT1

MOVDX,OFFSETMESG2

MOVAH,9

INT21H;显示子菜单

MOVAH,7

INT21H;输入子菜单命令

MOVPP,AL

PLAY:

MOVAL,QMUSIC

CMPPP,32H

JEPLAY2

CMPPP,31H

JNEPLAY0

MOVBX,OFFSETMUSIC

PLAY3:

XLAT

MOVCL,QMUSIC

ADDCL,01H

MOVQMUSIC,CL

JMPOO

TT1:

MOVTT,0

MOVPP,32H

PLAY2:

MOVBX,OFFSETDOWN

JMPPLAY3

SOFTDLY:

MOVBL,10

DELAY4:

MOVCX,0FFFFH

WAIT3:

LOOPWAIT3

DECBL

JNZDELAY4

JMPSSS

 

DELAYPROCNEAR;延时子程序

CCC1:

MOVBX,OFFSETTIME

MOVDX,IO8253B;置8253通道0为方式0工作

MOVAL,10H

OUTDX,AL

MOVAL,NUM;取相应的时间常数

XLAT

MOVDX,IO8253A

OUTDX,AL;向8253通道0输出

KKK:

MOVDX,IO8255A

INAL,DX;从8255A口读一字节

TESTAL,01;判PA0口是否为1

JZKKK;若不为1,则转KKK

RET;子程序返回

DELAYENDP

 

NIANPROCNEAR

START2:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETMESS

AGN:

MOVCX,80H

D2:

MOVSI,OFFSETMIN1

MOVAH,01H

PUSHCX

MOVCX,0008H

NEXT:

MOVAL,JNUM

CALLBUFF

MOVDX,PROTH

OUTDX,AL

MOVAL,AH

MOVDX,PROTLR

OUTDX,AL;显示第一行红

SHLAH,01

INCSI

PUSHCX

MOVCX,0FFFFH

DELAY2:

LOOPDELAY2;延时

POPCX

LOOPNEXT

POPCX

CALLDELAY

LOOPD2

MOVAL,00

MOVDX,PROTLR

OUTDX,AL

CMPQMUSIC,0

JEC1

RET

C1:

MOVAH,01

INT16H

JNZBACK

AGN1:

MOVCX,80H;AGN1为显示黄色

D1:

MOVSI,OFFSETMIN1

MOVAH,01

PUSHCX

MOVCX,0008H

NEXT1:

MOVAL,JNUM

CALLBUFF

MOVDX,PROTH

OUTDX,AL

MOVAL,AH

MOVDX,PROTLY

OUTDX,AL

SHLAH,01

INCSI

PUSHCX

MOVCX,0FFFFH

DELAY1:

LOOPDELAY1

MOVCX,0FFFFH

DELAY3:

LOOPDELAY3

POPCX

LOOPNEXT1

POPCX

CALLDELAY

LOOPD1

MOVAL,00

MOVDX,PROTLY

OUTDX,AL

CMPQMUSIC,0

JEC2

RET

C2:

MOVAH,01

INT16H

JNZBACK

JMPAGN

BACK:

RET

;----------------------------------------------------------------構氽頑黉碩饨荠龈话骛。

DELAY0PROCNEAR;延迟子程序輒峄陽檉簖疖網儂號泶。

PUSHCX

MOVCX,0FFFFH

CCC:

LOOPCCC

POPCX

RET

DELAY0ENDP

;---------------------------------------------------------------------尧侧閆繭絳闕绚勵蜆贅。

;--------------------------------------------------------------------识饒鎂錕缢灩筧嚌俨淒。

BUFFPROCNEAR;代码选择判断子程序凍鈹鋨劳臘锴痫婦胫籴。

JUDGE1:

CMPAL,31H

JEL1

CMPAL,32H

JEL2

CMPAL,33H

JEL3

CMPAL,34H

JEL4

CMPAL,35H

JEL5

CMPAL,36H

JEL6

CMPAL,37H

JEL7

CMPAL,38H

JEL8

;JMPA2

L1:

MOVAL,[SI]

MOVBX,OFFSETBUFF1

XLAT

RET;得到第一行码

L2:

MOVAL,[SI]

MOVBX,OFFSETBUFF2

XLAT

RET

L3:

MOVAL,[SI]

MOVBX,OFFSETBUFF3

XLAT

RET

L4:

MOVAL,[SI]

MOVBX,OFFSETBUFF4

XLAT

RET

L5:

MOVAL,[SI]

MOVBX,OFFSETBUFF5

XLAT

RET

L6:

MOVAL,[SI]

MOVBX,OFFSETBUFF6

XLAT

RET

L7:

MOVAL,[SI]

MOVBX,OFFSETBUFF7

XLAT

RET

L8:

MOVAL,[SI]

MOVBX,OFFSETBUFF8

XLAT

RET

BUFFENDP

NIANENDP

CODEENDS

ENDSTART

五、调试情况及其分析

源程序完成后,进行子程序与程序的调试工作,程序调试过程、完成情况及其分析按以下顺序进行:

1.主程序简单电子琴功能

主程序要求完成的功能有:

电子琴简单功能实现及将音阶用数码管显示,主程序由电子琴实验程序有机组成,两个程序简单拼凑在一齐是不能实现的。

经过实际调试和修改,将原电子琴程序改为2个子程序:

(实现播放音阶)和(实现播放音阶时延时);并加入了数码管显示的子程序以及广告版显示图案程序。

然后播放预存歌曲由放歌子程序完成。

恥諤銪灭萦欢煬鞏鹜錦。

调试后,主程序能实现课程设计要求的功能,并且界面清晰、操作容易。

 

2.子程序放歌(已预存)功能

此功能将一首预存的歌曲播放,此功能可以调用放音的子程序实现,唯一不同就是根据键盘的输入控制,选择播放的缓存区是预存歌缓存区。

然后通过键盘选择所要播放的歌曲曲目鯊腎鑰诎褳鉀沩懼統庫。

 

3.源程序整体功能

将各子程序调试完成后,进行最后的源程序整体功能调试。

调试过程中我们注意到:

a.程序模块化(功能分为若干子程序)能使源程序清晰,调试简单,因此在调试中我们还将源程序进一步模块化。

b.注意子程序之间的通信方式,

c.调用子程序前,使用push/pop保护了一些子程序会用到的主程序同时会用到的寄存器,保证调用之后主程序的顺利执行。

硕癘鄴颃诌攆檸攜驤蔹。

在调试过程中出现的一些小问题,我们都根据以上3点总结出的经验作为原则进行调试,调试过程十分顺利。

最后根据电子琴的实际用途加上了一些必要清晰的提示性语句,使界面更加友好。

阌擻輳嬪諫迁择楨秘騖。

六、实验总结:

微机原理与应用这门课程刚刚于上学期结束,但是由于以前我们实验课时实在是太少了,还有经过寒假的放松,所以这次试验刚开始时最大的感觉就是以前学过的东西要不就是忘记了,或是记得的东西很难一下子拿出来应用。

这个不仅是在微机原理这门课,包括其他的课程设计也是开始会遇到知识与应用衔接不起来的困境。

氬嚕躑竄贸恳彈瀘颔澩。

通过老师的提示及相关实验指导书的资料我们找到了入手点,这点也是我觉得题目设置的比较合理的一点:

在已有基础题目的基础上加入创新内容。

在基础功能的实现上并没有遇到问题,主要也是有参考内容的知道,同时通过参考内容更好的把握了设计的整体思路及各个模块的细节。

但是在拓展功能上就有不少的问题。

就如我所做的电子琴来说,基本功能的程序已经在那里,但是如何使它可以同时用数码管显示音阶呢?

我们就找到了数码管显示的相关程序,但是直接相拼接显然是不行的,他们的端口还有重叠的地方,还有就是8255,8253两块芯片的相关使用指令,这些都是关系到我们程序是否实现功能的所在。

我们通过翻阅相关资料,逐步解决了相关的问题,然后我们同时也想到了将我们的电子琴做得与众不同,所以想到了旁边的点阵LED显示器,为了使我们的计划成功,同样的我们也翻阅了很多的资料,最后终于完成。

釷鹆資贏車贖孙滅獅赘。

最后在老师的提示下,我们完成了在程序中预置歌曲的功能,还有开机音乐,但是在录制歌曲时出现了问题。

我们试了很久,但是最后还是无果而终,留下了一丝遗憾。

也希望在以后的实际问题中,能够得到相关解决。

也希望老师能够在汇编这一方面多给我们指导。

怂阐譜鯪迳導嘯畫長凉。

除了微机相关的知识,我通过这个实验更深刻了体会了数字与模拟之间的关系和相互转换的规律。

七、关于微机原理课程,实验课及课程设计的建议和意见

通过之前是微机实验和此次课程设计感触最深的一点就是:

就是上学期我们微机实验课的课时是在是太少啦,以致于留给我们做实验的时间实在是太少了,所以我们虽然完成了书本知识的学习,但是我们能够真正运用的东西太少了。

所以这次的课程设计提供给我们这个绝好的机会,让我们能得到学以致用的机会。

我希望以后这样能够让我们动手体验的机会可以更多一些。

谚辞調担鈧谄动禪泻類。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 英语

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

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