[Kinetis] [YL-KL26Z]播放音乐

[复制链接]
 楼主| 侣行天下 发表于 2015-12-18 20:21 | 显示全部楼层 |阅读模式
YL-KL26Z带有DAC,DAC输出通过LM386驱动小喇叭。所以我们可以用它播放音乐。不过SD卡驱动还没有来得及看,所以先还是试试PWM方式播放音乐。

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

  2. PwmOut PWM(PTE30);
  3. AnalogIn POT(PTE20);

  4. #define C4 3793
  5. #define D4 3405
  6. #define E4 3304
  7. #define F4 2863
  8. #define G4 2551
  9. #define A4 2272
  10. #define B4 2025

  11. #define C5 1911
  12. #define D5 1703
  13. #define E5 1517
  14. #define F5 1432
  15. #define G5 1276
  16. #define A5 1136
  17. #define B5 1012

  18. #define C6 956
  19. #define D6 851
  20. #define E6 758
  21. #define F6 716
  22. #define G6 638
  23. #define A6 568
  24. #define B6 506

  25. #define P  1


 楼主| 侣行天下 发表于 2015-12-18 20:21 | 显示全部楼层
  1. const uint16_t music[] =  
  2.         {
  3.             8,
  4.             4, A5, 2, A5, 2, G5, 4, E5, 2, E5, 2, D5, 8, C5, 8, C5,
  5.             4, E5, 2, E5, 2, D5, 4, C5, 2, A4, 2, G4, 8, G4, 8, G4,
  6.             4, G4, 2, G4, 2, A4, 4, G4, 2, G4, 2, A4, 4, C4, 2, C4,
  7.             2, D4, 4, E5, 4, G5, 4, A4, 2, A4, 2, G4, 2, E5, 2, D5,
  8.             4, C5, 8, D5,
  9.             0, 1
  10.         };

  11. uint16_t i, dat;
  12. uint16_t LEN;
  13. double T;

  14. int main()
  15. {
  16.         LEN = sizeof(music)/2;
  17.   T = music[0];
  18.   i = 0;
  19.   
  20.   while(1) {
  21.     if(i >= LEN/2)
  22.       i = 0;
  23.     dat = music[i*2+2];
  24.     if(dat != P)
  25.       PWM.period_us(dat);
  26.     else
  27.       PWM.period_us(10);
  28.     PWM = POT;
  29.     wait(music[i*2+1]/T);
  30.     i++;
  31.   }
  32. }

效果虽然不算太好,但是熟悉的旋律还是可以听得出来的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

265

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部