Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

Methode pour écrire sur écran OLED (96x39)
Jérémy
Administrateur du site
Administrateur du site
Messages : 2371
Âge : 40
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#11 Message par Jérémy » jeu. 22 oct. 2015 13:36

Voila comme promis !!!.

J'ai compris grossièrement le fonctionnement de ce driver, mais je me sens pas capable de faire un tuto nickel la dessus. ce sera peut être pour plus tard .

Ici l'idée était de m'initier au module OLED pour un futur projet .

Donc j'ai créer un compteur avec interruption. Pour les besoins de la vidéo j'ai accéléré le compteur , typiquement il est calé pour compter toute les secondes.
Ensuite j'ai créer une matrice des chiffres qui font 24pixels de haut sur 16 de large .
Sur mon écran , j'ai créer quatre carré dans lesquels j'y écris mes chiffres .

A la fin , le compteur compte et l'afficheur affiche la valeur du chrono , tout simplement .

Je ne sais pas si ma méthode et académique et si elle représente des dangers ou problème ! n’hésitez pas à me le faire savoir .

Voici la vidéo :
http://www.dailymotion.com/video/x3albk3

Voici le code principale :
[spoil]

Code : Tout sélectionner

//#############################       DECLARATION       ############################

#include <Chiffre.h>
#include <Oled_M.h>

sbit OLED_RST at LATE1_bit;
sbit OLED_CS at LATE0_bit;
sbit OLED_DC at LATC0_bit;

unsigned int i,j,k;

unsigned char seconde=0, D_seconde=0, minute=0, D_minute=0;

//############################        FONCTION       ###############################

void interrupt() {           // Ici c'est notre interruption

                             // On regarde quel drapeau a été mis à 1, pour connaitre la source de l'interutpion
  if (INTCON.TMR0IF)         // Ici le bit TMR0IF (bit2) du registre INTCON est testé
  {
   TMR0IF_bit = 0;           // IMPORTANT !!! On ré-arme notre drapeau en le remettant à 0
   TMR0H = 240;               // chargement de la valeur 11 dans le TIMER du haut
   TMR0L = 220;              // chargement de la valeur 220 dans le TIMER du bas
   seconde = seconde++;      // On incrémente les secondes de notre compteur
  }
}

void OLED_M_command (unsigned char temp){ //Envoi d'une commande
  OLED_CS=0;            // Chip Select , actif à l'état bas
  OLED_DC=0;            // Data/Command selection: 1=Data; 0=Command
  SPI1_Write(temp);     // Envoi de l'info sur le BUS
  OLED_CS=1;            // on arrrete la com en desactivant le chip
}

void OLED_M_data(unsigned char temp){ //Envoi d'une donnée
  OLED_CS=0;
  OLED_DC=1;
  SPI1_Write(temp);
  OLED_CS=1;
}

void OLED_M_Init(){ // Initialisation de l'écran
    
     OLED_RST
=0;         // Reset de l'écran
     Delay_ms(500);      // Pause
     OLED_RST=1;         // Arret du Reset
     Delay_ms(500);      // pause
     
     OLED_M_command
(SSD1306_DISPLAYOFF);          //0xAE  Ecran en mode veille (désactivé)
     OLED_M_command(SSD1306_SETDISPLAYCLOCKDIV);  //0xD5  Set Display Clock Divide Ratio/Oscillator Frequency
     OLED_M_command(0x80);
     OLED_M_command(SSD1306_SETMULTIPLEX);        //0xA8  Set Multiplex Ratio
     OLED_M_command(0x27);
     OLED_M_command(SSD1306_SETDISPLAYOFFSET);    //0xD3  Set Display Offset
     OLED_M_command(0x00);
     OLED_M_command(SSD1306_SETSTARTLINE);        //0x40  Set Display Start Line
     OLED_M_command(SSD1306_CHARGEPUMP);          //0x8D  Set Charge Pump
     OLED_M_command(0x14);                        //0x14  Enable Charge Pump
     OLED_M_command(SSD1306_COMSCANDEC);          //0xC8  Set COM Output Scan Direction
     OLED_M_command(SSD1306_SETCOMPINS);          //0xDA  Set COM Pins Hardware Configuration
     OLED_M_command(0x12);
     OLED_M_command(SSD1306_SETCONTRAST);         // 0x81   réglage du contraste
     OLED_M_command(0xAF);                        // Envoi de la valeur du contraste
     OLED_M_command(SSD1306_SETPRECHARGE);        // 0xD9   Set Pre-Charge Period
     OLED_M_command(0x25);
     OLED_M_command(SSD1306_SETVCOMDETECT);       //0xDB   Set VCOMH Deselect Level
     OLED_M_command(0x20);
     OLED_M_command(SSD1306_DISPLAYALLON_RESUME); //0xA4   ??? pas compris - Set Entire Display On/Off
     OLED_M_command(SSD1306_NORMALDISPLAY);       //0xA6   mode normal ou inverse
     OLED_M_command(SSD1306_SETSEGMENTREMAP);     //0xA1   Inverse l'ordre de lecture des colonnes gauche vers droite
     OLED_M_command(SSD1306_MEMORYMODE);          // Selection du mode de defilement
     OLED_M_command(0x00);                        //  Horizontal adressing  mode
     OLED_M_command(SSD1306_DISPLAYON);           //0xAF   Active l'écran OLED
}

