基于单片机的简单音乐盒设计制作大学学位论文范文模板参考.docx

上传人:b****8 文档编号:27598218 上传时间:2023-07-03 格式:DOCX 页数:25 大小:1.69MB
下载 相关 举报
基于单片机的简单音乐盒设计制作大学学位论文范文模板参考.docx_第1页
第1页 / 共25页
基于单片机的简单音乐盒设计制作大学学位论文范文模板参考.docx_第2页
第2页 / 共25页
基于单片机的简单音乐盒设计制作大学学位论文范文模板参考.docx_第3页
第3页 / 共25页
基于单片机的简单音乐盒设计制作大学学位论文范文模板参考.docx_第4页
第4页 / 共25页
基于单片机的简单音乐盒设计制作大学学位论文范文模板参考.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

基于单片机的简单音乐盒设计制作大学学位论文范文模板参考.docx

《基于单片机的简单音乐盒设计制作大学学位论文范文模板参考.docx》由会员分享,可在线阅读,更多相关《基于单片机的简单音乐盒设计制作大学学位论文范文模板参考.docx(25页珍藏版)》请在冰豆网上搜索。

基于单片机的简单音乐盒设计制作大学学位论文范文模板参考.docx

基于单片机的简单音乐盒设计制作大学学位论文范文模板参考

摘要

长久以来,音乐都在我们的身边,封建时期的编钟到现在我们的各种各样的音乐播放,音乐盒不但在我们日常生活中经常拿来当礼物来赠送,更重要的是音乐盒悠扬的乐声,能经常勾起人们对美好往事的回忆,甚至魂牵梦萦,坠入时光岁月的追忆中。

为了好好利用学到的知识用于自己喜欢的事情中我选择了单片机音乐盒的设计,这让我有回忆起了儿时的美好时光。

单片机因其体积小、功能强、价格低廉而得到广泛运用。

用STC89C52单片机设计音乐盒,只需STC89C52RC最小系统,扩展三个按键,再加一片由两个NPN组成的达林顿管以及输出设备蜂鸣器和数码管,通过两个按键可以选择上一首歌曲和下一首歌曲,并在数码管上直观的显示歌曲的序号。

关键词:

音乐盒;单片机;数码管

Abstract

Foralongtime,musicisaroundus,thefeudalperiodofchimestoavarietyofmusicweplay,musicbox,notonlyinourdailylivesareoftenusedasagifttogift,moreimportantmelodiousmusicboxmusic,canoftenremindpeopleofgoodmemoriesofthepast,andevendreaming,crashedintotherecollectionsoftheyearsintime.InordertomakegooduseofacquiredknowledgetotheirfavoritethingsinthemusicboxIchosesingle-chipdesign,whichmakesmerememberthegoodtimesofchildhood.

Microcontrollerbecauseofitssmallsize,powerfulinexpensiveandwidelyused.Single-chipdesignwithSTC89C52musicbox,justSTC89C52minimumsystem,extendedthreebuttons,plusonecomposedbytwoNPNDarlingtonbuzzerandoutputdevicesanddigitalcontrol,bytwobuttonsonachoicesongsandthenextsong,andvisualdisplayofdigitalsongsontheserialnumber.

Keywords:

MusicBox;Single-chip;LED

 

目录

引言1

1选题的背景1

2选题总体设计说明1

3设计方法1

3.1设计思想1

3.2系统硬件设计2

3.2.1主控芯片2

3.2.2蜂鸣器及其驱动3

3.2.3按键4

3.2.4元器件清单4

4设计内容4

4.1基本知识—音调4

4.1.1音频脉冲4

4.1.2方法5

4.1.3计算公式5

4.1.4其计数值的求法5

4.1.5C调音符频率与计数值T的对照表5

4.2基本知识—节拍6

4.2.1相关知识6

4.3程序代码6

5结论11

参考文献13

附录A14

附录B15

附录C16

附录D17

 

引言

随着社会的不断高速发展,人们的压力也越来越大。

减压的方式很多,但音乐确是最简单而有效的方式,它不仅能让人们感到愉悦和快乐,更重要的是它也能让人感到轻松。

1选题的背景

本次课设是应用单片机原理和控制理论设计音乐演奏控制器的硬件电路,并利用C语言进行程序设计。

