基于89c51单片机的简易电子琴设计文档格式.docx
《基于89c51单片机的简易电子琴设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于89c51单片机的简易电子琴设计文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
设计内容:
三、总体设计
设计思路:
1、首先先要有一个输入口,用来控制DO,RW,MI,FA,SUO,LA,XI七个音的发出,还有播放音乐的控制。
2、再次就是输出,用来输出七个音符,和对现在工作状态的显示。
3、最重要的就是单片机的最小系统的实现。
4、最后是电源和flash的烧写RSP接口。
四、硬件电路设计
输入口:
P2口,3*3矩阵输入键盘,用P3.3做中断输入口
输出口:
P0口,P0.0、P0.1、P0.2、P0.3接四个LED灯来做为发音状态显示用P0.7做喇叭输出口。
五、软件设计思路
按键部分设计:
播放音乐部分:
音乐产生的方法;
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
现在以单片机12MHZ晶振为例,例出高中低音符与单片机计数T0相关的计数值如下表所示
音符
频率(HZ)
简谱码(T值)
低1 DO
262
63628
#4FA#
740
64860
#1 DO#
277
63731
中5SO
784
64898
低2 RE
294
63835
#5SO#
831
64934
#2RE#
311
63928
中6LA
880
64968
低3M
330
64021
#6
932
64994
低4FA
349
64103
中7SI
988
65030
370
64185
高1DO
1046
65058
低5SO
392
64260
#1DO#
1109
65085
415
64331
高2RE
1175
65110
低6LA
440
64400
#2RE#
1245
65134
466
64463
高3M
1318
65157
低7SI
494
64524
高4FA
1397
65178
中1DO
523
64580
1480
65198
554
64633
高5SO
1568
65217
中2RE
587
64684
1661
65235
622
64732
高6LA
1760
65252
中3M
659
64777
1865
65268
中4FA
698
64820
高7SI
1967
65283
下面我们要为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据
低音0-19之间,中音在20-39之间,高音在40-59之间
软件编程:
KEYBUFEQU30H
STH0EQU31H
STL0EQU32H
TEMPEQU33H
ORG0000H
LJMPSTART
ORG000BH
LJMPINT_T0
ORG0100H
START:
MOVTMOD,#01H
SETBET0
SETBEA
WAIT:
MOVP2,#0FFH
CLRP2.3
MOVA,P2
ANLA,#00000111B
XRLA,#00000111B
JZNOKEY1
LCALLDELY10MS
ANLA,#00000111B
CJNEA,#06H,NK1
MOVKEYBUF,#0
LJMPDK1
NK1:
CJNEA,#05H,NK2
MOVKEYBUF,#3
NK2:
CJNEA,#03H,NK3
MOVKEYBUF,#7
NK3:
NOP
DK1:
MOVA,KEYBUF
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
MOVB,#2
MULAB
MOVTEMP,A
MOVDPTR,#TABLE1
MOVSTH0,A
MOVTH0,A
INCTEMP
MOVA,TEMP
MOVSTL0,A
MOVTL0,A
SETBTR0
DK1A:
JNZDK1A
CLRTR0
NOKEY1:
CLRP2.4
JZNOKEY2
CJNEA,#06H,NK5
MOVKEYBUF,#1
LJMPDK2
NK5:
CJNEA,#05H,NK6
MOVKEYBUF,#4
NK6:
CJNEA,#03H,NK7
MOVKEYBUF,#8
NK7:
DK2:
DK2A:
JNZDK2A
NOKEY2:
CLRP2.5
JZNOKEY3
CJNEA,#06H,NK9
MOVKEYBUF,#2
LJMPDK3
NK9:
CJNEA,#05H,NK10
MOVKEYBUF,#5
NK10:
CJNEA,#03H,NK11
MOVKEYBUF,#6
NK11:
DK3:
DK3A:
JNZDK3A
NOKEY3:
LJMPWAIT
DELY10MS:
MOVR6,#10
D1:
MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET
INT_T0:
MOVTH0,STH0
MOVTL0,STL0
CPLP0.7
RETI
TABLE:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH
TABLE1:
DW64021,64103,64260,64400
DW64524,64580,64684,64777
DW64820,64898,64968,65030
DW65058,65110,65157,65178
END
六、软件调试
首先是最小系统的测试:
采用流水灯程序来试验最小系统的实现与否,
而后才实验程序的正确性,键盘的输入和喇叭、LED灯的显示。
在调试的过程中,出现了很多的问题在多次的检查下才得以解决,但依是有问题存在,比如中断的响应程序并没有得以实现,播放音乐没有实现。
中断程序如下所示:
先在开头设置了中断地址:
ORG0003H
LJMPINT_0
中断子程序:
INT_0:
MOVR7,#12
LOOP2:
MOVA,R7
MOVDPTR,#TAB
MOVKEYBUF,A
SETBTR0
DJNZR7,INT_0
LJMPLOOP
TAB:
DW1,5,7,6,1,3,4,5,6,7,1,3
九、设计总结
最后把程序写入单片机中,实现了键盘控制喇叭发DO,RW,MI,FA,SUO,LA,XI的程序,但中断还是没有最终实现。
在这次的单片机实训中,我收获到很多:
首先,我们原先的学习仅限于电脑上的仿真,并没有真正的运用到实际中,原先我们在电脑上写的程序也成了纸上谈兵,来到真正的实践中才发现了我们学的知识远远不足以应付在现实中的应用,我们的题目硬件也不是很难,但我也调试了很多次才真正的成功,实现了最小系统。
所以说我们的实践经验远远不足。
其次,在此过程中我们学会使用了一些的仿真软件,学会了以前我们所不会的一些编程方法,使我们的编程能力得到了进一步的提升。
提高了自己的动手能力。
动手在一定程度上反映了一个人的能力,作为当代大学生,社会要求的我们不是只能说而不能做的人才;
作为海大的一员,三能人才标准更让我们清醒地认识到,实际动手能力无比重要。
从这次实物制作中,我的动手能力提高了。
最后就是我们的学习能力和检查电路的能力。
在我们的知识不能满足现实的所需时,我们就必须自己去学习所需的知识。
八、参考书籍
《单片机原理与接口技术》
《实验指导书——《单片机原理与接口技术》》