void Set_Page_Address(unsigned char add) {    //Set page adress for Page Addressing Mode
    add=0xb0|add;
    OLED_M_command(add);
}

void Set_Column_Address(unsigned char add) {   //Set column adress for Page Addressing Mode
        add += 32; //L'ecran n'a que 96 colonnes au lieu de 128. on rajoute donc 32 en offset
        OLED_M_command((0x10|(add>>4)));
        OLED_M_command((0x0f&add));
}

void efface_ecran(){   // On efface l'écran

   OLED_M_command(SSD1306_COLUMNADDR);
   OLED_M_command(32);
   OLED_M_command(127);
   OLED_M_command(SSD1306_PAGEADDR);
   OLED_M_command(0);
   OLED_M_command(4);
     
   for 
(j=0;j<96;j++)
    {
        Set_Column_Address(j);

        for (i=0;i<5;i++)
         {
             Set_Page_Address(i);
             OLED_M_data(0x00);
          }
     }
 }

void deux_points (){
     
     OLED_M_command
(SSD1306_COLUMNADDR);  // definition de la largeur du rectangle de dessin du chiffre
     OLED_M_command(78);         // 16 colonnes de large
     OLED_M_command(81);
     OLED_M_command(SSD1306_PAGEADDR);    // definition de la hauteur du rectangle de dessin du chiffre
     OLED_M_command(2);                   // 3 pages de haut
     OLED_M_command(3);


     for(k=0;k<8;k++)
       {OLED_M_data(points[k]);}
 }
        
void Affichage
(unsigned char chiffre, unsigned char position) {
     
     OLED_M_command
(SSD1306_COLUMNADDR);  // definition de la largeur du rectangle de dessin du chiffre
     OLED_M_command(position+32);         // 16 colonnes de large
     OLED_M_command(position+47);
     OLED_M_command(SSD1306_PAGEADDR);    // definition de la hauteur du rectangle de dessin du chiffre
     OLED_M_command(1);                   // 3 pages de haut
     OLED_M_command(3);
    
     if 
( chiffre == 0)
       {
               for(k=0;k<48;k++)
                {OLED_M_data(chiffre0[k]);}
        }
     if ( chiffre == 1)
       {
               for(k=0;k<48;k++)
                {OLED_M_data(chiffre1[k]);}
        }
     if ( chiffre == 2)
       {
               for(k=0;k<48;k++)
                {OLED_M_data(chiffre2[k]);}
        }
     if ( chiffre == 3)
       {
               for(k=0;k<48;k++)
                {OLED_M_data(chiffre3[k]);}
        }
     if ( chiffre == 4)
       {
               for(k=0;k<48;k++)
                {OLED_M_data(chiffre4[k]);}
        }
     if ( chiffre == 5)
       {
               for(k=0;k<48;k++)
                {OLED_M_data(chiffre5[k]);}
        }     
     if 
( chiffre == 6)
       {
               for(k=0;k<48;k++)
                {OLED_M_data(chiffre6[k]);}
        }
     if ( chiffre == 7)
       {
               for(k=0;k<48;k++)
                {OLED_M_data(chiffre7[k]);}
        }
     if ( chiffre == 8)
       {
               for(k=0;k<48;k++)
                {OLED_M_data(chiffre8[k]);}
        }
     if ( chiffre == 9)
       {
               for(k=0;k<48;k++)
                {OLED_M_data(chiffre9[k]);}
        }

     OLED_M_command(SSD1306_COLUMNADDR);    // redifinie le rectangle en entier
     OLED_M_command(32);
     OLED_M_command(127);
     OLED_M_command(SSD1306_PAGEADDR);
     OLED_M_command(0);
     OLED_M_command(4);
 }

