M i c r o p a s c a l / D e l p h i / 3 D П е ч а т ь
Posts tagged MP3
MP3 TF 16P Кодим. с++\pascal
2 года
by admin
in Без рубрики
Всем привет. Недавно столкнулся с тем что нужно было управлять звуками, подключил модуль , а кода нет чтоб управлять. Начал искать для Микропаскаля для PIC . Нашёл только для С++ , пришлось переделать , делюсь кодом со всеми.
PASCAL
Пример использования.
DFplayer(track, 0x0101); // 01 — папка 01-трэк
delay_ms(100); // выдержка
DFplayer(volume,30); // установка звука
delay_ms(100);// выдержка
DFplayer( play ,0);// команда проигрывание
- PROCEDURE DFplayer (F: WORD; DAT : WORD );
- PROCEDURE write_comand ( VAR _CMD :array[10] of char);
{
// FF+06+03+00+00+01=0109
// 0-0109=FE F7
// Sample #2: In case of the play command it would be:
// 0 1 2 3 4 5 6 7 8 9
// 0X7E, 0xFF, 0x06, 0X0D, 00, 00, 00, 0xFE, X, 0XEF
// 0x06+0X0D+0xFE= 100010001 (binary) ---> negate 011101110 =0xEE
// So your checksum for byte 8 is 0xEE
// 7E FF 06 0F 00 01 01 xx xx EF
// 0 -> 7E is start code
// 1 -> FF is version
// 2 -> 06 is length
// 3 -> 0F is command
// 4 -> 00 is no receive
// 5~6 -> 01 01 is argument
// 7~8 -> checksum = 0 - ( FF+06+0F+00+01+01 )
// 9 -> EF is end code
}
unit MP3_DF_PLAER;
CONST track = 0x03;//PARA DEFINIR EL NURO DE LA PISTA A REPRODUCIR DE 0 A 2999
CONST pause = 0x0E;//PAUSAR REPRODUCCION
CONST play = 0x0D;//REPRODUCIR
CONST next = 0X01;//SIGUIENTE PISTA
CONST previus = 0X02;//PISTA ANTERIOR
CONST volume = 0x06;//VOLUMEN DE AUDIO DESDE 0 HASTA 30
CONST volume_up = 0x04;//SUBIR VOLUMEN UN PASO A LA VES
CONST volume_down = 0x05;//BAJAR VOLUMEN UN PASO A LA VES
CONST USB_SD = 0x09;//ESPECIFICA DISPOSITIVO A LEER USB - SD
CONST EQ = 0x07;//Normal : Pop : Rock : Jazz : Classic : Bass
CONST repeat_track = 0X08;//REPITE LA PISTA INDICANDO CUAL DE 0 A 2999
CONST repeat_all_tr = 0X11;//REPITE TODAS PISTA
CONST sleep = 0x0A;//MODULO A DORMIR
CONST reset = 0x0C;//RECETEO DEL DFplayer mini
CONST randon = 0x18;//PISTAS ALEATORIAS
CONST stop = 0x16;//DETENER
CONST set_DAC = 0x1A;// SALIDA DAC ENCENDER - APAGAR
CONST set_repeat = 0x19;//REPRODUCCION REPETIDA DE LA PISTA ACTUAL ENCENDER - APAGAR
CONST _ON = 0x0000;//ENCENDER
CONST _OFF = 0x0001;//APAGAR
CONST _SD = 0x0002;//MEMORIA SD
CONST USB = 0x0001;//MEMORIA USB
CONST Normal = 0x0000;//EQUALIZADOR NORMAL
CONST Pop = 0x0001;//EQUALIZADOR POP
CONST Rock = 0x0002;//EQUALIZADOR ROCK
CONST Jazz = 0x0003;//EQUALIZADOR JAZZ
CONST Classic = 0x0004;//EQUALIZADOR CLASSIC
CONST Bass = 0x0005;//EQUALIZADOR BASS
const comandoDFplayer : array[10] of char = (0x7E,0xFF,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xEF);
PROCEDURE write_comand ( VAR _CMD : array[10] of char);
PROCEDURE DFplayer (F: WORD; DAT : WORD );
VAR
comDF : array[10] of char;
implementation
PROCEDURE DFplayer (F: WORD; DAT : WORD );
BEGIN
comDF[0]:=0x7E;
comDF[1]:=0xFF;
comDF[2]:=0x06;
comDF[3]:=F;//0x00;
comDF[4]:=0x00;
comDF[5]:=hi(dat);//0x00;
comDF[6]:=lo(dat);//0x00;
comDF[7]:=0x00;
comDF[8]:=0x00;
comDF[9]:=0xEF;
write_comand(comDF);
END;
PROCEDURE write_comand ( VAR _CMD :array[10] of char);
VAR
checksum: WORD ;
i : BYTE ;
BEGIN
checksum := 0;
for i:=1 TO i<7 DO
BEGIN
checksum :=checksum+_cmd[i];
UART1_Write(_cmd[i]);
END;
checksum := 0xFFFF - checksum + 1;
_cmd[7] := hi(checksum);
_cmd[8] := lo(checksum);
for i:=0 to i<10 do
UART1_Write(comDF[i]);
END;
end.
С++
Это писал не я.
- void write_comand (unsigned char *cmd); //Funcion de comunicacion
- void DFplayer(unsigned char funcion, unsigned int dato);//Funcion
//***DEFINICIONES***********************************************************************
#define track 0x03//PARA DEFINIR EL NUMERO DE LA PISTA A REPRODUCIR DE 0 A 2999
#define pause 0x0E,0x0000//PAUSAR REPRODUCCION
#define play 0x0D,0x0000//REPRODUCIR
#define next 0X01,0x0000//SIGUIENTE PISTA
#define previus 0X02,0x0000//PISTA ANTERIOR
#define volume 0x06//VOLUMEN DE AUDIO DESDE 0 HASTA 30
#define volume_up 0x04,0x0000//SUBIR VOLUMEN UN PASO A LA VES
#define volume_down 0x05,0x0000//BAJAR VOLUMEN UN PASO A LA VES
#define USB_SD 0x09//ESPECIFICA DISPOSITIVO A LEER USB - SD
#define EQ 0x07//Normal : Pop : Rock : Jazz : Classic : Bass
#define repeat_track 0X08//REPITE LA PISTA INDICANDO CUAL DE 0 A 2999
#define repeat_all_tr 0X11//REPITE TODAS PISTA
#define sleep 0x0A,0x0000//MODULO A DORMIR
#define reset 0x0C,0x0000//RECETEO DEL DFplayer mini
#define randon 0x18,0x0000//PISTAS ALEATORIAS
#define stop 0x16,0x0000//DETENER
#define set_DAC 0x1A// SALIDA DAC ENCENDER - APAGAR
#define set_repeat 0x19//REPRODUCCION REPETIDA DE LA PISTA ACTUAL ENCENDER - APAGAR
#define ON 0x0000//ENCENDER
#define OFF 0x0001//APAGAR
#define SD 0x0002//MEMORIA SD
#define USB 0x0001//MEMORIA USB
#define Normal 0x0000//EQUALIZADOR NORMAL
#define Pop 0x0001//EQUALIZADOR POP
#define Rock 0x0002//EQUALIZADOR ROCK
#define Jazz 0x0003//EQUALIZADOR JAZZ
#define Classic 0x0004//EQUALIZADOR CLASSIC
#define Bass 0x0005//EQUALIZADOR BASS
////////////////////////////////////////////////////////////////////////////////////////
//***Variables**************************************************************************
static unsigned char comandoDFplayer[10] = {0x7E,0xFF,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xEF};
//*************************************************************************************
////////////////////////////////////////////////////////////////////////////////////////
//***Procedimientos**************************************************************************
void write_comand (unsigned char *cmd); //Funcion de comunicacion
void DFplayer(unsigned char funcion, unsigned int dato);//Funcion control DFplayer
//**************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////
//***Funciones**************************************************************************
void write_comand(unsigned char *cmd){
unsigned int checksum = 0;
unsigned short i = 0;
checksum = 0;
for(i=1; i<7; i++){
checksum += cmd[i];
}
checksum = 0xFFFF - checksum + 1;
cmd[7] = (unsigned char) (checksum >> 8);
cmd[8] = (unsigned char) checksum;
for(i=0; i<10; i++){
UART1_Write(cmd[i]);
}
}
//--------------------------------------------------------------------------------------
void DFplayer(unsigned char funcion, unsigned int dato){
comandoDFplayer[3] = funcion;
comandoDFplayer[5] = (unsigned char) (dato >> 8);
comandoDFplayer[6] = (unsigned char) dato;
write_comand(comandoDFplayer);
}
////////////////////////////////////////////////////////////////////////////////////////