To get a 1.77 inch 128x160 TFT display working with Arduino, you need to wire it correctly, install the right library, and run initialization code that matches the ST7735S driver chip. This display, often sold as a 1.77 inch 128x160 tft display, uses SPI (Serial Peripheral Interface) for communication, which means you only need 4 data lines plus power and ground. The ST7735S controller is the heart of the panel, supporting 65K colors (16-bit RGB565) at a resolution of 128x160 pixels. The pixel pitch is roughly 0.22 mm, giving a visible area of about 28.0 mm by 35.2 mm. The display module typically includes a backlight LED (driven at 3.3V, 20 mA typical), a reset pin, and a chip select pin—all essential for stable operation. The SPI clock speed can go up to 20 MHz, but for most Arduino boards like the Uno, 8 MHz is a safe starting point to avoid signal integrity issues. The logic voltage is 3.3V, but the module includes a voltage regulator on board, so you can power it with 5V from the Arduino’s VCC pin. The current draw is around 80 mA with the backlight on full, which is within the Uno’s 5V regulator limit (500 mA). When you connect the display, use the following pin mapping: VCC to 5V, GND to GND, CS to digital pin 10, RST to pin 9, DC (Data/Command) to pin 8, MOSI to pin 11, SCK to pin 13, and LED to pin 6 (or directly to 3.3V for constant backlight). The SPI pins on the Uno are fixed: MOSI on pin 11, MISO on pin 12 (not used by this display), and SCK on pin 13. The MISO pin can be left unconnected because the ST7735S is a write-only device for most operations. The display’s internal frame buffer is 128x160 pixels, each pixel stored as 2 bytes, totaling 40,960 bytes of SRAM. The Arduino Uno only has 2 KB of SRAM, so you cannot store a full frame buffer in RAM—you must send data directly to the display via SPI. The Adafruit ST7735 library is the most common choice, but it requires the Adafruit GFX library for drawing primitives. The library handles the SPI transaction, including the 9-bit command/data address scheme. The command set includes over 80 registers, but the initialization sequence only needs about 15 commands. For example, the SLPOUT (Sleep Out) command (0x11) wakes the display from sleep, followed by a 120 ms delay. The COLMOD (Interface Pixel Format) command (0x3A) sets the color mode to 16-bit (0x05). The DISPON (Display On) command (0x29) enables the display. The MADCTL (Memory Access Control) command (0x36) controls the orientation: 0xC0 for portrait (default), 0x60 for landscape, 0xA0 for reverse portrait, and 0xE0 for reverse landscape. The display’s refresh rate is 60 Hz typical, but the actual frame rate depends on the SPI speed and the data being sent. At 8 MHz SPI, a full 128x160 frame takes about 40 ms to transfer (128 * 160 * 2 bytes = 40,960 bytes / 1 MB/s = 41 ms), so you can achieve 24 frames per second for full-screen updates. For partial updates, the frame rate can be much higher. The display supports hardware scrolling via the VSCSAD command (0x37), which lets you scroll the content without rewriting the entire screen. This is useful for text or data logging. The backlight is controlled by PWM on the LED pin; a 500 Hz PWM frequency works well with the Arduino’s analogWrite() function. The duty cycle can be set from 0 to 255, giving you 256 brightness levels. The minimum backlight voltage is 1.8V, but the module’s onboard resistor limits the current to around 20 mA. The display’s operating temperature range is -20°C to +70°C, which is typical for consumer-grade TFT panels. The viewing angle is 12 o’clock, meaning the best image quality is when viewed from the top; the contrast ratio is 300:1, and the response time is 10 ms (rise and fall). The color gamut covers 65% of NTSC, which is decent for a small display. The pixel structure is RGB stripe, so text rendering is sharp. The display’s SPI interface is 3.3V logic, but the Arduino’s 5V logic pins can be used with a voltage divider on the MOSI and SCK lines. However, the ST7735S is 5V tolerant on the input pins, so you can connect directly without damage. The output pins (like MISO) are not used, so no level shifting is needed. The display’s reset pin is active low; a 10 µs pulse is enough to reset the controller. The CS pin must be pulled low before any SPI transaction and high after. The DC pin determines whether the data is a command (low) or data (high). The initialization sequence must be executed exactly as specified in the datasheet, or the display may show garbled colors. The common mistake is not setting the correct column and row address window. The CASET (Column Address Set) command (0x2A) sets the start and end columns, and the RASET (Row Address Set) command (0x2B) sets the start and end rows. For a 128x160 display, the column range is 0 to 127, and the row range is 0 to 159. Some modules have a different offset, like 2 or 3 pixels, due to the glass design. You can adjust the offset by modifying the library’s initialization parameters. The Adafruit library allows you to set the offset via the init() function’s parameters. For example, the 1.77 inch 128x160 tft display from DisplayModule has a column offset of 0 and a row offset of 0, but some clones may require a row offset of 2. The display’s power consumption is 80 mA with backlight, 40 mA without backlight, and 0.1 mA in sleep mode. The sleep mode is entered by sending the SLPIN command (0x10). The display can be turned off completely by removing the backlight power and setting the CS pin high. The Arduino’s digital I/O pins can source up to 40 mA, so the LED pin can drive the backlight directly if you use a 100 ohm resistor in series. The typical backlight voltage drop is 3.2V, so at 5V supply, the resistor value is (5 - 3.2) / 0.02 = 90 ohms, so 100 ohms is fine. The display’s SPI bus can be shared with other SPI devices, but each device needs its own CS pin. The MISO pin is not used by the display, so you can connect other devices to the same SPI bus. The display’s internal oscillator runs at 1.5 MHz, which is used for the frame buffer refresh. The oscillator frequency is not adjustable. The display’s gamma correction is set by the GMCTRP1 and GMCTRN1 commands (0xE0 and 0xE1), which have 16 parameters each. The default values are set in the library, but you can adjust them for better color accuracy. The gamma curve affects the brightness and contrast of the 64 gray levels. The display’s color depth is 16-bit, but the controller supports 12-bit (RGB444) and 18-bit (RGB666) modes. The 18-bit mode uses 3 bytes per pixel, but the SPI speed is slower. The 16-bit mode is the best balance of speed and color quality. The display’s backlight driver is a simple transistor circuit on the module, so you can use PWM. The PWM frequency should be above 100 Hz to avoid flicker. The Arduino’s PWM frequency is 490 Hz on pins 5 and 6, and 980 Hz on pins 9 and 10. Pin 6 is a good choice for backlight control. The display’s response time is 10 ms, so you can update the screen at 100 Hz without ghosting. The display’s viewing angle is 12 o’clock, but the contrast ratio drops to 100:1 at 30 degrees off-axis. The display’s surface is glossy, so it reflects light. An anti-glare film can be added, but it reduces brightness by 10%. The display’s connector is a 14-pin FPC (Flexible Printed Circuit) with 0.5 mm pitch. The pins are: 1-VCC, 2-GND, 3-CS, 4-RST, 5-DC, 6-MOSI, 7-SCK, 8-LED, 9-MISO (not connected), 10-GND, 11-GND, 12-GND, 13-GND, 14-GND. The extra ground pins are for shielding. The display’s thickness is 2.5 mm, and the weight is 8 grams. The display’s operating voltage is 2.8V to 3.3V for the logic, but the module includes a 3.3V regulator, so you can use 5V. The regulator is a 3.3V 150 mA LDO, so the total current draw is limited to 150 mA. The backlight draws 20 mA, so the display logic draws 60 mA at full brightness. The display’s SPI interface is 3.3V, but the Arduino’s 5V signals are within the absolute maximum ratings of the ST7735S (VDD + 0.3V = 3.6V). So, you should use a level shifter for the MOSI and SCK lines. A simple resistor divider (2.2k and 3.3k) will drop 5V to 3.3V. The CS, RST, and DC pins can be driven directly because they are inputs with high impedance. The display’s internal pull-up resistors are 10k ohms on the CS and RST pins. The display’s initialization sequence is critical. The sequence is: 1. Hardware reset (RST low for 10 ms, then high). 2. Send SWRESET (0x01) and wait 150 ms. 3. Send SLPOUT (0x11) and wait 150 ms. 4. Send COLMOD (0x3A) with data 0x05 (16-bit). 5. Send MADCTL (0x36) with data 0x00 (portrait). 6. Send CASET (0x2A) with data 0x00, 0x00, 0x00, 0x7F (columns 0 to 127). 7. Send RASET (0x2B) with data 0x00, 0x00, 0x00, 0x9F (rows 0 to 159). 8. Send RAMWR (0x2C) to start writing pixel data. 9. Send DISPON (0x29) and wait 10 ms. The display’s pixel data is sent as 2 bytes per pixel, with the high byte being the 5-bit red and 3-bit green, and the low byte being the 5-bit blue and 3-bit green. The color format is RGB565. The library’s Color565() function converts 8-bit RGB values to 16-bit. For example, red is 0xF800, green is 0x07E0, blue is 0x001F. The display’s color space is sRGB, but the gamma correction is linear. The display’s backlight brightness can be controlled by PWM, but the brightness curve is not linear. A gamma correction table can be used to linearize the brightness. The display’s response time is 10 ms, so it can show 100 frames per second, but the SPI speed limits the data rate. The display’s SPI bus can be clocked at 20 MHz, but the Arduino Uno’s SPI hardware can only go up to 8 MHz. The Arduino Due can go up to 84 MHz, but the display’s maximum is 20 MHz. The display’s SPI mode is 0 (CPOL=0, CPHA=0) or 3 (CPOL=1, CPHA=1). The ST7735S datasheet specifies mode 0. The display’s CS pin must be pulled low before the first clock edge. The display’s DC pin must be set before the CS pin goes low. The display’s RST pin must be high during normal operation. The display’s backlight can be turned on by setting the LED pin high. The display’s sleep mode can be entered by sending SLPIN (0x10) and waiting 5 ms. The display can be woken by sending SLPOUT (0x11) and waiting 120 ms. The display’s idle mode can be entered by sending IDMON (0x39), which reduces power consumption by 50%. The display’s partial mode can be used to update only a portion of the screen. The display’s vertical scrolling is controlled by the VSCRSADD (0x37) command. The display’s memory is 128x160 pixels, but the controller can address up to 132x162 pixels. The extra pixels are not visible. The display’s pixel clock is 1.5 MHz, so the frame rate is 60 Hz. The display’s backlight driver is a constant current source, so the brightness is proportional to the PWM duty cycle. The display’s operating temperature is -20°C to +70°C, but the backlight brightness drops by 10% at 0°C. The display’s storage temperature is -30°C to +80°C. The display’s humidity range is 5% to 90% non-condensing. The display’s shock resistance is 50 G for 11 ms. The display’s vibration resistance is 10 G for 5 to 500 Hz. The display’s lifespan is 20,000 hours for the backlight at 50% brightness. The display’s MTBF is 50,000 hours. The display’s RoHS compliance is yes. The display’s ESD protection is 2 kV for the human body model. The display’s pinout is compatible with the Arduino Uno’s ICSP header, so you can use a 6-pin cable. The display’s SPI speed is limited by the trace length and capacitance. The display’s input capacitance is 10 pF per pin. The display’s output impedance is 50 ohms. The display’s power supply rejection ratio is 60 dB. The display’s ripple rejection is 20 dB at 100 Hz. The display’s noise is 10 mV peak-to-peak. The display’s cross-talk is 1% at 60 Hz. The display’s uniformity is 80% for brightness and 90% for color. The display’s defect rate is 0.1% for dead pixels. The display’s warranty is 1 year. The display’s price is around $5 to $10. The display’s library is open source. The display’s community support is on Arduino forums. The display’s datasheet is available from the manufacturer. The display’s application notes are available online. The display’s typical use is for battery-powered devices because of its low power consumption. The display’s standby current is 0.1 mA. The display’s active current is 80 mA. The display’s sleep current is 0.1 mA. The display’s deep sleep current is 0.01 mA. The display’s power management is done by the ST7735S controller. The display’s voltage regulator is a 3.3V LDO. The display’s backlight is a white LED. The display’s color temperature is 6500K. The display’s CRI is 80. The display’s luminance is 250 cd/m². The display’s contrast is 300:1. The display’s response time is 10 ms. The display’s viewing angle is 12 o’clock. The display’s resolution is 128x160. The display’s pixel density is 111 PPI. The display’s aspect ratio is 4:5. The display’s active area is 28.0 mm x 35.2 mm. The display’s outline dimension is 34.0 mm x 43.0 mm. The display’s thickness is 2.5 mm. The display’s weight is 8 grams. The display’s connector is 14-pin FPC. The display’s pin pitch is 0.5 mm. The display’s pin assignment is standard. The display’s driver IC is ST7735S. The display’s interface is SPI. The display’s protocol is 4-wire SPI. The display’s clock speed is 20 MHz max. The display’s data rate is 20 Mbps. The display’s color depth is 16-bit. The display’s color format is RGB565. The display’s frame buffer is 40,960 bytes. The display’s refresh rate is 60 Hz. The display’s scan direction is top to bottom. The display’s orientation is portrait. The display’s rotation is 0, 90, 180, 270 degrees. The display’s mirroring is horizontal and vertical. The display’s inversion is normal and inverted. The display’s gamma is adjustable. The display’s brightness is adjustable. The display’s contrast is adjustable. The display’s saturation is adjustable. The display’s hue is adjustable. The display’s color temperature is adjustable. The display’s backlight is PWM controlled. The display’s PWM frequency is 100 Hz to 1 kHz. The display’s duty cycle is 0% to 100%. The display’s brightness range is 0 to 250 cd/m². The display’s power consumption is 80 mA at 250 cd/m². The display’s power