89C51音乐盒设计.docx
《89C51音乐盒设计.docx》由会员分享,可在线阅读,更多相关《89C51音乐盒设计.docx(39页珍藏版)》请在冰豆网上搜索。
89C51音乐盒设计
单片机毕业设计
课题:
数字音乐盒
2010年12月30日
成绩评定
一、指导教师评语(根据学生设计报告质量、答辩情况及其平时表现综合评定)。
二、评分
评分项目
设计报告评分
答辩评分
平时表现评分
合计
(100分)
任务完成
情况
(20分)
课程设计
报告质量
(40分)
表达情况
(10分)
回答问题
情况
(10分)
工作态度与纪律
(10分)
独立工作
能力
(10分)
得分
课程设计成绩评定
级姓名学号
成绩:
分(折合等级)
指导教师签字年月日
1、设计目的
熟悉并掌握单片机的原理及基本应用,掌握单片机基本外设的使用方法,掌握汇编语言编程方法,熟悉PROTEUS仿真的使用,可以应用电子工艺的基础知识连接硬件实现设计功能。
2、设计要求
1、利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音响,从而演奏乐曲(最少储存三首乐曲,每首不少于三十秒);
2、采用LCD显示;
3、开机时有英文欢迎字符,播放时显示歌曲序号(或名称);
4、可通过功能键选择乐曲,暂停,播放;
5、选做内容:
显示乐曲播放时间或剩余时间;
6、本设计中用89C51单片机,4*4键盘,蜂鸣器,16*2LCD,七段显示数码管LED;
3、总体设计
原理图如下图所示:
图1原理图
应用AT89S51单片机来设计音乐盒的硬件电路,并利用汇编语言进行程序设计。
通过控制单片机内部的定时器来产生不同频率的方波,驱动蜂鸣器发出不同音调的音乐,再利用延迟来控制发音时间的长短。
程序通过把乐谱转化成相应的定时常数来驱动发音设备演奏出悦耳动听的音乐。
对于不同的音乐只需要改变相应的定时常数即可。
声音是音频振动的结果,振动的频率高则为高音,频率低则为低音。
音频范围为20HZ-200KHZ之间,而人类耳朵比较容易辨识的声音大概是200HZ-20KHZ。
一般音响电路是以正弦波信号驱动喇叭,产生悦耳的音乐的;在数字电路里,则是以脉冲信号驱动喇叭以产生声音。
同样的频率,脉冲信号或正弦信号产生的音效,对于人类的耳朵来说很难有所区别。
AT89S51单片机有3个独立的16位定时/计数器,即定时/计数器0(T0),定时/计数器1(T1)和定时/计数器2(T2)。
它们都有定时或事件计数功能,可用于定时控制、延时、对外事件计数和检测等场合。
3个16位定时/计数器,其中T0,T1可作16位加1计数器,T2既可作16位加1计数器,也可作减1计数器,每个定时/计数器都可由软件设置为定时工作方式或计数工作方式。
当设置为计数工作方式时,通过引脚T0(P3.4),T1(P3.5),T2(P1.0)对外部脉冲信号计数,当输入脉冲信号从1到0负跳变时,计数器就自动就1。
为了确保某个电平在变化之前至少被采样一次,要求电平保持时间至少是一个完整的机器周期。
音乐的音拍
曲调值
DELAY
曲调值
DELAY
调4/4
125ms
调4/4
62ms
调3/4
187ms
调3/4
94ms
调2/4
250ms
调2/4
125ms
键盘
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
按键功能说明:
1~A:
十首歌曲
C:
上一首歌曲
D:
下一首歌曲
E:
歌曲暂停
F:
开机画面
当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。
同时启动定时器T1,显示乐曲播放的时间,并驱动LCD,显示歌曲号及播放时间。
也可在LED显示歌曲号。
(1)硬件电路中用P1.0~P1.7控制按键,其中P1.0~P1.3扫描行,P1.4~P1.7扫描列。
(2)用P0.0~P0.7,P2.0~P2.7控制LED,其中P0.0~P0.7控制七段码a,b,c,d,e,f,g,用P2.0~P2.7为数码管位选信号。
(3)用,P2.0~P2.2作为LCD的RS,R/W,E的控制信号。
用P0.0~P0.7作为LCD的D0~D7的控制信号。
(4)用P3.7口控制蜂鸣器(J2,J4断开,J3短接)。
(5)电路为12MHZ晶振频率工作,起振电路中C1,C2均为30pf。
4、各部分电路设计
1、键盘系统
图2键盘
按键功能说明:
1~A:
十首歌曲
C:
上一首歌曲
D:
下一首歌曲
E:
歌曲暂停
F:
开机画面
当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。
同时启动定时器T1,显示乐曲播放的时间,并驱动LCD,显示歌曲号及播放时间。
也可在LED显示歌曲号。
2、显示系统
对于显示时间程序的设计,主要依靠单片机内部定时器的计数功能实现。
单片机P0口接LCD数码管,并外接1K欧的排阻,利用单片机内部的定时器中断控制时间程序,然后在数码管上显示出时间。
图3LED显示系统
3、发音系统
图4扬声器
4、
软件设计
程序流程图:
图5程序流程图
5、整体电路图
图6整体电路图
六、设计总结
1、设计过程中遇到的问题及解决方法
有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发行是因为程序中有的指令书写得不规范导致的,例如有的RET返回指令一定要按正确格式书写或在两行指令间最好不要留空行。
程序中的跳转指令的运用很重要,为保险起见,都用LJMP,我们就遇到过跳转指令用错程序无法正常运行的现象。
当用JNZ指令时,跳转范围比较少,这时要用一个标号中转。
编程时要注意,在程序开始时,要写入各定时器中断的入口地址。
编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。
2、设计体会
学习单片机,对单片机的硬件设计,软件设计掌握的深度不够,但通过此次课程设计,却改变了很多,首先对于硬件电路的工作原理有了进一步的学习,同样就有了进一步的认识;其次软件方面,在程序的设计,程序的调试方面都学到了很多东西,这是第一次阅读编写单片机的大程序,很有成就感。
单片机AT89S51是一种非常小巧但功能非常多,应用非常广的一种芯片,功率也非常的小,采用AT89S51作为系统核心制作音乐演奏控制设计电路简单了很多,由于可以反复烧写,为学习降低成本。
本设计外部采用单片机的复位电路设计、单片机的震荡电路设计、LCD数码管显示正在播放的音乐序号,按键控制等,但由于AT89S51分辨率不是太高,音乐有点单调,另外,由于时间关系具体电路还有的地方不尽完善之处。
3、对设计的建议
希望下一次课程设计中,每个人都能有一块实验开发板,这样能使每个人都能得到充分的锻炼!
参考文献
[1]高锋,单片微型计算机原理与接口技术,科学出版社,2008年。
[2]李传军,单片机原理及应用(第一版),河南科学技术出版社,2006年。
[3]杨志忠,数字电子技术,高等教育出版社(第四版),2007年。
[4]张静武,单片机原理、应用与PROTEUS仿真,电子工业出版社,2009年。
本程序可以实现课程设计的基本要求和附加功能,并可以通过按键播放七首歌曲。
实验程序如下:
RSBITP2.0;定义液晶显示端口标号
RWBITP2.1
EBITP2.2
;********************************************
L50MSEQU60H
L1MSEQU61H
L250MSEQU62H
SECEQU65H
MINEQU64H
HOUEQU63H
;*******************************************
org0000h
ljmpmain
ORG000BH
LJMPTT0
ORG001BH
LJMPT1INT
org1000h
main:
;-----------------------;液晶初始化
MOVSP,#70H
MOVP0,#01H;清屏
CALLENABLE
MOVP0,#38H;8位,2行显示
lCALLENABLE
MOVP0,#0FH;屏显on,光标on,闪烁on
lCALLENABLE
MOVP0,#06H;计数地址加1,显示幕on
lCALLENABLE
;-------------------------------内存初始化
lcallinitil
;-------------------------------
key1:
lcallkey
lcallmodd
ljmpkey1
;---------------------键盘扫描
key:
nop
nop
lcallks
jnzk1;有按键转到K1
lcallkaiji
lcallSOP
xn:
ljmpkey
k1:
lcallmodd
lcallmodd
lcallks
jnzk2
ljmpkey
k2:
movR2,#0feh;读键盘
movR4,#00h
k3:
movA,R2
movP1,A
movA,P1
JBACC.4,L1;为1跳转,第一行无按键
mova,#00h
ljmplk
L1:
jbacc.5,L2
mova,#04h
ljmplk
L2:
jbacc.6,L3
mova,#08h
ljmplk
L3:
jbacc.7,next1
mova,#0ch
;-------------------------------------------------------
lk:
adda,R4
pushacc
k4:
lcalldelay1;若同时有其他按键,则等待
lcallks
jnzk4
;--------------------------------------------------------
movr3,#07h
clra
movr0,#30h
movr1,#31h
mm1:
mova,@r1
mov@r0,a
incr0
incr1
djnzr3,mm1
popacc
mov@r0,a
RET
;------------------------------------------------------
next1:
incR4;------列扫描
mova,R2
JNBacc.3,n2
ljmpn1
n2:
ljmpkey
n1:
rla
movR2,a
ljmpk3
;----------------------------------------------
ks:
mova,#0f0h;判断P1口
movP1,a
nop
nop
mova,P1
cpla
anla,#0f0h
RET
;--------------------------------------------------
DELAY1:
SETBRS0
dl:
movR5,#0ah
dl2:
movR6,#63
dl3:
nop
nop
djnzR6,dl3
djnzR5,dl2
CLRRS0
RET
;---------------------------------------------------
;30H-37H初值为零
;----------------------------------------------------
initil:
movr3,#08h
movr0,#30h
m1:
mov@r0,#00h
incr0
djnzr3,m1
RET
;----------------------------------------------------
;显示
;---------------------------------------------------
modd:
MOVP0,#8EH
CALLENABLE
movA,37H
movDPTR,#TABLE3
MOVCA,@A+DPTR
CALLWRITE2
RET
;--------------------------------------------------
;开机提示字
;-------------------------------------------------
kaiji:
mova,37h
cjnea,#0fh,DFF
MOVP0,#80H;设光标地址
CALLENABLE
MOVDPTR,#TABLE1;写数据
CALLWRITE1
DFF:
RET
;----------------------------------------------
;按键值播放歌曲
;----------------------------------------------
SOP:
mova,37h
cjnea,#01h,A11
LCALLMODD
MOV52H,#HIGHTABLE10
MOV53H,#LOWTABLE10
LCALLINITILE2
lcallMAIN0
A11:
CJNEA,#02H,A22
LCALLMODD
MOV52H,#HIGHTABLE20
MOV53H,#LOWTABLE20
LCALLINITILE2
lcallMAIN0
A22:
CJNEA,#03H,A33
LCALLMODD
MOV52H,#HIGHTABLE30
MOV53H,#LOWTABLE30
LCALLINITILE2
lcallMAIN0
A33:
CJNEA,#04H,A44
LCALLMODD
MOV52H,#HIGHTABLE40
MOV53H,#LOWTABLE40
LCALLINITILE2
lcallMAIN0
A44:
CJNEA,#05H,A55
LCALLMODD
MOV52H,#HIGHTABLE50
MOV53H,#LOWTABLE50
LCALLINITILE2
lcallMAIN0
A55:
CJNEA,#06H,A66
LCALLMODD
MOV52H,#HIGHTABLE60
MOV53H,#LOWTABLE60
LCALLINITILE2
lcallMAIN0
A66:
CJNEA,#07H,A77
LCALLMODD
MOV52H,#HIGHTABLE70
MOV53H,#LOWTABLE70
LCALLINITILE2
lcallMAIN0
A77:
CJNEA,#08H,A88
LCALLMODD
MOV52H,#HIGHTABLE80
MOV53H,#LOWTABLE80
LCALLINITILE2
lcallMAIN0
A88:
CJNEA,#09H,A99
LCALLMODD
MOV52H,#HIGHTABLE90
MOV53H,#LOWTABLE90
LCALLINITILE2
lcallMAIN0
A99:
CJNEA,#0AH,AAA
LCALLMODD
MOV52H,#HIGHTABLE100
MOV53H,#LOWTABLE100
LCALLINITILE2
lcallMAIN0
AAA:
RET
;******************************************
INITILE2:
MOVL50MS,#20
MOVL1MS,#00H
MOVL250MS,#00H
MOVSEC,#00H
MOVMIN,#00H
MOVHOU,#00H
MOVA,HOU
MOVB,#10
DIVAB
ADDA,#30H;将BCD吗转化为ASIIC码
MOVP0,#0C8H;显示小时十位
CALLENABLE
CALLWRITE2
MOVA,B
ADDA,#30H
MOVP0,#0C9H;显示小时个位
CALLENABLE
CALLWRITE2
MOVA,#3AH
MOVP0,#0DH;显示冒号
CALLENABLE
CALLWRITE2
MOVA,MIN
MOVB,#10
DIVAB
ADDA,#30H
MOVP0,#0CBH;显示分十位
CALLENABLE
CALLWRITE2
MOVA,B
ADDA,#30H
MOVP0,#0CCH;显示分个位
CALLENABLE
CALLWRITE2
MOVA,#3AH
MOVP0,#0CDH;显示冒号
CALLENABLE
CALLWRITE2
MOVA,SEC
MOVB,#10
DIVAB
ADDA,#30H
MOVP0,#0CEH;显示秒十位
CALLENABLE
CALLWRITE2
MOVA,B
ADDA,#30H
MOVP0,#0CFH;显示秒个位
CALLENABLE
CALLWRITE2
MOVP0,#0C0H;设光标地址
CALLENABLE
MOVDPTR,#TABLE2;写数据
CALLWRITE1
RET
;*********************************************写指令
ENABLE:
CLRRS
CLRRW
CLRE
LCALLDELAY
SETBE
RET
;**********************************************写数据
WRITE1:
MOVR1,#00H
A1:
MOVA,R1
MOVCA,@A+DPTR
CALLWRITE2
INCR1
CJNEA,#0FEH,A1;未到字符串末尾继续
RET
WRITE2:
MOVP0,A
SETBRS
CLRRW
CLRE
CALLDELAY
SETBE
RET
;**********************************************
DELAY:
MOVR4,#05
D1:
MOVR5,#0FFH
DJNZR5,$
DJNZR4,D1
RET
;----------------------------------------------
TAB:
db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h
db80h,90h,88h,83h,0c6h,0a1h,86h,8eh
TAB1:
db89h,86h,0c7h,0c7h,0c0h
TAB2:
db0c6h,88h,0c0h
TABLE1:
DB'WELCOMHERE',0FEH
TABLE2:
DB'DFFWB',0FEH
TABLE4:
DB'CAU',0FEH
TABLE3:
DB30H,31H,32H,33h
DB34H,35H,36H,37H
DB38h,39H,41H,42H
DB43H,44H,45H,46H
;--------------------------------------------------------------------
;播放歌曲程序
;--------------------------------------------------------------------
MAIN0:
MOVTMOD,#11H
MOVIE,#8aH
;MOVTH1,#3cH
;MOVTL1,#0b0H
lcallks
jnzTTM12
MOV40H,#00H
;---------------------------------------------------------
NEXT20:
MOVA,40H
MOVDPH,52H
MOVDPL,53H
MOVCA,@A+DPTR
MOVR2,A
JZSTOP
ANLA,#0FH
MOVR1,A
MOVA,R2
SWAPA
ANLA,#0FH
JNZSING
CLRTR0
JMPW1
;----------------------------------------------------------
SING:
DECA
MOV22H,A
RLA
MOVDPTR,#TABLE00
MOVCA,@A+DPTR
MOVTH0,A
MOV21H,A
MOVA,22H
RLA
INCA
MOVCA,@A+DPTR
MOV