打印
[Kinetis]

[YL-KL26Z]播放音乐

[复制链接]
649|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
侣行天下|  楼主 | 2015-12-18 20:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
YL-KL26Z带有DAC,DAC输出通过LM386驱动小喇叭。所以我们可以用它播放音乐。不过SD卡驱动还没有来得及看,所以先还是试试PWM方式播放音乐。

数组的第一个字节用来调整播放速度,后面的数据两个字节一组,一个是时间,后面一个是频率。音量可以通过电位器调整。
#include "mbed.h"

PwmOut PWM(PTE30);
AnalogIn POT(PTE20);

#define C4 3793
#define D4 3405
#define E4 3304
#define F4 2863
#define G4 2551
#define A4 2272
#define B4 2025

#define C5 1911
#define D5 1703
#define E5 1517
#define F5 1432
#define G5 1276
#define A5 1136
#define B5 1012

#define C6 956
#define D6 851
#define E6 758
#define F6 716
#define G6 638
#define A6 568
#define B6 506

#define P  1


相关帖子

沙发
侣行天下|  楼主 | 2015-12-18 20:21 | 只看该作者
const uint16_t music[] =  
        {
            8,
            4, A5, 2, A5, 2, G5, 4, E5, 2, E5, 2, D5, 8, C5, 8, C5,
            4, E5, 2, E5, 2, D5, 4, C5, 2, A4, 2, G4, 8, G4, 8, G4,
            4, G4, 2, G4, 2, A4, 4, G4, 2, G4, 2, A4, 4, C4, 2, C4,
            2, D4, 4, E5, 4, G5, 4, A4, 2, A4, 2, G4, 2, E5, 2, D5,
            4, C5, 8, D5,
            0, 1
        };

uint16_t i, dat;
uint16_t LEN;
double T;

int main()
{
        LEN = sizeof(music)/2;
  T = music[0];
  i = 0;
  
  while(1) {
    if(i >= LEN/2)
      i = 0;
    dat = music[i*2+2];
    if(dat != P)
      PWM.period_us(dat);
    else
      PWM.period_us(10);
    PWM = POT;
    wait(music[i*2+1]/T);
    i++;
  }
}

效果虽然不算太好,但是熟悉的旋律还是可以听得出来的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

265

帖子

0

粉丝