单片机实例分享,触摸式电钢琴
我这次带来的是一款触摸式电钢琴,细心的读者可能会注意到,我用的词是“电钢琴”而不是“电子琴”,这两者有区别吗?我的回答是肯定的,因为这正是本作品的亮点所在。用单片机演奏音乐大家肯定都不会陌生,用单片机内部的定时器,送入不同的频率,每一个频率对应着一个音调,然后按照事先编排好的顺序驱动蜂鸣器发声,就可以演奏出音乐了。至于电子琴,只需要把不同的频率映射到对应按键上即可。之所以说是电子琴,是因为这种方法只能演奏出单调的方波音频。想不想让声音不再单调,而是发出动听的钢琴音色呢?如果想的话,请拿出你的热情,打开你的电烙铁开关,跟我一起往下制作吧!
制作所需的元器件如表9.1所示。本着精简制作的原则,笔者用到的都是很普通的元器件,数量也很少,所以硬件制作的难度不是很大。连接部分则是过锡走线加飞线的方法,烙铁温度在350℃左右即可。电路图如图9.1所示,值得说明的一点是,图中的矩阵触摸按键这里只画出了1组,其实有3组,公共端分别与P0.0、P2.2、P2.1连接。剩下部分的电路都很明了,有创造力的朋友看电路图自行发挥就好,新手可以参考一下我的布局。
表9.1 制作所需的元器件
图9.1 电路原理图
先把打印好的琴键图片裁好,用双面胶贴在洞洞板上,如图9.2所示。
图9.2 在洞洞板上贴琴键图片
怎么样,是不是很有电钢琴的样子?你说触摸按键在哪里?别着急,让我请出下面这位特别来宾——钉书针。为了整个制作的美观和手感,触摸点的选取费了我很大的心思,试了很多种导体都无法达到满意的效果,直到有一天无意中把钉书针掉在了洞洞板上,我发现它那细长又导电的身体,长度刚刚好可以插进洞洞板,才有了这个有趣的设计。如图9.3所示,按照琴键的位置插好钉书针,并在背面压紧。
以此类推,完成36个键不会像你想象的那么枯燥,美妙的琴声在等着你。之后用双面胶把扬声器粘在板子正面,并完成扬声器导线、单片机、下载口、拨动开关、耳机插座、LED、功放芯片以及电解电容的焊接。焊接好的样子如图9.4所示。
图9.3 插入钉书钉
图9.4 焊接好的琴键
接下来是触摸按键矩阵与单片机的连接,我的方法是过锡加飞线。先把单片机正下方的一组矩阵按键与两边矩阵的公共端过锡连接到I/O口上(见图9.5),然后用免刮漆包线把两侧矩阵要与I/O连接的地方同中间过锡部分连接起来(见图9.6)。
图9.5 洞洞板焊接面的过锡
图9.6 用免刮漆包线进行飞线连接
到这里,原本硬件制作部分就应该完成了,但是在后期测试的过程中,总会有上电时乱响的情况。仔细思考后,发现了问题所在:因为触摸按键是基于增强型51单片机的I/O口高阻状态(下文会详细介绍),这种状态对电流的波动很敏感,会受到电源杂波的干扰。所以在正极和地之间加了一个0.1μF电容,效果有很大好转。顺便一提,使用电池供电效果最好。
到此就剩下载程序了,可以到qq群657864614下载相关程序,然后用STC-ISP软件下载到单片机里。注意,如果单片机是新的或者上一次使用连接了晶体振荡器的话,要先连接好晶体振荡器才能下载程序。软件设置如图9.7所示。
图9.7 软件设置
如果我现在结尾,肯定有人说我不地道,因为大家最想听的软件原理我还没有说明。别急,听我娓娓道来。
先说触摸吧,前面提到I/O口的高阻状态,在这种状态下I/O口对电流很敏感,那是不是只要接触I/O口,就能用人体的生物电完成触摸了呢?哎,好事多磨,虽然它很敏感,但是生物电的强度还是不能稳定地被感应。怎么办呢?冷静下来想一想,只要再请一个强推状态的I/O口来帮忙就好办了。所谓强推状态,就是比普通准双向I/O口上拉能力强很多的一种状态。这样,在我们同时触碰这两个I/O时,强推I/O口的电流就通过皮肤流入高阻状态的I/O口,从而读到电平变化,实现触摸操作。
这么好用的功能怎么设置呢,大家可以参照STC数据手册里的设置方法。当我们用C语言设置I/O状态时,只需向P*M1、P*M0赋值(0x开头的16进制格式)即可,如图9.8所示。
图9.8 用C语言设置功能
接下来到了发音部分。把要播放的音频先在电脑上用专业的音频软件转换成 ASCII Test 数据,稍加改造变成数组后放入单片机 60KB 的 ROM 里,配合 PWM 解码程序,一个在你进门时甜美地说出“你好,欢迎光临”,一个则是在你触摸琴键后发出钢琴的音色。
专业的音频软件有很多,我用的是一款名为“Adobe Audition 3.0”的软件。简洁的界面、强大的功能,都是我选择它的原因。接下来要讲的是使用方法,准备好从网上下载到的音频,你可以用鼠标拖入音轨中,也可以对着一条空音轨单击“右键→插入→音频”来把你的音频放入音轨中。这时音轨可能没有紧贴前端,这样会制造出一段空白音频,这部分不但影响正常工作,还很占空间,用右键点住它向前拖动,直到与前端紧贴,如图9.9所示。
之后双击“音频”,进入编辑模式。在这个模式下,我们要做的是删除空白和扩大音量。向上滚动滑轮,让时间间隔变小,前端的空白就会变得明显,去除它的原因跟上面一样。我们用左键框选出空白部分,然后单击“右键→剪切”来删除空白,如图9.10所示。
图9.9 Adobe Audition3.0界面
图9.10 删除空白音频
随后按“Ctrl+A”快捷键全选波形,单击左边效果栏里的“放大”,调整好合适的放大倍数后,单击“确认”,以完成放大操作,见图9.11。
图9.11 扩大音量
单击左上角的“文件→另存为”,这时会弹出一个选择格式和保存路径的窗口,下方的保存类型我们选择“ACW波形(*.wav)”,单击下方的选项,滤波器处改为“PCM”,属性处改为“8.000kHz,8位,单声道”,然后“确定→保存”,如果弹出窗口点击确定即可,见图9.12。这样就把音频转成了8位单声道,为后面的数据表文件做好了准备。
图9.12 保存音频文件
接下来软件会自动载入刚刚保存的音频,再单击左上角的“文件→另存为”,在弹出的窗口里选择“ASCII 文本数据(*.txt)”,然后单击下方的选项,把两个勾选框的对勾都点掉,再单击“确定→保存”,就完成了ASCII Test数据的转换,如图9.13所示。
图9.13 ASCII Test数据转换
这样重复36次之后,我们就得到了36个音调的8位音频数据了。打开电钢琴的工程文件,在程序的C语言文件下方有36个用音调名命名的数据表文件。只要把刚刚生成的数据复制到对应数据表中就大功告成了。
不过要注意开始处数组的定义和每个数据后的逗号,编译器可不会被你的急切所打动。我这里只是抛砖引玉,感兴趣的话可以在网上找到更多乐器的音色,让它变得更好玩、更强大。在茶余饭后悄悄拿出它,为家人弹奏一曲。简单的儿歌,或者经典的旋律,不管你音乐水平的高低,总能在家人欢乐的笑声中感受到电子制作带给你的幸福!
■我的淘宝店铺:首页-数码达人小李-淘宝网,主打数码电脑周边产品,性价比高,发货快,服务好,品质过硬,现有满减优惠活动,赶快行动起来吧!小米车载无线充电器 苹果安卓全兼容手机无线快充通用 导航支架-淘宝网
usb迷你电风扇 学生宿舍床上静音小夹扇 办公桌面无声风扇-淘宝网
动漫鼠标垫胸部 3D硅胶护腕手腕垫 二次元美女鼠标垫 宅男必备-淘宝网
2013款雷蛇鼠标炼狱蝰蛇精英版 绿光幻彩有线 绝地求生专用-淘宝网
得力激光ppt翻页笔无线 教师用遥控笔 30米遥控距离 正品保障-淘宝网
单片机语音播报怎么做?语音模块原理及程序编写思路
我最欢就是做带语音播报的产品,写程序的过程太枯燥了。
有些产品一开发就是几个月,整个过程都跟冷冰冰的LED、蜂鸣器、按键、LCD屏打交道难免有些寂寞。
加上语音就不同了,录制好一个好听的妹子声音,不但可以提升整个产品的逼格,自己也满满的成就感。
今天就来聊聊带语音的产品怎么做。
实际产品中,用单片机播放语音方案有很多种,唯一没有开发板那种,因为成本各方面都不满足产品需求。
另外就是加一个语音芯片,如果利润高的产品会优先使用这种,一个几块钱还能接受。
还有就做软解码的,就是把语音文件解码成喇叭能够识别的PWM和DAC数据,这种技术难度最大,对工程师编程水平是一个考验。
虽然难度大,但是成本低,不需要额外增加语音芯片,老板的最爱,反正工程师掉点头发对公司又没影响。
软解码大概在6,7年前做电子狗的时候玩过一次,大概原理就是把语音文件合并成bin文件,烧录到外置的flash里面,做好每条语音的地址映射。
用单片机读取Flash的数据并解码,然后转换成PWM或者DAC经过功放输出到喇叭。
这种一般要有个写上位机的配合,以前市面上没有在把语音文件合并成bin文件的工具,现在好像有了。
时间相隔太久,很多细节记不清楚了,后续如果还能找到资料再跟大家分享。
今天无际单片机编程给大家讲后面我做过的一种方法:用语音芯片 。
这是语音芯片的一些介绍:
我们需要关注的就是,这个芯片对语音长度的支持分别有55s、25s、85s,如果产品语音少还是挺合适的。
这种芯片如果语音少的直接用芯片内部的Flash,如果语音多了就需要外挂一个Flash来存储语音数据。
一般每个产品的语音都是不一样的,那怎么把我们想要的语音通过这个语音芯片播放出来呢?
想实现这个功能要经过以下几个步骤:
通过软件把语音文案转成mp3格式语音文件,类似的软件有很多,比如说科大讯飞。把语音文件提供给芯片方,让他们帮你定制。拿到样品后就是焊接到自己板子上,然后根据芯片规格书写控制时序程序,每条语音都对应了一个地址,只要把地址数据写入芯片,芯片就会自动播放指定语音。整个过程是不是非常简单?
除了播放语音功能以外,还有一些附加功能,比如说静音,音量调节、循环播放等等。
下面来看下芯片的引脚定义
一般使用3根线来跟单片机通讯。
PA0/SDA: 数据线
PA1/SCL: 时钟线
PA2: 忙碌线,当有语音播报的时候,该引脚为低电平。
芯片的控制时序如下:
不难发现,数据开始之前SCL需要先产生5ms的低电平同步头,然后数据在SCL线的上升沿被读取,一共读取8位,也就是1个字节。
如果你不会写这个时序也没关系,芯片原厂都有提供例程。
相关问答
单片机 speaker是什么?单片机speaker是一种用于输出声音的装置,它通常由一个电磁线圈和一个振动膜组成。当单片机通过控制电流流过电磁线圈时,线圈会产生磁场,进而使振动膜振动,从...
单片机 蜂鸣器除了那种调的声音,还能发出人说话的声音吗?单片机蜂鸣器一般用于发出简单的音调和警报声,不能直接用于模拟人的语音。然而,通过与单片机的组合使用,可以实现类似人说话的声音。具体实现方法是,在单片...
单片机 中按键扫描程序,s4按下 扬声器 响一声,s2响两声,s5响三...按键接的是哪个口?设置一个变量(xiangnum),只要在按下相应的按键按下,这个变量就得到响声值,如S4按下xiangnum=1;如果S2按下xiangnum=2;然后再把这个变量给响...
肿么使用 单片机 控制蜂鸣器发声-ZOL问答两种蜂鸣器用单片机的控制方法是一样的,对于无源的,要求单片机送出一组断续的音频信号,使蜂鸣器按要求发声,对于有源蜂鸣器,要求单片机送出一组断续的电脉冲信号...
单片机 菜鸟,蜂鸣器音调怎么控制请教各位大神-ZOL问答有源蜂鸣器控制比较简单用单片机输出PWM+电容滤波对于新手来说,可以试试用定时器配合中断来控制。设定一个基础频率,然后通过计数增减来调整延时时间,这样就能...
汽车CD机通电没声?出现这种情况无非四种可能一功放,二声音处理块,三单片机,四声音输出的电阻电容有问题,功放坏的可能在70%吧,功放一般25个脚,贴在散热器上,一般散热器就是...
单片机 能用于哪些行业?这个我有发言权,我就是做单片机嵌入式软件开发的。单片机作为电子制造设备用于数据信息流的采集、传输与控制的载体应用于各行各业中。医疗器械方面,医院的检...
51 单片机 ,npn三极管控制蜂鸣器为何不响-ZOL问答如果电路其他部分都正常,可能是单片机输出的信号太弱或不稳定。试着检查一下51单片机的I/O口是否正确配置为输出模式,并且提供足够的驱动电压。如果还是不行...
80c51 单片机的 EA信号有什么功能?在使用80C31时,EA信号引脚如...EA信号是80C51单片机中的一个引脚,它具有特殊的功能。在使用80C31时,EA引脚需要经过处理才能正常使用。首先,EA引脚是一个复位信号。当EA引脚为高电平时,单片...
蜂鸣器不响求指教,我用STC89C52 单片机 ,是低电平响吗,为何高...有源蜂鸣器直接接上额定电源(新的蜂鸣器在标签上都有注明)就可*续*声;而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能发声。你的是无...