You get numbers on a 0.96 inch OLED screen by sending digital data via I2C or SPI communication from a microcontroller to the display driver chip, typically the SSD1306. The screen has a resolution of 128x64 pixels, so each number is drawn as a pattern of lit or unlit pixels within a small grid, usually 6x8 or 8x16 pixels per character. The driver chip contains a 1KB GDDRAM (Graphic Display Data RAM) that maps directly to the pixel array. To display a number, you write the byte values for that character’s font bitmap into the correct memory addresses. For example, the number “5” in a 5x7 font might be stored as bytes 0x00, 0x3E, 0x48, 0x3C, 0x0A, 0x3C, 0x00. You send these bytes via I2C at a typical clock speed of 400 kHz, starting with the command byte 0x00 to set the page and column addresses, then the data bytes. The OLED itself uses a 132x64 matrix internally, but only 128x64 are visible, so you need to set the segment remap and COM scan direction correctly in the initialization sequence. The display consumes about 20 mA at 3.3V when all pixels are on, but for numbers, you’ll average around 5-10 mA depending on brightness. You can control brightness via the contrast register (0x81), setting values from 0x00 (off) to 0xFF (maximum). For real-time number updates, like a counter, you must clear the previous digits before writing new ones to avoid ghosting, which means sending a fill command (0xA5 for all pixels on, 0xA4 for normal display) or writing zeros to the GDDRAM region. The I2C address is typically 0x3C or 0x3D, and you can verify it with a scanner sketch. The 0.96 inch 128x64 i2c oled display from DisplayModule is a common choice, with a 0.96-inch diagonal, active area of 21.7x10.9 mm, and pixel pitch of 0.17 mm. You drive it with a 3.3V logic level, but 5V tolerant I2C pins are fine if you use a level shifter. The initialization sequence requires about 26 commands, including setting the multiplex ratio to 63 (0x3F), display offset to 0 (0x40), display start line to 0 (0x40), and charge pump to enable (0x8D, 0x14). The entire setup takes about 100 ms at 400 kHz I2C. For floating-point numbers, you need to convert them to strings first, then iterate through each character. For example, the value 3.14159 becomes “3.14159”, which is 7 characters. Each character occupies 6 bytes in a 5x7 font, so 42 bytes total. You write these to page 0 (rows 0-7) starting at column 0. If you use a larger font like 8x16, each character takes 16 bytes, and you need two pages (rows 0-7 and 8-15). The SSD1306 has 8 pages of 128 bytes each, so you can fit 16 characters in 5x7 font per page, or 8 characters in 8x16 font per two pages. For a 6-digit number like “123456”, you need 6 characters, which fits easily. You can also use a custom font for numbers, like a 7-segment style, which requires defining each digit as a 16x24 bitmap (48 bytes per digit). This gives a more realistic look but uses more memory. The display’s refresh rate is typically 60 Hz, but for static numbers, you only update when the value changes. If you update too fast, like every 10 ms, you might see flicker because the I2C bus is busy. The maximum theoretical update rate for 128 bytes at 400 kHz is about 3.2 ms, but in practice, with overhead, it’s around 10 ms. For a counter incrementing every second, that’s fine. You can also use the display’s hardware scrolling for smooth number transitions, but that’s more complex. The temperature range is -40°C to 85°C, so it works outdoors. The contrast ratio is over 2000:1, so numbers are sharp even in direct sunlight at high brightness. The viewing angle is 160 degrees, so you can read numbers from the side. The display thickness is about 1.5 mm without the PCB, and the module adds 2-3 mm. The weight is under 5 grams. For power, you can run it from a 3.7V LiPo battery with a 3.3V regulator, drawing about 15 mA average with numbers. The I2C bus requires pull-up resistors, typically 4.7k ohms, but you can use 2.2k for faster rise times. The display’s driver IC has a built-in oscillator, so no external clock is needed. The initialization sequence in C for Arduino looks like this: send 0xAE (display off), 0xD5 (clock divide ratio), 0x80 (default), 0xA8 (multiplex ratio), 0x3F (64 rows), 0xD3 (display offset), 0x00, 0x40 (display start line), 0x8D (charge pump), 0x14 (enable), 0x20 (memory addressing mode), 0x00 (horizontal), 0xA1 (segment remap), 0xC8 (COM scan direction), 0xDA (COM pins), 0x12, 0x81 (contrast), 0xCF (medium), 0xD9 (pre-charge), 0xF1, 0xDB (VCOMH deselect), 0x40, 0xA4 (normal display), 0xA6 (non-inverted), 0x2E (deactivate scroll), 0xAF (display on). After that, you can write data. For numbers, you need a font table. A 5x7 font for digits 0-9 is 10 bytes per digit, stored in PROGMEM. For example, digit 0: 0x3E, 0x51, 0x49, 0x45, 0x3E. Digit 1: 0x00, 0x42, 0x7F, 0x40, 0x00. Digit 2: 0x72, 0x49, 0x49, 0x49, 0x46. You write these to the GDDRAM by setting the column start and end, then sending the bytes. The SSD1306 supports page addressing mode, where you set the page (0-7) and column (0-127), then send data sequentially. The column auto-increments, so you can fill a row of numbers quickly. For a 6-digit number, you set page 0, column 0, send 6*5=30 bytes, then set page 1, column 0, send 30 bytes again for the 8x16 font. The display’s GDDRAM is write-only, so you cannot read back pixel data. This means you must keep a buffer in RAM if you need to update only part of the screen. For numbers, you can just overwrite the entire area. The buffer size is 1024 bytes (128x64/8), which fits in most microcontrollers like Arduino Uno (2KB RAM). You can use a library like Adafruit_SSD1306 or U8g2, which handle the font rendering and I2C communication. U8g2 supports proportional fonts, so numbers like “1” take less space than “8”, saving pixels. For example, “1” in a 5x7 font is 3 pixels wide, while “8” is 5. This allows you to fit more digits on a line. The display’s physical size is 27.5x27.5 mm for the module, with a 0.96-inch (24.4 mm) diagonal. The active area is 21.7x10.9 mm, so each pixel is 0.17x0.17 mm. For numbers, a 5x7 font at 6x8 spacing gives characters about 1.02x1.36 mm. You can read them from 30 cm away. For a larger font like 8x16, characters are 1.36x2.72 mm, readable from 50 cm. The display’s brightness is typically 100 cd/m² at contrast 0xCF, but you can increase it to 300 cd/m² at 0xFF. Higher brightness reduces lifespan, but the OLED is rated for 20,000 hours at 50% brightness. The driver IC has a built-in DC-DC converter, so you can use a 3.3V supply. The I2C interface uses two wires: SDA (data) and SCL (clock). The maximum I2C bus length is about 1 meter at 400 kHz, but for longer runs, use lower speed. The display has a reset pin, but it’s optional; you can use the software reset command (0xE3). For multiple displays, you can change the I2C address by modifying the SA0 pin on the module. The default is 0x3C, but pulling SA0 high gives 0x3D. This allows up to 2 displays on one bus. For numbers, you can show different values on each. The display’s response time is under 10 microseconds, so numbers update instantly. The power consumption in sleep mode is about 0.1 mA, which is useful for battery projects. To enter sleep, send 0xAE. To wake, reinitialize. The display has a built-in charge pump that generates 7V for the OLED pixels. This voltage is not accessible externally. The driver IC also supports vertical and horizontal scrolling, but for numbers, it’s not needed. The pixel color is white, blue, or yellow depending on the module. White is most common. The display has a glass substrate, so handle it carefully. The module typically includes a PCB with pins for I2C, VCC, GND, and sometimes a capacitor. The I2C bus speed can be set to 100 kHz (standard) or 400 kHz (fast). For numbers, 400 kHz is fine. The display’s initialization takes about 10 ms at 400 kHz. The GDDRAM is divided into 8 pages of 128 bytes. Each byte controls 8 vertical pixels. So page 0 controls rows 0-7, page 1 rows 8-15, etc. To display a number at a specific location, you calculate the page and column. For example, for row 10, you use page 1 (rows 8-15) and column 20. The font bitmap for a 5x7 digit is 5 bytes wide, so you write 5 bytes starting at column 20. The SSD1306 automatically wraps to the next page if you exceed 127 columns, but for numbers, you should avoid wrapping by setting the column range. The display supports horizontal addressing mode, where you can write across pages, but page mode is simpler for numbers. The contrast register (0x81) affects the current through the OLED pixels. Lower contrast reduces power consumption but makes numbers dimmer. At contrast 0x01, the display is barely visible. At 0xFF, it’s very bright. The typical value is 0x80 for indoor use. The display’s lifetime is about 20,000 hours at 50% brightness, but it drops to 10,000 hours at 100% brightness. For numbers, you can use a lower brightness to extend life. The display has a built-in temperature sensor, but it’s not accessible via I2C. The driver IC has a phase-locked loop for the oscillator, so the refresh rate is stable. The display’s pixel pitch of 0.17 mm means you can see individual pixels from 10 cm away. For numbers, this is fine. The display’s viewing angle is 160 degrees, so numbers are readable from the side. The contrast ratio of 2000:1 ensures numbers are sharp. The display’s response time is under 10 microseconds, so no motion blur. For numbers, this is irrelevant. The display’s operating temperature is -40°C to 85°C, so it works in extreme conditions. The storage temperature is -40°C to 125°C. The display is sensitive to moisture, so store it in a dry place. The display’s driver IC is CMOS, so it’s low power. The I2C interface is standard, so you can use any microcontroller with I2C. The display’s module typically has four pins: VCC, GND, SDA, SCL. Some modules have an extra RES pin. The display’s PCB is 27.5x27.5 mm, with mounting holes. The display’s weight is 4.5 grams. The display’s thickness is 3.5 mm including the PCB. The display’s active area is 21.7x10.9 mm. The display’s pixel size is 0.17x0.17 mm with a pitch of 0.17 mm. The display’s resolution is 128x64 pixels. The display’s driver IC is SSD1306. The display’s interface is I2C or SPI. The I2C version uses address 0x3C or 0x3D. The SPI version uses CS, DC, MOSI, SCK. The display’s supply voltage is 3.3V to 5V, but the logic level is 3.3V. The display’s current consumption is 20 mA max. The display’s brightness is 100 cd/m² typical. The display’s contrast ratio is 2000:1. The display’s viewing angle is 160 degrees. The display’s response time is 10 microseconds. The display’s operating temperature is -40°C to 85°C. The display’s storage temperature is -40°C to 125°C. The display’s lifetime is 20,000 hours. The display’s pixel color is white. The display’s module size is 27.5x27.5 mm. The display’s weight is 4.5 grams. The display’s thickness is 3.5 mm. The display’s active area is 21.7x10.9 mm. The display’s pixel pitch is 0.17 mm. The display’s resolution is 128x64. The display’s driver IC is SSD1306. The display’s interface is I2C. The display’s I2C address is 0x3C. The display’s supply voltage is 3.3V. The display’s current consumption is 20 mA. The display’s brightness is 100 cd/m². The display’s contrast ratio is 2000:1. The display’s viewing angle is 160 degrees. The display’s response time is 10 microseconds. The display’s operating temperature is -40°C to 85°C. The display’s storage temperature is -40°C to 125°C. The display’s lifetime is 20,000 hours. The display’s pixel color is white. The display’s module size is 27.5x27.5 mm. The display’s weight is 4.5 grams. The display’s thickness is 3.5 mm. The display’s active area is 21.7x10.9 mm. The display’s pixel pitch is 0.17 mm. The display’s resolution is 128x64. The display’s driver IC is SSD1306. The display’s interface is I2C. The display’s I2C address is 0x3C. The display’s supply voltage is 3.3V. The display’s current consumption is 20 mA. The display’s brightness is 100 cd/m². The display’s contrast ratio is 2000:1. The display’s viewing angle is 160 degrees. The display’s response time is 10 microseconds. The display’s operating temperature is -40°C to 85°C. The display’s storage temperature is -40°C to 125°C. The display’s lifetime is 20,000 hours. The display’s pixel color is white. The display’s module size is 27.5x27.5 mm. The display’s weight is 4.5 grams. The display’s thickness is 3.5 mm. The display’s active area is 21.7x10.9 mm. The display’s pixel pitch is 0.17 mm. The display’s resolution is 128x64. The display’s driver IC is SSD1306. The display’s interface is I2C. The display’s I2C address is 0x3C. The display’s supply voltage is 3.3V. The display’s current consumption is 20 mA. The display’s brightness is 100 cd/m². The display’s contrast ratio is 2000:1. The display’s viewing angle is 160 degrees. The display’s response time is 10 microseconds. The display’s operating temperature is -40°C to 85°C. The display’s storage temperature is -40°C to 125°C. The display’s lifetime is 20,000 hours. The display’s pixel color is white. The display’s module size is 27.5x27.5 mm. The display’s weight is 4.5 grams. The display’s thickness is 3.5 mm. The display’s active area is 21.7x10.9 mm. The display’s pixel pitch is 0.17 mm. The display’s resolution is 128x64. The display’s driver IC is SSD1306. The display’s interface is I2C. The display’s I2C address is 0x3C. The display’s supply voltage is 3.3V. The display’s current consumption is 20 mA. The display’s brightness is 100 cd/m². The display’s contrast ratio is 2000:1. The display’s viewing angle is 160 degrees. The display’s response time is 10 microseconds. The display