void curseur(unsigned char flag){  // affiche les curseurs au dessus et en dessous
     
OLED_M_command
(SSD1306_COLUMNADDR);  // definition de la largeur du rectangle de dessin du chiffre
     OLED_M_command(32);         // 16 colonnes de large
     OLED_M_command(127);
     OLED_M_command(SSD1306_PAGEADDR);    // definition de la hauteur du rectangle de dessin du chiffre
     OLED_M_command(0);                   // 3 pages de haut
     OLED_M_command(4);
  
  Set_Column_Address
(flag);
  Set_Page_Address(4);
  
  for
(k=0;k<7;k++){
     OLED_M_data(fleche_bas[k]);
   }
   
   Set_Column_Address
(flag);
   Set_Page_Address(0);

  for(k=0;k<7;k++){
     OLED_M_data(fleche_haut[k]);
   }
}
//##################################################################################
//######################     PROGRAMME PRINCIPAL     ###############################
//##################################################################################
void main(){

     TRISE0_bit = 0;         // Configure la broche 0 du PORT E en sortie
     TRISE1_bit = 0;         // Configure la broche 1 du PORT E en sortie
     TRISC0_bit = 0;         // Configure la broche 0 du PORT C en sortie

     SPI1_Init();            // Initialisation du SPI
     Delay_ms(500);

     OLED_M_Init();          // Initialisation de l'ecran LCD
     Delay_ms(100);

     efface_ecran();         // on efface l'écran
     deux_points();          // On affcihes les deux points

     //curseur(17);            // On affiche le curseur
     //curseur(73);
//-----------   CONFIGURATION DE L'INTERRUPTION  POUR 1 SECONDE   ------------------
     T0CON = 0b10000100;      // Configuration du TIMER0 ( bit7 : activé, bit3: prescaler, bit2,1 et presacaler à 32 )
     TMR0H = 11;              // chargement de la valeur 11 dans le TIMER du haut
     TMR0L = 220;             // Chargement de la valeur 220 dans le TIMER du bas
     INTCON = 0b10100000;     // Configuration de l'interruption (bit7 : activation, bit5: autorisation débordement TMR0)

     Affichage(seconde,78);   // Initialisation du chiffre des secondes
     Affichage(D_seconde,58); // Initialisation du chiffre des Dizaines de secondes
     Affichage(minute,22);    // Initialisation du chiffre des minutes
     Affichage(D_minute,2);   // Initialisation du chiffre des Dizaines de minutes

//############################     BOUCLE INFINIE     ##############################
  while(1){
    
    Affichage
(seconde,78);              // On affiche les secondes  dans le dernier carré
    
    if 
(seconde >= 10){                 // si les unités de secondes arrive à 10
       seconde = 0;                     // On Raz la valeur
       D_seconde = D_seconde++;         // On incrémente les dizaines de secondes
       Affichage(D_seconde,58);         // On affiches les dizaines de secondes

     }
         if (D_seconde >= 6){           // Si les dizaines de secondes arrivent à 6 ( donc 60 secondes)
            D_seconde = 0;              // On RAZ les dizaines
            Affichage(D_seconde,58);    // On affiches la nouvelle valeur des dizaines
            minute = minute++;          // On incrémente de 1 les minutes
            Affichage(minute,22);       // On affiche la valeur des unités des minutes
          }
              if (minute >= 10){        // Si l'unité des minutes arrive à 10
                 minute = 0;            // On RAZ les minutes
                 Affichage(minute,22);  // On affcihes les minutes
                 D_minute = D_minute++; // On incrémente les dizaines de minutes
                 Affichage(D_minute,2); // On affcihe les dizaines de minutes
               }
                  if (D_minute >= 10) D_minute = 0; // Garde fou pour ne pas incrementer à l'infini les dizianes de minutes

  }

}
[/spoil]

Le fichier matrice des chiffres et l'initialisation des fonctions:
[spoil]

Code : Tout sélectionner


