简易电子琴设计单片机课程设计.docx
《简易电子琴设计单片机课程设计.docx》由会员分享,可在线阅读,更多相关《简易电子琴设计单片机课程设计.docx(12页珍藏版)》请在冰豆网上搜索。
简易电子琴设计单片机课程设计
简易电子琴设计
用单片机控制扬声器,弹奏出一段音乐。
一、预备知识:
乐曲由不同音符组成,各音符都有对应的频率,频率不同的方波加在扬声器上,
就产生一个持续的音符。
利用不同的音符、音高、音长组合,就可产生想要的音乐。
对于单片机来说,利用其定时器产生不同频率的方波非常方便,以11.0592、
22.1184MHz晶振(实验箱)为例,列出高中低音符与单片机定时器初值如下表所示
注意:
1、一个音段常见由7个标准音组成(1do、2ri、3mi、4fa、5sol、6la、7si),但实际
乐曲中还有一些介于2个标准音之间的音,即半度音,有1.5、2.5、4.5、5.5、6.5共
5个,所以完整的1个音段有12个音。
2、选择简谱时,尽量选用只含7个标准音的乐曲,而且要选C大调的(简谱左上角
标着1=CX/4),否则各音符的频率要做相应的变化。
10
二、设计目的
了解扬声器的发声原理,进一步熟悉定时器、键盘扫描、LED显示电路的工作
原理及编程方法。
三、设计内容
1、设计键盘、LED显示、扬声器驱动电路原理图;
2、设计程序流程图;
3、编程调试,利用按键作为琴键,按下不同的键发出相应的音调,同时在LED
最右位显示对应键号值。
四、参考接线
扬声器的SPK+端接VCC,SPK负端连接到某一I/O口。
五、设计步骤
程序:
KEYBUFEQU30H
STH0EQU31H
STL0EQU32H
TEMPEQU33H
ORG0000
LJMPMAIN
ORG000BH
LJMPINT_T0
MAIN:
MOVTMOD,#01H
SETBET0
SETBEA
WAIT:
MOVP3,#0FFH
CLRP3.4
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY1
LCALLDELAY
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY1
MOVA,P3
ANLA,#0FH
CJNEA,#0EH,NK1
MOVKEYBUF,#0
LJMPDK1
NK1:
CJNEA,#0DH,NK2
MOVKEYBUF,#1
LJMPDK1
NK2:
CJNEA,#0BH,NK3
MOVKEYBUF,#2
LJMPDK1
NK3:
CJNEA,#07H,NK4
MOVKEYBUF,#3
LJMPDK1
NK4:
NOP
DK1:
MOVA,KEYBUF
MOVB,#2
MULAB
MOVTEMP,A
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVSTH0,A
MOVTH0,A
INCTEMP
MOVA,TEMP
MOVCA,@A+DPTR
MOVSTL0,A
MOVTL0,A
SETBTR0
DK1A:
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JNZDK1A
CLRTR0
NOKEY1:
MOVP3,#0FFH
CLRP3.5
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY2
LCALLDELAY
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY2
MOVA,P3
ANLA,#0FH
CJNEA,#0EH,NK5
MOVKEYBUF,#4
LJMPDK2
NK5:
CJNEA,#0DH,NK6
MOVKEYBUF,#5
LJMPDK2
NK6:
CJNEA,#0BH,NK7
MOVKEYBUF,#6
LJMPDK2
NK7:
CJNEA,#07H,NK8
MOVKEYBUF,#7
LJMPDK2
NK8:
NOP
DK2:
MOVA,KEYBUF
MOVB,#2
MULAB
MOVTEMP,A
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVSTH0,A
MOVTH0,A
INCTEMP
MOVA,TEMP
MOVCA,@A+DPTR
MOVSTL0,A
MOVTL0,A
SETBTR0
DK2A:
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JNZDK1A
CLRTR0
NOKEY2:
MOVP3,#0FFH
CLRP3.6
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY3
LCALLDELAY
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY3
MOVA,P3
ANLA,#0FH
CJNEA,#0EH,NK9
MOVKEYBUF,#8
LJMPDK1
NK9:
CJNEA,#0DH,NK10
MOVKEYBUF,#9
LJMPDK1
NK10:
CJNEA,#0BH,NK11
MOVKEYBUF,#10
LJMPDK1
NK11:
CJNEA,#07H,NK12
MOVKEYBUF,#11
LJMPDK3
NK12:
NOP
DK3:
MOVA,KEYBUF
MOVB,#2
MULAB
MOVTEMP,A
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVSTH0,A
MOVTH0,A
INCTEMP
MOVA,TEMP
MOVCA,@A+DPTR
MOVSTL0,A
MOVTL0,A
SETBTR0
DK3A:
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JNZDK3A
CLRTR0
NOKEY3:
MOVP3,#0FFH
CLRP3.7
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY4
LCALLDELAY
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY4
MOVA,P3
ANLA,#0FH
CJNEA,#0EH,NK13
MOVKEYBUF,#12
LJMPDK4
NK13:
CJNEA,#0DH,NK14
MOVKEYBUF,#13
LJMPDK4
NK14:
CJNEA,#0BH,NK15
MOVKEYBUF,#14
LJMPDK4
NK15:
CJNEA,#07H,NK16
MOVKEYBUF,#15
LJMPDK4
NK16:
NOP
DK4:
MOVA,KEYBUF
MOVB,#2
MULAB
MOVTEMP,A
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVSTH0,A
MOVTH0,A
INCTEMP
MOVA,TEMP
MOVCA,@A+DPTR
MOVSTL0,A
MOVTL0,A
SETBTR0
DK4A:
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JNZDK4A
CLRTR0
NOKEY4:
MOVDPTR,#LED_TAB
MOVA,KEYBUF
MOVCA,@A+DPTR
MOVP1,A
LJMPMAIN
DELAY:
MOVR6,#10
D1:
MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET
INT_T0:
MOVTH0,STH0
MOVTL0,STL0
CPLP2.0
RETI
TAB:
DW62018,62401,62743,62895;低1,2,3,4
DW63185,63441,63670,63774;低5,6,7,中1
DW63966,64138,64216,64360;中2,3,4,5
DW64489,64603,64655,64752;中6,7,高1,2
LED_TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;0至9共阴
DB77H,7CH,39H,5EH,79H,71H;A至F
END
原理图: