BX电子琴.docx

上传人:b****9 文档编号:28672581 上传时间:2023-07-19 格式:DOCX 页数:13 大小:333.65KB
下载 相关 举报
BX电子琴.docx_第1页
第1页 / 共13页
BX电子琴.docx_第2页
第2页 / 共13页
BX电子琴.docx_第3页
第3页 / 共13页
BX电子琴.docx_第4页
第4页 / 共13页
BX电子琴.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

BX电子琴.docx

《BX电子琴.docx》由会员分享,可在线阅读,更多相关《BX电子琴.docx(13页珍藏版)》请在冰豆网上搜索。

BX电子琴.docx

BX电子琴

目录

一、课程设计的目的和意义2

二、课程设计的内容2

三、课程设计的步骤与方法2

1.总体方案、系统设计2

2.硬件设计2

3.软件设计3

4.系统调试4

四、设计结论5

五、收获和体会5

附件(源程序)5

参考文献10

课程设计三电子琴设计

一、课程设计的目的和意义

(1)进一步掌握定时器编程和应用;

(2)了解微机利用定时器产生音乐的基本方法。

二、课程设计的内容

设计一个电子琴。

利用实验仪键盘,使数字键1、2、3、4、5、6、7作为电子琴键发出相应的音调,PB0作为定时器门控信号,OUT1发出音频信号,驱动喇叭。

利用数字键1、2、3、4、5、6、7作为电子琴键,按下数字键发出相应的音调。

三、课程设计的步骤与方法

1.总体方案、系统设计

(1)建议采用已有的DJ-598K三合一单片机微机试验仪作为设计平台,来构建系统,以减少设计工作量。

(2)对于每个按键的音调发音时间由软件延时控制,如键一直按下,就会连续发音各音阶标称频率值:

(3)设计思路:

每个音符都对应着固定的频率,而声音的长短即是波的个数。

即可用汇编语言来产生一系列频率不同的方波信号,找到各个音符的频率,然后用汇编语言产生同频信号,并将该信号输入到扬声器,加放大电路用以增大驱动功率。

2.硬件设计

在DJ-598K三合一单片机微机试验仪平台上,硬件设计方案如下:

原理说明:

(1)CLK是计数输入信号,计数器对CLK端出现的脉冲个数进行计数,CLK端可以接入固定频率的时钟信号,从而实现计时

(2)8253:

可编程计数器

使用计数器2:

扬声器控制

工作在方式3,控制字B6H,计数器初始值1331(533H),输出一定频率的方波,经滤波后得到近似的正弦波,进而推动扬声器发声

(3)PC机中,8253的端口地址为40H~43H

(4)74LS393:

双4位二进制计数器,主要用于二进制计数,将正弦波模拟信号转变成数字信号。

(5)LM386:

音频集成功放

3.软件设计

软件在结构上应清晰、简洁、流程合理,方便设计;各功能子程序应实现模块化、子程序化,以便于调试、连接、移植和修改。

软件设计方案如下:

4.系统调试

(1)使用的主要仪器和仪表:

微机原理与接口技术试验箱、电脑、连接线若干

(2)实验步骤

8253的CLK1接分频输出端T2

GATE1接PB0

OUT1接VIN

8MHZ→T

T2接Q2

SP-接GND

VOUT接SP+

在P.态按1、2、3、4、5、6、7键,依次发出1、2、3、4、5、6、7音调声

(3)硬件调试:

PB0作为定时器门控信号,OUT1发出音频信号,驱动喇叭。

(4)软件调试:

将在硬件调试设计满足预期要求以后,把软件加载到硬件中,并对该系统进行功能测试

(5)调试中出现的故障、原因及排除方法

实验中遇到喇叭发声故障,但经过更换试验箱排除了硬件故障,然后在音频功放信号输入喇叭时发现接VOUT口才能正确地驱动喇叭发音。

四、设计结论

五、收获和体会

附件(源程序)

CODESEGMENT;DZQ.ASM

ASSUMECS:

CODE,ds:

code

CONTROLequ43h;CONTROL为43h

COUNT0equ40h;COUNT0为40h

COUNT1equ41h;同上

COUNT2equ42h;同上

IOCONPTEQU0FF2BH

IOBPTEQU0FF29H

IOAPTEQU0FF28H

PAEQU0FF20H;字位口

PBEQU0FF21H;字形口

PCEQU0FF22H;键入口

ORG18F0H;下一条偏移语句的偏移地址

START:

JMPSTART0;跳到STARTO

BUFDB?

?

?

?

?

?

;在DB中存?

KZDB?

ltimedb?

lkeydb?

ZPDW?

data1:

db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h

db86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0F1H

data3:

dw2273,2024,1805,1704

dw1517,1353,1205,1136

START0:

movax,cs;cs貌似是什么断点

movds,ax

CALLBUF1;调用子程序,BUF1为其地址

MOVAL,88H;设置控制字,使用工作方法4

MOVDX,IOCONPT;DX为控制字口地址

OUTDX,AL;送控制字

movdx,IOBPT;设置计数器0口地址

moval,00;数值锁存。

outdx,al

movzp,offsetbuf

redikey:

calldispkey;调用dispkey

cmpKZ,09h;kz-09h,设置条件标志位

JNCredikey;跳转到redikey

cmpkz,01h;kz-01h,设置条件标志位

jcredikey;跳到redikey

movbx,zp;

moval,kz

mov[bx],al

cmpbx,offsetbuf+5

jzzp1

incbx

movzp,bx

jmpouttone

zp1:

movzp,offsetbuf

outtone:

movdx,IOBPT

moval,0ffh

outdx,al

moval,kz

movah,00h

decax

shlax,1

movbx,offsetdata3

addbx,ax

movax,[bx]

callt8253

movcx,20h

con1:

pushcx

calldisp

popcx

loopcon1

movdx,IOBPT

moval,00

outdx,al

jmpredikey

t8253:

pushax

moval,76h;计数器1,16位二进制,方式3。

movdx,CONTROL;

outdx,al;送控制字

popax;ax出栈

movdx,COUNT1

outdx,al

moval,ah

outdx,al

ret

;-------------------------

dispkey:

calldisp

callkey

movah,al;newkey

movbl,ltime;ltime

movbh,lkey;lkey

moval,01h

movdx,PA;0ff21h

outdx,al

cmpah,bh

movbh,ah;bh=newkey

movah,bl;al=time

jzdisk4

movbl,88h

movah,88h

disk4:

decah

cmpah,82h

jzdisk6

cmpah,0eh

jzdisk6

cmpah,00h

jzdisk5

movah,20h

decbl

jmpdisk7

disk5:

movah,0fh

disk6:

movbl,ah

movah,bh

disk7:

movltime,bl

movlkey,bh

movKZ,bh

moval,ah

ret

key:

moval,0ffh

movdx,PB

outdx,al

movbl,00h

movah,0feh

movcx,08h

key1:

moval,ah

movdx,PA

outdx,al

rolal,01h

movah,al

nop

nop

nop

nop

nop

nop

movdx,PC

inal,dx

notal

nop

nop

andal,0fh

jnzkey2

incbl

loopkey1

jmpnkey

key2:

testal,01h

jekey3

moval,00h

jmpkey6

key3:

testal,02h

jekey4

moval,08h

jmpkey6

key4:

testal,04h

jekey5

moval,10h

jmpkey6

key5:

testal,08h

jenkey

moval,18h

key6:

addal,bl

cmpal,10h

jncfkey

movbl,al

movbh,0h

movsi,offsetdata2

moval,[bx+si]

ret

nkey:

moval,20h

fkey:

ret

data2:

db07h,04h,08h,05h,09h,06h,0ah,0bh

DB01h,00h,02h,0fh,03h,0eh,0ch,0dh

DISP:

MOVAL,0FFH;00H

MOVDX,PA

OUTDX,AL

MOVCL,0DFH;20H;显示子程序,5ms

MOVBX,OFFSETBUF

DIS1:

MOVAL,[BX]

MOVAH,00H

PUSHBX

MOVBX,OFFSETDATA1

ADDBX,AX

MOVAL,[BX]

POPBX

MOVDX,PB

OUTDX,AL

MOVAL,CL

MOVDX,PA

OUTDX,AL

PUSHCX

DIS2:

MOVCX,0a0H

LOOP$

POPCX

CMPCL,0FEH

JZLX1

INCBX

RORCL,1

JMPDIS1

LX1:

MOVAL,0FFH

MOVDX,PB

OUTDX,AL

RET

BUF1:

MOVBUF,11H

MOVBUF+1,10H

MOVBUF+2,10H

MOVBUF+3,10H

MOVBUF+4,10H

MOVBUF+5,10H

RET

CODEENDS

ENDSTART

参考文献

[1]《80x86/Pentiun微机原理与接口技术》余春暄,机械工业出版社,2008.9;

[2]《微机原理与接口技术》吉海彦主编,机械工业出版社,2007.7;

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

当前位置:首页 > 教学研究 > 教学计划

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

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