电子琴设计(微机原理课程设计)Word格式文档下载.doc

上传人:wj 文档编号:640958 上传时间:2023-04-29 格式:DOC 页数:20 大小:2.91MB
下载 相关 举报
电子琴设计(微机原理课程设计)Word格式文档下载.doc_第1页
第1页 / 共20页
电子琴设计(微机原理课程设计)Word格式文档下载.doc_第2页
第2页 / 共20页
电子琴设计(微机原理课程设计)Word格式文档下载.doc_第3页
第3页 / 共20页
电子琴设计(微机原理课程设计)Word格式文档下载.doc_第4页
第4页 / 共20页
电子琴设计(微机原理课程设计)Word格式文档下载.doc_第5页
第5页 / 共20页
电子琴设计(微机原理课程设计)Word格式文档下载.doc_第6页
第6页 / 共20页
电子琴设计(微机原理课程设计)Word格式文档下载.doc_第7页
第7页 / 共20页
电子琴设计(微机原理课程设计)Word格式文档下载.doc_第8页
第8页 / 共20页
电子琴设计(微机原理课程设计)Word格式文档下载.doc_第9页
第9页 / 共20页
电子琴设计(微机原理课程设计)Word格式文档下载.doc_第10页
第10页 / 共20页
电子琴设计(微机原理课程设计)Word格式文档下载.doc_第11页
第11页 / 共20页
电子琴设计(微机原理课程设计)Word格式文档下载.doc_第12页
第12页 / 共20页
电子琴设计(微机原理课程设计)Word格式文档下载.doc_第13页
第13页 / 共20页
电子琴设计(微机原理课程设计)Word格式文档下载.doc_第14页
第14页 / 共20页
电子琴设计(微机原理课程设计)Word格式文档下载.doc_第15页
第15页 / 共20页
电子琴设计(微机原理课程设计)Word格式文档下载.doc_第16页
第16页 / 共20页
电子琴设计(微机原理课程设计)Word格式文档下载.doc_第17页
第17页 / 共20页
电子琴设计(微机原理课程设计)Word格式文档下载.doc_第18页
第18页 / 共20页
电子琴设计(微机原理课程设计)Word格式文档下载.doc_第19页
第19页 / 共20页
电子琴设计(微机原理课程设计)Word格式文档下载.doc_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

电子琴设计(微机原理课程设计)Word格式文档下载.doc

《电子琴设计(微机原理课程设计)Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《电子琴设计(微机原理课程设计)Word格式文档下载.doc(20页珍藏版)》请在冰点文库上搜索。

电子琴设计(微机原理课程设计)Word格式文档下载.doc

(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)主程序流程图

开始

调用发音子程序

使用键盘输入

是否1到8键

放音子程序

N

Y

退出

是esc键

是否9键

调用广告版子程序

Led子程序

(2)发音子程序流程图

(3)led显示子程序

(4)显示广告板子程序

(5)放音子程序

用键盘输入喜欢歌曲的序号(1-3)

是否1到3键

四、源程序

STACKSEGMENTPARASTACK'

STACK'

DB100DUP(0)

STACKENDS

DATASEGMENT

IOPORT EQU0C400H-0280H

IO8255A EQUIOPORT+288H

IO8255C EQUIOPORT+28AH

IO8255B EQUIOPORT+28BH

IO8253A EQUIOPORT+280H

IO8253B EQUIOPORT+283H

IO0832A EQUIOPORT+290H

PROT EQU0C400H-280H

PROTH EQU PROT+298H

PROTLR EQUPROT+2A0H

PROTLY EQU PROT+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):

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

从键盘接收字符,不回显

SSS3:

CMPAL,39H

JEPLAY0

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口输出

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;

显示子菜单

输入子菜单命令

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

MOVAL,NUM;

取相应的时间常数

XLAT

MOVDX,IO8253A

向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:

MOV CX,80H

D2:

MOV SI,OFFSETMIN1

MOV AH,01H

PUSH CX

MOV CX,0008H

NEXT:

MOVAL,JNUM

CALLBUFF

MOV DX,PROTH

OUT DX,AL

MOV AL,AH

MOV DX,PROTLR

OUT DX,AL;

显示第一行红

SHL AH,01

INC SI

PUSHCX

MOV CX,0FFFFH

DELAY2:

LOOPDELAY2;

延时

POP CX

LOOPNEXT

CALLDELAY

LOOPD2

MOV AL,00

CMPQMUSIC,0

JEC1

RET

C1:

MOV AH,01

INT 16H

JNZBACK

AGN1:

MOV CX,80H;

AGN1为显示黄色

D1:

MOV SI,OFFSETMIN1

MOV AH,01

NEXT1:

MOVAL,JNUM

MOV DX,PROTLY

DELAY1:

LOOPDELAY1

DELAY3:

LOOPDELAY3

LOOPNEXT1

LOOP D1

JEC2

C2:

JMPAGN

BACK:

RET

;

----------------------------------------------------------------

DELAY0 PROC NEAR;

延迟子程序

CCC:

LOOP CCC

RET

DELAY0 ENDP

---------------------------------------------------------------------

--------------------------------------------------------------------

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:

MOV AL,[SI]

MOV BX,OFFSETBUFF1

XLAT

RET;

得到第一行码

L2:

MOV BX,OFFSETBUFF2

L3:

MOV BX,OFFSETBUFF3

L4:

MOV BX,OFFSETBUFF4

L5:

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

当前位置:首页 > PPT模板 > 国外设计风格

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

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