Comprendere il principio del display OLED - Vari modi di utilizzare i moduli OLED
Il modulo OLED ha quattro modalità di funzionamento, vale a dire interfacce parallele 6800 e 8080, modalità di interfaccia SPI seriale a 4 fili e modalità di interfaccia IIC.La relazione tra le impostazioni BS1/BS2 e la modalità di interfaccia del modulo è illustrata nella tabella seguente::
L'impostazione predefinita del modulo OLED SAEF Technology è BS0 a GND, BS1 e BS2 a VCC (modalità 8080), se si desidera impostarlo su altre modalità,devi modificare le impostazioni BS0-BS2 con un saldatore sul retro dell'OLED(Cambiamento hardware)
Dallo schema, possiamo sapere che ci sono un totale di 16 perni disegnati, e delle 16 linee, abbiamo usato solo 15 perni, e una di loro è appesa.E ne rimangono 13.In modalità diverse, il numero di linee di segnale di cui abbiamo bisogno è diverso, in modalità 8080, tutti i 13 sono necessari, uno dei quali è comune, cioè la linea di reset RST (RES),che possiamo collegare direttamente al reset dell'MCU (per confermare che il metodo di reset è lo stesso)In modalità IIC, sono necessarie solo 2 righe!
La modalità di lavoro dell'IIC richiede solo due linee, e la modalità di lavoro dell'IIC è usare due fili per simulare l'IIC per ottenere i dati.
Il controller OLED è SSD1306, cioè: lo schermo nudo è alimentato da SSD1306, che è anche un chip driver led più utilizzato.
Memoria video del modulo OLED
L'OLED stesso non ha memoria video e la sua memoria video dipende da SSD1306 per fornire.Ogni pagina contiene 128 byte, un totale di 8 pagine, che è esattamente 128 * 64 dimensioni di matrice di punti.
Tuttavia, dato che l'OLED non può controllare una matrice di punti alla volta, può controllare solo una matrice di 8 punti; ed è un controllo di spazzatura verticale;
Poiché ogni scrittura è scritta in byte, c'è un problema, se usiamo la modalità solo scrittura per gestire il modulo, allora, dobbiamo scrivere 8 punti alla volta, quindi quando disegniamo un punto,dobbiamo capire lo stato corrente di ogni bit del byte dove il punto da impostare si trova (0/1In caso contrario, i dati scritti sovrascriveranno lo stato precedente, e il risultato sarà che alcuni punti che non devono essere visualizzati vengono visualizzati,o quelli che dovrebbero essere visualizzati non sono visualizzati. Nella modalità di lettura, possiamo leggere il byte da scrivere prima, ottenere la situazione attuale, e poi scriverlo nel grammo dopo aver modificato il bit da riscrivere,in modo da non influenzare la situazione precedenteTuttavia, questo richiede la capacità di leggere la GRAM, per la modalità SPI a 3 o 4 fili, il modulo non supporta la lettura e la modalità di lettura->-to-> scrittura è anche relativamente lenta.
Quindi il metodo che usiamo è quello di creare un GRAM OLED (totalmente 128 byte) all'interno del STM32, e ad ogni modifica, modificare solo il GRAM sul STM32 (in realtà SRAM), e dopo la modifica,scrivere il GRAM sul STM32 al GRAM OLED in una sola voltaNaturalmente, questo metodo ha anche degli svantaggi, cioè, per i microcontrollori con una SRAM molto piccola (come la serie 51), è più fastidioso.
Memoria video di OLED
Il formato di archiviazione è il seguente:
0 1 2 3... 127
//[1]0 1 2 3... 127
//[2]0 1 2 3... 127
//[3]0 1 2 3... 127
//[4]0 1 2 3... 127
//[5]0 1 2 3... 127
//[6]0 1 2 3... 127
//[7]0 1 2 3... 127
u16 OLED_GRAM[128][8];
Aggiornare la memoria video sul display LCD
nulo OLED_Refresh_Gram (nulo)
{
u8 i, n;
per ((i=0; i<8; i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD); Imposta l'indirizzo della pagina (0~7)
OLED_WR_Byte (0x00,OLED_CMD); Impostare la posizione di visualizzazione indirizzo inferiore della colonna
OLED_WR_Byte (0x10,OLED_CMD); Impostare la posizione di visualizzazione indirizzo di altezza della colonna
per ((n=0; n<128; n++)OLED_WR_Byte ((OLED_GRAM[n][i],OLED_DATA);
}
}
comando SSD1306
1: comando 0X81: impostare il contrasto. contiene due byte, il primo 0X81 è il comando, e il successivo byte è il valore del contrasto da impostare.più luminoso sarà lo schermo.
2: comando 0XAE/0XAF: 0XAE per disattivare il comando di visualizzazione; 0XAF per attivare il comando di visualizzazione.
3: comando 0X8D: contiene 2 byte, il primo è la parola di comando, il secondo è il valore impostato, il secondo byte di BIT2 indica lo stato di commutazione della pompa di carica, il bit è 1,la pompa di carica è accesaQuando il modulo viene inizializzato, questo deve essere abilitato, altrimenti non vedrai la schermata.
4: comando 0XB0~B7: utilizzato per impostare l'indirizzo della pagina e le tre cifre inferiori corrispondono all'indirizzo della pagina del GRAM.
5: comando 0X00~0X0F: viene utilizzato per impostare le quattro cifre inferiori dell'indirizzo della colonna iniziale quando viene visualizzato.
6: comando 0X10~0X1F: Usato per impostare l'indirizzo della colonna di avvio del display con quattro cifre in più.
Per ulteriori comandi, si prega di fare riferimento a questo, si consiglia vivamente di vederlo, è molto dettagliato: SSD1306 (OLED driver chip) istruzioni in dettaglio
Dopo aver introdotto la modalità di lavoro e il driver chip, possiamo iniziare a utilizzare questo modulo IIC OLED
Codice dettagliato
#define OLED_CMD 0 // scrivere comando
#definire OLED_DATA 1 //Scrivere dati
Inizializza l'OLED
Inizializza l' SSD1306
nulo OLED_Init (nulo)
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ACCESSIBILE); Abilitare l'orologio sulla porta A
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; uscita push-pull
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; velocità 50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); Inizializza il GPIO
GPIO_SetBits ((GPIOA,GPIO_Pin_5 in GPIO_Pin_7);
delay_ms(200);
Display disattivato
L'indirizzo della colonna bassa è impostato
L'indirizzo della colonna alta è impostato
OLED_WR_Byte ((0x40,OLED_CMD);//--indicare l'indirizzo della linea di partenza
L'indirizzo della pagina è fissato
L'accesso al mercato è limitato a un numero limitato di utenti.
L'interfaccia di riferimento è la seguente:
OLED_WR_Byte ((0xA1,OLED_CMD);//ricartazione del segmento di set
L'intervallo di velocità è il seguente:
L'accesso al mercato è limitato a una parte dei prodotti in commercio.
L'impostazione è la seguente:
Direzione di scansione
Display offset
L'accesso al mercato è limitato a un numero limitato di utenti.
Dispositivi per la distribuzione di dati
L'accesso al mercato è limitato a un numero limitato di utenti.
Dispositivi per la registrazione dei dati
L'accesso al mercato è limitato a un numero limitato di utenti.
L'intervallo di carica è determinato in base al numero di ore di carica.
L'interfaccia di controllo è la seguente:
L'interfaccia di riferimento è la seguente:
L'interfaccia di controllo è la seguente:
L'interfaccia di riferimento è la seguente:
L'interfaccia di riferimento è la seguente:
L'impostazione di caricamento deve essere effettuata in modo da consentire l'utilizzo di una serie di dispositivi di caricamento.
L'interfaccia di controllo è la seguente:
L'interfaccia OLED_WR_Byte ((0xAF,OLED_CMD);//--accendere il pannello OLED}
OLED_Clear(); Spegni lo schermo, si consiglia di pulire lo schermo prima dopo ogni inizializzazione è completata
Funzione di cancellazione dello schermo, dopo aver cancellato lo schermo, tutto lo schermo è nero!
nulo OLED_Clear (nulo)
{
u8 i, n;
per ((i=0; i<8; i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD); Imposta l'indirizzo della pagina (0~7)
OLED_WR_Byte (0x00,OLED_CMD); Impostare la posizione di visualizzazione indirizzo inferiore della colonna
OLED_WR_Byte (0x10,OLED_CMD); Impostare la posizione di visualizzazione indirizzo di altezza della colonna
per ((n=0; n<128; n++)OLED_WR_Byte(0,OLED_DATA);
} // Aggiorna il display
}
Nell'auto modulo che di solito usiamo, ci sono due modi comuni per prendere il modulare, uno è 6 * 8, e l'altro è 8 * 16,la prima è quella di prendere i caratteri che vogliamo in una tabella rettangolare con 8 righe e 6 colonne, e la seconda consiste nel rimuovere i caratteri in una tabella rettangolare con 16 righe e 8 colonne.lo spazio per la pagina successiva deve essere utilizzatoQuindi abbiamo la dimensione del carattere che di solito usiamo, naturalmente, questi sono i formati di carattere comunemente utilizzati, possiamo anche creare la nostra dimensione preferita attraverso il software di modulazione dei caratteri.
/* Visualizza un carattere nella posizione specificata, inclusi alcuni caratteri
x:0~127
y:0~63
Dimensione: selezionare il carattere 16/12*/
il numero di immagini in formato OLED_ShowChar (u8 x,u8 y,u8 chr,u8 Char_Size)
{
unsigned char c=0,i=0;
c=chr-' '; Il valore di offset può essere ottenuto dal modello di carattere, il primo è " ', e il carattere corrispondente può essere ottenuto sottrando
if(x>Max_Column-1) {x=0; y=y+2; } //Max_Column: Colonna massima: 128; x: imposta il numero di colonne; y: imposta il numero di pagine
if(Char_Size ==16) // In questo caso è necessaria la stessa colonna di due pagine e la matrice a punti di 8*16
{
OLED_Set_Pos(x,y); Se x = y = 2, quindi impostare alla colonna 3 a pagina 3, nota: ci sono solo otto righe per pagina
per ((i=0; i<8; i++)
OLED_WR_Byte ((F8X16[c*16+i],OLED_DATA); incrementando l'i, i punti vengono disegnati in un ciclo e tutte le 8 righe della seconda colonna a pagina 2 vengono scritte nei dati
OLED_Set_Pos(x,y+1); Dal momento che il numero di punti non è sufficiente, è necessario continuare i punti nella colonna 2 a pagina 3
per ((i=0; i<8; i++)
OLED_WR_Byte ((F8X16[c*16+i+8],OLED_DATA); continuare a completare il disegno fino alla fine del punto 16
}
altro
{
OLED_Set_Pos ((x,y); matrice a punti 6x8, non è necessario che altre pagine continuino la pittura
per ((i=0; i<6; i++)
OLED_WR_Byte ((F6x8[c][i],OLED_DATA); In un array bidimensionale, C controlla le righe e I controlla le colonne, quindi non sono necessarie altre operazioni per completare il disegno
}
}
Il seguente se ((x>120) non è un errore, perché il precedente x+=8; C'è una spiegazione nelle note seguenti, quindi puoi pensarci.
void OLED_ShowString ((u8 x,u8 y,u8 *chr,u8 Char_Size) // Visualizza la stringa
{
char non firmato j=0;
mentre (chr[j]!='0') // Controlla se la stringa finisce
{
OLED_ShowChar ((x,y,chr[j],Char_Size); Disegna i caratteri uno per uno
x + = 8; x è impostato su una colonna, la dimensione di un carattere è 8 * 16, cioè la riga è 16 e la colonna è 8, e ogni volta che viene visualizzato come uno, è necessario spostare 8 colonne alla colonna superiore
se(x>120) {x=0; y+=2; } // Il massimo è di 128 colonne, se viene superato, è necessario ricominciare dalla colonna zero, perché è necessario altre pagine per continuare la pittura in questo momento,per evitare sovrapposizioni, hai bisogno di y + = 2.
j++; Disegnare stringhe in loop
}
}
2 numeri vengono visualizzati, entrambi scritti nel codice sottostante, e va notato che il "" sottostante rappresenta il valore ASCII di 32
m^n funzione
U32 oled_pow ((u8 m,u8 n)
{
u32 risultato=1;
mentre ((n--) risultato*=m;
risultato di ritorno;
}
Visualizza 2 numeri
x,y: coordinate di partenza
len: numero di cifre del numero
dimensione: la dimensione del carattere
modalità: modalità 0, modalità di riempimento;
Num: valore numerico (0~4294967295);
nulo OLED_ShowNum ((u8 x,u8 y,u32 num,u8 len,u8 size2)
{
u8 t,temp;
u8 enshow=0;
per t=0; t { Temp=(num/oled_pow(10,len-t-1))%10; se ((mostrare==0&&t<(len-1)) { se ((temp==0) { L'indicatore OLED_ShowChar ((x+(size2/2) *t,y,' ',size2); continuare; {\pos (192,220) } altrimenti mostra=1; } Display OLED Char ((x+(size2/2) *t,y,temp+'0',size2); } I diversi sopra sono il nostro uso più basilare, alcuni Xi vogliono usarlo per completare operazioni più diverse, il seguente è, prima dell'introduzione,per prima cosa introdurre il nostro software di modellazione comunemente utilizzato. PC a LCD 2002 Ecco come funziona! Quando lo usiamo, apriamo prima il file nell'angolo in alto a sinistra e ne creiamo uno nuovo.C'e' una cosa simile a un cambio nell'angolo in alto., e dobbiamo aprirlo una volta che abbiamo impostato la dimensione. Una volta che avete tutto sopra, potete disegnare quello che volete. perché OLED è 128 x 64, la nostra dimensione massima è questo, possiamo scrivere su 128 x 64, disegnare, ecc, ciò che esce è un quadro completo,che è anche un modo per riempire lo schermo, e c'è una sorta di software di impressione sul retro, che viene ottenuto come un'immagine, come alcuni personaggi di anime. Ora che abbiamo introdotto l'attrezzatura, siamo pronti a passare alle nostre operazioni! 1Disegna una linea retta. 2: Mostra immagini (come alcuni personaggi di anime) Sembra un po' lungo, ci sono altri modi di giocare, per aggiornarlo.
Di solito usiamo lo stesso punto come nella figura qui sotto quando vogliamo disegnare una linea retta, otteniamo sempre un punto, questo è perché la dimensione del carattere che generalmente usiamo è 6 * 8 o 8 * 16,e la dimensione del punto all'interno non è piena dell'intero rettangolo (spiegato sopra), quello che dobbiamo fare è aprire il nostro software di caratteri e rendere il punto più grande!
Persona di contatto: Mrs. Christina
Telefono: +8618922869670
Fax: 86-755-2370-9419