单片机课程设计音乐盒.docx
- 文档编号:23181013
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:34
- 大小:50.86KB
单片机课程设计音乐盒.docx
《单片机课程设计音乐盒.docx》由会员分享,可在线阅读,更多相关《单片机课程设计音乐盒.docx(34页珍藏版)》请在冰豆网上搜索。
单片机课程设计音乐盒
微机原理课程设计
题目:
数字音乐盒
姓名:
学号:
指导老师:
一、任务与要求3
二、硬件设计3
三、软件设计3
四、调试24
五、收获和体会25
六、参考文献25
单片机课程设计实验报告
一、任务及要求
课程设计题目:
数字音乐盒
课程设计要求:
1.利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(最少三首乐曲,每首不少于30秒)
2.采用LCD显示信息
3.开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称)
4.可通过功能键选择乐曲,暂停,播放。
5.选作容:
显示乐曲播放时间或剩余时间
二、硬件设计
硬件电路:
本设计中用到了98C51单片机,4*4键盘,蜂鸣器,16*2LCD,七段
显示数码管LED。
(硬件电路原理图附于后页)
原理说明:
当键盘有键按下时,判断键值,启动计数器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。
三、软件设计
本程序可以实现课程设计的基本要求和附加功能,并可以通过按键播放七
歌曲。
实验程序如下:
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
ACC.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
movr0,a
incr0
incr1
djnzr3,mm1
popacc
movr0,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:
movr0,#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
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
;***************************************************
;定时器中断子程序0
;***************************************************
TT0:
PUSHACC
PUSHPSW
MOVTL0,20H
MOVTH0,21H
CPLP3.7
POPPSW
POPACC
RETI
;***************************************************
;定时器中断子程序1
;***************************************************
T1INT:
MOVTH1,#3cH
MOVTL1,#0b0H
DJNZL50MS,X4
MOVL50MS,#20
;****************---每秒种时钟刷新秒显示一次
SECSET:
MOVA,SEC
MOVB,#10
DIVAB
ADDA,#30H
MOVP0,#0CEH;显示秒十位
CALLENABLE
CALLWRITE2
MOVA,B
ADDA,#30H
MOVP0,#0CFH;显示秒个位
CALLENABLE
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;显示分十位
CALLENABLE
CALLWRITE2
MOVA,B
ADDA,#30H
MOVP0,#0CCH;显示分个位
CALLENABLE
CALLWRITE2
MOVA,MIN
MOVB,#3
MULAB
MOVB,#100
DIVAB
MOVR2,A
MOVA,#10
XCHA,B
DIVAB
MOVA,MIN
XRLA,#60
JNZOUT
HOUSET:
MOVMIN,#00H
;**************************************每小时刷新小时显示一次
MOVA,HOU
MOVB,#10
DIVAB
ADDA,#30H;将BCD吗转化为ASIIC码
MOVP0,#0C8H;显示小时十位
CALLENABLE
CALLWRITE2
MOVA,B
ADDA,#30H
MOVP0,#0C9H;显示小时个位
CALLENABLE
CALLWRITE2
MOVA,HOU
INCA
MOVHOU,A
XRLA,#10
JNZOUT
SJMPOVERFLOW
OUT:
RETI
;*******************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 音乐盒