带自动播放功能的电子琴课程设计.docx
- 文档编号:16458681
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:16
- 大小:393.77KB
带自动播放功能的电子琴课程设计.docx
《带自动播放功能的电子琴课程设计.docx》由会员分享,可在线阅读,更多相关《带自动播放功能的电子琴课程设计.docx(16页珍藏版)》请在冰点文库上搜索。
带自动播放功能的电子琴课程设计
课程设计
课程名称单片机课程设计
题目名称带自动播放功能的电子琴
学生学院材料与能源学院
专业班级09材加2班
学号
学生姓名
指导教师刘伟
2012年01月05日
1课程设计题目
带自动播放功能的电子琴
2课程设计内容
利用所给键盘的1,2,3,4,5,6,7,8,9,10,11十一个键,能够发出11个不同的音调,并且要求按下按键发声,松开延时一段时间停止,中间再按别的键则发另一音调的声音,同时数码管显示相应的音符数字。
每个琴键被按下时,LED灯显示出不同的流水灯模样。
当模式切换后,则实行播放音乐,同时LED全亮。
可以用单片机的复位功能实现模式的切换。
。
3原理电路设计(硬件设计)
3.1单片机最小系统
图1
单片机采用AT89S51单片机,AT89S51是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器,与工业80C51产品指令各引脚完全兼容。
单片机最小系统主要有两块组成,其一为晶振起振电路,其二为复位电路。
3.2按键电路
图2
用P1口以及P3.0,P.P3.1,P3.2口来控制11个琴键,当系统扫描到有琴键被按下,也就是相应的IO口有低电平输入,就跳到相应的程序执行相关操作。
3.3发声电路及数码管显示电路
图3
发声系统则是由于芯片不断输出高低电平行程方波,传递于扬声器,有电信号转化为机械振动,产生空气的振动,这就使我们能通过耳朵接收声音。
用两个三极管,起到放大声音的作用。
数码管的显示用P0口控制,中间加上220欧姆的上拉电阻,上拉电阻用于将不确定的信号通过一个电阻嵌位在高电平,电阻同时起限流作用。
图4
3.4彩灯电路
图5
用P2口控制彩灯,当检测到不同的琴键被按下,彩灯显示不同的流水灯模样。
LED是高电平有效,当输入是“1”则灯亮,输入是“0”灯就不亮,基于这样的原理,程序中只要控制好P2口的输入就可以实现灯的闪亮变化。
3.5模式选择开关
图6
当P3.3控制的开关合上,P3.4控制的开关打开,电子琴则播放音乐,此时LED彩灯全亮;相反就可以弹琴,LED灯显示不同的变化模样,同时数码管显示相应的音符数字。
4.6总电路图
图7
4程序设计(软件设计)
4.1延时参数
决定程序中延时参数的方法
C调各音节的频率如表1所列,根据此频率表可计算出程序中所需的延时参数。
先以中音DO说明如下。
音阶
DO
RE
MI
FA
SO
LA
SI
中音
音符
1
2
3
4
5
6
7
频率/Hz
262
294
330
349
392
440
494
表1
(1)DO的频率为262Hz,所以
周期T=1/f=1/262s=3816us
半周期t=T/2=1908us
(2)若以程序
MOVR6,#data;1周共需耗时3个机器周期,
ACALLDELAY;2周即耗时1us*3=3us
DELAY:
MOVB,R6;2周需耗时2个机器周期,即耗时2us
MOVR7,#6;1周此循环部分,每执行一次供需耗时
DL:
DJNZR7,$;2周15个机器周期,即耗时
DJNZR6,DL;2周1us*15=15us
MOVR6,B;2周共需耗时4个机器周期,即耗时
RET;2周1us*4=4us
来达成延时t的目的,则因t=1908,且
MOVR6,#data
ACALLDELAY
MOVB,R6
MOVR6,B
RET
这5个指令共耗时9us,所以在DELAY子程序中,循环部分只能是
1908us-9us=1899us
(3)循环的部分每执行一次耗时15us,故要延时1899us需重复执行1899/=
次,即R6=126就可产生所需的DO音调。
(4)其他音调所需的R6值,算法一样。
4.2简谱对应简谱码,T值,节拍数
发音
简谱码
T值
节拍码
节拍数
低5SO
1
64260
1
1/4拍
低6LA
2
64400
2
2/4拍
低7SI
3
64524
3
3/4拍
中1DO
4
64580
4
1拍
中2RE
5
64684
5
1又1/4拍
中3MI
6
64777
6
1又2/4拍
中4FA
7
64820
7
1又3/4拍
中5SO
8
64898
8
2拍
中6LA
9
64968
9
2又1/4拍
中7SI
A
65030
A
2又2/4拍
高1DO
B
65058
B
2又3/4拍
扬声器能发出不同的声音是因为不同的音高和节拍,对应不同音高有对应的16进制数。
4.3电子琴流程图
图8
4.4源程序
ORG0000H
AJMPMAIN;上电,转向主程序
ORG000BH;定时器T0入口地址
JMP TIM0;转向中断服务程序
ORG 0030H;主程序
MAIN:
SETBP3.3;P3.3口置1
SETBP3.4;P3.4口置1
SETBP3.5,P3.5口置1
CLRP3.6;P3.6口置0
CLRP3.7;P3.7口置0
LOOP:
JBP3.4,S1;判断P3.4口,为1则转向S1,否则顺序执行
SETBP3.6
CLRP3.7
AJMPPIANO;转向PIANO
S1:
JBP3.3,LOOP;判断P3.3口,为1则转向S2,否则顺序执行
SETBP3.7
CLRP3.6
ACALLMM
AJMPLOOP
MM:
MOV TMOD,#01H ;设定时方式
MOV IE,#82H ;开中断
START0:
MOV 30H,#00H;
NEXT:
MOVA,30H
MOV DPTR,#TABLE
MOVC A,@A+DPTR ; 查表取音调和节拍
MOV R2,A
JZ END0 ; 为零,不进行处理
ANL A,#0FH
MOV R5,A ;将节拍存入R5
MOV A,R2
SWAP A
ANL A,#0FH
JNZ SING ; 根据音调决定是否演奏.
CLR TR0
JMP D1
SING:
DEC A
MOV 22H,A ; 将音调存入22H.
RL A
MOV DPTR,#TABLE1
MOVC A,@A+DPTR ;根据音调决定定时器初值
MOV TH0,A ; 放入TH0
MOV 21H,A
MOV A,22H
RL A
INC A
MOVC A,@A+DPTR
MOV TL0,A ; 放入TL0
MOV 20H,A
SETB TR0 ;启动定时器T0
D1:
CALL DELAY
INC 30H
JMP NEXT
END0:
CLR TR0
JMP START0
TIM0:
;定时器中断服务程序
PUSH ACC
PUSH PSW
MOV TL0,20H ;重赋初值
MOV TH0,21H
CPL P0.7
POP PSW
POP ACC
RETI
DELAY:
MOV R7,#02H ;延时子程序
D2:
MOV R4,#187
D3:
MOV R3,#248
DJNZ R3,$
DJNZ R4,D3
DJNZ R7,D2
DJNZ R5,DELAY
RET
TABLE1:
;决定音调的定时初值.
DW64260,64400,64524,64580
DW64684,64777,64820,64898
DW64968,65030,65058,65110
DW65157,65178,65217
TABLE:
;决定音调和节拍的表格,不同的歌曲只是此表不同
DB4H,02H,82H,64H,54H
DB64H,54H,48H
DB64H,02H,52H,44H,24H
DB44H,54H,64H,44H
DB44H,54H,64H,44H
DB64H,74H,88H
DB64H,74H,88H
DB82H,01H,81H,94H,84H,0B4H,0A4H,04H,82H,01H,81H,94H,84H,0C4H,0B4H,04H
DB82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94H,0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04H
DB82H,01H,81H,94H,84H,0B4H,0A4H,04H,82H,01H,81H,94H,84H,0C4H,0B4H,04H
DB82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94H,0E2H,01H,0E1H,0D4H,0D4H,0C4H,0B4H,04H,00
PIANO:
ORLP1,#0FFH;把P1,P3口嵌在高电平,等待任一键被按下
ORLP3,#0FFH
ANLP2,#00H;P2口清零,上电后LED灯全不亮
TEST:
JNBP3.2,SOL;判断哪个键被按下,发现有键被按下直接跳到相关程序执行操作
JNBP3.1,LAL
JNBP3.0,SIL
JNBP1.7,DO
JNBP1.6,RE
JNBP1.5,MI
JNBP1.4,FA
JNBP1.3,SO
JNBP1.2,LA
JNBP1.1,SI
JNBP1.0,DOH
AJMPTEST;重新再判断按键
SOL:
MOVR6,#170;设定相对应的延时参数R6,使按下键时发出相应的音调
MOVP0,#92H;数码管显示相应的音符数字
MOVP2,#81H;LED灯显示对应键被按下的闪烁模式
AJMPOUTPUT;跳到OUTPUT,输出一周
LAL:
MOVR6,#150
MOVP0,#82H
MOVP2,#42H
AJMPOUTPUT
SIL:
MOVR6,#134
MOVP0,#0F8H
MOVP2,#24H
AJMPOUTPUT
DO:
MOVR6,#126
MOVP0,#0F9H
MOVP2,#18H
AJMPOUTPUT
RE:
MOVR6,#113
MOVP0,#0A4H
MOVP2,#24H
AJMPOUTPUT
MI:
MOVR6,#100
MOVP0,#0B0H
MOVP2,#42H
AJMPOUTPUT
FA:
MOVR6,#95
MOVP0,#99H
MOVP2,#81H
AJMPOUTPUT
SO:
MOVR6,#85
MOVP0,#92H
MOVP2,#0C0H
AJMPOUTPUT
LA:
MOVR6,#75
MOVP0,#82H
MOVP2,#30H
AJMPOUTPUT
SI:
MOVR6,#67
MOVP0,#0F8H
MOVP2,#0CH
AJMPOUTPUT
DOH:
MOVR6,#63
MOVP0,#0F9H
MOVP2,#03H
OUTPUT:
SETBP0.7;令扬声器通电
ACALLDELAY1;延时半周期t
CLRP0.7;令扬声器断电
ACALLDELAY1;延时半周期t
AJMPTEST;重新测试按
DELAY1:
MOVB,R6
DL:
MOVR7,#6
DJNZR7,$
DJNZR6,DL
MOVR6,B
RET
END;结束
5总结
历时两个星期的单片机课程设计已经结束了,我基本完成了任务。
在这个电子琴的设计与制作上,我真的学到了很多书本上无法学到的实用知识,同时在知识的巩固和动手能力的锻炼上得到了很大的进步。
从方案的确定,功能的设计,程序的编写与调试,每一步都学习到比较深入才能合理运用知识,从而应用到实际,完成设计。
我在编写程序时遇到很多很多问题,都基本都可以通过同学间相互讨论研究,向其他同学请教,参考指导书,并且在网络上得到帮助。
经过这样学习研究的过程,我不止学习到了东西和完成设计任务,我更学习到与伙伴,同学互相学习一起进步的道理。
编写程序时想要实现什么功能必须十分清楚,而这次设计我是先写比较简单的功能的程序,并且分模块进行,最后把几个小程序连在一起,既可以分块研究学习,又可以达到清晰思路的效果。
通过这次的课程设计,我得到了一定的实践能力的锻炼,这对我以后的实际工作能力有重要的影响,增加了我的经验。
在当今时代的电子行业中,单片机是是十分重要的,充当着不可或缺的要员,在生活中也可以说是无处不在的。
因此,学好单片机对当代工科生十分重要。
同时,通过这次的课程设计,我更加深刻了解到理论与实际相结合的重要性,只有理论知识是远远不够的,所以这样一个课程设计就可以很好地让学生把学到的知识应用到实际上去,这才是学以致用。
这个电子琴的设计中,我还为此学习了音符节拍的知识以及它们的表示方法,如何写进单片机程序中。
经过这次课程设计,很好地把在书本上学到的知识整理了一翻,把该学的知识弄得更透彻,不再停留在理论上,更注重的是如何运用这些知识达到我想要的效果。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自动 播放 功能 电子琴 课程设计