这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 基础知识每日一题——第五十四题

共10条 1/1 1 跳转至

基础知识每日一题——第五十四题

高工
2014-08-25 10:02:07     打赏
活动简介:

“每日一题”是EEPW参考西电XDLab社推出的旨向初学者普及基础知识的一项活动,每天在此帖内公布“每日一题”的题目。大家可以根据自己的理解对题目进行回答和相互讨论,我们鼓励大家积极发言。第二天会给出参考答案。每天一帖,所有的题目都将汇集至此,以期方便大家查找。

 

活动宗旨:

活动目的在于通过“每日一题”让大家每天进步一点点,增强大家的基础知识,提高大家对电子制作的兴趣。我们鼓励大家积极发言,如果不懂、是菜鸟,请积极发问;如果懂、是大神,请慷慨解囊。


        今日题目:如何用单片机实现音乐的播放(以生日歌为例)?





基础知识每日一题

专家
2014-08-25 10:11:54     打赏
2楼

这个比较给力哦。

不过原理上是这样的:用一个定时器决定音调,用一个定时器决定延时,也就是咱们说的节拍。这样,可以实现简谱了。

为了听声音,还需要用单片机管教驱动蜂鸣器,通过前面两个定时器实现管脚高低电平和间节拍。就能听到咱们所说的“音乐”了。


工程师
2014-08-25 10:18:33     打赏
3楼
需要产生等效正弦波吗

高工
2014-08-25 10:24:50     打赏
4楼
就是用定时器模拟音乐的频率和节拍。生成的波形应该是一些方波信号。只能实现简单的音乐形式。当时我做的时候感觉很好玩。输出的效果只能说是一般吧。

高工
2014-08-25 14:39:43     打赏
5楼
应该是不同的音调对应不同的频率   就是用单片机的I/O产生不同频率的PWM波形    就能够产生悦耳动听的音乐出来了

助工
2014-08-25 16:26:08     打赏
6楼

这个没有什么难度,GPIO 接个蜂鸣器就得,写点 12345671 的程序就可以了嘛


高工
2014-08-26 10:18:58     打赏
7楼

  /* 名称:播放音乐

  说明:程序运行时播放生日快乐歌,未使用定时器中断,所有频

  率完全用延时实现

  */

  #include

  #define uchar unsigned char

  #define uint unsigned int

  sbit BEEP=P3^7;

  //生日快乐歌的音符频率表,不同频率由不同的延时来决定

  uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,

  212,212,106,126,159,169,190,119,119,126,159,142,

  159,0};

  //生日快乐歌节拍表,节拍决定每个音符的演奏长短

  uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24,

  9,3,12,12,12,12,12,9,3,12,12,12,24,0};

  //延时

  void DelayMS(uint x)

  {

  uchar t;

  while(x--) for(t=0;t<120;t++);

  }

  //播放函数

  void PlayMusic()

  {

  uint i=0,j,k;

  while(SONG_LONG[i]!=0||SONG_TONE[i]!=0)

  { //播放各个音符,SONG_LONG 为拍子长度

  for(j=0;j

  {

  BEEP=~BEEP;

  //SONG_TONE 延时表决定了每个音符的频率

  for(k=0;k

  }

  DelayMS(10);

  i++;

  }

  }

  void main()

  {

  BEEP=0;

  while(1)

  {

  PlayMusic(); //播放生日快乐

  DelayMS(500); //播放完后暂停一段时间

  }

  }



菜鸟
2014-08-26 16:51:43     打赏
8楼

我想知道2个定时器怎么实现频谱的?

定时器不是有优先级吗?搞不懂


菜鸟
2014-09-05 19:01:43     打赏
9楼
直接将音乐转化成一组数组,然后单片机取数组驱动蜂鸣器,不过这样的声音比较难听。。。。

高工
2020-08-14 15:20:32     打赏
10楼

学习学习


共10条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]