课程设计基于单片机的音乐播放器.docx

上传人:b****8 文档编号:11276943 上传时间:2023-02-26 格式:DOCX 页数:24 大小:157.13KB
下载 相关 举报
课程设计基于单片机的音乐播放器.docx_第1页
第1页 / 共24页
课程设计基于单片机的音乐播放器.docx_第2页
第2页 / 共24页
课程设计基于单片机的音乐播放器.docx_第3页
第3页 / 共24页
课程设计基于单片机的音乐播放器.docx_第4页
第4页 / 共24页
课程设计基于单片机的音乐播放器.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

课程设计基于单片机的音乐播放器.docx

《课程设计基于单片机的音乐播放器.docx》由会员分享,可在线阅读,更多相关《课程设计基于单片机的音乐播放器.docx(24页珍藏版)》请在冰豆网上搜索。

课程设计基于单片机的音乐播放器.docx

课程设计基于单片机的音乐播放器

1设计课题任务、功能要求说明及总体方案介绍

 

1.1任务

设计一个具有特定功能的音乐播放器。

该音乐播放器上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。

该音乐播放器可以播放多首音乐,曲目选择可以由键盘控制,曲目名称可以显示在显示器上。

1.2功能要求说明

设有四个按键,其中两个能实现多首音乐的选择,另一个能实现开始功能和单曲重播的功能,最后一个能实现复位和关闭歌曲的功能。

设有一位数码管,每选择一首曲子能在数码管上显示当前的曲目(只是数字)。

设有八位二极管,能随歌曲频率闪烁。

1.3总体方案介绍及工作原理说明

1.3.1总体方案介绍

作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波信号,也可以产生包括“Do“、“Re“、“Me“--等音阶在的各种频率声音。

在此设计中我们采用12MHz的晶振,产生的频率信号即音乐信号由P3.7口输出,信号经过放大后由喇叭发出声音。

乐曲中,每一音符对应着确定的频率,我们可以参照给出的各音符频率及其相应的时间常数来编写程序,根据表中所提供的常数,将其16进制代码送入芯片里,可以奏出音符。

音符的节拍我们可以用定时器T0来控制,送入不同的初值,就可以产生不同的定时时间。

便如某歌曲的节奏为每分钟94拍,即一拍为0.64秒。

其它节拍与时间的对应关系也可以从两者关系表中得到。

定时器T0工作在定时方式1,改变TH0及TL0,产生不同的音频频率。

要编写的乐谱按要求以音符字节数据表的形式存放在程序中,改变乐曲就是通过改变该数据表的容来实现的。

主程序的任务是按顺序读取数据表中的字节,根据情况调用音级子程序和音长子程序,启动定时器T0进行工作。

1.3.2工作原理说明

(1)要生产音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间.利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲.

(2)利用8051的部定时器使用其工作在计数器模式MODE1下,改变计数值THO及TLO以产生不同频率的方法.

(3)例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次计数956次时将I/O反相,就可得到中音DO(523Hz).   

计数脉冲值与频率的关系公式如下:

N=Fi÷2÷Fr……………………………………………1.1

N:

计算值;Fi:

部计时一次为1us,故其频率为1MHz;

(4)其计数值的求法如下:

T=65536-N=65536-Fi÷2÷Fr……………………………1.2

例如:

设K=65536,F=1000000=Fi=1MHz,求低音DO(261Hz).中音DO(523Hz).高音的DO(1046Hz)的计算值.T=65536-N=65536-Fi÷2÷Fr=65536-1000000÷2÷Fr=65536-500000/Fr。

低音DO的T=65536-500000/262=63627,中音DO的T=65536-500000/523=64580,高音DO的T=65536-500000/1047=65059

(5)C调各音符频率与计数值T的对照表如表1所示.

表1.1C调各音符频率与计数值T的对照表

音符

频率(HZ)

简谱码(T值)

音符

频率(HZ)

简谱码(T值)

低1 DO

262

63628

#4FA#

740

64860

#1 DO#

277

63731

中5SO

784

64898

低2 RE

294

63835

#5SO#

831

64934

#2RE#

311

63928

中6LA

880

64968

低3M

330

64021

#6

932

64994

低4FA

349

64103

中7SI

988

65030

#4FA#

370

64185

高1DO

1046

65058

低5SO

392

64260

#1DO#

1109

65085

#5SO#

415

64331

高2RE

1175

65110

低6LA

440

64400

#2RE#

1245

65134

#6

466

64463

高3M

1318

65157

低7SI

494

64524

高4FA

1397

65178

中1DO

523

64580

#4FA#

1480

65198

(6)每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,表2为节拍与节拍码的对照.如果1拍为0.4秒,1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间.假设1/4拍为1DELAY,则1拍应为4DELAY,以此类推.所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如表3为1/4和1/8节拍的时间设定.

2硬件系统的设计

 

2.1硬件系统各模块功能简要介绍

2.1.1单片机最小系统

 

图2.1单片机最小系统

(1)时钟源电路

单片机部具有一个高增益反相放大器,用于构成振荡器。

通常在引脚XTALl和XTAL2跨接石英晶体和两个补偿电容构成自激振荡器,结构如图2.1。

可以根据情况选择6MHz、12MHz或24MHz等频率的石英晶体,补偿电容通常选择22pF左右的瓷片电容。

(2)复位电路

单片机小系统采用上电自动复位和手动按键复位两种方式实现系统的复位操作。

上电复位要求接通电源后,自动实现复位操作。

手动复位要求在电源接通的条件下,在单片机运行期间,用按钮开关操作使单片机复位。

其结构如图2.1。

上电自动复位通过电容C3充电来实现。

手动按键复位是通过按键将电阻R1与VCC接通来实现。

2.1.2发光二极管

 

 

图2.2发光二极管

当接通电源,单片机运行时,八个二极管随着不同的调子闪烁,增加美感。

2.1.3一位数码管

 

图2.3一位数码管

当有键按下时,数码管显示当前的曲目

2.1.4蜂鸣器发声

 

 

图2.3蜂鸣器发声

利用单片机的P3.7口产生不同音调所对应的方波来使蜂鸣器发声,使用PNP三级管来驱动。

2.1.5按键

 

图2.4按键

按下AGAIN键可播放重复的曲子也可开启播放,按下FORM键可播放上一曲,按下NEXT键可播放下一曲。

2.2电路原理图、PCB图、元器件布局图

2.2.1电路原理图

 

 

图2.4总电路图

2.2.1PCB图

 

 

图2.5PCB图

 

2.2.1元器件布局图

 

图2.5元器件布局图

2.3元器件清单

BillofMaterialfor音乐播放器.Bom

UsedPartTypeDesignatorFootprintDescription

=========================================================

910KR1R2R3AXIAL-0.4Resistor

R4R5R6

R7R8R20

112MHZY1XTAL-1CrystalOscillator

122uFC2RB-.2/.4Bi-PolarCapacitor

230pFC3C4RAD-0.1Capacitor

8300kR9R10R11AXIAL-0.4

R12R13

R14R15

R16

1DIODED1LEDDiode

8LEDD2D3D4LED

D5D6D7

D8D9

1RESETS1SW

1SPEAKERLS1SIP-2

1USBJ2USBConnector

 

3软件系统的设计

 

3.1使用单片机资源的情况

通用寄存器R5,R4,R0,R1,R3,R2

用户RAM区30H,31H

专用寄存器A,B,DPTR,

位寻址区21H,20H

3.2软件系统各模块功能简要介绍

初始化程序:

初始化定时器

唱歌程序:

从表格中取出数据,利用中断程序产生不同频率的方波,同时调延时程序产生不同的节拍

中断程序:

定时时间到,产生方波

