|
本帖最后由 dcexpert 于 2015-2-18 21:03 编辑
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
- 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++;
- }
- }
复制代码
效果虽然不算太好,但是熟悉的旋律还是可以听得出来的。
|
|