——多功能13音电子琴
一、功能及特点说明:
1、一个琴键可弹出两个音符
2、可手动导入任意歌曲并控制播放(本设计预录歌曲《月亮代表你的心》 )
3、声音音调准确,音色优质
4、体积小,集成度高
5、覆盖所有常用音阶(低So——高Me)
二、使用说明:
1、本设计有八个琴键,按 k1—k7为音调输出
2、按一下k8后再按k1—k7则输出高阶音调
3、先按着k8再+k2键后会在音频输出自己收录的歌曲,复位键停止
三、器件说明:
器件 | 数量 | 器件 | 数量 |
扬声器 | 1 | LM386 | 1 |
按键 | 10 | STCC51 | 1 |
晶振 | 1 | 插排 | 若干 |
电容 | 20pf*2 10uf*3 47uf*1 4.7nf*1 | USB接口 | 1 |
电阻 | 10k*4 1k*1 200*2 | 排线 | 若干 |
led | *2 | 40脚插座 | 1 |
四、设计原理
1、原理说明
1.1 音阶的产生
由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
本次设计中单片机晶振为12MHZ,那么定时器的计数周期为1MHZ,假如选择工作方式1,那T值便为T= 216--5﹡105/相应的频率 ,那么根据不同的频率计算出应该赋给定时器的计数值,列出不同音符与单片机计数T0相关的计数值如下表所示:
音符 | 频率(HZ) | 简谱码(T值) |
中 1 DO | 523 | 580 |
中 2 RE | 587 | 684 |
中 3 M | 659 | 777 |
中 4 FA | 698 | 820 |
中 5 SO | 784 | 8 |
中 6 LA | 880 | 968 |
中 7 SI | 988 | 65030 |
2.1程序框图
2.3程序内容
音调的产生方法
按k2让音调转换
如何按k8+k2放出音乐 和如何让音乐停止
2.4 汇编源程序
BUZZ EQU P2
BUZZ1 EQU P1.7
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INT_T0
ORG 001BH
LJMP TIME1
ORG 8000H
MAIN:
MOV SP,#90H
MOV BUZZ,#0FFH
MOV TMOD,#11H
SETB ET0
SETB ET1
SETB EA
CLR TR0
START:
MOV R0, BUZZ
CJNE R0,#0FFH,KEY1
CLR TR0
SJMP START
KEY1:
CJNE R0,#0FEH,KEY2
MOV 30H,#0FBH
MOV 31H,#0E9H
LJMP SET_TIMER
KEY2:
CJNE R0,#0FDH,KEY3
MOV 30H,#0FCH
MOV 31H,#5CH
LJMP SET_TIMER
KEY3:
CJNE R0,#0FBH,KEY4
MOV 30H,#0FCH
MOV 31H,#0C1H
LJMP SET_TIMER
KEY4:
CJNE R0,#0F7H,KEY5
MOV 30H,#0FCH
MOV 31H,#0EFH
LJMP SET_TIMER
KEY5:
CJNE R0,#0EFH,KEY6
MOV 30H,#0FDH
MOV 31H,#045H
LJMP SET_TIMER
KEY6:
CJNE R0,#0DFH,KEY7
MOV 30H,#0FDH
MOV 31H,#92H
LJMP SET_TIMER
KEY7:
CJNE R0,#0BFH,KEY8
MOV 30H,#0FDH
MOV 31H,#0D6H
LJMP SET_TIMER
KEY8:
CJNE R0,#7FH,NOKEY
LOOP1:MOV R0, BUZZ
CJNE R0,#7DH,LOOP
LJMP MAIN1
LOOP: CJNE R0,#0FFH,LOOP1
LJMP OSTART
SET_TIMER:
SETB TR0
SJMP START
NOKEY:
CLR TR0
SJMP START
INT_T0:
MOV TH0,30H
MOV TL0,31H
CPL BUZZ1
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
OSTART:
MOV R0, BUZZ
CJNE R0,#0FFH,OKEY1
CLR TR0
SJMP OSTART
OKEY1:
CJNE R0,#0BFH,OKEY2
MOV 30H,#0FBH
MOV 31H,#0E9H
LJMP OSET_TIMER
OKEY2:
CJNE R0,#0DFH,OKEY3
MOV 30H,#0FCH
MOV 31H,#5CH
LJMP OSET_TIMER
OKEY3:
CJNE R0,#0EFH,OKEY4
MOV 30H,#0FCH
MOV 31H,#0C1H
LJMP OSET_TIMER
OKEY4:
CJNE R0,#0F7H,OKEY5
MOV 30H,#0FCH
MOV 31H,#0EFH
LJMP OSET_TIMER
OKEY5:
CJNE R0,#0FBH,OKEY6
MOV 30H,#0FDH
MOV 31H,#045H
LJMP OSET_TIMER
OKEY6:
CJNE R0,#0FDH,OKEY7
MOV 30H,#0FDH
MOV 31H,#92H
LJMP OSET_TIMER
OKEY7:
CJNE R0,#0FEH,OKEY8
MOV 30H,#0FDH
MOV 31H,#0D6H
LJMP OSET_TIMER
OKEY8:
CJNE R0,#07FH,ONOKEY
LOOP2:MOV R0, BUZZ
CJNE R0,#7DH,LOOP3
LJMP MAIN1
LOOP3: CJNE R0,#0FFH,LOOP2
LJMP START
OSET_TIMER:
SETB TR0
SJMP OSTART
ONOKEY:
CLR TR0
LJMP OSTART
;;;;; ;;;;;;;;;;;;;;;;;;;;;;
MAIN1: MOV 40H,#00H
NEXT: MOV R0, BUZZ
MOV 41H,R0
ORL 41H ,#0FEH
MOV R0,41H
CJNE R0,#0FFH,STOP
MOV A,40H
MOV DPTR,#SONG
MOVC A,@A+DPTR
CJNE A,#00H,PLAY
LJMP STOP
PLAY: MOV R1,A
ANL A,#0FH
MOV R2,A
MOV A,R1
ANL A,#0F0H
CJNE A,#00H,MUSIC
CLR TR1
LJMP DEL
MUSIC:SWAP A
DEC A
MOV 22H,A
ADD A,22H
MOV R3,A
MOV DPTR,#SONG1
MOVC A,@A+DPTR
MOV TH1,A
MOV 21H,A
MOV A,R3
INC A
MOVC A,@A+DPTR
MOV TL1,A
MOV 20H,A
SETB TR1
DEL: LCALL DELAY
INC 40H
LJMP NEXT
STOP: CLR TR1
LJMP START
TIME1:PUSH ACC
PUSH PSW
CPL BUZZ1
MOV TL1,20H
MOV TH1,21H
POP PSW
POP ACC
RETI
DELAY:MOV R7,#02H
DELA1:MOV R6,#125
DELA2:MOV R5,#248
DJNZ R5,$
DJNZ R6,DELA2
DJNZ R7,DELA1
DJNZ R2,DELAY
RET
SONG1:
DW 580,684,777,820
DW 8,968,65030,260
DW 400,524,65058,63835,021
SONG :;;;;;;;月亮代表我的心;;;;;;;;;
DB 02H,82H
DB 16H,32H,54H,02H,52H
DB 0A6H,32H,54H,02H,52H
DB H,74H,0B6H,H
DB 52H,5CH,32H,22H
DB 16H,12H,14H,32H,22H
DB 16H,12H,14H,22H,32H
DB 26H,12H,94H,22H,32H
DB 2CH
DB 32H,52H
DB 36H,22H,14H,54H
DB 0ACH,92H,0A2H
DB 96H,0A2H,96H,82H
DB 3CH,54H
DB 36H,22H,14H,54H
DB 0ACH,92H,0A2H
DB 16H,12H,14H,22H,32H
DB 2CH,02H,82H
DB 16H,32H,56H,12H
DB 0A6H,32H,56H,52H
DB 66H,72H,0B6H,62H
DB 62H,52H,58H,32H,22H
DB 16H,12H,14H,32H,22H
DB 16H,12H,14H,22H,32H
DB 26H,92H,0A4H,12H,22H
DB 1CH
DB 00
;
END