电子琴的微机原理设计方案.docx

上传人:b****5 文档编号:8597862 上传时间:2023-02-01 格式:DOCX 页数:32 大小:222.20KB
下载 相关 举报
电子琴的微机原理设计方案.docx_第1页
第1页 / 共32页
电子琴的微机原理设计方案.docx_第2页
第2页 / 共32页
电子琴的微机原理设计方案.docx_第3页
第3页 / 共32页
电子琴的微机原理设计方案.docx_第4页
第4页 / 共32页
电子琴的微机原理设计方案.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

电子琴的微机原理设计方案.docx

《电子琴的微机原理设计方案.docx》由会员分享,可在线阅读,更多相关《电子琴的微机原理设计方案.docx(32页珍藏版)》请在冰豆网上搜索。

电子琴的微机原理设计方案.docx

电子琴的微机原理设计方案

电子琴的微机原理设计方案

第一章方案论证

1.1设计规模和总体框架

1.1.1系统的基本功能

弹奏:

用键盘输入对应的七个音阶,用户每按一个键盘琴键就弹奏相应的音符,通过实验箱的喇叭发出声音,并通过七段数码管显示输入音阶;

扩展功能:

演奏:

电子琴设有8个按键,其中7个作为音符输入,另外一个作为模式转换按键,实现用户存放的自动播放歌曲。

按下键盘上某一个指定的建后自动弹奏预存琴谱功能;要求按键按下时发声,松开延时一小段时间,中间再按别的键则发另外一音调的声音,当系统扫描到键盘按下,则快速检测出是哪一个按键被按下,然后单片机的定时器启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。

如果在前一个按下的键发声的同时有另一个按键被按下,则启动中断系统。

前面的发音停止,转到后按的键的发音程序。

发出后按的键的音调。

1.1.2系统的主要功能模块

控制模块:

选择AT89S52单片机来控制整个系统,其中P2口作为输入口,P1口为信号输出口,P1.0连接音响驱动电路。

用户编程模块:

由键盘矩阵、LED显示管、扬声器这几个部分组成

存储器模块:

8088有1MB存储空间,系统提供用户使用的空间为00000H-0FFFFH,用于存放、调试实验程序。

键盘输入模块:

用来操作者对机器的控制操作,在P2口连接有8个按键开关加8个拉电阻,它们一端接5伏电源,一端接地。

只要有一个按键被按下,并被单片机扫描到,则会播放发出音符。

(LED显示管显示当前按键,扬声器发出对应音符。

输出驱动模块:

利用AT89S52单片机的P0端口的P0.0-P0.7连接到一个七段数码管的a-h的笔段上,数码管的公共端接电源;声音的播放模块,它接到P1.0口上,当有按键按下时,它通过AT89S52中心控制芯片的识别后发出相应的音符。

 

1.1.3系统的组成框图

根据系统的功能要求,我们可以得到系统的组成框图:

 

图1系统框图

1.2操作流程

1.2.1如何使用

系统安装及配置说明

系统运行环境

WINDOWSXPPROTEUS7.1SP2Keiluv32.12

系统安装及配置

安装Protues和keiluVsision3。

系统操作说明 

(1)Keil下编译,产生目标HEX档,Proteus下ProgrammeFiles选择产生的HEX档,点击运行开始模拟。

(2)开启本系统,数码管显示“-”。

(3)按任意键盘,数码管显示所按下的键盘数,扬声器发出相应的音符。

1.2.2使用流程

 

图2使用流程

 

第二章硬件系统的设计

2.1控制模块的选择:

本次设计中中心控制模块是选择AT89S52单片机来控制整个系统。

2.2用户编程模块:

本系统由键盘矩阵、LED显示管、扬声器这几个部分组成,LED显示管显示当前按键,扬声器发出对应音符。

硬件总体设计图如下:

图3

2.3存储器模块:

8088有1MB存储空间,系统提供用户使用的空间为00000H-0FFFFH,用于存放、调试实验程序。

具体分配如下:

2.3.1存贮器地址分配

表2-1存贮器地址分配

2.3.2I/O地址分配

表2-2I/O地址分配

(一)

表2-3I/O地址分配

(二)

监控占用00004H-0000FH作为单步(T)、断点(INT3)、无条件暂停(NMI)中断矢量区,用户也可以更改这些矢量,指向用户的处理,但失去了相应的单步、断点、暂停等监控功能。

F0000H-FFFFFH监控程序区系统占用。

2.4键盘输入模块:

在P.2口十连有8个按键并加有8个拉电阻.它们一端接5伏电源,一端接地.在仿真时,只要有一个键被按下,并被单片机扫描到,则会使播放器发出声音.

 

 

图4

2.5输出驱动模块:

2.5.1子系统(模块)一

LED显示模块如图2-2所示,利用AT89S51单片机的P0端口的P0.0-P0.7连接到一个七段数码管的a-h的笔段上,数码管的公共端接电源。

矩阵扫描显示当前按键模块如下:

图5

2.5.2子系统(模块)二

矩阵扫描扬声器发出对应音符模块如下:

图6

 

第三章应用软件的设计

应用系统中任务的实现,最终是靠程序的执行来完成的。

应用软件设计的好坏,将决定系统的效率和它的优劣。

应用软件的设计依据是使用流程。

根据使用流程可以确定系统的控制流程和软件模块。

根据顺序控制器的操作流程可以确定,本系统软件主要由4个模块构成:

主程序,编程控制模块,运行控制模块和定时器中断服务模块。

3.1主程序

主程序的任务首先是进行初始化,然后根据“编程/运行”开关的状态判别,进入“编程状态”或“运行状态”。

根据主程序的操作流程,可以确定主程序的控制流程如图

主程序流程图

 

N

N

Y

 

Y

图7

主要程序:

MAIN:

MOVSP,#60H;初始化堆栈指针

MOV30H,#00;定时器初值清零

MOV31H,#00

MOVP1,#0FFH;设置P1口为输入模式

MOVTOMD,#01H;设置定时器0为工作模式1

SETBET0;开定时器0中断

SETBEA;开总中断

CLRTR0;关闭定时器0

3.2编程控制模块

根据编程状态的操作流程,可以确定编程操作的控制流程如图

图8电子琴程序流程图

OUTBITequ0FE02h

INequ0FE00h

Pulseequ0

PulseCNTequ50h

ToneHighequ51h

ToneLowequ52h

SpeakerequP1.0

000002008EljmpStart

org000bh

Timer0Int:

000BC0D0pushPSW

000DC28CclrTR0

000F85518CmovTH0,ToneHigh

001285528AmovTL0,ToneLow

0015D28CsetbTR0

0017A200movc,Pulse

00199290movSpeaker,c

001BB200cplPulse

001D1550decPulseCNT

001FD0D0popPSW

002132reti

ToneTable:

0022FC42

0024FCAE

0026FD0A

0028FD35

002AFD82

002CFDC8

002EFE05dw64578,64686,64778,64821,64898,64968,65029

TestKey:

003090FE02movdptr,#OUTBIT

00337400mova,#0

0035F0movxdptr,a

003690FE00movdptr,#IN

0039E0movxa,dptr

003AF4cpla

003B540Fanla,#0fh

003D22ret

KeyTable:

003E161514

0041FFdb16h,15h,14h,0ffh

0042131211

004510db13h,12h,11h,10h

00460D0C0B

00490Adb0dh,0ch,0bh,0ah

004A0E0306

004D09db0eh,03h,06h,09h

004E0F0205

005108db0fh,02h,05h,08h

0052000104

005507db00h,01h,04h,07h

GetKey:

005690FE02movdptr,#OUTBIT

00598583A0movP2,dph

005C7800movr0,#Low(IN)

005E7920movr1,#00100000b

00607A06movr2,#6

KLoop:

0062E9mova,r1

0063F4cpla

0064F0movxdptr,a

0065F4cpla

006603rra

0067F9movr1,a

0068E2movxa,r0

0069F4cpla

006A540Fanla,#0fh

006C7006jnzGoon1

006EDAF2djnzr2,KLoop

00707AFFmovr2,#0ffh

0072800FsjmpExit

Goon1:

0074F9movr1,a

0075EAmova,r2

007614deca

007723rla

007823rla

0079FAmovr2,a;r2=(r2-1)*4

007AE9mova,r1

007B7904movr1,#4

LoopC:

007D13rrca

007E4003jcExit

00800Aincr2

0081D9FAdjnzr1,LoopC

Exit:

008390FE02movdptr,#OUTBIT

0086E4clra

0087F0movxdptr,a

0088EAmova,r2

008990003Emovdptr,#KeyTable

008C93movca,a+dptr

008D22ret

Start:

008E758170movsp,#70h

0091758901movTMOD,#01;Timer

009475A882movIE,#82h;EA=1,IT0=1

MLoop:

00971130callTestKey

009960FCjzMLoop

009B1156callGetKey

009DF5F0movb,a

009F60F6jzMLoop;=0,<1

00A154F8anla,#!

7

00A370F2jnzMLoop;>7

00A515F0decb

00A7E5F0mova,b

00A923rla;a=a*2

00AAF5F0movb,a

00AC900022movdptr,#ToneTable

00AF93movca,a+dptr

00B0F551movToneHigh,a

00B2F58CmovTH0,a

00B4E5F0mova,b

00B604inca

00B793movca,a+dptr

00B8F552movToneLow,a

00BAF58AmovTL0,a

00BCD28CsetbTR0

00BE755064movPulseCNT,#100

Wait:

00C1E550mova,PulseCNT

00C370FCjnzWait

 

00C5C28CclrTR0

00C7020097ljmpMLoop

end

3.3运行控制模块

根据运行状态的操作流程,可以确定运行操作的控制流程如图

 

图9

程序:

datasegment

ioportequ0c800h-0280h

io8253aequioport+280h;8253通道0地址

io8253bequioport+283h;8253控制字寄存器地址

io8255aequioport+288h;8255A口地址

io8255bequioport+289h;8255B口地址

io8255dequioport+28bh;8255控制字寄存器地址

io0832aequioport+290h

prothequioport+2a8h;点阵行选的地址

protlrequioport+2b0h;点阵列选的地址

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

;正弦波数据

timedb120,106,94,89,79,70,63,59

;发不同音时8253的计数器初值

banquandb0dh,0ah

db'

*************************************************',0dh,0ah

db'**

**',0dh,0ah

db'**WELCOMETOUSE

dianziqin**',0dh,0ah

db'**THISPROGRAMMEIS

DESIGHEDBY**',0DH,0AH

db'**zhouqiuping61007204

**',0DH,0AH

db'**

**',0dh,0ah

db'

*************************************************',0dh,0ah

db'Press1,2,3,4,5,6,7,8,ESC:

',0dh,0ah,'$'

numdb?

;num为8253计数器初值的序号

freqdw262,294,330,349,392,440,494,523;扬声器发声各频率值

timdw400

dataends

stacksegmentstack

dw256dup(?

stackends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movdx,offsetbanquan;显示

movah,9

int21h;显示提示信息

sss:

movah,7

int21h;等待从键盘接收字符,不回显al=asc码

cmpal,1bh

jeexit;若为ESC键,则转EXIT推出

cmpal,31h

jlsss;小于31h

cmpal,38h;大于38h

jgsss;不在'1'-'8'之间转sss

subal,31h

movnum,al;num求出相应的时间常数的序号

dianzhen:

moval,0ffh;点阵板的列全部选通

movdx,proth

outdx,al

moval,00000001:

点阵的行赋初值

shlal,num;根据输入的数字,左移相应位数,即点阵亮相应行

movnum,al;如输入3,则num为2,左移两位,第三行亮

movdx,prothl

outdx,al

led:

movdx,io8255d

moval,99h;设置8255A口入B口出

movdx,io8255b

outdx,num;根据移位后的num点亮相应led灯

kaiguan:

movdx,io8255a;判断机机外

inal,dx;从8255B口读一字节

testal,10b;判断PA0口是否为10(二进制)

jzjiwai;是的话转实验仪

jmpnei;否则转机

;---------------------------------jiwai

jiwai:

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

ddd:

movsi,0

lll:

moval,data1[si];取正弦波数据

movdx,io0832a

outdx,al;放音

calldelay;调延时子程序

incsi

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

jllll;若没有,则继续

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

jmpsss

exit:

movah,4ch

int21h

delayprocnear;延时子程序

ccc:

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

;-------------------------------------机部分

jinei:

moval,num

addal,al

movah,00h

movsi,ax

again:

movdi,freq[si]

movbx,tim

callgen

jmpsss

genprocnear

moval,0b6h;设置8253通道2方式3二进制计数

out43h,al

movdx,12h

movax,12928

;DXAX=896*533h=18*65536+12928=1.19M

divdi

out42h,al;8253通道2口设置初值

moval,ah

out42h,al

inal,61h;读8255PB口

movah,al

oral,3

out61h,al

wait1:

movcx,0h

delay3:

movax,10;延时子程序

delay2:

nop

nop

decax

jnzdelay2

loopdelay3

decbx

jnzwait1

moval,ah

out61h,al

ret

genendp

codeends

endstart

3.4定时器中断服务模块

定时器子程序图如图2.7所示。

 

 

图10

3.5硬件调试与软件调试

3.5.1硬件调试

1)断电调试:

为了安全,首先进行断电调试,用万用表检测系统是否有短路现象,再检查严接线是否正确。

经检测,接线正确也没有短路现象。

2)通电调试:

第一,检查系统是否正常。

第二,检查数码显示是否乱码。

在通电调试过程中,经检查系统正常;数码管显示乱码,查明原因为8255A芯片B输出端口与数码管输入端口接线时接反了,经改正后检查没有出现新的问题。

3.5.2软件调试

输入程序并检查无误,经汇编、连接后加载装入系统运行,观察现象。

发现倒计时器只能运行一次而不能循环(即程序倒计时到0后无法继续循环倒计时),经检查发现程序结束前掉了一条跳转指令。

经修改后,再进行编译并加载,运行程序,结果显示正常并实现了循环功能,经调试三个开关发现开关实现功能正常。

3.5.3调试过程

让8255的口工作在方式一输入状态下,B口接在试验箱上的八个拨码开关上,把拨码开关的电平信号传送到8255的输出口,CPU取走的8255输出口的信号送到8253,8253工作在工作方式3,方波放生气。

这样通过送不同的数据时8253发出不同频率的方波信号,不同频率的方波信号就会驱动发生器发出不同频率的声响。

3.6测试方案和测试结果

测试方案

测试结果

启动程序,出现按键提示,按下1~8键

机/实验仪发出相应的音阶

同时led和点阵板亮相应的灯和行

改变开关状态(可随时任意改变),按1~8键

