89C51音乐盒设计.docx

上传人:b****7 文档编号:23393246 上传时间:2023-05-16 格式:DOCX 页数:39 大小:296.48KB
下载 相关 举报
89C51音乐盒设计.docx_第1页
第1页 / 共39页
89C51音乐盒设计.docx_第2页
第2页 / 共39页
89C51音乐盒设计.docx_第3页
第3页 / 共39页
89C51音乐盒设计.docx_第4页
第4页 / 共39页
89C51音乐盒设计.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

89C51音乐盒设计.docx

《89C51音乐盒设计.docx》由会员分享,可在线阅读,更多相关《89C51音乐盒设计.docx(39页珍藏版)》请在冰豆网上搜索。

89C51音乐盒设计.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1