判键程序:

判断哪个键按下,转向相应的子程序执行相应的动作

音符表:

用于产生曲调

按键程序:

分别执行选歌,开启,重复的功能

 

3.3软件系统程序流程框图

 

Y

N

3.4软件系统程序清单

ORG0000H

AJMPLOOOOP

ORG000BH

AJMPTIM0

ORG001BH

RETI

ORG0023H

LOOOOP:

MOVA,#01H

LOOOP:

MOVP2,#0F3H

MOVP1,A

RLA

MOVR2,#0FFH

DELAY0:

MOVR3,#0FFH

DJNZR3,$

MOVR4,#0FFH

DJNZR4,$

DJNZR2,DELAY0

JNBP3.3,START

LJMPLOOOP

START:

MOVP2,#06H

MOVR5,#00H;初始化

MOVTMOD,#00010001B

MOVIE,#10101010B

MOVDPTR,#TAB2;装第一首歌

MOV30H,DPL;DPTR低8位送30H暂存

MOV31H,DPH;DPTR高8位送31H暂存

START1:

INCR4;产生8位随机数

MOVA,#01010101B

MOVB,R4

MULAB;8位随机数由P1口输出

MOVP1,A

MOVDPL,30H

MOVDPH,31H

MOVA,#00H

MOVCA,@A+DPTR;查表

MOVR0,A;音符数据送R0崭存

MOVA,#00H

INCDPTR

MOVCA,@A+DPTR;查表

MOVR1,A;节拍数据送R1崭存

INCDPTR

MOV30H,DPL

MOV31H,DPH

CJNEA,#01H,ELECT;一首歌没结束转ELECT

INCR5;结束歌曲计数器加1

ELECT:

JZSTART;所有歌曲结束转START循环

MOVA,R0

JNZSING

CLRTR0

SETBP3.7

LOOP1:

ACALLDELAY;调用延时子程序

DJNZR1,LOOP1

SJMPSTART1

SING:

MOVDPTR,#TAB1;音符表首址送DPTR

DECR0;计算音符

MOVA,R0

MOVB,#02H

MULAB

MOVR0,A

MOVCA,@A+DPTR;查表

MOV21H,A

INCDPTR

MOVA,R0

MOVCA,@A+DPTR

MOV20H,A

MOVTL0,20H

MOVTH0,21H

SETBTR0;开T0定时器

LOOP2:

ACALLDELAY

DJNZR1,LOOP2

AJMPSTART1

TIM0:

MOVTL0,20H

MOVTH0,21H

CPLP3.7

RETI;中断返回

DELAY:

MOVR2,#70

DELAY1:

MOVR3,#252

DJNZR3,$

JNBP3.3,AGAIN;重复正播放的曲子

JNBP3.4,FORM;上一曲开关按下转FORM

JNBP3.5,NEXT;下一曲开关按下转NEXT

DJNZR2,DELAY1

RET

AGAIN:

JNBP3.3,$;等待键释放

LJMPKEYWORK

FORM:

CLREA;关中断

JNBP3.4,$;等待键释放

CJNER5,#00H,ZERO;不是第一首歌曲转ZER0

MOVR5,#04H;是第一首将最后一首歌曲装入歌曲计数器

SJMPKEYWORK

ZERO:

DECR5;歌曲向上进一首

SJMPKEYWORK

NEXT:

CLREA

JNBP3.5,$

CJNER5,#04H,LAST

MOVR5,#00H

LJMPKEYWORK

LAST:

INCR5;歌曲下翻一首

LJMPKEYWORK

KEYWORK:

MOVDPTR,#TAB;将歌曲排列表装入DPTR

MOVA,R5;将R5的容送A

RLA

SETBEA;开中断

JMP@A+DPTR;根据A的容转向不同歌曲

TAB:

AJMPMUSIC2

AJMPMUSIC3

AJMPMUSIC4

AJMPMUSIC5

MUSIC2:

MOVDPTR,#TAB2;第2首歌曲首址送DPTR

MOVP2,#06H

GONG:

MOV30H,DPL

MOV31H,DPH

AJMPSTART1

MUSIC3:

MOVDPTR,#TAB3

MOVP2,#5BH

SJMPGONG

MUSIC4:

MOVDPTR,#TAB4

MOVP2,#4FH

SJMPGONG

MUSIC5:

MOVDPTR,#TAB5

MOVP2,#66H

SJMPGONG

;********************(音符表)**********************;

TAB1:

DW64021,64185,64331,64400,64524,64632,64732

DW64777,64860,64934,64968,65030,65085,65134

DW65157,65198,65235,65252,65283,65310,65335

;*********************(兰花草)***********************;

TAB2:

DW0608H,0A08H,0A08H,0A08H,0A18H,0908H,0808H,0908H

DW0808H,0708H,0620H,0D08H,0D08H,0D08H,0D08H,0D18H

DW0C08H,0A08H,0C08H,0C08H,0B08H,0A20H,0A08H,0D08H

DW0D08H,0C08H,0A18H,0908H,0808H,0908H,0808H,0708H

DW0610H,0310H,0308H,0808H,0808H,0708H,0618H,0A08H

DW0908H,0808H,0708H,0508H,0620H,0908H,0808H,0708H

DW0508H,0640H,0001H

;**********************(梁祝)*************************;

TAB3:

DW0A10H,0C08H,0D04H,0F08H,1004H,0D04H,0F04H,0C08H

DW1308H,1504H,1404H,1304H,1104H,1304H,1018H,1008H

DW1004H,1104H,0E08H,0D04H,0C08H,0D04H,0F08H,1008H

DW0A08H,0F08H,0D04H,0C04H,0D04H,0F04H,0C18H,1108H

DW1304H,0E08H,1008H,0D04H,0F04H,0C08H,0C10H,0A08H

DW0C02H,0A08H,0C08H,0D02H,0E04H,1004H,0D18H,0C04H

DW0D04H,0F08H,1004H,1308H,1108H,1008H,1104H,1004H

DW0F08H,0D04H,0C04H,0A10H,0F10H,0D08H,0F02H,0D04H

DW0C04H,0A04H,0C04H,0D04H,0F04H,0C38H,0001H

;*****************(让我们荡起双桨)*********************;

TAB4:

DW0608H,0808H,0908H,0A18H,0C08H,0A08H,0808H,0910H

DW0620H,0008H,0808H,0908H,0A08H,0C18H,0001H,0C08H

DW0D10H,0910H,0A30H,0001H,0A08H,0C08H,0D20H,0C18H

DW0D08H,0F08H,0E04H,0D04H,0C08H,0D08H,0A10H,0004H

DW0808H,0908H,0A18H,0C08H,0810H,0610H,0808H,0908H

DW0A08H,0D08H,0C30H,0010H,0A20H,0D18H,0001H,0D08H

DW0C08H,0B08H,0A10H,0001H,0920H,0A18H,0C08H,0608H

DW0808H,0910H,0010H,0808H,0908H,0A10H,0C0BH,0001H

DW0C04H,0D10H,0F10H,0E08H,0D08H,0C08H,0A08H,0D40H

DW0001H

;*********************(童年)****************************;

TAB5:

DW0A08H,0C08H,0C10H,0C08H,0A08H,0D08H,0D08H,0E08H

DW0D08H,0D08H,0D08H,0D08H,0C08H,0F10H,0F08H,0F08H

DW0F08H,0D08H,0F08H,0D08H,0C40H,0A08H,0C08H,0C10H

DW0C08H,0A08H,0D08H,0D08H,0E08H,0D08H,0D08H,0D08H

DW0D08H,0C08H,0F10H,0F08H,0F08H,0F08H,0D08H,0D08H