对应发出相应的音阶

“弹琴”

发出优美旋律

按下ESC键

退出程序

表3-1

 

小结

通过这次课程设计,我学到了不少课本上没有的知识,也锻炼了自己的动手能力,将以前学过的零散的知识串到一起。

原本微型计算机接口技术就是计算机科学与技术专业的一门核心课程,是突出计算机应用的一门课程。

根据自己所学的知识,来完成本次微型计算机课程设计的容。

本次课程设计主要是设计一个电子琴,要求用键盘输入1、2、3、4、5、6、7按键,产生不同频率的声音,来模拟电子琴发出音阶乐谱。

要发出声音,要用芯片实现,首先想到的是课堂上学过的8253定时/计数器它可以发出一定频率的声音。

有七音阶个频率,就对应有七个计数初值,通过调用不同的程序,来完成每一次按键所对应频率的计数初值,进而实现不同的声音。

要产生频率,就用到脉冲发生器、分频器;产生音质好、播放出来声音,就用到音频功效模块。

各个模块进行相应的连接,来实现电子琴的功能。

这次微机实验课程设计,使我对微机软硬件结合有了进一步的了解。

原来并不太清楚是什么意思,一直都很模糊,听课本也是很迷茫;而之前的那些单元实验,也没有都做好。

之前做的实验,由于大部分是验证性的,所以就很被动地去做,甚至并没有想为什么要那样连电路,部的代码更没有认真看。

这次课程设计,因为要自己去设计整个过程,所以就不得不去了解学习自己原来并没有真正弄懂的东西。

比如一些程序的代码的意思,汇编语言的逻辑,比如一些芯片的用途。

使我对前面所做的实验有了原理性的了解,回头看一些实验,也知其然其所以然了。

同时对课本上讲的一些容,不再像以前那样觉得抽象,通过这次设计,有了具体的理解。

经过我长时间的设计及调试,本系统基本能实现按下键盘矩阵中的按键会使数码管显示当前按键,扬声器播放对应的音符。

但由于仿真系统原因,本设计音频效果不是很好。

不足之处有:

1.可弹奏的音符数较少,只能在一定围满足用户需要。

可通过改进键盘识别模块和发生模块来增加其复杂度2.音量不可调。

在这为期一周的课程设计中,我深刻明白了理论知识与社会实践相结合的道理,从中得到了以前书本知识所不曾得到的知识,更加明白了如今信息时代电子技能知识的重要性。

同时我对自己的动手能力有了信心,这次的课程设计我感觉很完美,我会利用这次机会再努力的提高自己。

编写程序的过程中,我遇到了很多的问题。

在此我特别要感帮助我的老师们,特别是老师,没有他们,我就不能完成这个课程设计,是他们不厌其烦地帮我讲解。

经过这个课程设计,虽然时间比较短,完成任务的效果不是很理想,但是既然自己尝试过,就肯定学到了不少东西。

这次课程设计对我综合运用所学知识的能力的提高有不小的帮助,之前做的实验都是很简单的编程,跟硬件结合也没有这么复杂,实现的功能都比较简单,可是这次要实

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

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1