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 ---
- 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 ---
Modérateur : Jérémy
Methode pour écrire sur écran OLED (96x39)
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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][/spoil]
Le fichier matrice des chiffres et l'initialisation des fonctions:
[spoil][/spoil]
Et le fichier d'initialisation de l'ecran OLED :
[spoil][/spoil]
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
}
}
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);
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
**************************************************************************************************/
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 88 invités