使用单片机(或单板机)吹打大概是无线电爱好者感兴趣的问题之一。本文从单片机的根本发间试验动身,谈谈音乐程序的规划原理,并给出详细实例,以供参阅。
单片机的根本发音试验
咱们知道,声响的频谱规模约在几十到几千赫兹,若能使用程序来操控单处机某个口线的“高”电平或低电平,则在该口线上就能发生必定频率的矩形波,接上喇叭就能宣布必定频率的声响,若再使用延时程序操控“高”“低”电平的持续时刻,就能改动输出频率,然后改动腔调。
例如,要发生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,则发生相应的中止作用。
为了发生手弹的节奏感,在某些音符(例如两个相同音符)音刺进一个时刻单位的频率略有不同的音符。
程序框图如图2所示。
下面给出程序序请单,可直接在TD-III型学习机上演奏,对其它不同类型的学习机,只需相应地改动一下地址即可。本程序演奏的是民歌“八月桂花遍地开”,C调,节奏为94拍/分。读者也能够自行找出一首歌,按表1和表2给定的常数,将乐曲翻译成码表输入机器,而程序不变。本试验办法简洁,即便不明白音乐的人,将一首生疏的曲子翻译成代码也是易事,和着机器的演奏学唱一首歌曲,其趣味无穷。
硬件衔接阐明:
随意找一个仿真机或许什么单片机试验板,只要能作业的就行,将程序输入,运转,然后找个音箱(你计算机周围应当就有一对吧)拨出插头,插头的前端接在P1。0上,后边部分找根线接单片机的地,就应当有声了,然后怎样改善硬件衔接便是你的事了。