- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE 7
实验二 电子琴
一、实验目的
了解计算机发声原理。
进一步熟悉定时器编程方法。
进一步熟悉键盘扫描电路工作原理及编程方法。
二、实验内容
利用实验仪上提供的键盘,使数字键1、2、3、4、5、6、7作为电子琴按键,按下既发出相应的音调。用8255的PA.0口发出音频脉冲,驱动喇叭。
三、实验电路及连接
喇叭发声电路如图。
键盘电路无需连线。
34
34
33
32
31
30
29
28
27
9
8
36
5
35
6
4
3
2
1
40
39
38
37
18
19
20
21
22
23
24
25
D0
D1
D2
D3
D4
D5
D6
D7
PA0
PA1
PA2
PA3
PA4
PA5
PA6
PA7
PB0
PB2
PB4
PB5
PB6
PB7
PB1
PB3
A0
A1
/WR
/RD
RESET
/CS
A0
A1
/WR
/RD
RESET
/CS
AD0
AD1
AD2
AD3
AD4
AD5
AD6
AD7
8255A
四、实验原理
1、利用定时器,可以发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调。
2、定时器按设置的定时参数产生中断,这一次中断发出脉冲低电平,下一次反转发出脉冲高电平。由于定时参数不同,就发出了不同频率的脉冲。本实验中按键一次,会发出50个脉冲。发完后继续监测键盘,如果键还按下,继续发音。
各音阶标称频率值:
音阶
1
2
3
4
5
6
7
频率(HZ)
440.00
493.88
554.37
587.33
659.26
739.99
830.61
五、实验框图
开始是检测键值输入
开始
是
检测键值输入
读入键值
1键值7
用键值查表得到音
频相关数据
按音频数据设
置定时器
启动定时
开始发声
已发50个脉冲
关闭定时
停止发声
否
是
是
否
否
主程序框图
开始
保护现场
停止计时
输出音频脉冲电平(高或低)
高频脉冲电平反转
脉冲个数减1
恢复现场
中断返回
定时中断程序框图
mode equ 082h
PORTA equ 08000h
CTL equ 08003h
OUTBIT equ 09002h
IN equ 09001h
Pulse equ 55h
PulseCNT equ 50h
ToneHigh equ 51h
ToneLow equ 52h
Tone equ 53h
KeyBuf equ 54h
Speaker equ PORTA
Ijmp Start
org 000bh
TimerOInt:
push PSW
clr TR0
mov TH0,TontHigh
mov TL0,ToneLow
setb TR0
mov a, Pulse
mov dptr, #Speaker
movx @dptr,a
inc Pulse
dec PulseCNT
pop PSW
reti
ToneTable:
dw 64578, 64686, 64778, 64821,
dw 64898, 64968, 65029
TestKey:
mov dptr, #OUTBlT
mov a, #0
movx @dptr, a
mov dptr, #IN
movx a, @dptr
cpl a
anI a, #0fh
ret
KeyTabIe:
db 16h, 15h, 14h, 0ffh
db 13h, 12h, llh, l0h
db 0dh, 0ch, 0bh, 0ah
db 0eh, 03h, 06h, 09h
db 0fh, 02h, 05h, 08h
db 00h, 0lh, 04h, 07h
GetKey:
mov dptr,#OUTBIT
mov P2,dph
mov r0,#Low(IN)
mov r1,
mov r2,#6
KLoop:
mov a,r1
cpl a
movx @dprt,a
cpl a
rr a
mov r1,a
movx a,@r0
cpl a
anl a,#0fh
jnz Goon1
djnz r2,KLoop
mov r2,#0ffh
sjmp Exit
Goon1:
mov r1,a
mov a,r2
dec a
rl a
rl a
mov r2,a ;r2=(r2-1)*4
mov a,r1
mov r1,#4
LoopC:
rrc a
jc Exit
inc r2
djnz r1,LoopC
Exit:
mov dptr,#OUTBIT
clr a
movx @dptr,a
mov a,r2
文档评论(0)