基于单片机的简单音乐盒制作.docx
- 文档编号:24399797
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:25
- 大小:1.69MB
基于单片机的简单音乐盒制作.docx
《基于单片机的简单音乐盒制作.docx》由会员分享,可在线阅读,更多相关《基于单片机的简单音乐盒制作.docx(25页珍藏版)》请在冰豆网上搜索。
基于单片机的简单音乐盒制作
摘要
长久以来,音乐都在我们的身边,封建时期的编钟到现在我们的各种各样的音乐播放,音乐盒不但在我们日常生活中经常拿来当礼物来赠送,更重要的是音乐盒悠扬的乐声,能经常勾起人们对美好往事的回忆,甚至魂牵梦萦,坠入时光岁月的追忆中。
为了好好利用学到的知识用于自己喜欢的事情中我选择了单片机音乐盒的设计,这让我有回忆起了儿时的美好时光。
单片机因其体积小、功能强、价格低廉而得到广泛运用。
用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
谢辞12
参考文献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大规模集成电路封装。
它的引脚排列如下图所示
图3.2STC89C52的引脚排列
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蜂鸣器及其驱动
蜂鸣器根据结构不同分为压电式蜂鸣器和电磁式蜂鸣器;而两种蜂鸣器又分为有源蜂鸣器和无源蜂鸣器,这里的源特指振荡源;有源蜂鸣器直接加电就可以响起,无源蜂鸣器需要我们给提供振荡源。
理想的振荡源为一定频率的方波。
由于系统采用了无源蜂鸣器,所以需要我们通过晶振产生一定频率的方波信号,本次采用频率为12MHZ的晶振来产生标准方波。
达林顿三极管又称复合三极管,它将二只三极管组合在一起,以组成一只等效的新的三极管。
达林顿三极管的放大倍数是二只三极管放大倍数之积。
达林顿三极管可以看作是一种直接耦合的放大器,三极管间以直接方式串接,没有加上任何耦合元件。
这样的晶体管串接型式最大的作用是:
提供高电流放大增益。
两只三极管同为NPN型,将前
级三极管的射极电流直接引入下一级的基极,当作下级的输入。
这种使用相同类型的三极管组成的达林顿管称为同极型达林顿管。
由于以上原因,我们选择通过两个NPN三级管搭建成一个达林顿作为为驱动。
如图所示。
图3.3三极管组成的达林顿管
3.2.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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 简单 音乐盒 制作