基于单片机的电子音乐盒的设计与实现Word文档格式.docx
《基于单片机的电子音乐盒的设计与实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子音乐盒的设计与实现Word文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
三、设计方案
在这个系统的设计中,单片机采用51兼容系列的STC89C52RC。
有以下几部分构成:
电源电路、单片机最小系统、发声系统、键盘控制电路、显示电路。
经过论证后我确定的系统框图,如下图所示:
51
单
片
机
数字显示电路
键盘控制电路
发声控制电路
电源电路
单片机最小系统
四、设计原理
1、原理
本系统由单片机系统,独立按键、数码管组成。
利用I/O口产生一定频率的方波,驱动扬声器,发生不同的音调,从而实现乐曲的演奏。
系统能通过功能键完成选择乐曲、播放、暂停、和复位的基本功能。
在播放乐曲的同时LCD上显示所播放的歌曲序号,可以通过复位键使音乐盒从第一首歌曲重新播放,本系统成本低廉,功能强大实用。
2、音乐基础简介
<
1>
音乐频率表
低音
频率
中音
高音
11
262
1
523
1046
22
294
2
587
1175
33
330
3
659
1318
44
349
4
698
1397
55
392
5
784
1568
66
440
6
880
1760
77
494
7
988
1967
2>
音调表建立
由于单片机输出为方波输入信号,波形图如下:
高低电平各占1/2,根据单片机定时器工作原理。
定时时间=(满值-初值)X机器周期
初值=满值-定时时间/机器周期
=216-(1/f)X(1/2)X106
以低音11为例,初值为=216-(1/262)X(1/2)X106
=63627.6
=63628
同理得其他音调值,具体如下:
Unsignedintcodetable[]={0,63628,63835,64021,64103,64260,64399,64523,64579,64684,64777,64819,64898,64968,65030,65058,65110,65157,65178,65217,65252,65282};
3>
音乐表的建立
我们以两只老虎音乐为例子,然后我们就会得到该音乐表
Ucharcodemusic1[]={8,4,9,4,10,4,8,4,9,4,10,4,8,4,10,4,11,4,12,8,10,4,11,4,12,8,12,3,13,1,12,3,11,1,10,4,8,4,12,3,13,1,12,3,11,1,10,4,8,4,9,4,5,4,8,8,9,4,5,4,8,8,0,0xff};
3、硬件电路设计
1)单片机最小系统
在基于单片机的应用系统中,其核心是单片机的最小系统,而单片机又是最小系统的核心,为了方便起见,采用的型号是:
STC89C52RC,内部资源有:
8kbflash,512bsram,4个8位I/O口,2个TC,1个UART,带ISP和IAP功能。
是近年来流行的低端51单片机。
时钟电路采用12MHz晶体,复位电路采用简单的RC复位电路。
R4=1KΩ,R3=10KΩ,C5=10Uf。
2)发声控制电路
音乐的发生器采用小喇叭,使用PNP型三极管。
3)键盘控制电路
通过安按键来控制乐曲的暂停/播放、加+、减-。
S1、S2、S3的功能设定如下。
S1暂停/播放;
S2乐曲/+;
S3乐曲/-。
4)音乐数目显示电路
显示当前的乐曲序列。
为了直观的观察室哪一首曲子的效果,设置一位数码管显示,数码管需要接一个200-100Ω的电阻起分压作用。
4、程序流程图
处理按键
开始
初始化
检查按键
有键按下?
显示乐曲号
播放乐曲
该曲是否播放完?
显示乐曲号+1
所有曲子是否放完?
五、仿真结果
所仿真出来的结果,去掉N2905,声音变小了,加上之后声音变大了,额,第一首是两只老虎,第二首,我换成通天大道,不过没找到乐谱规律,错了,第三首是小兔子快开门,第四首新年好,第五首歌曲接连被放出来。
效果不错。
六、总结
通过本次仿真作图,以及程序编写,仿真原图,和自己再画图,和程序再组合效果,依然不错,原图只是作为参考,其次,通过本次作业,明白,每一门课代表以后的每项工作,而这门课开设的原因估计是要我们认为,在一台机器,里面通过芯片,芯片的程序带动硬件,一件成品就出来了。
所以,软件和硬件属于相辅相成,在未来的世界中,是属于硬件和软件共存的时代,没有软件,硬件别想动;
同理硬件也是一样的。
认可了工程师的伟大,以及程序员的厉害之处。
七、附录
1、元件清单
元件清单:
2N2905、2W10G、7SEG-MPX2-CAA700127M004ATE018、AT89C52、BUTTON、BUZZER、CAPCRYSTAL、DIODE-LED、RES、SW-SPDT
2、电路图
3、程序代码
#include"
reg52.h"
#defineucharunsignedchar
#defineuintunsignedint
sbitbuzzer=P2^7;
voiddelay(uintz);
voidscan();
sbitS1=P3^1;
sbitS2=P3^2;
sbitS3=P3^3;
bitflag=1;
ucharbuf,high,low,n;
chari;
uintsound;
ucharcodenum[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uintcodetable[]={0,63628,63835,64021,64103,64260,64399,64523,64579,64684,64777,64819,64898,64968,65030,65058,65110,65157,65178,65217,65252,65282};
ucharcodemusic1[]={8,4,9,4,10,4,8,4,9,4,10,4,8,4,10,4,11,4,12,8,10,4,11,4,12,8,12,3,13,1,12,3,11,1,10,4,8,4,12,3,13,1,12,3,11,1,10,4,8,4,9,4,5,4,8,8,9,4,5,4,8,8,0xff};
ucharcodemusic2[]={10,10,10,9,8,9,10,12,10,10,9,8,9,10,20,19,20,17,19,19,19,15,20,19,17,19,19,19,15,16,17,16,19,17,16,15,16,19,8,20,19,19,8,20,19,17,19,20,8,8,20,19,10,10,12,9,8,8,0xff};
ucharcodemusic3[]={12,4,15,2,13,2,12,4,12,4,10,2,12,2,13,2,15,4,12,4,12,4,13,4,12,2,10,2,9,4,9,4,10,4,12,2,10,2,9,2,10,2,8,4,13,4,12,4,13,4,12,4,13,4,12,4,10,4,13,4,12,4,12,2,12,2,10,2,9,2,8,2,8,8,2,8,2,9,2,10,2,8,8,0xff};
ucharcodemusic4[]={8,3,8,3,8,3,5,3,10,3,10,3,10,3,8,4,8,3,10,3,12,3,12,4,10,3,11,3,10,3,9,6,9,3,10,3,11,3,11,4,10,3,9,3,10,3,8,4,8,3,10,3,9,3,5,4,7,3,9,3,8,6,0xff};
ucharcodemusic5[]={0,2,8,2,10,2,11,2,12,2,12,2,11,2,12,4,13,2,14,2,15,2,10,2,10,2,11,2,12,8,13,4,12,2,11,2,12,2,15,2,15,4,13,4,13,2,14,2,15,4,14,4,12,4,10,2,11,2,10,2,11,2,12,4,13,2,14,2,15,4,14,2,13,2,12,8,12,2,13,24,9,8,16,0xff};
ucharcode*menu[]={0,music1,music2,music3,music4,music5};
uchar*p;
charj;
voidint0()interrupt0
{if(S2==0)
{delay
(1);
if(S2==0)
{j++;
if(j==6)
{j=1;
}
P0=num[j];
TR0=0;
TR1=0;
n=0;
i=3;
p=menu[j];
}
delay
(1);
while(!
S2);
}
}
voidint1()interrupt2
{
if(S3==0)
{delay
(1);
if(S3==0)
{j--;
if(j==0){j=5;
}
P0=num[j];
S3);
}
voidt1()interrupt3
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
n--;
scan();
voidt0()interrupt1
TH0=high;
TL0=low;
buzzer=!
buzzer;
voidinit()
TMOD=0x11;
EA=1;
ET0=1;
ET1=1;
EX0=1;
EX1=1;
IT0=1;
IT1=1;
voidmain()
{
init();
while
(1)
{
for(j=1;
j<
6;
j++)
{P0=num[i];
i=0;
p=menu[j