音乐盒课程设计报告.docx
《音乐盒课程设计报告.docx》由会员分享,可在线阅读,更多相关《音乐盒课程设计报告.docx(38页珍藏版)》请在冰豆网上搜索。
音乐盒课程设计报告
音乐盒课程设计报告
XXXXXXXXXXXXX
1、项目概述:
随着社会的发展进步,许多人性化的电子产品被用在人们的日常生活中,而单片机被广泛运用到人们长期接触的事物上,比如银行交易窗口的滚动字幕,还有各种彩灯的控制,手机、计算机、机器人等各行各业中。
基于AT89C52单片机的数字音乐盒就是这类产品,它不仅给人们带来了快乐,而且提高了人们的生活质量。
2、项目要求:
基于AT89C52单片机的数字音乐盒的设计要求如下:
(1)用AT89C2单片机的I/O端口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲。
(2)共有10首乐曲,每首乐曲都有相应的按键控制,并且有开关键、暂停键、上一曲以及下一曲的控制键。
(3)LCD液晶显示歌曲的序号、播放时间、开机时显示英文欢迎提示字符。
三、知识要点:
(一)、AT89C2芯片资料:
1)功能说明:
1、兼容MCS51指令系统。
2、8k可反复擦写(大于1000次)FlashROM。
3、2KB的E2PROM程序存储器,可擦写10万次
4、32个双向I/O口。
5、256x8bit内部RAM。
5、3个16位可编程定时/计数器中断。
6、时钟频率12MHz。
7、1个可编程UART串行通道。
8、2个外部中断源,共9个中断源,6个中断矢量。
9、2个读写中断口线,3级加密位。
10、低功耗空闲和掉电模式,软件设置睡眠和唤醒功能。
11、有PDIP、PQFP、TQFP及PLCC等几种封装形式,以适应不同产品的需求。
2)引脚说明:
AT89C52是51系列单片机的一个型号,它是ATMEL公司生产的。
AT89C52为40脚双列直插封装的8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。
功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。
主要管脚有:
XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。
RST/VPd(9脚)为复位输入端口,外接电阻电容组成的复位电路。
VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。
P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。
本项目使用到的单片机引脚说明:
1)20、40号引脚分别接地和+5V电源。
2)18、29号引脚分别接振荡器反相放大器的输出端和振荡器反相放大器的及内部时钟发生器的输入端。
3)9号引脚接RST复位电路。
3)单片机使能信号接31号引脚,接+5V。
4)17号引脚(P3.7)接蜂鸣器电路通过定时器控制P3.7引脚上方波的占空比可以实现驱动蜂鸣器,发出不同的音调的功能。
5)P1端口控制4×4矩阵键盘,其中P1.0~P1.3进行列扫描,P1.4~P1.7进行行扫描。
6)P0端口用于接液晶显示器的数据位,由于P0端口驱动能力小,需外接电源和上拉电阻,此项目中接1K的排阻。
(2)、LCD1602资料:
1)、LCD1602介绍:
1602液晶显示器也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。
每位之间有一个点距的间隔,每行之间也有也有间隔,起到了字符间距和行间距的作用,正因为如此所以他不能显示图形。
LCD1602是指显示的内容为16X2,即可以显示2行,每行16个字符液晶模块(显示字符和数字)。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
2)1602引脚说明:
本项目中使用到的LCD的引脚说明:
1)1脚VSS接地,2脚VDD接+5V电源。
2)3脚VEE接地,中间连10K变位器,用于调节液晶显示器对比度。
3)4脚RS、5脚RW、6脚E分别接单片机P2.0、P2.1、P2.2脚。
4)7~9脚接对应单片机P0口,用于数据传送。
5)15脚和16脚分别接电源和地,用于1602背光显示。
四、系统设计:
(一)、系统框图:
(二)系统框架图说明:
1、电源电路:
以+5V表示高电平,0表示低电平。
2、复位电路:
复位电路分为手动复位和上电复位两种,本实验复位电路综合了以上两种复位方式,RST引脚十复位信号的输入端口,高电平有效。
在时钟振荡器稳定工作的情况下,该引脚若由低电平升到高电平,并保持两个机器周期系统实现一次复位操作。
具体实现见电路原理图。
3、晶振电路:
晶振电路分为内部振荡器接法和外部振荡器接法,本实验采用内部接法。
晶振频率12MHz。
具体实现见原理图。
4、LCD液晶显示电路:
P0端口用于接液晶显示器的数据位,由于P0端口驱动能力小需外接电源和上拉电阻,液晶显示器的RSRWE三个引脚分别接在单片机的P2.0、P2.1、P2.2引脚上。
1引脚接地,2引脚接高电平,3引脚通过滑动变阻器接地。
15以及16引脚是背光电源,可根据实际情况选取。
具体实现见原理图。
5、蜂鸣器电路:
17号引脚(P3.7)接蜂鸣器电路通过定时器控制P3.7引脚上方波的占空比可以实现驱动蜂鸣器,发出不同的音调的功能。
驱动喇叭的功率管采用型号为2N5088的三级管,使喇叭在各种频率的脉冲信号下能准确的发出各个音阶的音调。
6、矩阵按键电路:
P1端口控制4×4矩阵键盘,其中P1.0~P1.3进行列扫描,P1.4~P1.7进行行扫描。
五、硬件设计:
蜂鸣器电路:
元件清单:
基于AT89C52单片机的音乐盒元件清单:
原件名称
型号
数量/个
用途
单片机
AT89C52
1
控制核心
晶振
12MHz
1
晶振电路
电容
30PF
2
晶振电路
电解电容
10uF/10V
1
复位电路
电阻
10k
1
复位电路
液晶显示器
1602A
1
LCD显示
排阻
1k
1
上拉电阻
喇叭
0.5w/8Ω
1
蜂鸣器电路
电阻
1k
2
三极管
S9015
1
电源
+5V/0.5A
1
提供电源
按键
四脚
17
按键电路
六、软件设计:
键盘采用动态扫描方式。
每次扫描一行键盘,送此行低电平,读输入口的状态,判断有没由按键按下。
若有按键按下,则根据读入口的值选择显示值并送至显示值寄存单元,判断键值;启动计数器T0,根据此值为偏移地址找到药选择的音乐的代码的首地址,根据代码产生一定频率的脉冲,驱动蜂鸣器,放出音乐;同时启动定时器T1,计算音乐的播放时间,并且启动LCD,在LCD上显示序号和播放时间。
程序流程图
(一)、主程序流程图和显示流程:
(二)、实验源程序:
RSBITP2.0;引脚定义,定义液晶显示端口标号
RWBITP2.1
EBITP2.2
L50MSEQU60H;工作内存定义
L1MSEQU61H
L250MSEQU62H
SECEQU65H
MINEQU64H
HOUEQU63H
ORG0000H
LJMPMAIN
ORG000BH;定时器T0溢出中断入口地址
LJMPTT0
ORG001BH;定时器T1溢出中断入口地址
LJMPT1INT
ORG1000H
MAIN:
;液晶初始化
MOVSP,#70H
MOVP0,#01H;清屏
CALLDISPLAY
MOVP0,#38H;8位,2行显示
LCALLDISPLAY
MOVP0,#0FH;屏显on,光标on,闪烁on
LCALLDISPLAY
MOVP0,#06H;计数地址加1,显示幕on
LCALLDISPLAY
LCALLINITIL;内存初始化
WAIT:
LCALLKEY;键盘扫描,是否有键按下,否则等待
LCALLMODD
LJMPWAIT
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
INITIL:
;30H-37H初值为零
MOVR3,#08H
MOVR0,#30H
M1:
MOV@R0,#00H
INCR0
DJNZR3,M1
RET
MODD:
;显示
MOVP0,#8EH
CALLDISPLAY
MOVA,37H
MOVDPTR,#TABLE3
MOVCA,@A+DPTR
CALLWRITE2
RET
KAIJI:
MOVA,37H;开机提示字
CJNEA,#0FH,DFF
MOVP0,#80H;设光标地址
CALLDISPLAY
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;显示小时十位
CALLDISPLAY
CALLWRITE2
MOVA,B
ADDA,#30H
MOVP0,#0C9H;显示小时个位
CALLDISPLAY
CALLWRITE2
MOVA,#3AH
MOVP0,#0DH;显示冒号
CALLDISPLAY
CALLWRITE2
MOVA,MIN
MOVB,#10
DIVAB
ADDA,#30H
MOVP0,#0CBH;显示分十位
CALLDISPLAY
CALLWRITE2
MOVA,B
ADDA,#30H
MOVP0,#0CCH;显示分个位
CALLDISPLAY
CALLWRITE2
MOVA,#3AH
MOVP0,#0CDH;显示冒号
CALLDISPLAY
CALLWRITE2
MOVA,SEC
MOVB,#10
DIVAB
ADDA,#30H
MOVP0,#0CEH;显示秒十位
CALLDISPLAY
CALLWRITE2
MOVA,B
ADDA,#30H
MOVP0,#0CFH;显示秒个位
CALLDISPLAY
CALLWRITE2
MOVP0,#0C0H;设光标地址
CALLDISPLAY
MOVDPTR,#TABLE2;写数据
CALLWRITE1
RET
DISPLAY:
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'MusicBox',0FEH
TABLE2:
DB'hejin',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
MOVTL0,A
MOV20H,A
SETBTR0
SETBTR1
W1:
LCALLDELAY30
INC40H
LCALLKS;有键跳出
JNZSTOP
LJMPNEXT20
STOP:
CLRTR0
CLRTR1
LJMPMAIN0
TTM12:
LCALLK2
MOVA,37H
CJNEA,#0EH,TTM13
CLRTR1
LCALLDELAY1
TTM120:
LCALLKS
LCALLDELAY1
JZTTM120
LCALLK2
MOVA,37H
CJNEA,#0EH,TTM120
SETBTR1
LJMPNEXT20
TTM13:
CJNEA,#0CH,TTM14
MOVA,52H
INCA
MOV52H,A
MOVA,53H
INCA
MOV53H,A
MOVA,36H
INCA
MOV37H,A
LJMPTTM2
TTM14:
CJNEA,#0DH,TTM2
MOVA,52H
DECA
MOV52H,A
MOVA,53H
DECA
MOV53H,A
MOVA,36H
DECA
MOV37H,A
TTM2:
RET
TT0:
PUSHACC;定时器中断子程序0
PUSHPSW
MOVTL0,20H
MOVTH0,21H
CPLP3.7
POPPSW
POPACC
RETI
;定时器中断子程序1
T1INT:
MOVTH1,#3CH;定时器中断子程序1
MOVTL1,#0B0H
DJNZL50MS,X4
MOVL50MS,#20
SECSET:
;每秒种时钟刷新秒显示一次
MOVA,SEC
MOVB,#10
DIVAB
ADDA,#30H
MOVP0,#0CEH;显示秒十位
CALLDISPLAY
CALLWRITE2
MOVA,B
ADDA,#30H
MOVP0,#0CFH;显示秒个位
CALLDISPLAY
CALLWRITE2
MOVA,SEC
INCA
MOVSEC,A
XRLA,#60
X4:
JNZOUT
MINSET:
MOVSEC,#00H;每分钟刷新分显示一次
MOVA,MIN
INCA
MOVMIN,A
MOVB,#10
DIVAB
ADDA,#30H
MOVP0,#0CBH;显示分十位
CALLDISPLAY
CALLWRITE2
MOVA,B
ADDA,#30H
MOVP0,#0CCH;显示分个位
CA