DW0F08H,1040H,1308H,1308H,1310H,1310H,1108H,1008H

DW0F08H,0F10H,0D08H,0D08H,0F08H,0D08H,0F08H,1008H

DW1008H,1008H,1008H,1008H,0F08H,1108H,1008H,1040H

DW1108H,1110H,1108H,1108H,1008H,1010H,0F08H,0F10H

DW0F08H,1008H,0F08H,0D08H,0C08H,0C08H,0C10H,0C08H

DW0D08H,0C08H,1008H,1108H,0F40H,0001H,0000H

END

 

4设计结论、仿真结果、误差分析、教学建议

 

4.1设计结论及使用说明

此音乐播放器能够播放四首曲子,且用按键选择曲目,基本实现了设计要求。

用数据线连上电脑充当电源,将已下载程序的单片机插入插座,按下AGAIN键可重复播放当前曲子,按下FORM键可播放上一曲,按下NEXT键可播放下一曲,按下REST键实现复位,从第一首曲子开始。

4.2设计课题的仿真结果

 

图4.1第一首曲子

 

 

图4.2第二首曲子

 

图4.3第三首曲子

 

 

图4.4第四首曲子

4.3误差分析

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

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

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

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

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

5.程序的结构要设计的合理,避免上下乱调用的现象,这样会使程序更加清晰化。

4.4设计体会

本学期学习单片机的时间只有十几周时间,对单片机的硬件设计,软件设计掌握的深度不够,但通过此次课程设计,却改变了很多,首先对于硬件电路的工作原理有了进一步的学习,同样就有了进一步的认识;其次软件方面,在程序的设计,程序的调试方面都学到了很多东西,这是第一次编写单片机的大程序,很有成就感。

在一个好的氛围里才能踏下心来做东西,在这几天课设的时间里,实验室的氛围对我们的影响很大,大家一起努力,这也是我们能完成课设的动力。

另外在编程中出现问题时,一定要戒骄戒躁,脚踏实地,认真看书,仔细分析,仔细调试,就一定会发现错误,克服困难,我们也是这么做的,这在课设中十分重要。

电路板的设计过程中知道了制作电路板的流程,让我对电路板的制作不在感到敬畏,对自己的动手能力有了很大的自信。

焊接是在同学的帮助下完成的,充分感受到了双面板焊接的不方便,和艰辛。

此次课程设计可以说是让我获益匪浅。

通过查阅了很多资料,了解了许多汇编程序的思想,扩展了自己的视野,不再仅仅局限于书本中几条简短的程序,而且更重要的是明白写程序的态度:

仔细谨慎,精益求精。

在系统加电调试中,针对一些问题,熟练掌握了根据原理分步测试,将错误之处缩小的最小围。

4.5教学建议

建议课堂上多讲解一些编程实例,作业方面建议多布置些实例方面的编程题,同时也期望老师看作业是能尽量把我们做错的地方标出来,更希望老师能够亲和些,课后能像朋友一样相处。

 

参考文献

 

[1]曹巧媛,单片机原理及应用[M].北京:

电子工业,1997.7;

[2]秀珍,单永磊,单片微型计算机原理及其应用[M].北京:

中国水利水电,2001.8;

[3]洪润,兰清华,单片机应用技术教程[M].北京:

清华大学,1997.11;

[4]华,MCS-51系列单片机实用接口技术[M].北京:

北京航空航天大学,1993.8;

[5]马忠梅,单片机的C语言Windows环境编程宝典[M].北京:

北京航空航天大学,2003.6;

[6]广第,单片机基础[M].北京:

北京航空航天大学,2007.6

 

致谢

 

首先感谢王韧老师的指导,再感谢同组组员的帮助,也感谢班上同学提供的器材。

没有你们的帮助,单凭我一人努力是很难成功的。

再次表示深深的感谢!

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

当前位置:首页 > 初中教育 > 语文

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

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