Comprendre le principe de l'affichage OLED - Différentes façons d'utiliser les modules OLED
Le module OLED dispose de quatre modes de fonctionnement, à savoir les interfaces parallèles 6800 et 8080, le mode d'interface SPI série à 4 fils et le mode d'interface IIC.La relation entre les réglages BS1/BS2 et le mode d'interface du module est indiquée dans le tableau suivant::
Le réglage par défaut du module OLED SAEF Technology est BS0 à GND, BS1 et BS2 à VCC (mode 8080), si vous souhaitez le régler sur d'autres modes,vous devez modifier les paramètres BS0-BS2 avec un fer à souder à l'arrière de l'OLED- Je ne sais pas.
D'après le schéma, nous pouvons savoir qu'il y a un total de 16 broches dessinées, et sur les 16 lignes, nous n'avons utilisé que 15 broches, et l'une d'elles est suspendue.et 13 sont restésDans différents modes, le nombre de lignes de signal dont nous avons besoin est différent, dans le mode 8080, les 13 sont nécessaires, dont l'un est commun, à savoir la ligne de réinitialisation RST (RES),que nous pouvons directement connecter à la réinitialisation de la MCU (pour confirmer que la méthode de réinitialisation est la même)Dans le mode IIC, seulement 2 lignes sont nécessaires!
Le mode de fonctionnement de l'IIC n'a besoin que de deux lignes, et le mode de fonctionnement de l'IIC consiste à utiliser deux fils pour simuler l'IIC pour obtenir des données.
Le contrôleur OLED est SSD1306, c'est-à-dire que l'écran nu est alimenté par SSD1306, qui est également une puce de pilotage LED plus largement utilisée.
Mémoire vidéo du module OLED
L'OLED lui-même n'a pas de mémoire vidéo, et sa mémoire vidéo dépend du SSD1306 pour fournir.Chaque page contient 128 octets, un total de 8 pages, ce qui correspond exactement à la taille de la matrice de points 128*64.
Cependant, comme l'OLED ne peut pas contrôler une matrice de points à la fois, il ne peut contrôler qu'une matrice de 8 points; et c'est un contrôle de balayage vertical;
Parce que chaque écriture est écrite en octets, il y a un problème, si nous utilisons le mode d'écriture seule pour faire fonctionner le module, alors, nous devons écrire 8 points à la fois, donc quand nous dessinons un point,nous devons trouver l'état actuel de chaque bit de l'octet où le point à définir est situé (0/1Dans le cas contraire, les données écrites écraseront l'état précédent, et le résultat sera que certains points qui ne doivent pas être affichés sont affichés,ou ceux qui devraient être affichés ne sont pas affichés. En mode lisible, nous pouvons lire le octet à écrire d'abord, obtenir la situation actuelle, puis l'écrire dans le gramme après avoir modifié le bit à réécrire,afin de ne pas affecter la situation précédenteCependant, cela nécessite la possibilité de lire la GRAM, pour le mode SPI à 3 fils ou à 4 fils, le module ne prend pas en charge la lecture et le mode lecture->-à-> écriture est également relativement lent.
Donc, la méthode que nous utilisons est de créer une GRAM OLED (un total de 128 octets) à l'intérieur du STM32, et à chaque modification, modifier seulement la GRAM sur le STM32 (en fait SRAM), et après la modification,écrire le GRAM sur le STM32 au GRAM OLED à la foisBien entendu, cette méthode présente également des inconvénients, c'est-à-dire qu'elle est plus gênante pour les microcontrôleurs avec une SRAM très petite (comme la série 51).
Mémoire vidéo OLED
Le format de stockage est le suivant:
Je vous en prie.
Je vous en prie.
//[2]0 1 2 3... 127
Je vous en prie.
Je vous en prie.
//[5]0 1 2 3... 127
//[6]0 1 2 3... 127
//[7]0 1 2 3... 127
U16 OLED_GRAM[128][8];
Mettre à jour la mémoire vidéo sur l'écran LCD
le numéro de série de l'appareil est indiqué.
{
U8 i, n;
pour ((i=0; i<8; i++)
{
L'adresse de la page est définie (0~7)
OLED_WR_Byte (0x00,OLED_CMD); définir la position de l'affichage
OLED_WR_Byte (0x10,OLED_CMD); définir la position d'affichage l'adresse de hauteur de colonne
pour ((n=0; n<128; n++) OLED_WR_Byte ((OLED_GRAM[n][i],OLED_DATA);
}
}
Commande SSD1306
1: Commande 0X81: Configurez le contraste. Contient deux octets, le premier 0X81 est la commande, et le octet suivant est la valeur du contraste à définir. Plus cette valeur est définie, plus elle est grande.plus l'écran sera lumineux.
2: commande 0XAE/0XAF: 0XAE pour désactiver la commande d'affichage; 0XAF pour activer la commande d'affichage.
3: commande 0X8D: contient 2 octets, le premier est le mot de commande, le second est la valeur définie, le deuxième octet de BIT2 indique l'état de commutation de la pompe de charge, le bit est 1,la pompe de charge est allumée, et 0 est désactivé. Lorsque le module est initialisé, cela doit être activé, sinon vous ne verrez pas l'affichage à l'écran.
4: commande 0XB0~B7: Utilisé pour définir l'adresse de la page, et les trois chiffres inférieurs correspondent à l'adresse de la page du GRAM.
5: Commande 0X00~0X0F: Utilisé pour définir les quatre chiffres inférieurs de l'adresse de la colonne de départ lors de l'affichage.
6: Commande 0X10~0X1F: Utilisé pour régler l'adresse de la colonne de démarrage de l'écran quatre chiffres plus haut.
Pour plus de commandes, veuillez vous référer à ceci, il est fortement recommandé de le voir, il est très détaillé: SSD1306 (puce pilote OLED) instructions en détail
Après avoir introduit le mode de travail et la puce de pilote, nous pouvons commencer à utiliser ce module OLED IIC
Code détaillé
#définir OLED_CMD 0 // écrire la commande
#définir OLED_DATA 1 //Écrire des données
Initialiser le OLED
Initialisez le SSD1306
le nombre de fois où le produit est utilisé
Les données de base sont fournies à l'aide de la méthode suivante:
RCC_APB2PeriphClockCmd ((RCC_APB2Periph_GPIOA, activé); activer l'horloge sur le port A
Le système de gestion des données est basé sur les données fournies par le système de gestion des données.
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; sortie par poussée-pull
La fréquence de l'appareil doit être supérieure ou égale à la fréquence de l'appareil.
GPIO_Init ((GPIOA, &GPIO_InitStructure); Initialiser le GPIO
Les données sont fournies par les fournisseurs de services.
délais_ms ((200);
L'affichage est désactivé
L'adresse de la colonne inférieure est définie
L'adresse de la colonne supérieure est définie
L'adresse de ligne de départ est définie.
L'adresse de la page est définie.
L'équipement est équipé d'un système d'éclairage de qualité supérieure.
L'écran est équipé d'un écran à LED.
L'écran de l'appareil doit être équipé d'un écran d'affichage.
L'écran est équipé d'un écran à LED.
Le nombre de fois où les données sont utilisées est supérieur à la valeur de la valeur de l'écran.
Les émissions d'électricité sont calculées en fonction de la fréquence d'émission.
La direction d'échantillonnage doit être la suivante:
L'affichage de l'affichage est décalé.
Les données sont fournies par les autorités compétentes de l'UE.
L'équipement est équipé d'un système de mesure de la fréquence.
L'équipement est équipé d'un système de contrôle de l'équipement.
Le mode couleur de la zone est désactivé.
L'équipement est équipé d'un système de contrôle de l'équipement.
Le nombre de cycles de chargement est calculé en fonction du nombre de cycles de chargement.
Les données sont fournies par le système de gestion de l'environnement.
Les données sont fournies par les fournisseurs de services.
Les données sont fournies par le système de gestion des données.
Les données sont fournies par les autorités compétentes de l'UE.
Les données sont fournies par les autorités compétentes de l'UE.
Le système d'alimentation électronique doit être équipé d'un système d'alimentation électronique.
Les données sont fournies par les fournisseurs de services.
Les données sont fournies par le système d'exploitation de l'appareil.
OLED_Clear ((); Effacer l'écran, il est recommandé de nettoyer l'écran d'abord après chaque initialisation est terminée
Fonction d'écran net, après avoir nettoyé l'écran, tout l'écran est noir! C'est la même chose que de ne pas s'allumer!!
le nombre de fois où la couleur de l'écran doit être affichée
{
U8 i, n;
pour ((i=0; i<8; i++)
{
L'adresse de la page est définie (0~7)
OLED_WR_Byte (0x00,OLED_CMD); définir la position de l'affichage
OLED_WR_Byte (0x10,OLED_CMD); définir la position d'affichage l'adresse de hauteur de colonne
pour ((n=0; n<128; n++)OLED_WR_Byte(0,OLED_DATA);
} // Mettre à jour l' affichage
}
Dans l'auto-module que nous utilisons habituellement, il y a deux façons courantes de prendre le modulaire, l'un est 6 * 8, et l'autre est 8 * 16,la première est de prendre les caractères que nous voulons dans une table rectangulaire avec 8 lignes et 6 colonnes, et la seconde consiste à retirer les caractères d'un tableau rectangulaire de 16 lignes et 8 colonnes.l'espace pour la page suivante doit être utiliséNous avons donc la taille de police que nous utilisons habituellement, bien sûr, ce sont des tailles de police couramment utilisées, nous pouvons également faire notre propre taille de police préférée grâce à un logiciel de modulation de caractères.
/* Affiche un caractère à l'emplacement spécifié, y compris certains caractères
x:0~127
y:0 à 63
taille: sélectionnez la police 16/12*/
Les caractéristiques de l'écran OLED sont les suivantes:
{
char non signé c=0,i=0;
c=chr-' '; La valeur de décalage peut être obtenue à partir du motif de police, le premier étant " ", et le caractère correspondant peut être obtenu en soustrayant
if(x>Max_Column-1) {x=0; y=y+2; } //Max_Column: Colonne maximale: 128; x: définir le nombre de colonnes; y: définir le nombre de pages
if(Char_Size ==16) // Dans ce cas, la même colonne de deux pages est requise, et la matrice en points de 8*16 est requise
{
OLED_Set_Pos(x,y); Si x = y = 2, puis définir à la colonne 3 sur la page 3, note: il y a seulement huit lignes par page
pour ((i=0; i<8; i++)
OLED_WR_Byte ((F8X16[c*16+i],OLED_DATA); En augmentant le i, les points sont dessinés en boucle et les 8 lignes de la deuxième colonne de la page 2 sont écrites dans les données
OLED_Set_Pos(x,y+1); Puisque le nombre de points n'est pas suffisant, vous devez continuer les points dans la colonne 2 à la page 3
pour ((i=0; i<8; i++)
Le dessin doit être terminé au bout du point 16.
}
autres
{
OLED_Set_Pos ((x,y); matrice de points 6x8, pas besoin d'autres pages pour continuer la peinture
pour ((i=0; i<6; i++)
OLED_WR_Byte ((F6x8[c][i],OLED_DATA); Dans un tableau bidimensionnel, C contrôle les lignes et I contrôle les colonnes, donc aucune autre opération n'est nécessaire pour terminer le dessin
}
}
La suivante if(x>120) n'est pas une erreur, parce que la précédente x+=8; Il y a une explication dans les notes suivantes, donc vous pouvez y réfléchir.
void OLED_ShowString ((u8 x,u8 y,u8 *chr,u8 Char_Size) // Affiche la chaîne
{
char non signé j=0;
pendant que (chr[j]!='0') // Vérifiez si la chaîne se termine
{
OLED_ShowChar ((x,y,chr[j],Char_Size); Dessinez les caractères un par un
x + = 8; x est défini comme une colonne, la taille d'un caractère est 8 * 16, c'est-à-dire que la ligne est 16 et la colonne est 8, et à chaque fois qu'il est affiché comme un, vous devez déplacer 8 colonnes à la colonne supérieure
si(x>120) {x=0; y+=2; } // Le maximum est de 128 colonnes, si elle est dépassée, vous devez recommencer à partir de la colonne zéro, parce que vous avez besoin d'autres pages pour continuer la peinture à ce moment,pour éviter les chevauchements, vous avez besoin de y + = 2.
j++; Dessiner des chaînes en boucle
}
}
2 chiffres sont affichés, tous deux écrits dans le code ci-dessous, et il convient de noter que le " " ci-dessous représente la valeur ASCII de 32
M^n fonction
Le nombre d'heures de travail est calculé en fonction de la durée de travail.
{
U32 résultat=1;
alors que n-- résultat*=m;
le résultat de retour;
}
Affichage de 2 chiffres
x,y: coordonnées de départ
len: Nombre de chiffres du numéro
taille: la taille de la police
mode: mode 0, mode de remplissage;
num: valeur numérique (0 à 429 4967 295);
Le nombre d'écran OLED n'est pas indiqué.
{
U8 t,temp;
u8 enshow=0;
pour t=0; t { Le nombre d'heures de travail est calculé en fonction de la durée de travail. si (afficher) { si (temporel) { Les caractéristiques de l'écran OLED sont les suivantes: poursuivre; {\pos (192,230) } autrement montre=1; } Le tableau de bord de l'écran OLED est indiqué par le tableau de bord suivant: } Les plusieurs ci-dessus sont nos utilisations les plus basiques, certains Xi veulent l'utiliser pour compléter des opérations plus différentes, ce qui suit est, avant l'introduction,Tout d'abord, nous vous présentons notre logiciel de modélisation.. PC à LCD 2002 Voilà comment ça marche! Lorsque nous l'utilisons, nous ouvrons d'abord le fichier dans le coin supérieur gauche et créer un nouveau. Entrez notre largeur et hauteur, 6 * 8 ou 8 * 16 sont basés sur cela pour prendre le moule, vous pouvez définir la taille par vous-même.Il y a une sorte de vitesse dans le coin supérieur., et nous devons l'ouvrir une fois que nous avons réglé la taille. Une fois que vous avez tout sur le dessus, vous pouvez dessiner ce que vous voulez. parce que OLED est 128 x 64, notre taille maximale est celle-ci, nous pouvons écrire sur 128 x 64, dessiner, etc., ce qui sort est une image complète,qui est aussi une façon de remplir l'écran, et il y a une sorte de logiciel d'impression à l'arrière, qui est obtenu sous forme d'image, comme certains personnages d'anime. Maintenant que nous avons introduit l'outillage, nous sommes prêts à passer à nos opérations! 1Tracez une ligne droite 2: Afficher des images (comme certains personnages d'anime) C'est un peu long, il y a d'autres façons de jouer, à mettre à jour.
Habituellement, nous utilisons le même point que dans la figure ci-dessous quand nous voulons dessiner une ligne droite, nous obtenons toujours un point, c'est parce que la taille du caractère que nous utilisons généralement est 6 * 8 ou 8 * 16,et la taille du point à l'intérieur n'est pas rempli de l'ensemble du rectangle (expliqué ci-dessus), ce que nous devons faire est d'ouvrir notre logiciel de personnage et de rendre le point plus grand!
Personne à contacter: Mrs. Christina
Téléphone: +8618922869670
Télécopieur: 86-755-2370-9419