Komma igång med OLED-displayer (11 / 16 steg)
Steg 11: Hur man rita en kvadrat?
Vi kan använda följande kod för att rita en kvadrat på vår skärm:
#include //Include tråd bibliotek för I2C kommunikation
#define höjd 64
#define bredd 128
CONST int RST = 10; Tilldela stift 10 för återställning
int i; Ställ in variabeln i som heltal
statiska unsigned char array [1024]; Buffert array
void setup() {
pin_init(); Initiera pins
initialize_OLED(); Initiera skärm
MEMSET (array, 0, sizeof(array)); Initiera arrayen med 0s
Square(117,127,53,63); Rita kvadrat
Flush(); Skicka data
}
void loop() {
}
void pin_init() {
Serial.BEGIN(9600); Ange baud för seriell överföring
pinMode (RST, OUTPUT); Ange första som utgång
}
void initialize_OLED() {
Wire.BEGIN(); Initiera I2C gränssnitt
digitalWrite (RST, låg); Ange första pin låg
Delay(100); Vänta 100 ms
digitalWrite (RST, hög); Ange första pin hög
Wire.beginTransmission(0x3D); Börja meddelandet med slav
Wire.write(0x00); Kommandot ström
Wire.write(0xAE); Ställ in skärm
Wire.write(0xD5); Ställa in displayen klockfrekvens klyftan förhållandet/oscillator
Wire.write(0x80);
Wire.write(0xA8); Ställ in multiplex förhållandet
Wire.write(0x3F);
Wire.write(0xD3); Ställ in displayen offset
Wire.write(0x00);
Wire.write(0x40); Ställ in displayen startlinjen
Wire.write(0x8D); Ställ in charge pump
Wire.write(0x14); VCC genereras av inre DC/DC krets
Wire.write(0xA1); Ställa in segmentet re-karta
Wire.write(0xC0); Ange COM-utgång scan riktning
Wire.write(0xDA); Ange COM pins maskinvarukonfiguration
Wire.write(0x12);
Wire.write(0x81); Ange kontrastkontroll
Wire.write(0xCF);
Wire.write(0xD9); Förväg ändrade viss
Wire.write(0xF1);
Wire.write(0xDB); Inställd VCOMH avmarkerat nivå
Wire.write(0x40);
Wire.write(0xA4); Ange hela displayen på/av
Wire.write(0xA6); Ställ in normal/inversen display
Wire.write(0x20); Ställ in minne adress läge
Wire.write(0x00); Horisontella
Wire.write(0xAF); Ange visning på
Wire.endTransmission(); Avsluta kommunikation med slav
}
/ * Funktion för att rita square * /
void square (int x1 int x2, int y1, int y2) {
int x, y; Definiera x och y som heltal variabler
Wire.beginTransmission(0x3D); Börja meddelandet med slav
för (x = x1, x = bredd) || (y < 0) || (y > = höjd)) {//Check avgränsningar
hemkomst.
}
annat {
Array [x + (y/8) * bredd] | = _BV((y%8)); Store pixel i en matris
}
}
void Flush() {
Wire.beginTransmission(0x3D); Börja meddelandet med slav
Wire.write(0x00); Kommandot ström
Wire.write(0x00); Ställa in lägre kolumn startadressen för sidan adressering läge
Wire.write(0x10); Ställa högre kolumn startadressen för sidan adressering läge
Wire.write(0x40); Ställ in displayen startlinjen
Wire.endTransmission(); Avsluta kommunikation med slav
unsigned char twbrbackup = TWBR; Två tråd bithastighet registrera
TWBR = 12; Inställd på 400 kHz
för (osignerad kort q = 0; q < (bredd * höjd/8), q ++) {
Wire.beginTransmission(0x3D); Börja meddelandet med slav
Wire.write(0x40); Dataström
för (unsigned char w = 0; w < 16; w ++) {
Wire.write(array[q]); Överföra data som ska visas
q ++;
}
q--;
Wire.endTransmission(); Avsluta kommunikation med slav
}
TWBR = twbrbackup;
}
Den kvadratiska funktionen tar fyra argument, en start- och slutpunkt på x och y axel, ange höjd och bredd av våra rektangel. Sedan ritas fyra linjer självständigt med en gång pixel funktion.
Den första raden dras är den nedersta raden av våra torget från x1-x2 på y1-axeln. Den andra raden kan dras är den övre raden i våra torget från x1-x2 på y2-axeln. Den tredje raden dras är till vänster på vår torget från y1-y2 på x1 axeln. Den sista raden dras är till höger i våra torget från y1-y2 på x2 axeln. När alla rader pixlar har lagrats i matrisen, användas spola funktionen för att visa de fyra raderna. Ovanför ligger bilden av en 10 x 10 pixlar torget det övre högra hörnet av skärmen.