通过控制单片机内部的定时器来产生不同频率的方波,驱动喇叭发出不同的音调的音乐,在利用延迟来控制发音时间的长短。

把乐谱转化成相应的定时常数就可以从发音设备中演奏出悦耳的音乐。

运用单片机制作一个能演奏美妙音乐的电路,通过这一有趣的项目制作,巩固定时器和键盘的运用技能,增进对单片机应用产品的过程的了解。

2课题总体设计说明

音乐盒可以发出怡人的音乐旋律,能给生活增加不少的乐趣。

用51系列单片机设计一个音乐盒的基本功能如下:

1.利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲。

2.用七段数码管显示当前播放的歌曲序号。

3.通过对单片机的电路控制并结合按键功能实现播放,暂停,停止,上一曲,下一曲,的音阶和节拍的配合实现歌曲(共四首歌)演奏。

3设计方案

3.1设计思想

本设计采用STC89C52RC作为主控芯片,蜂鸣器作为输出设备产生音乐,通过按键1和2能够选择歌曲。

数码管(LED)能够实时的显示当前的歌曲名及歌曲号。

其中P3.3和P3.2外接按键,P0口用作LED输出数据端口,P2.0接蜂鸣器端口。

设计框图如图所示

 

 

图3.1音乐盒设计框图

 

3.2系统硬件设计

3.2.1主控芯片

设计中所采用主控芯片为STC89C52RC。

因其价格便宜,在市场上已经很成熟,各个方面都能够满足设计要求故选择它。

其采用标准双列直插式引脚DIP-40大规模集成电路封装。

它的引脚排列如下图所示

STC89C52RC引脚功能说明

VCC(40引脚):

电源电压

VSS(20引脚):

接地

P0端口(P0.0~P0.7,39~32引脚):

P0口是一个漏极开路的8位双向I/O口。

作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。

在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。

此时,P0口内部上拉电阻有效。

在FlashROM编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。

验证时,要求外接上拉电阻。

P1端口(P1.0~P1.7,1~8引脚):

P1口是一个带内部上拉电阻的8位双向I/O,

P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。

对端口写入1时,通

过内部的上拉电阻把端口拉到高电位,这是可用作输入口。

P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流(

)。

P2端口(P2.0~P2.7,21~28引脚):

P2口是一个带内部上拉电阻的8位双向I/O端口。

P2的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。

对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。

P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流(

)。

P3端口(P3.0~P3.7,10~17引脚):

P3是一个带内部上拉电阻的8位双向I/O端口。

P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。

对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。

P3做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流(

)。

RST(9引脚):

复位输入。

当输入连续两个机器周期以上高电平时为有效,用来完成单片机单片机的复位初始化操作。

看门狗计时完成后,RST引脚输出96个晶振周期的高电平。

特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。

DISRTO默认状态下,复位高电平有效。

ALE/

(30引脚):

地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。

在Flash编程时,此引脚(

)也用作编程输入脉冲。

(29引脚):

外部程序存储器选通信号(

)是外部程序存储器选通信号。

当AT89C51RC从外部程序存储器执行外部代码时,

在每个机器周期被激活两次,而访问外部数据存储器时,

将不被激活。

/VPP(31引脚):

访问外部程序存储器控制信号。

为使能从0000H到FFFFH的外部程序存储器读取指令,

必须接GND。

注意加密方式1时,

将内部锁定位RESET。

为了执行内部程序指令,

应该接VCC。

在Flash编程期间,

也接收12伏VPP电压。

XTAL1(19引脚):

振荡器反相放大器和内部时钟发生电路的输入端。

XTAL2(18引脚):

振荡器反相放大器的输入端。

3.2.2蜂鸣器及其驱动

达林顿三极管又称复合三极管,它将二只三极管组合在一起,以组成一只等效的新的三极管。

达林顿三极管的放大倍数是二只三极管放大倍数之积。

达林顿三极管可以看作是一种直接耦合的放大器,三极管间以直接方式串接,没有加上任何耦合元件。

这样的晶体管串接型式最大的作用是:

提供高电流放大增益。

两只三极管同为NPN型,将前

级三极管的射极电流直接引入下一级的基极,当作下级的输入。

这种使用相同类型的三极管组成的达林顿管称为同极型达林顿管。

由于以上原因,我们选择通过两个NPN三级管搭建成一个达林顿作为为驱动。

如图所示。

