既然单片机能发音了,我们就趁热打铁,做一个简易的按键式电子琴:利用开发板上K1~K4键,分别发出do、le、mi、fa四个音,按下即发音,发音的时长由按键按下的时长决定,每次只能按下一个一个键,发出一个音。
基于前例的设计,我们根据do、le、mi、fa四个音的频率,可以换算出周期,继而计算出每个音的定时初始值,可以使用STC公司提供的软件直接生成得到,该初始值有低8位和高八位组成,我们就把每个音调的初始值分别做成一个数组,在使用的时候根据按键直接调用对应数组的值就很方便了。接着要做的事情就是在主程序循环里查按键,然后根据按下的键查定时初值。需要注意的是,在while(1)主循环里各按键的检测应该是互斥的,以确保只响应一个按键发音。最后就是在定时中断程序里对蜂鸣器输出取反和重装初值。请大家按照这个思路先作些设计和调试,然后结合本节的视频讲解做些总结和分析。
本节使用的电路
结合目前已完成的设计程序,请大家举一反三,继续把其他几个音调做进去,然后找一个曲谱弹一弹,犒劳一下自己。
讲到这里,笔者突然想到2010年左右流行过一整子跳舞毯,就是那种家庭健身的新玩意,毯子上面有些区域,每个区域踩上去能发给电脑信号,接着在音箱里就发出对应的音调,当然他还会播放伴奏音,跳舞的人看着电脑屏幕的提示去踩毯子上的发音区域,在伴奏音的带动下,跳舞者有节奏地去踩,然后就发出声音,这样一边跳舞一边听自己用脚弹跳的歌曲,也是别有一番乐趣。大家试想,跳舞毯的本质原理跟我们这个案例是否也是一致的呢?进一步地,你是否也能使用这样的原理创新设计出一些新的装置或产品,以大众的丰富娱乐文化生活需要呢?创新就在身边!学以致用才是正道!

