《单片机 电子琴设计.doc》由会员分享,可在线阅读,更多相关《单片机 电子琴设计.doc(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、硬件实验二十一 电子琴一、实验要求利用实验仪上提供的键盘,使数字键1、2、3、4、5、6、7作为电子琴按键,按下即发出相应的音调。用P1.0 口发出音频脉冲,驱动喇叭。二、实验目的 1. 了解计算机发声原理。 2. 进一步熟悉定时器编程方法. 3. 进一步熟悉键盘扫描电路工作原理及编程方法三、实验电路及连接 喇叭发声电路与硬件实验六相同, 键盘电路无需连线,原理图可参考图1和硬件实验十七四、实验说明1、 利用定时器,可以发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调.2、 定时器按设置的定时参数产生中断,这一次中断发出脉冲低电平,下一次反转发出脉冲高电平.由于定
2、时参数不同,就发出了不同频率的脉冲. 本实验中按键一次,会发50个脉冲.发完后继续检测键盘,如果键还按下,继续发音。各音阶标称频率值:音 阶1234567频率(HZ)261.1293.7329.6349.2392.0440.0493.9五、实验框图定时中断开始否保护现场检测键输入是读入键值停止计时否1键值7输出音频脉冲电平(高或低)是用键值查表得到音频相关数据音频脉冲电平反转脉冲个数减1按音频数据设置定时器恢复现场启动定时开始发声中断返回否已发50个脉冲?定时中断程序框图是关闭定时停止发声主程序框图 ; 硬件实验二十一 电子琴 OUTBIT equ 0FE02h IN equ 0FE00h P
3、ulse equ 0 PulseCNT equ 50h ToneHigh equ 51h ToneLow equ 52h Speaker equ P1.0 0000 02008E ljmp Start org 000bh Timer0Int:000B C0D0 push PSW000D C28C clr TR0000F 85518C mov TH0, ToneHigh0012 85528A mov TL0, ToneLow0015 D28C setb TR00017 A200 mov c, Pulse0019 9290 mov Speaker, c001B B200 cpl Pulse001D
4、 1550 dec PulseCNT001F D0D0 pop PSW0021 32 reti ToneTable:0022 FC42 0024 FCAE 0026 FD0A 0028 FD35 002A FD82 002C FDC8 002E FE05 dw 64578, 64686, 64778, 64821, 64898, 64968, 65029 TestKey:0030 90FE02 mov dptr, #OUTBIT0033 7400 mov a, #00035 F0 movx dptr, a0036 90FE00 mov dptr, #IN0039 E0 movx a, dptr
5、003A F4 cpl a003B 540F anl a, #0fh 003D 22 ret KeyTable:003E 0041 FF db 16h, 15h, 14h, 0ffh0042 0045 10 db 13h, 12h, 11h, 10h0046 0D0C0B 0049 0A db 0dh, 0ch, 0bh, 0ah004A 0E0306 004D 09 db 0eh, 03h, 06h, 09h004E 0F0205 0051 08 db 0fh, 02h, 05h, 08h0052 0055 07 db 00h, 01h, 04h, 07h GetKey:0056 90FE0
6、2 mov dptr, #OUTBIT0059 8583A0 mov P2, dph005C 7800 mov r0, #Low(IN)005E 7920 mov r1, #b0060 7A06 mov r2, #6 KLoop:0062 E9 mov a, r10063 F4 cpl a0064 F0 movx dptr, a0065 F4 cpl a0066 03 rr a0067 F9 mov r1, a 0068 E2 movx a, r00069 F4 cpl a006A 540F anl a, #0fh006C 7006 jnz Goon1 006E DAF2 djnz r2, K
7、Loop 0070 7AFF mov r2, #0ffh0072 800F sjmp Exit Goon1:0074 F9 mov r1, a 0075 EA mov a, r20076 14 dec a0077 23 rl a0078 23 rl a0079 FA mov r2, a ; r2 = (r2-1)*4 007A E9 mov a, r1007B 7904 mov r1, #4 LoopC:007D 13 rrc a007E 4003 jc Exit0080 0A inc r20081 D9FA djnz r1, LoopC Exit:0083 90FE02 mov dptr,
8、#OUTBIT0086 E4 clr a0087 F0 movx dptr, a 0088 EA mov a, r20089 90003E mov dptr, #KeyTable008C 93 movc a, a+dptr008D 22 ret Start:008E mov sp, #70h0091 mov TMOD, #01 ; Timer0094 75A882 mov IE, #82h ; EA=1, IT0 = 1 MLoop:0097 1130 call TestKey0099 60FC jz MLoop 009B 1156 call GetKey009D F5F0 mov b, a0
9、09F 60F6 jz MLoop ; = 0, 7 00A5 15F0 dec b00A7 E5F0 mov a, b00A9 23 rl a ; a = a*2 00AA F5F0 mov b, a00AC mov dptr, #ToneTable00AF 93 movc a, a+dptr00B0 F551 mov ToneHigh, a00B2 F58C mov TH0, a 00B4 E5F0 mov a, b00B6 04 inc a00B7 93 movc a, a+dptr00B8 F552 mov ToneLow, a00BA F58A mov TL0, a 00BC D28C setb TR000BE mov PulseCNT, #100 Wait:00C1 E550 mov a,PulseCNT00C3 70FC jnz Wait00C5 C28C clr TR000C7 ljmp MLoop end
限制150内