图3.3三极管组成的达林顿管采用常用的四引脚按键,其中各有两个引脚相连。

按下时,接通,放开时,将断开。

设计中需要两个按键,作为上一首和下一首的信号输入。

3.2.4元器件清单

表3.1元器件清单

元器件序号

型号

主要参数

数量

备注

R1~R4

10K

4

1/4w

C1、C2

10pF

2

瓷片电容

C3

10uF

1

电解电容

Y1

12MHz

1

晶振

S1~S3

3

按钮

Q1~Q2

2

NPN三极管

LS1

1

无源小喇叭

U1

STC89C52RC

1

单片机

LED1

1

7段一位共阴数码管

LED0

1

LED灯

P1

1

10K排阻

4设计内容

4.1基本知识—音调

4.1.1音频脉冲

要生产音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。

利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反

相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。

4.1.2方法

利用89C52的内部定时器使用其工作在计数器模式MODE1下,改变计数值THO及TLO以产生不同频率的方法。

4.1.3计算公式

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

 

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

N:

计算值;Fi:

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

4.1.4其计数值的求法

例如:

设K=65536,F=1000000=Fi=1MHz,求低音DO(261Hz)。

中音DO(523Hz)。

高音的DO(1046Hz)的计算值。

低音DO的

中音DO的

高音DO的

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

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

音符

频率(HZ)

简谱码(T值)

音符

频率(HZ)

简谱码(T值)

低1DO

262

63628

#4FA#

740

64860

#1DO#

277

63731

中5SO

784

64898

低2RE

294

63853

#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

#1DO#

554

64633

高5SO

1568

65217

中2RE

587

64684

#5SO#

1661

65235

#2RE#

622

64732

高6LA

1760

65252

中3M

659

64777

#6

1865

65268

中4FA

698

64820

高7SI

1967

4.2基本知识--节拍

4.2.1相关知识

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

表4.2节拍与节拍码对照

节拍码

节拍数

节拍码

节拍数

1

1/4拍

1

1/8拍

2

2/4拍

2

1/4拍

3

3/4拍

3

3/8拍

4

1拍

4

1/2拍

5

1又1/4拍

5

5/8拍

6

1又1/2拍

6

3/4拍

8

2拍

8

1拍

A

2又1/2拍

A

1又1/4拍

C

3拍

C

1又1/2拍

F

3又3/4拍

表4.3各调1/4节拍的时间设定及各调1/8节拍的时间设定

曲调值

DELAY

曲调值

DELAY

调4/4

125毫秒

调4/4

62毫秒

调3/4

187毫秒

调3/4

94毫秒

调2/4

250毫秒

调2/4

125毫秒

4.3程序代码

#include"reg52.h"

sbitBUZZER=P2^0;

 

unsignedcharth,tl;

unsignedcharflag1,flag2;

charcodetable[]={

0x3f,0x06,0x5b,0x4f

/*,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71*/};//0~f的字型码(共阴)

//012345678910111213

//7L12345671H2H3H5L6L4L

unsigned

intTONE[14]={1012,956,852,759,716,638,568,506,478,426,379,1276,1136,1433};

//1234567

//低音1908170115151433127611361012

//中音956852759716638568506

//高音478426379358319284253

unsignedcharcodeSONG[4][150]={/*20为结束符,用于判断是否结束*/

//同桌的你

{5,5,5,5,3,4,5,8,6,6,6,6,8,6,5,5,

5,5,5,5,7,6,4,4,4,4,4,4,4,3,2,1,1,

8,8,8,8,5,3,8,8,10,9,9,9,9,8,7,6,6,

7,7,7,7,7,8,9,5,7,7,8,9,8,7,8,8,20},

//一分钱

{5,8,6,8,5,3,5,2,3,5,3,5,6,8,5,6,5,3,

5,1,3,2,3,2,1,2,3,6,5,3,5,6,

5,8,6,5,3,5,2,5,2,3,2,1,20},

//小燕子{3,5,8,6,5,3,5,6,8,5,8,10,9,8,9,8,6,8,5,3,5,6,5,6,8,9,5,6,3,2,1,2,2,2,3,5,5,8,2,3,5,3,5,8,6,5,3,5,6,8,5,8,10,9,8,

9,8,6,8,5,3,5,6,5,6,8,9,5,6,3,8,6,5,3,2,1,2,2,3,5,

8,10,9,8,9,8,5,6,8,20},

