电子音调发生器.docx
《电子音调发生器.docx》由会员分享,可在线阅读,更多相关《电子音调发生器.docx(13页珍藏版)》请在冰豆网上搜索。
电子音调发生器
设计任务书
专业计算机应用技术
年级200班级
姓名学号
目录
1.目录………………………………1
2.实验目的…………………………2
3.实验原理及设计思路……………2
4.实验原理……………………2
5.实验程序流程图………………4
6.程序源代码……………………5
7.调试界面………………9
电子音调发生器
一、实验目的
掌握8253的各种使用方法,了解8253定时器的硬件连接方法及时序关系.掌握8253的各种模式的编程及其原理,用示波器观察各信号之间的时序关系
二、实验原理及设计思路
对8253进行编程,使其OUT0上输出一定的频率,将其一定频率输出到喇叭上,演奏出不同的音节。
计算机的数字键(1-7)作为电子音调的音调选择。
三、实验原理
对于音乐来讲,从DO到XI每个音阶都有固定的频率。
当8253将这些频率输出到喇叭上,即可听见音阶了。
各音节
(1)音节的产生
音节由不同频率的方波产生,音节与频率的关系如下表所示。
要产生音频方波,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。
利用计时器计时此半周期时间,每当计时到后就将输出方波的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚得到此频率的方波。
在ZKS-03实验仪上,产生方波的I/O脚选用P1.7,通过跳线选择器JP1将单片机的P1.7与蜂鸣器的驱动电路相连。
这样P1.7输出不同频率的方波,蜂鸣器便会发出不同的声音。
另外,音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。
只要设定延时时间,就可求得节拍的时间。
延时作为基本延时时间,节拍值只能是它的整数倍。
音节与频率的关系
低音节
音调
1
2
3
4
5
6
7
频率
131
147
165
175
196
220
247
X
F242
F3C1
F517
F5B6
F6D0
F7D1
F8B6
中音节
音调
1
2
3
4
5
6
7
频率
262
294
330
349
392
440
494
X
F921
F9E1
FA8C
FAD8
FB68
FBE9
FC5B
高音节
音调
1
2
3
4
5
6
7
频率
523
587
659
698
784
880
988
X
FC8F
FCEF
FD45
FD6C
FDB4
FDF4
FE2D
注:
频率以HZ为单位
每个音节相应的定时器初值x可按下法计算。
即:
其中,f是音调频率,晶振fosc=11.0592Mhz。
(2)定时器的使用及时间延迟
首先对定时器进行初始化
设置TMOD(工作方式)寄存器
GATA
C/T
M1
M0
GATA
C/T
M1
M0
定时器1
定时器0
GATE:
门控位
GATE=0,TR=1启动计数(软件启动);
GATE=1,TR=1且INT=1启动计数(硬件启动)。
C/T:
定时或计数方式选择位。
C/T=0,定时工作方式;C/T=1,计数工作方式。
M1M0:
工作方式选择位。
M1M0=00,方式0:
13位计数(TL0-4、TH0-7)
M1M0=01,方式1:
16位计数(TL0-7、TH0-7)
M1M0=10,方式2:
8位计数,有自动装入功能。
M1M0=11,方式3:
T0分为两个8位计数器,TL0可工作为定时或计数方式,TH0只能工作为定时方式。
设置TCON(控制)寄存器:
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
TR0/TR1:
启动计数。
为1启动计数;为0停止计数。
TF0/TF1:
计数溢出。
当加”1”计数结束时为1。
本实验采用定时器T0,工作在方式1(16位计数),无自动装入功能。
其节拍的延时为:
曲调值
DELAY
调4/4
125ms
调3/4
187ms
调2/4
250ms
四、实验程序流程图:
1、音调发声部分:
无输入K4&K5&K6=1
有输入且K4&K5&K6=0
否是
五、实验程序源代码:
;************************
DATASEGMENT
msgDB0DH,0AH,'[1234567]'
DB0DH,0AH,'[qwertyu]'
DB0DH,0AH,'_________________'
DB0DH,0AH,'9:
EXIT'
DB0DH,0AH,'_________________','$'
;********音调******后面用到-1判断音乐播是否放完
sound_0DW-1
sound_11DW441,-1
sound_12DW495,-1
sound_13DW556,-1
sound_14DW589,-1
sound_15DW661,-1
sound_16DW742,-1
sound_17DW833,-1
sound_1DW882,-1
sound_2DW990,-1
sound_3DW1112,-1
sound_4DW1178,-1
sound_5DW1322,-1
sound_6DW1484,-1
sound_7DW1655,-1
timeDW25
DATAENDS
;************************
STACKSEGMENT
Db200DUP('STACK')
STACKENDS
;***********************
CODESEGMENT
ASSUMEDS:
DATA,SS:
STACK,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVaH,0
MOVAL,00
INT10H
;*****定义一个宏*****
SHOWMACROb
LEADX,b
MOVAH,9
INT21H
ENDM
;********一个声音宏********
onesoundmacrosoundis,jumpis,letteris
CMPAL,letteris
JNZjumpis
LEASI,soundis
LEABP,DS:
time
CALLMUSIC
JMPinput
ENDM
showmsg
INPUT:
MOVAH,01H
INT21H
CMPAL,'9'
jnzgo
movah,4ch
int21h
go:
onesoundsound_11,a0,'q'
a0:
onesoundsound_12,b0,'w'
b0:
onesoundsound_13,c0,'e'
c0:
onesoundsound_14,d0,'r'
d0:
onesoundsound_15,e0,'t'
e0:
onesoundsound_16,f0,'y'
f0:
onesoundsound_17,g0,'u'
g0:
onesoundsound_1,h0,'1'
h0:
onesoundsound_2,i0,'2'
i0:
onesoundsound_3,j0,'3'
j0:
onesoundsound_4,k0,'4'
k0:
onesoundsound_5,l0,'5'
l0:
onesoundsound_6,m0,'6'
m0:
onesoundsound_7,n0,'7'
n0:
onesoundsound_0,o0,al
o0:
jmpinput
;********************发声
GENSOUNDPROCNEAR
;-------------
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHDI
;--------------
MOVAL,0B6H
OUT43H,AL
MOVDX,12H
MOVAX,348ch
DIVDI
OUT42H,AL
MOVAL,AH
OUT42H,AL
INAL,61H
MOVAH,AL
ORAL,3
OUT61H,AL
WAIT1:
MOVCX,3314
callwaitf
DELAY1:
DECBX
JNZWAIT1
MOVAL,AH
OUT61H,AL
;----------------
POPDI
POPDX
POPCX
POPBX
POPAX
;-------------------
RET
GENSOUNDENDP
;**************************
waitfprocnear
pushax
waitf1:
inal,61h
andal,10h
cmpal,ah
jewaitf1
movah,al
loopwaitf1
popax
ret
waitfendp
;************************
MUSICPROCNEAR
PUSHDS
SUBAX,AX
PUSHAX
FREG:
MOVDI,[SI]
CMPDI,-1;音乐是否放完?
JEEND_MUS
MOVBX,DS:
[BP]
CALLGENSOUND
ADDSI,2
ADDBP,2
JMPFREG
END_MUS:
RET
MUSICENDP
CODEENDS
;**********************
ENDSTART
六、调试界面
实验电路图大体如下: