电子音乐盒Word下载.docx

上传人:b****6 文档编号:19728663 上传时间:2023-01-09 格式:DOCX 页数:20 大小:60.96KB
下载 相关 举报
电子音乐盒Word下载.docx_第1页
第1页 / 共20页
电子音乐盒Word下载.docx_第2页
第2页 / 共20页
电子音乐盒Word下载.docx_第3页
第3页 / 共20页
电子音乐盒Word下载.docx_第4页
第4页 / 共20页
电子音乐盒Word下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

电子音乐盒Word下载.docx

《电子音乐盒Word下载.docx》由会员分享,可在线阅读,更多相关《电子音乐盒Word下载.docx(20页珍藏版)》请在冰豆网上搜索。

电子音乐盒Word下载.docx

本程序可以实现课程设计的基本要求,并可以通过按键播放两首歌曲,程序流程图如下:

开始

初始化

设置音节起始位置和节拍间距

读取音阶,音符

显示当前播放歌曲序号

节拍结束

音乐结束

5、仿真、安装和调试

按照上面设计的电路在proteus软件内画图,打开单片机软件开发系统Keil,选择89c51单片机,在其中编写程序,运行生成一个后缀名为hex的文件,然后将该文件下载到proteus中的AT89c51单片机中进行仿真,观察实验现象。

仿真能实现播放音乐,按键选择曲目,暂停,播放功能。

仿真成功后,安装好实验板,然后将音乐程序下载到电路板内,观察结果。

能实现播放音乐,按键换曲等功能。

程序调试中出现的问题及解决的办法:

(1)有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发现是因为程序中有的指令书写得不规范导致的,例如有的RET返回指令一定要按正确格式书写或在两行指令间最好不要留空行。

(2)程序中的跳转指令的运用很重要,为保险起见,都用LJMP,我们就遇到过跳转指令用错程序无法正常运行的现象。

当用JNZ指令时,跳转范围比较少,这时要用一个标号中转。

(3)编程时要注意,在程序开始时,要写入各定时器中断的入口地址。

(4)编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。

(5)编程前要加流程图,这样会使思路清晰,例如数字音乐盒的设计思路完全可以按着MP3的工作方式列写流程图。

(6)LCD计时正常显示的解决办法:

a.两个定时器同时工作,存在中断时序问题,刚开始时我们把定时器1设定在方式3,计250us,由于定时中断过于频繁,使CPU负载过大,导致音乐不能正常播放,时间不能正常显示。

解决办法:

将定时器1设定在工作方式1,16位计数,计50ms,效果有很大改观。

但还有问题。

b.当音乐为全4拍起始时,此时音乐节奏与定时器T1中断频率错开,LCD显示和音乐播放都会好一些。

c.另外,在歌曲中,当遇到一个音符发音为4拍,在编曲中为*CH,因时间较长,当定时器T1此时来中断时,就会对歌曲播放产生影响,若改为发音一拍,中断对歌曲播放影响减弱,但音乐效果变差。

改进方案:

若采用可以定时时间更长的单片机,可以避免所有问题。

6、收获与体会

不管任何一门课程,只有理论是无法对知识完全理解的,深刻的认识要有实践为基础,作为理工科学生也要有一定的动手能力,能在实践中验证理论,同时也对知识有更深刻的认识。

在实验中,虽然会遇到各种问题,比如音乐无法播放等,有时也难免会有些焦躁,但是遇到问题要解决问题的过程就是知识的验证与积累过程,是我们宝贵的实践经验,与同学的交流也能及时查漏补缺,能让我们更好的学习。

参考文献

[1]许珉.单片机原理及应用[M].北京:

中国电力出版社,

[2]三恒星科技.MCS-51单片机原理与应用实例[M].北京:

电子工业出版社,

[3]王为青,程国钢.单片机KeilCx51应用开发技术[M].北京:

人民邮电出版社,

[4]JohnMarkus.电子电路大全[M].北京:

计量出版社,1995

[5]阎石.数字电子技术基础[M].北京:

高等教育出版社,,第4版

[6]邓元庆.数字电路与逻辑设计[M].北京:

电子工业出版社,2001

[7]附件1:

元件清单

名称

数量(个)

型号

备注

电阻

6

排阻RX8(1个)1k(2个),(1个),10k(1个),15(1个)

数码管

1

7SEG-DIGITAL

开关

4

BUTTON

单片机

AT89C51

三极管

2N3906

扬声器

SPEAKER

电源

2

5V

电容

3

30pf(2个),10uf(1个)

晶振

CRYSTAL

附件2:

总电路图

附件3:

音乐程序

OUTBIT;

定义音频输出端口,

NEQU6;

歌曲总数

OUT_NUMEQUP1;

数码管显视当前所放歌曲曲数

ORG0000H

AJMPMAIN

ORG0003H

AJMPLAST_SONG;

外部中断0用于接上一曲歌按键

ORG000BH

AJMPF_T0;

定时器0用于定时,作音符发生器用

ORG0013H

q4:

AJMPNEXT_SONG;

外部中断1接下一曲歌按键

ORG001BH

AJMPSTART_PAUSE;

定时器1用计数,这里用作中断,接开始/暂停键,初值为0ffH,方式2

ORG0030H

MAIN:

MOVSP,#60H

MOVDPTR,#TABLE;

DPRT指向每首歌曲的入口地址的地址。

MOVR0,#30H;

R0中存入数据30H,这里在以30H开始的单元存放每首歌曲的入口地址,其中30H,31H存放

;

歌曲的节拍入口地址,32H,33H存放歌曲音符入口地址,每首歌占用四个存储存单元。

MOVR5,#00H;

R5中存放表TABLE中正在执行操作的序号

MOVR6,#1;

R6存放正在设置入口信息的歌曲数

SET_TAB:

MOVA,R5;

设置每首歌曲的入口信息,存放在以30H开始的存储单元中。

MOVCA,@A+DPTR

MOV@R0,A

INCR5

INCR0

MOVA,R5

INCR6;

设置完一首歌曲后,歌曲数加一

CJNER6,#N+1,SET_TAB;

是否设置完,没有便继续,否则进行下面的操作

;

***********************************对中断,计数器的相关参数进行设置

MOVTMOD,#61H;

计数器0工作方式1,计数器1工作方式2

MOVTH1,#0FFH;

给计数器1置初值0FFH,又由于是工作方式2,所以

MOVTL1,#0FFH;

计数器计数为1,相当于一外部中断。

SETBET1;

允许计数器1中断

SETBET0;

允许计数器具0中断

CLRPT0;

计数器0为低优先级

SETBPT1;

计数器1为高优先级

SETBIT0;

外部中断0为跳沿触发

SETBPX0;

高优先级

SETBIT1;

外部中断1为跳沿触发

SETBPX1;

SETBEX1;

允许外部中断1中断

SETBEX0;

允许外部中断定0中断

SETBEA;

开中断总开关

SETBTR1;

定时器1开始工作,作中断用

SETBOUT;

音频输出端口初始化

***********************************;

设置结束

CLRF0;

设置F0=0,用来作暂停/播放的标置位用

MOV22H,#01H;

22H单元中存放正在播放的歌曲编号

MOVDPTR,#OUT_TAB;

将正在播放的歌曲编号送数码管显视

MOVA,22H

MOVOUT_NUM,A

MOVR7,#00H;

R7中存放歌曲总信息的入口地址

START0:

MOVR4,#00H;

R4存放当前正在播放歌曲的第几个节拍数

MOVR0,#30H;

30H开始的单元中存放歌曲的入口信息

MOVA,R7;

将歌曲的节拍表的入口地址送到DPTR

ADDA,R0

MOVR0,A

MOVDPH,@R0

MOVDPL,@R0

MOVA,R4

INCR4

MOVCA,@A+DPTR;

取出第一节拍数,其实第一个节拍不是歌曲的第一个节拍,而是表示几分音符

;

****************************************************

MOV26H,A;

将取出的音符数+节拍数保存在职26H单元中

NEXT:

开始取出歌曲的第一个数据

MOVA,R7

MOVCA,@A+DPTR;

放在A中

JZEND0;

若为0,则表示为休止符,不唱,本次音符不唱,

MOVR1,A;

不为0,取出节拍数

ANLA,#0FH

MOVR2,A

MOVA,R1

SWAPA

JNZSING;

音符不为0,唱

CLRTR0;

为0,不唱,关频率发生器

SJMPSING1

SING:

DECA;

开始唱,进行相应的数据处理

MOVR3,A

RLA

MOV21H,A

MOVTH0,A

MOVA,R3

INCA

MOV20H,A

MOVTL0,A

SETBTR0;

开唱

SING1:

LCALLDELAY;

每个音符唱多久

JBF0,FOR;

是否暂停,

AJMPNEXT;

没有暂停,继续

FOR:

CLRTR0;

暂停,不唱

JBF0,$;

等待播放

AJMPNEXT;

开始播放

END0:

CLRTR0;

不唱

MOVA,22H;

唱完处理

CJNEA,#N,WW;

是不是全部歌曲都唱完

全部唱完,则从第一首开始再唱

MOVR7,#00H

MOVOUT_NUM,#B;

数码管显视第一首歌曲编号

AJMPWWW

WW:

MOVA,R7;

没有全部唱完,唱下一首,歌曲的入口信息调整

ADDA,#4

MOVR7,A

INC22H

CLREA

PUSHDPH

PUSHDPL

MOVDPTR,#OUT_TAB

MOVOUT_NUM,A;

数码管显视相应的歌曲编号

POPDPL

POPDPH

WWW:

SETBEA

AJMPSTART0;

开始下一首的演唱

F_T0:

MOVTH0,21H;

定时器0置初值

MOVTL0,20H

CPLOUT;

频率产生

RETI

NEXT_SONG:

PUSHACC;

下一曲中断程序处理,保护现场

CLREA;

关中断

CJNEA,#N,Q;

是最后一首吗

是最后一首,则R7指向第一首,演唱第一首

MOV22H,#01H

AJMPBACK

Q:

INC22H;

不是最后一首,唱下一首,R7内容加4,歌曲数加1

BACK:

MOVR4,#00H;

********************************************

MOVB,R0;

对下首要演唱的歌曲的几分拍进行调整,同时对R0中的内容进行保护

MOVR4,#00H

MOVR0,#30H

MOV26H,A;

结果存入26H单元中

DECR4

MOVR0,B;

恢复R0中的内容

POPDPL;

恢复现场

POPACC

RETI;

中断返回

LAST_SONG:

PUSHACC;

上一曲中断程序处理开始,保护现场

CLREA;

曲目数送A

CJNEA,#1,QQ;

是否是第一首

MOV22H,#N;

是第一首歌曲

MOVB,#4;

将R7指向最后一首歌曲

MOVA,#N-1

MULAB

AJMPBACK2;

处理结束

QQ:

DEC22H

MOVA,R7;

R7减4

SUBBA,#4

BACK2:

数码管显视相应歌曲的编号

MOVB,R0;

MOVR0,B;

R0中的内容恢复

POPDPL;

START_PAUSE:

CPLF0;

开始/暂停中断处理程序,将标置位取反

JBF0,RETURN;

为1返回

为0则播放

RETURN:

DELAY:

MOV27H,26H;

音符演奏时间控制

D2:

MOV28H,#125

D3:

MOV29H,#248

DJNZ29H,$

DJNZ28H,D3

DJNZ27H,D2

DJNZR2,DELAY

RET

OUT_TAB:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,73H;

共阴数码管显视用

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH;

共阳

TABLE:

DWSONG1,TABLE1,SONG2,TABLE2,SONG3,TABLE3,SONG4,TABLE4,SONG5,TABLE5

TABLE1:

DW64580,64684,64777,64820,64898,64968,65030

DW63628,63835,64021,64103,64260,64400,64524

SONG1:

DB04H;

1=C2/4军港之夜

DB32H,54H,52H,32H,54H,52H,32H,12H,12H,32H,32H,54H,52H,32H,52H,52H,32H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H

DB0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H,52H,52H,32H,52H,54H,32H,34H,31H,21H,12H,24H,24H

DB34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4H

DB22H,0D1H,11H,0E2H,0D2H,0C4H,0C4H,32H,52H,52H,32H,62H,5H,61H,54H,31H,52H,31H,12H,31H,31H,32H,54H,52H,32H,52H,52H,32H

DB32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,34H,34H,32H,52H,52,32H,62H,51H,61H,54H,31H,52H,31H,12H,32H,12H,32H,32H,54H,52H

DB32H,52H,52H,31H,31H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H

DB32H,52H,52H,32H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H

DB32H,52H,52H,32H,32H,21H,31H,24H,74H,0D2H,0C2H,14H,14H,14H,14H

DB00H

TABLE2:

DW63835,64021,64103,64260,64400,64524,64580,64684,64777

DW64820,64898,64968,65030,65058,65110,65157,65178

SONG2:

DB02H;

1=C4/4死了都要爱

DB04H,94H

DB0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02H

DB0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H

DB04H,0C2H,0C2H,0D4H,0C2H,0D2H,0D8H,0D4H,0D2H,92H

DB0A4H,0A2H,0B2H,0B4H,0C4H,0E8H,0D8H

DB0C8H,0C8H,08H,08H,78H,28H,38H,34H,24H

DB24H,64H,64H,24H,64H,72H,72H,78H,58H,54H,44H,38H,34H,14H,34H,84H,74H,74H,62H,62H,0D8H,78H,28H,38H,34H,24H

DB24H,64H,64H,24H,64H,72H,72H,72H,94H,92H,94H,0A4H,58H,58H,54H,44

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

当前位置:首页 > 总结汇报

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

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