利用AT89C52单片机设计音乐播放器,主要是运用它的定时器产生不同的频率,通过输出端输出电平到扬声器播放音乐。
音乐由音符组成,不同的音符由不同的频率产生,用单片机的定时器产生与音符相同的频率,这样就能播放音乐。该播放器具有电路结构简单、成本低廉、功能强大等优点。
产生不同的音频需要有不同固定周期的脉冲信号,要产生音频脉冲,只要算出某一音频的周期T,然后将周期除以2,得到半周期的时间。用单片机内部定时器TD使其工作的工作方式l下,通过初始化TLO、THO的值,以计时半周期。每当计时时间到后,就将输出脉冲的P1.0口反相,然后重复计时此半周期时间,再对P1.O口反相,就可在单片机Pl.0引脚得到该频率的脉冲。
Pl.0引脚接音频功放,然后输出到扬声器,就可以播放音乐了。
单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出多种音色的声音。因此单片机奏乐只需弄清楚两个概念,即“音调”和“节拍”。
音调表示一个音符唱多高的频率,音乐中有7个基本音符DO、RE、Ml、FA、so、LA、SI.再加上5个半音Do#、RE#、FA#、s0#、LA#共12个音符,此外还有低、中、高3种音,一共有36个音调,即36个频率,其对应频率见下表。
设单片机晶振为12MHz.每计数一次用1μS。要产生低音LA,其频率为440Hz,周期T=1/440=2273μs,半周期时间为1137s.因此,计数器每计数1137次将Pl.0口反相,即计数初值设为THL=64399.TH0=256.TL0=143就可以得到低音LA。
节拍表示一个音符唱多长的时间,如果l拍为0.4s,1/4拍就是O.ls。
只要设定延迟时间,就可求得节拍的时间。假设1/4拍为ldelay,则l拍应为4delay,以此类推。所以只要求得1/4拍ldelay时间,其余的节拍就是它的倍数。在此将1/4拍的延时时间设为120ms,其他节拍是这个基本延时的整数倍,节拍码如下表所示。
timero Ointerruptl,对应不同音符,此函数将产生相应频率的脉冲