简易音乐演奏系统设计.docx
《简易音乐演奏系统设计.docx》由会员分享,可在线阅读,更多相关《简易音乐演奏系统设计.docx(21页珍藏版)》请在冰豆网上搜索。
简易音乐演奏系统设计
课程设计说明书
设计题目:
简易音乐演奏系统设计
专业:
电子信息工程班级:
11级1班
设计人:
蔡
山东科技大学
2014年1月10日
课程设计任务书
学院电气与信息工程学院专业电子信息工程班级11级1班蔡士智
一、课程设计题目:
简易音乐演奏系统设计
二、课程设计主要参考资料:
(1)公茂法,黄鹤松,杨学蔚《MCS—51/52单片机原理与实践》北京航空航天大学出版社。
(2)
(3)
三、课程设计应主要解决的问题:
(1)数码管循环提示乐曲信息。
按键选择乐曲并演奏,如:
按1号键,演奏乐曲1;按2号键,唱乐曲2……
(2)按下预先定义按键,蜂鸣器发出指定音调的声音,同时数码管和LED灯反馈音调的信息。
四、课程设计相关附件(如:
图纸、软件等):
(1)Protues7.8Keil4
(2)单片机开发仪
五、任务出发日期:
2013年12月30号课程设计完成日期:
2014年1月10号
指导教师签字:
系主任签字:
指导教师对课程设计的评语
指导教师签字:
年月日
摘要
本文介绍了利用AT89C52单片机驱动单片仪上的蜂鸣器设计音乐演奏系统。
实现两个功能:
一是按下预先定义按键,蜂鸣器发出指定的音调的声音,同时数码管和LED灯反馈音调的信息;二是数码管循环提示乐曲信息,按键选择乐曲并演奏,如:
按1号键,演奏乐曲1;按2号键,唱乐曲2……。
关键词:
音乐键盘,keil,protues
1绪论
2系统整体介绍
3系统硬件设计
3.1AT89C52模块
3.2键盘扫描模块
3.3LED灯显示模块
3.4数码管显示模块
3.5蜂鸣器模块
4系统软件设计
4.1主程序
4.2键盘扫描子程序
4.3LED灯数码管显示子程序
4.4音乐定时器初值
4.5延时子程序
4.6程序框图
5调试与结果
6设计总结
7参考文献
8附件
8.1系统原理图
8.2程序清单
1绪论
利用AT89C52单片机和相应的单片机知识,通过简单的设计模拟钢琴键盘的发声,矩阵键盘驱动蜂鸣器发出相应频率的音调和歌曲,LED灯和数码管显示相应的音调和歌曲编号。
本设计节约了为买大型钢琴所花费的大量钱财,为喜爱音乐创作的人员提供了一个追求梦想的平台。
还可以满足小朋友玩耍的需要。
2系统整体介绍
本系统可分为:
AT89C52模块,键盘输入模块,LED灯显示模块,数码管显示模块,蜂鸣器模块。
AT89C52模块:
系统的核心部分,负责处理来自键盘输入模块的键值,然后AT89C52根据键值做出相应的判断,驱动LED灯显示模块、数码管显示模块和蜂鸣器模块做出相应的响应。
键盘输入模块:
读取那个键按下,将键值送到AT89C52。
LED灯显示模块:
将AT89C52送来的音调或歌曲编号通过8个LED灯显示出来。
数码管显示模块:
将AT89C52送来的音调或歌曲编号通过8位静态数码管显示出来。
蜂鸣器模块:
AT89C52I/O口送来的高低电平驱动蜂鸣器发出对应频率的声音。
3系统硬件设计
3.1AT89C52模块
AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。
如图3.1所示:
图3.1AT89C52
P0:
需外接上拉电阻(10K)。
P1、P2、P3:
不需要外接上拉电阻
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
XTAL1、XTAL2:
振荡器反相放大器及内部时钟发生器的输入端、输出端。
3.2键盘输入模块
方法一:
独立键盘
有键按下,返回键值;否则,返回0FFH。
如图3.2.1
图3.2.1
方法二:
矩阵键盘
线反转法:
首先,将行线编程为输入线,列线编程为输出线,然后使列线全输出低电平,读取行线电平,行线从高电平转为低电平的行线为按下按键所在行;然后,将列线编程为输入线,行线编程为输出线,然后使行线全输出低电平,读取列线电平,列线从高电平转为低电平的列线为按下按键所在列。
如图3.2.2所示:
图3.2.2
本系统采用方法二,因为矩阵键盘节约I/O口,节约资源,而且按键多。
如图3.2.3所示:
图3.2.3
3.3LED灯显示模块
本系统采用LED灯静态显示的方法,共阴高电平点亮。
如图3.3.1所示:
图3.3.1图3.3.2
图3.3.2为本系统实际的LED灯和芯片的连接电路。
LED灯第几个亮:
1,2,3,4,5,6,7,8;
对应代码为:
01h,02h,04h,08h,10h,20h,40h,80h;
3.4数码管显示模块
本系统采用8位段码静态显示的方法,共阳低电平点亮。
如图3.4.1所示:
图3.4.1图3.4.2
图3.4.2为本系统实际的数码管和芯片的连接电路。
数码管显示:
1,2,3,4,5,6,7;
对应段码为:
0f9h,0a4h,0b0h,99h,92h,82h,0f8h;
3.5蜂鸣器模块
输入高电平,蜂鸣器发出响声;输入低电平,蜂鸣器不响。
通过控制输入信号的频率来发出不同的音调;通过控制信号持续时间来控制声音的长短。
蜂鸣器如图3.5所示:
图3.5
4系统软件设计
4.1主程序
org0000h
jmpmain
org000bh
jmpint_0
org0100h
main:
setbet0
setbea
movtmod,#01h
next0:
lcallkey0
cjnea,#08h,next1;a>=#directcy=0
next1:
jncnext2;cy=0跳转
lcallled
lcallmusic
lcallwait
jmpnext0
next2:
cjnea,#08h,next3;/=跳转
lcallled
lcallwait
lcallsong10
jmpnext0
next3:
lcallled
lcallwait
lcallsong20
jmpnext0
4.2键盘扫描子程序
键值检测程序如下:
key0:
movp0,#0fh
mova,p0
cpla;取反
anla,#0fh;与
mov30h,a;行值
jznext0;a=0转移
key1:
movp0,#0f0h
mova,p0
cpla
anla,#0f0h
mov31h,a;列值
jznext0
jbcf0,key2;bit=1转移
setbf0
lcalldelay0
jmpkey0
key2:
mova,30h
mov30h,#00h
mov32h,#03h
clrc
key3:
rrca;右移
jckey4;cy=1转移
inc30h
djnz32h,key3
key4:
mova,31h
mov31h,#03h
mov32h,#03h
clrc
key5:
rlca;左移
jckey6
dec31h
djnz32h,key5
key6:
mova,30h
clrc
rlca
rlca
adda,31h
mov33h,a
ret
键值送给33h
键盘松手检测程序如下:
wait:
movp0,#0f0h
mova,p0
cpla
anla,#0f0h
jnzwait
clrtr0
clrf0
ret
歌曲中断检测程序如下:
button:
movp0,#0fh
mova,p0
cpla
anla,#0fh
ret
4.3LED灯数码管显示子程序
led:
mova,33h
movdptr,#tab0
movca,a+dptr
movp1,a
mova,33h
movdptr,#tab1
movca,a+dptr
movp3,a
ret
4.4音乐定时器初值
定时器初值查表程序如下:
music:
mova,33h
movdptr,#mus0h
movca,a+dptr
mov34h,a
movth0,34h
mova,33h
movca,a+dptr
mov35h,a
movtl0,35h
setbtr0
ret
中断程序如下:
int_0:
clrtf0
cplp2.0
movth0,34h
movtl0,35h
reti
4.5延时子程序
delay0:
movr0,#20;延时20ms
loop0:
movr1,#250
loop1:
nop
nop
djnzr1,loop1
djnzr0,loop0
ret
delay1:
movr0,#100;延时100ms
loop2:
movr1,#250
loop3:
nop
nop
djnzr1,loop3
djnzr0,loop2
ret
4.6程序框图
键值<8键值>=8
松手
是否
没松手
图4.6有键
5调试与结果
(1)不能正确读取矩阵键盘的键值,因为P0口没有外接上拉电阻,而P1、P2、P3口不需要外接上拉电阻。
(2)播放歌曲的音的时长不正确,因为每个音的节拍不一样,持续时间长短也不一样,需要单独的一个延时子程序。
使用说明:
矩阵键盘共4*4=16个键,按下前八个键会对应发出1、2、3、4、5、6、7、1八个音,第九个按键和第十个按键分别对应两首歌曲,其余六个按键未定义。
6设计总结
经过本次课程设计,更加详细的了解单片机的具体内部原理和工作过程,知道了通过给单片机的定时/计数器设置计数初值,驱动蜂鸣器发出各种音调和完整歌曲的方法。
在设计的过程中遇到了很多问题,需要上网查资料解决,培养了独自解决问题的能力;和组员商量讨论,提高了设计效率,培养了团队合作意识。
7参考文献
(1)公茂法,黄鹤松,杨学蔚《MCS—51/52单片机原理与实践》北京航空航天大学出版社。
(2)音调和计数初值关系www.docin./p-359437295.html
8附件
8.1系统原理图
8.2程序清单
;30h行值
;31h列值
;32h置循环数
;33h键值
;34hth0
;35htl0
;36h查表数
;37h节拍数
org0000h
jmpmain
org000bh
jmpint_0
org0100h
main:
setbet0
setbea
movtmod,#01h
next0:
lcallkey0
cjnea,#08h,next1;a>=#directcy=0
next1:
jncnext2;cy=0跳转
lcallled
lcallmusic
lcallwait
jmpnext0
next2:
cjnea,#08h,next3;/=跳转
lcallled
lcallwait
lcallsong10
jmpnext0
next3:
lcallled
lcallwait
lcallsong20
jmpnext0
key0:
movp0,#0fh
mova,p0
cpla;取反
anla,#0fh;与
mov30h,a;行值
jznext0;a=0转移
key1:
movp0,#0f0h
mova,p0
cpla
anla,#0f0h
mov31h,a;列值
jznext0
jbcf0,key2;bit=1转移
setbf0
lcalldelay0
jmpkey0
key2:
mova,30h
mov30h,#00h
mov32h,#03h
clrc
key3:
rrca;右移
jckey4;cy=1转移
inc30h
djnz32h,key3
key4:
mova,31h
mov31h,#03h
mov32h,#03h
clrc
key5:
rlca;左移
jckey6
dec31h
djnz32h,key5
key6:
mova,30h
clrc
rlca
rlca
adda,31h
mov33h,a
ret
delay0:
movr0,#20;延时20ms
loop0:
movr1,#250
loop1:
nop
nop
djnzr1,loop1
djnzr0,loop0
ret
delay1:
movr0,#100;延时100ms
loop2:
movr1,#250
loop3:
nop
nop
djnzr1,loop3
djnzr0,loop2
ret
led:
mova,33h
movdptr,#tab0
movca,a+dptr
movp1,a
mova,33h
movdptr,#tab1
movca,a+dptr
movp3,a
ret
music:
mova,33h
movdptr,#mus0h
movca,a+dptr
mov34h,a
movth0,34h
mova,33h
movca,a+dptr
mov35h,a
movtl0,35h
setbtr0
ret
wait:
movp0,#0f0h
mova,p0
cpla
anla,#0f0h
jnzwait
clrtr0
clrf0
ret
button:
movp0,#0fh
mova,p0
cpla
anla,#0fh
ret
song10:
mov36h,#0ffh
song11:
inc36h
mova,36h
movdptr,#mus1h
movca,a+dptr
mov34h,a
movth0,34h
mova,36h
movdptr,#mus1l
movca,a+dptr
mov35h,a
movtl0,35h
mova,36h
movdptr,#mus1r
movca,a+dptr
cjnea,#100,song12
clrtr0
jmpsong14
song12:
mov37h,a
setbtr0
song13:
lcalldelay1
lcallbutton
jnzsong14
djnz37h,song13
jmpsong11
song14:
ret
song20:
mov36h,#0ffh
song21:
inc36h
mova,36h
movdptr,#mus2h
movca,a+dptr
mov34h,a
movth0,34h
mova,36h
movdptr,#mus2l
movca,a+dptr
mov35h,a
movtl0,35h
mova,36h
movdptr,#mus2r
movca,a+dptr
cjnea,#100,song22
clrtr0
jmpsong24
song22:
mov37h,a
setbtr0
song23:
lcalldelay1
lcallbutton
jnzsong24
djnz37h,song23
jmpsong21
song24:
ret
int_0:
clrtf0
cplp2.0
movth0,34h
movtl0,35h
reti
tab0:
db01h,02h,04h,08h,10h,20h,40h,80h,01h,02h
tab1:
db0f9h,0a4h,0b0h,99h,92h,82h,0f8h,79h,0f9h,0a4h
mus0h:
db
0f8h,0f8h,0fah,0fah,0fbh,0fbh,0fch,0fch
mus0l:
db88h,50h,17h,6bh,08h,92h,0eh,40h;1,2,3,4,5,6,7,1
mus1h:
db
0fdh,0fdh,0fdh,0fdh,0fdh,0fdh,0fdh,0fch,0fch,0fch,0fch,0fdh,0fdh,0fch,0fch,0fch,0fdh,0fdh,0fdh,0fdh,0fdh,0fdh,0fdh,0fch,0fch,0fch,0fch,0fdh,0fch,0fch,0fch,0fch,0fch,0fch,0fdh,0fch,0fch,0fch,0fdh,0fdh,0fch,0fch,0fdh,0fdh,0fdh,0fch,0fch,0fch,0fbh,0fdh,0fdh,0fdh,0fdh,0fdh,0fdh,0fdh,0fdh,0fdh,0fch,0fch,0fch,0fch,0fdh,0fch,0fch,0fch,0fch,00h
mus1l:
db
09h,09h,34h,82h,82h,34h,09h,0ach,44h,44h,0ach,09h,09h,0ach,0ach,0ach,09h,09h,34h,82h,82h,34h,09h,0ach,44h,44h,0ach,09h,0ach,44h,44h,44h,0ach,0ach,09h,44h,0ach,09h,34h,09h,44h,0ach,09h,34h,09h,0ach,44h,0ach,04h,09h,09h,09h,34h,82h,82h,34h,09h,34h,0ach,44h,44h,0ach,09h,0ach,44h,44h,44h,00h
mus1r:
db
4,4,4,4,4,4,4,4,4,4,4,4,6,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,6,2,4,4,4,4,4,4,4,2,2,4,4,4,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,2,2,4,4,4,4,6,2,4,4,100
mus2h:
db
0fdh,0fdh,0fdh,0fdh,0feh,0feh,0feh,0fdh,0fdh,0fdh,0fdh,0feh,0feh,0feh,0fdh,0fdh,0feh,0feh,0feh,0feh,0fdh,0feh,0feh,0feh,0feh,0feh,0feh,0feh
mus2l:
db
80h,80h,0c6h,80h,2ah,02h,02h,80h,80h,0c6h,80h,5ch,2ah,2ah,80h,80h,0c0h,84h,2ah,02h,0c6h,98h,98h,84h,2ah,5ch,2ah,2ah
mus2r:
db
3,1,4,4,4,4,4,3,1,4,4,4,4,4,3,1,4,4,4,4,4,3,1,4,4,4,4,4,100
end