使用单片机(或单板机)吹打大概是无线电爱好者感兴趣的问题之一。本文从单片机的根本发间试验动身,谈谈音乐程序的规划原理,并给出详细实例,以供参阅。
单片机的根本发音试验
咱们知道,声响的频谱规模约在几十到几千赫兹,若能使用程序来操控单处机某个口线的“高”电平或低电平,则在该口线上就能发生必定频率的矩形波,接上喇叭就能宣布必定频率的声响,若再使用延时程序操控“高”“低”电平的继续时刻,就能改动输出频率,然后改动腔调。
例如,要发生200HZ的音频信号,按图1接入喇叭(若属暂时试验,也可将喇叭直接接在P1口线上),试验程序为:
其间子程序DEL为延时子程序,当R3为1时,延时时刻约为20us,R3中寄存延时常数,对200HZ音频,其周期为1/200秒,即5ms。这样,当P1.4的高电平或低电平的继续时刻为2.5ms,即R3的时刻常数取2500/20=125(7DH)时,就能宣布200HZ的腔调。将上述程序键入学习机,并继续修正R3的常数能感到腔调的改动。乐曲中,每一音符对应着确认的频率,表1给出C调时各音符频率及其对应的时刻常数。读者能依据表1所供应的常数,将其16进制代码送入R3,重复操练领会。依据表1能奏出音符。仅这还不行,要精确奏出一首曲子,有必要精确地操控乐曲节奏,即一音符的继续时刻。
音符的节拍咱们能用守时器T0来操控,送入不一样的初值,就能发生不一样的守时时刻。便如某歌曲的节奏为每分钟94拍,即一拍为0.64秒。其它节拍与时刻的对应联系见表2。
但时,因为T0的最大守时时刻只能为131毫秒,因而不可能直接用改动T0的时刻初值来完成不一样节拍。咱们能用T0来发生10毫秒的时刻基准,然后设置一个中止计数器,经过判别中止计数器的值来操控节拍时刻的长短。表2中也给出了各种节拍所对应的时刻常数。例如对1/4拍音符,守时时刻为0.16秒,对应的时刻常数为16(即10H);对3拍音符,守时时刻为1.92秒,对应时刻长数为192(即C0H)。
咱们将每一音符的时刻常数和其对应的节拍常数作为一组,按次第将乐曲中的一切常数排列成一个表,然后由查表程序顺次取出,发生音符并操控节奏,就能完成演奏作用。此外,结束符和体止符能分别用代码00H和FFH来表明,若查表成果为00H,则表明曲子终了;若查表成果为FFH,则发生对应的中止作用。为了发生手弹的节奏感,在某些音符(例如两个相同音符)音刺进一个时刻单位的频率略有不一样的音符。
下面给出程序序清单,可直接在TD-III型学习机上演奏,对其它不一样类型的学习机,只需对应地改动一下地址即可。本程序演奏的是民歌“八月桂花遍地开”,C调,节奏为94拍/分。读者也能自行找出一首歌,按表1和表2给定的常数,将乐曲翻译成码表输入机器,而程序不变。本试验方法简洁,即便不明白音乐的人,将一首生疏的曲子翻译成代码也是易事,和着机器的演奏学唱一首歌曲,其趣味无穷。