SPCE061A做的小型电子琴
扫描二维码
随时随地手机看文章
本篇文章将介绍使用SPCE061A来做一个电子琴,并且提供源代码。如果您有凌阳大学计划的实验箱,那将很好完成,就是接几根线的问题,要是没有也不用着急啦,拿一块SPCE061A芯片,接个键盘和音频放大电路就可解决问题,是不是很easy!
图一 整体框图
我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个端口的“高”电平或低电平,则在该端口上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。乐曲中,每一音符对应着确定的频率,这个小制做是采用凌阳SPCE061A的DAC输出来实现,具体做法是,先建立一个有两百个数据的音频数据表,当按不同的按键即以不同的频率往DAC上送数据,从而达到输出不同音符的目的,为了达到电子琴的效果,当然还得在程序方面稍作修饰了,整体框图如图一所示。下面将就具体硬件电路和程序作一一说明。
硬件电路设计
键盘控制电路:
在这里采用矩阵式排列键盘,如图二所示,这样可以合理应用硬件资源,把16只按键排列成4*4矩阵形式,用一个8位I/O口控制如图所示。把键盘上的行和列分别接在IOA0~IOA3和IOA4~IOA7上。
图二 按键控制电路
先置IOA0~IOA3为带数据缓存器的高电平输出,置IOA4~IOA7为带下拉电阻的输管脚,此时若有键按下,取IOA4~IOA7的数据将得到一个值,把此值保存下来,再置IOA4~IOA7为带数据反相器的高电平输出,置IOA0~IOA3为带下拉电阻的输入管脚,此时若键仍没弹起,取IOA0~IOA3的数据将得到另一个值,把这两个值组合就可得知是哪个键按下了,再通过匹配得到键值,实际上在这个小设计中只用到了8个按键,但考虑到为广大电子爱好者自由发挥预留了八个按键,您可以自己设计加入别的音符或是别的好玩的啊。
音频放大电路:
凌阳SPCE061A 单片机 自带双通道DAC音频输出, DAC1、DAC2转换输出的模拟量电流信号分别通过AUD1和AUD2管脚输出, DAC输出为电流型输出,经LM396音频放大,即可驱动喇叭放音,放大电路如图三(只列出了DAC1,DAC2类似)。在DAC1、DAC2后面接一个简单的音频放大电路和喇叭就能实现语音播报功能,这为单片机的音频设计提供了极大方便,音频的具体功能主要通过程序来实现。