unsigned char chiffre0
[]={  // chiffre en mode horizontale
0b00000000, 0b10000000, 0b11110000, 0b11111100, 0b11111110, 0b11111110, 0b00111111, 0b00001111, 0b00001111, 0b00001111, 0b00111111, 0b11111110, 0b11111110, 0b11111100, 0b11110000, 0b10000000,
0b00000000, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b11111111,
0b00000000, 0b00000011, 0b00001111, 0b00111111, 0b01111111, 0b01111111, 0b11111100, 0b11110000, 0b11110000, 0b11110000, 0b11111100, 0b01111111, 0b01111111, 0b00111111, 0b00001111, 0b00000001
};
unsigned char chiffre1[]={  // chiffre en mode horizontale
0b00000000, 0b00000000, 0b00000000, 0b11000000, 0b11100000, 0b11100000, 0b11110000, 0b11111000, 0b01111100, 0b11111110, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b00000000, 0b00000000,
0b00000000, 0b00000000, 0b00000000, 0b00000011, 0b00000001, 0b00000001, 0b00000000, 0b00000000, 0b00000000, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b00000000, 0b00000000,
0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b00000000, 0b00000000
};
unsigned char chiffre2[]={  // chiffre en mode horizontale
0b00000000, 0b11100000, 0b11111000, 0b11111100, 0b11111110, 0b11111110, 0b00011111, 0b00001111, 0b00001111, 0b00001111, 0b00011111, 0b11111111, 0b11111110, 0b11111110, 0b11111100, 0b11110000,
0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b10000000, 0b11000000, 0b11100000, 0b11110000, 0b11111000, 0b11111110, 0b01111111, 0b00111111, 0b00011111, 0b00000111, 0b00000001,
0b00000000, 0b11000000, 0b11111000, 0b11111100, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b11111001, 0b11111001, 0b11111000, 0b11111000, 0b11111000, 0b11111000, 0b11111000, 0b11111000
};
unsigned char chiffre3[]={  // chiffre en mode horizontale
0b00000000, 0b00110000, 0b01111000, 0b01111110, 0b01111110, 0b01111111, 0b00011111, 0b00001111, 0b00001111, 0b00011111, 0b11111111, 0b11111110, 0b11111110, 0b11111100, 0b11110000, 0b00000000,
0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001110, 0b00001110, 0b00001111, 0b00011111, 0b11111011, 0b11111011, 0b11111001, 0b11110000, 0b11000000,
0b00000000, 0b00000110, 0b00011111, 0b00111111, 0b01111111, 0b01111111, 0b11111100, 0b11110000, 0b11110000, 0b11110000, 0b11111100, 0b01111111, 0b01111111, 0b00111111, 0b00011111, 0b00000111
};
unsigned char chiffre4[]={  // chiffre en mode horizontale
0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b11000000, 0b11100000, 0b11111000, 0b11111100, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b00000000, 0b00000000,
0b11000000, 0b11100000, 0b11111000, 0b11111100, 0b11111111, 0b10111111, 0b10001111, 0b10000011, 0b10000001, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b10000000, 0b10000000,
0b00000111, 0b00000111, 0b00000111, 0b00000111, 0b00000111, 0b00000111, 0b00000111, 0b00000111, 0b00000111, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b00000111, 0b00000111
};

