• 读者文摘
  • 美文摘抄
  • 短文摘抄
  • 日记大全
  • 散文精选
  • 感恩亲情
  • 人生感悟
  • 智慧人生
  • 感悟爱情
  • 心灵鸡汤
  • 实用文档
  • 名人名言
  • 伤感文章
  • 当前位置: 蜗牛文摘网 > 人生感悟 > 如何实现music播放 musican是什么意思

    如何实现music播放 musican是什么意思

    时间:2019-02-04 05:36:38 来源:千叶帆 本文已影响

      在单片机应用的设计上,很多方案都会用到蜂鸣器,大部分都是使用蜂鸣器来做提示或报警,比如按键按下、开始工作、工作结束或是故障等等。但在某些方面,如有些教学实验中,加进一些音乐,一定会趣味横生。
      产生音乐效果的硬件并不复杂,只要连上一块功放集成块,再接上扬声器即可。关键是如何给功放集成块一个动听的音乐信号,即如何给单片机一个能产生音乐的程序。这里介绍一下使用sonix8位单片机输出音乐的原理及一些软件实现方法。
      在介绍软件实现方法之前,先介绍一些蜂鸣器驱动的知识。
      1.基本原理
      SONIX MCU SN8P1XXX系列和SN8P2XXX系列大多数型号微控器都集成了Buzzer功能,它是一种特殊的PWM(占空比固定的(1/2)),可以通过P5.3/P5.4口输出,从而直接驱动蜂鸣器发声。下面为一个原理图。
      有些芯片没有Buzzer功能,也可通过反转I/O口的方式实现音乐播放。
      上面已经讲过,要利用无源Buzzer实现一首歌曲的播放,需要控制两个量:声音的频率和发音的时间。在程序中,用户可以通过两个定时器来实现,分别用来控制音调和音长,也可以通过一个定时器同时控制音调和音长。
      1.1 音调的实现
      从简谱曲调对照表(表1)中可以查找每个音符在每种调下所对应的曲调字母,如 “3(mi)”在F调下对应的曲调字母为“A”。当然有些音的效果是无法作出能识别的TAB。
      如果使用sonix8位单片机里面集成的Buzzer功能,Buzzer输出的方波频率是TCn计数溢出时间间隔的2分频 ,TCn每溢出1次buzzer(通过P5.4口输出)的电平翻转一次,TCn溢出两次buzzer输出一个方波,如下图3-2所示。我们仍以上面例子中查到的880Hz为例,由上图TC0OUT和TCn溢出的倍数关系知道,要输出各音调,只要控制TC0的溢出时间即可,即我们已将声波振动次数的多少转化为通过控制Timer溢出所产生的不同频率来实现音调。
      TC0C初值的计算公式:
      TC0C initial value = 256 - (TC0 interrupt interval time * input clock)
      例如,中音3(mi) 的频率为800Hz, 其周期T = 1/ 800 = 1250μs ,其半周期为1250/ 2 = 625μs。如用晶振频率为4MHz 的单片机,时钟分频数为4,定时器分频数选择16,则装入的定时数值计算如下:
      TC0C initial value = 256 - (625us * 4M/4/16)
       =216
      =D8H
      其它音符类似,程序中只要将该音符频率常数所对应的十六进制数放进一个表格,依次查表即可获得相应音符的音调。
      如果使用普通IO,则可以在每次TC0溢出时翻转IO口的电平来输出频率。
      1.2 音长的实现
      音长就是一个音符所持续的时间,一般来说,在每首曲谱的前面都会给出音速,如 中速,低速,每分钟xx(如94拍)等。音符的长短:简谱中用一条横线“-”在音符的右面或下面来标注引得长短。
      下面列出了常用音符和它们的长短标记:
      在程序中,我们若以T0定时器来控制音长,可结合程序,将乐谱中最小节拍数作为基时,如上表中,做一个160ms的定时,程序中只需要将所有音符所对应的节拍数转换为基时的倍数放进对应的表格,依次查表即可。
      1.3 音乐的响度
      改变输出频率的占空比可以调整音乐的响度,也即我们经常说的声音的大小。占空比越大,声音越响;占空比越小,声音也越小。若想在程序中输出不同响度的音乐,可以考虑调整输出频率的占空比。由于sonix集成的Buzzer占空比固定为1/2,因而用户可以考虑使用普通IO或者PWM。
      2.实现方法
      1. 通过普通IO口电平翻转来实现输出特定频率;
      如要输出一个F调的3(mi)中音,查表知其频率为880Hz,同样可以先将频率转换为时间,通过在定时器溢出时翻转IO口(任意普通IO口即可)的电平来实现输出频率,然后再控制其输出这个频率的时间长短。
      优点:可使用于没有buzzer资源的单片机;
      缺点:此方法仍需使用定时器资源,软件处理上较麻烦。
      因而,若用户使用时需要输出音乐,建议尽量选择具有buzzer资源的单片机。
      Demo程序请参考:Tone_IO_demo_1
      2. 通过1个定时器来实现;
      使用一个定时器资源,也有多种处理方法,音调和音长都用一个定时器,也可以使用一个定时器控制音调,用指令延时实现音长。
      优点:可使用于定时器资源较少的场合;
      缺点:虽然资源较少(1个定时器),但程序若处理不好,延时可能不太准确,可扩展性也不高。
      Demo程序请参考:Tone_1timer_demo1, Tone_1timer_demo2
      3. 通过2个定时器来实现,1个控制音调,1个控制音长;
      最常见的方法就是利用Sonix的buzzer资源,实现音调输出,再使用另一定时器,实现音长输出。
      优点:此种方法编程起来思路较为清晰,软件实现也较为简单,输出音乐较准确;
      缺点:使用资源较多(2个定时器)。
      因而,此方法可使用于具有2个定时器的场合。
      Demo程序请参考:Tone_2timer_demo1, Tone_2timer_demo2
      4. 使用PWM输出音乐
      前面所讲到的buzzer就是一种占空比固定为1/2的PWM。PWM主要是用来改变占空比的大小,但其频率也是可控可调的。更多信息请参考AN030---PWM输出多种频率。
      结束语:
      通过以上的介绍,用户对如何使用sonix单片机输出音乐有了较清楚的概念,在使用单片机输出音乐方面,希望本文对您有帮助。

    相关热词搜索:如何实现播放music

    • 名人名言
    • 伤感文章
    • 短文摘抄
    • 散文
    • 亲情
    • 感悟
    • 心灵鸡汤