Всем привет. Недавно столкнулся с тем что нужно было управлять звуками, подключил модуль , а кода нет чтоб управлять. Начал искать для Микропаскаля для 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);
}
////////////////////////////////////////////////////////////////////////////////////////