unsigned char chiffre5[]={  // chiffre en mode horizontale
0b00000000, 0b00000000, 0b10000000, 0b11111100, 0b11111111, 0b11111111, 0b11111111, 0b00111111, 0b00011111, 0b00011111, 0b00011111, 0b00011111, 0b00011111, 0b00011111, 0b00011111, 0b00000000,
0b00000000, 0b00011000, 0b00111111, 0b00111111, 0b00111111, 0b00111111, 0b00011111, 0b00001111, 0b00001111, 0b00001111, 0b00011111, 0b11111111, 0b11111110, 0b11111110, 0b11111000, 0b11100000,
0b00000000, 0b00000110, 0b00011111, 0b00111111, 0b01111111, 0b01111111, 0b11111100, 0b11110000, 0b11110000, 0b11110000, 0b11111000, 0b01111111, 0b01111111, 0b00111111, 0b00011111, 0b00000111
};
unsigned char chiffre6[]={  // chiffre en mode horizontale
0b00000000, 0b10000000, 0b11110000, 0b11111000, 0b11111100, 0b11111110, 0b00111110, 0b00001111, 0b00001111, 0b00001111, 0b00011111, 0b01111111, 0b01111110, 0b01111110, 0b01111100, 0b01110000,
0b00000000, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b00111100, 0b00011110, 0b00011110, 0b00011110, 0b00111110, 0b11111110, 0b11111100, 0b11111100, 0b11110000, 0b11100000,
0b00000000, 0b00000001, 0b00001111, 0b00111111, 0b01111111, 0b01111111, 0b11111000, 0b11110000, 0b11110000, 0b11110000, 0b11111000, 0b11111111, 0b01111111, 0b00111111, 0b00011111, 0b00000111
};
unsigned char chiffre7[]={  // chiffre en mode horizontale
0b00000000, 0b00011111, 0b00011111, 0b00011111, 0b00011111, 0b00011111, 0b00011111, 0b00011111, 0b00011111, 0b10011111, 0b11111111, 0b11111111, 0b11111111, 0b00111111, 0b00011111, 0b00001111,
0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b11100000, 0b11111000, 0b11111100, 0b11111111, 0b01111111, 0b00001111, 0b00000011, 0b00000000, 0b00000000, 0b00000000, 0b00000000,
0b00000000, 0b00000000, 0b00000000, 0b11110000, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b00000111, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000
};
unsigned char chiffre8[]={  // chiffre en mode horizontale
0b00000000, 0b11110000, 0b11111100, 0b11111110, 0b11111110, 0b11111111, 0b00011111, 0b00001111, 0b00001111, 0b00001111, 0b00011111, 0b11111111, 0b11111110, 0b11111110, 0b11111100, 0b11110000,
0b00000000, 0b10000001, 0b11000011, 0b11100111, 0b11111111, 0b11111111, 0b01111110, 0b00111100, 0b00111100, 0b00111100, 0b01111110, 0b11111111, 0b11111111, 0b11100111, 0b11000011, 0b10000001,
0b00000000, 0b00001111, 0b00111111, 0b01111111, 0b01111111, 0b11111111, 0b11111000, 0b11110000, 0b11110000, 0b11110000, 0b11111000, 0b11111111, 0b01111111, 0b01111111, 0b00111111, 0b00001111
};
unsigned char chiffre9[]={  // chiffre en mode horizontale
0b00000000, 0b11100000, 0b11111000, 0b11111100, 0b11111110, 0b11111111, 0b00011111, 0b00001111, 0b00001111, 0b00001111, 0b00011111, 0b11111110, 0b11111110, 0b11111100, 0b11110000, 0b10000000,
0b00000000, 0b00000111, 0b00001111, 0b00111111, 0b00111111, 0b01111111, 0b01111100, 0b01111000, 0b01111000, 0b01111000, 0b00111100, 0b11111111, 0b11111111, 0b11111111, 0b11111111, 0b11111111,
0b00000000, 0b00001110, 0b00111110, 0b01111110, 0b01111110, 0b11111110, 0b11111000, 0b11110000, 0b11110000, 0b11110000, 0b01111100, 0b01111111, 0b00111111, 0b00011111, 0b00001111, 0b00000001
};

unsigned char points[]={    // Mode horizontale
0b00111100, 0b00111100,0b00111100,0b00111100, 0b11110000, 0b11110000, 0b11110000, 0b11110000
};
unsigned char fleche_bas[]={   // Mode horizontale
0b00010000, 0b00011000, 0b00011100,0b00011110, 0b00011100, 0b00011000, 0b00010000
};
unsigned char fleche_haut[]={   // Mode horizontale
0b00001000, 0b00011000, 0b00111000, 0b01111000, 0b00111000, 0b00011000, 0b00001000
};
InitMCU();
OLED_M_command(unsigned char temp);
OLED_M_data(unsigned char temp);
OLED_M_Init();
Set_Page_Address(unsigned char add);
Set_Column_Address(unsigned char add);
efface_ecran();
Affichage(unsigned char chiffre, unsigned char position);
deux_points();
curseur(unsigned char flag);
[/spoil]

Et le fichier d'initialisation de l'ecran OLED :
[spoil]

Code : Tout sélectionner

/**************************************************************************************************
* File: SF_Test.h
* File Type: C - Header File
* Company: (c) mikroElektronika, 2011
* Revision History:
* Description:
*     This module contains a set of functions that are used for communication with
*     Serial Flash.
* Test configuration:
*     MCU:             STM32F107VC
*                      http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00220364.pdf
*     Dev.Board:       EasyMx PRO v7 for STM32(R) ARM(R)
*                      http://www.mikroe.com/easymx-pro/stm32/
*                      ac:tft_touchpanel
*                      ac:serial-flash
*
*     Oscillator:      HSE-PLL, 72.000MHz
*     SW:              mikroC PRO for ARM
*                      http://www.mikroe.com/mikroc/arm/
* NOTES:
*     Serial Flash use SPI bus to communicate with MCU.
*     Turn on TFT backlight on SW11.3
*     Turn on SPI lines at SW13.1, SW13.2, sw13.3 and Serial Flash CS at SW13.8
**************************************************************************************************/

