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