欢迎来到天天文库
浏览记录
ID:14122803
大小:210.00 KB
页数:18页
时间:2018-07-26
《基于单片机的自动音乐播放器的设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于单片机的自动音乐播放器的设计摘要为方便人们的日常生活,优化学校、机关等单位的计时系统,采用以单片机为基础设计了一种的自动音乐播放器。本设计利用单片机89C58RD+的定时和计数功能,来完成时间的显示和定时功能。并且,通过对定时器初值的设定来产生不同频率的声音,利用定时器中断来完成对音乐节拍长度的控制。通过LM386N1音频功率放大器,将单片机输出的信号放大,再通过喇叭播放乐曲。通过MAX232型芯片,可以转换PC机上的电压和单片机的电源电压,再通过串口接入PC机,这样就能从PC机上将用C语言编写的程序下载到单片机上。最
2、后可在数码管上显示时间,当定时时间到后,喇叭自动播放一段连续的音乐。此设计摆脱了传统闹钟的刺耳声音,取而代之的是美妙的音乐,能为人们的日常生活提供准确的计时,且成本低廉,值得推广。关键词:单片机;自动音乐播放;音频转换;时间显示;LM386N1音频功率放大器89C58RDEPROM(存储单音)时间节拍控制PC机图2-12.1音乐编程原理及其流程图2.1.1声音的产生声音是音频振动的结果,振动的频率高则为高音,频率低则为低音。音频范围为20HZ-200KHZ之间,而人类耳朵比较容易辨识的声音大概是200HZ-20KHZ。一般
3、音响电路是以正弦波信号驱动喇叭,产生悦耳的音乐的;在数字电路里,则是以脉冲信号驱动喇叭以产生声音。同样的频率,脉冲信号或正弦信号产生的音效,对于人类的耳朵来说很难有所区别。若用单片机产生声音,可利用程序产生频率,送到输入/输出端口,例如P1.0,再从该点连接到喇叭的驱动电路,即可驱动喇叭。第18页共18页2.1.2音频转换原理若要产生音频脉冲,只要算出某一音频的周期,再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。就可在P1.0引脚上得到此频率的脉冲。利用单
4、片机的内部定时器使其工作计数器模式(MODEL1)下,改变其计数值TH0及TL0以产生不同频率的方法产生不同音阶。例如,频率为523HZ,其周期T=1/523=1912us,因此只要令计时器计时956us/1us=956,每计数956次时将I/O反相,就可得到中音DO(523HZ)。计数脉冲值与频率的关系式是:N=F1/2/F2(式3-2-1)式3-2-1中,N是计数值;F1是机器频率(晶体振荡器为12MHZ时,其频率为1MHZ);F2为想要产生的声音频率。其计数初值T的求法如下:T=65536–N=65536-F1/2/
5、F2(式3-2-2)本次设计采用16位定时方式,晶体振荡器频率为6MHZ,根据式3-2-1和式3-2-2可以计算出各音乐频率的计数器初值,再将十进制的计数器初值转换为四位16进制,将其制表写入程序中,通过查表装入要求的初值即可。音阶与频率的对应关系如表3-1所示。表2-1音符DOREMEFASOLASI低音简谱码1234567频率/Hz523587659698784880987高音简谱码1234567频率/Hz10461174131813961567176019752.1.3节拍的产生音阶的频率是固定的,而节拍有快有慢,拍
6、子越短节奏越快,拍子越长节奏越慢。控制发音的时间有两种方法:调用延时子程序或采用定时器中断。本次设计采用的是定时器终端方式。首先在整首乐曲中找出最短的拍子,一般为1/4拍,拍子的时间约为0.125s。然后以1/4拍为基准,然后设定每0.125s产生一次中断,其定时器值为125000,定时常数为08F3H。若采用模式2,定时器值太小,不是很好用。所以采用模式1,将定时器值设为62500,即0CDCH,则只需要执行2次定时器中断就可以产生1/4拍的时间长度。同样,若要产生其它的拍子(如1/2拍,3/4拍……第18页共18页),
7、只需要定时器中断N次,产生N*0.125s定时,使其满足各个节拍的时间长度即可。设计的程序按如下方法编写:(1)将音符代码装入8位字节高4位,节拍代码装入低4位,组成一个字节,以此类推。将整段乐曲转换成一定长度的编码表。具体编程方法如下:1.首先,定义toneh[]和tonel[]两个数组,将各个音乐频率的定时器初值的16进制数的高8位装入toneh[],低8位装入tonel[]。2.利用单片机的定时器中断,将toneh[]和tonel[]的数据分别装入TH0和TL0,并且,收到信号P1.0就反相。voidtimer0(v
8、oid)interrupt1using1{P1_0=!P1_0;TH0=toneh[rti];TL0=tonel[rti];}3.利用定时器1控制音乐节拍的时间长度,将上文所述的定时器初值装入定时器1。voidtimer1(void)interrupt3using2{TH1=0x0c;TL1=0xdc;
此文档下载收益归作者所有