#define SSD1306_96_39
#define SSD1306_LCDWIDTH   96            // Largeur de l'ecran
#define SSD1306_LCDHEIGHT  39            // Hauteur de l'écran

#define SSD1306_DISPLAYOFF 0xAE          // Active l'ecran
#define SSD1306_DISPLAYON 0xAF           // Désactive l'écran

#define SSD1306_SETDISPLAYCLOCKDIV 0xD5  // clock division ?? (suivis de 1 valeur)
#define SSD1306_SETPRECHARGE 0xD9        // reglage Pré-charge periode ???
#define SSD1306_SETVCOMDETECT 0xDB       // ??
#define SSD1306_SETMULTIPLEX 0xA8        //??
#define SSD1306_SETDISPLAYOFFSET 0xD3    // Réglage du shift vertical (suivis de 1 valeur)
#define SSD1306_SETCOMPINS 0xDA          // ??
#define SSD1306_SETSTARTLINE 0x40        // Réglage de la ligne de depart en RAM
#define SSD1306_CHARGEPUMP 0x8D

#define SSD1306_SEGREMAP 0xA0            // Réglage du mappage des segments 0 pour SEG0
#define SSD1306_SETSEGMENTREMAP 0xA1     // Réglage du mappage des segments 127 pour SEG0

#define SSD1306_SETCONTRAST 0x81         // Réglage du contraste  (suivis de 1 valeur)

#define SSD1306_DISPLAYALLON_RESUME 0xA4 // ??
#define SSD1306_DISPLAYALLON 0xA5        // ?? pas compris
#define SSD1306_NORMALDISPLAY 0xA6       // mode normal d'affichage
#define SSD1306_INVERTDISPLAY 0xA7       // mode Inverse d'affichage
#define SSD1306_SETLOWCOLUMN 0x00        // ??
#define SSD1306_SETHIGHCOLUMN 0x10       // ??
#define SSD1306_MEMORYMODE 0x20          // Choix du mode de memoire Hori/vert/page (suivis de 1 valeur)
#define SSD1306_COLUMNADDR 0x21          // Config des colonnes début et fin (suivis de 2 valeurs)
#define SSD1306_PAGEADDR   0x22          // Config des pages début et fin    (suivis de 2 valeurs)
#define SSD1306_COMSCANINC 0xC0          // Mode de scan, mode normal de com0 vers com N-1
#define SSD1306_COMSCANDEC 0xC8          // Mode de scan, mode inverse de Com N-12 vers Com0

#define SSD1306_EXTERNALVCC 0x1
#define SSD1306_SWITCHCAPVCC 0x2

#define SSD1306_ACTIVATE_SCROLL 0x2F          // Active le scroll
#define SSD1306_DEACTIVATE_SCROLL 0x2E        // Désactive le scroll
#define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3 // Sélectionne l'aire du scroll
#define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26  // scroll horizontal droite
#define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27   // scroll horizontal gauche
#define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29 // scroll diagonal droite
#define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A  // scroll diagonal gauche

// Global Variables
unsigned char Refresh_Cmd_Menu = 1;
//unsigned char write_array[_DATA_ARRAY_SIZE] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
//unsigned char read_array[_DATA_ARRAY_SIZE] = {0};

// Functions
void SF_Start(void);
void SF_Test(char *err);

//- Imported from SF_DRIVER.H ---------------------------------------------------------------------
extern void SerialFlash_init();
extern void SerialFlash_WriteEnable();
extern unsigned char SerialFlash_IsWriteBusy();
extern void SerialFlash_WriteByte(unsigned char _data, unsigned long address);
extern void SerialFlash_WriteWord(unsigned int _data, unsigned long address);
extern unsigned char SerialFlash_ReadID(void);
extern unsigned char SerialFlash_ReadByte(unsigned long address);
extern unsigned int SerialFlash_ReadWord(unsigned long address);
extern unsigned char SerialFlash_WriteArray(unsigned long address, unsigned char* pData, unsigned int nCount);
extern void SerialFlash_ReadArray(unsigned long address, unsigned char* pData, unsigned int nCount);
extern void SerialFlash_ChipErase(void);
extern void SerialFlash_ResetWriteProtection();
extern void SerialFlash_SectorErase(unsigned long address);

/**************************************************************************************************
* End of File
**************************************************************************************************/
[/spoil]
C'est en faisant des erreurs, que l'on apprend le mieux !!!


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité