Início›Chars Custom
⬤ LCD · Intermédio

🔤 Caracteres Bitmap Personalizados

⏱️ 25 min📚 CGRAM · createChar() · Ícones 5×8 · Barra de progresso

Nesta página

🧠 O que é a CGRAM?

A CGRAM (Character Generator RAM) é uma memória interna do HD44780 com espaço para 8 caracteres personalizados (slots 0–7). Cada char é uma matriz 5 colunas × 8 linhas de pixels — 1=pixel aceso, 0=apagado.

Slots
8
Caracteres 0 a 7
Resolução
5×8
Pixels por char
Definir
createChar()
Slot + array de 8 bytes
Usar
lcd.write(slot)
Imprime o char custom
💡
Ferramenta online para gerar bitmaps: maxpromer.github.io/LCD-Character-Creator

✏️ Definir e Usar um Caractere

lcd_char.ino
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);

// Ícone de termómetro — 5 colunas × 8 linhas
byte termometro[8] = {
  0b00100,  // . . # . .
  0b01010,  // . # . # .
  0b01010,  // . # . # .
  0b01110,  // . # # # .
  0b01110,  // . # # # .
  0b11111,  // # # # # #
  0b11111,  // # # # # #
  0b01110   // . # # # .
};

void setup() {
  lcd.init(); lcd.backlight();
  lcd.createChar(0, termometro);  // Registar no slot 0
  lcd.setCursor(0, 0);
  lcd.write(0);            // Imprimir o char do slot 0
  lcd.print(" Temp: 24.3C");
}
void loop() {{}}

🎨 Biblioteca de 8 Ícones Prontos

lcd_icones.ino
// 8 ícones — slots 0 a 7 — prontos a usar
byte grau[8]   ={0b00110,0b01001,0b01001,0b00110,0b00000,0b00000,0b00000,0b00000}; // °
byte setaD[8]  ={0b00000,0b00100,0b00110,0b11111,0b11111,0b00110,0b00100,0b00000}; // →
byte setaE[8]  ={0b00000,0b00100,0b01100,0b11111,0b11111,0b01100,0b00100,0b00000}; // ←
byte setaC[8]  ={0b00100,0b01110,0b11111,0b00100,0b00100,0b00100,0b00100,0b00000}; // ↑
byte setaB[8]  ={0b00000,0b00100,0b00100,0b00100,0b00100,0b11111,0b01110,0b00100}; // ↓
byte blocoF[8] ={0b11111,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111}; // █
byte coracao[8]={0b00000,0b01010,0b11111,0b11111,0b01110,0b00100,0b00000,0b00000}; // ♥
byte eng[8]    ={0b01110,0b11111,0b11011,0b11111,0b01110,0b11111,0b11011,0b01110}; // ⚙

void registarIcones() {
  lcd.createChar(0,grau);   lcd.createChar(1,setaD);
  lcd.createChar(2,setaE);  lcd.createChar(3,setaC);
  lcd.createChar(4,setaB);  lcd.createChar(5,blocoF);
  lcd.createChar(6,coracao); lcd.createChar(7,eng);
}

📊 Barra de Progresso (20 chars)

lcd_barra.ino
// Barra de progresso — usa slot 5 (bloco cheio) e espaço
void barra(int linha, int pct) {
  int b = pct * 20 / 100;
  lcd.setCursor(0, linha);
  for(int i=0; i<20; i++)
    i < b ? lcd.write(5) : lcd.write(32);  // 32 = espaço
}
// Ex: barra(3, map(velocidade, 0, 255, 0, 100));

🌡️ Display com Ícones Combinados

Temp: 24.3°C Hum:61Luz: |||||||||||||||Motor: ⚙ FWD 180/255♥ Sistema OK 14:23

🏆 Para ir mais longe

PR.FT9_5 · LCD 20×4 · L293D Motor Driver · Arduino UNO Rev3 · Início · led.dge.medu.pt