//两只老虎

{1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,4,3,1,5,6,5,4,3,1,2,11,1,2,11,1,20}

};

 

unsignedcharcodeBEAT[4][150]=

{

{4,4,4,4,4,4,8,8,4,4,4,4,4,4,8,4,4,4,4,4,4,4,8,8,4,4,4,4,4,2,8,8,4,4,4,4,4,4,8,4,8,4,4,4,4,2,4,8,8,4,4,4,4,4,4,8,8,4,4,4,4,4,4,8,8},

{8,8,4,4,8,4,4,4,4,8,4,4,4,4,4,4,4,4,4,8,4,8,4,4,4,4,16,4,4,4,4,8,4,4,4,4,4,4,8,4,4,4,4,16},

{4,4,4,4,16,4,4,4,4,16,8,4,8,8,4,4,4,4,16,8,4,8,4,4,8,4,4,16,4,4,8,16,8,4,4,8,8,8,4,4,16,4,4,4,4,16,4,4,4,4,16,8,4,8,8,4,4,4,4,16,8,4,8,4,4,8,4,4,16,8,4,8,8,4,4,8,16,8,4,16,8,4,8,8,4,4,4,4,16},

{4,4,4,4,4,4,4,4,4,4,8,4,4,8,2,2,2,2,4,4,2,2,2,2,4,4,4,4,8,4,4,8}

};

/*****************设置音调*******************/

//对定时器0的初始值更新

voidSET_BUZZER_TONE(unsignedinttone)//tone为计数器实际要计数的次数即为N<--->FrN=Fi/2/FrFr为频率数

{//设置蜂鸣器的音调,其本质为对计数器的填装

TR0=0;//关闭定时器0

//TH0=(65536-tone)/256;

//TL0=(65536-tone)%256;

th=(65536-tone)/256;

tl=(65536-tone)%256;

TR0=1;//开启定时器0

}

/**************设置节拍**********************///通过延时来设置其节拍

//x为最小节拍的倍数

voidDELAY_MIN_BEAT(unsignedcharx)

{

unsignedinti,j,k;

for(i=0;i

{

for(j=0;j<100;j++)

for(k=0;k<120;k++);

}

TR0=0;//关闭定时器0

 

}

/***************定时器0初始化****************/

voidTIME0_INIT()

{

IE|=0x82;//1000_0010开启总中断并开启定时器0

TMOD=0x01;//定时器0工作在方式1

IP=0x02;//定时器0具有最高优先级

}

/**************外部中断0和1初始化***********/

voidINT_INIT()

{

IE|=0x85;//1000_0101开启总中断并开启外部中断0,1

TCON|=0x05;//外部中断0和1负边缘触发

}

/******************显示歌曲(数码管)****************/

voiddisplay(chara)

{

P0=table[a];

}

voidmain()

{

charnum1,num2;

unsignedcharflag0;

num1=0;//对应递增按钮,即外部中断0

num2=0;//对应递减按钮,即外部中断1

flag0=1;//定时器T0中断标志位

flag1=0;//递增中断标志位

flag2=0;//递减中断标志位

BUZZER=0;

TIME0_INIT();//定时器初始化

INT_INIT();//外部中断初始化

while

(1)

{

display(num1);

while(flag0)//定时器T0中断标志位

 

{

if(SONG[num1][num2]==20)flag0=0;//如果检测到最后一个音调为20,说明此曲应该结束

else

{if(flag1==1)//中断检测

{

num1++;

if(num1>3)num1=0;

num2=0;

flag1=0;

display(num1);

}

if(flag2==1)//中断检测

{

num1--;

if(num1<0)num1=3;

num2=0;

flag2=0;

display(num1);

}

SET_BUZZER_TONE(TONE[SONG[num1][num2]]);//音调

DELAY_MIN_BEAT(BEAT[num1][num2]);//节拍

num2++;

}

}

num2=0;

flag0=1;

num1++;

if(num1==4)num1=0;

}

}

/*************定时器0中断函数****************/

voidT0_TONE(void)interrupt1

{

 

TH0=th;

TL0=tl;

BUZZER=~BUZZER;

}

/**************外部中断0函数*****************/

voidINT0_SELECT(void)interrupt0

{

fla

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

当前位置:首页 > 人文社科 > 法律资料

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

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