Vlastný font na displeji s kontrolerom HD44780

V dnešnej dobe grafických a plne farebných displejov sa pokúsime oživiť klasiku – dvojriadkový displej schopný zobraziť úžasných 16 znakov na riadok :-)

Vlastny font na HD44780

Kontroler displeja HD44780 obsahuje ASCII tabuľku znakov, ktoré možme použiť. Navyše je tam miesto pre osem vlastných znakov. V našom prípade si vytvoríme font pre čísla od 1 do 7 a znak stupňa. Povedzme, že sme si zostrojili teplomer zobrazujúci vnutornú a vonkajšiu teplotu, ktorú chceme opticky oddeliť od textových informácií zobrazovaných na displeji. Bohužial miesto je len pre 8 vlastných znakov, takže napríklad pre teploty väčšie ako 27 stupňov možme dať podmienku, že sa použije štandardný font.

Zapojenie LCD displeja

Zdrojový kód čísla šesť bude vyzerať asi takto:

byte six[8] = {
B00000,
B00000,
B11111,
B10000,
B11111,
B10001,
B11111,
B00000
};

ASCII tabuľka znakov, ktoré máme štandardne k dispozícii.

A nakoniec samotný zdrojový kód:

// Zdroj - http://www.arduino.cc/en/Tutorial/LiquidCrystal

#include <LiquidCrystal.h>

// Inicializujeme piny na ktorych je pripojene lcd.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

byte degree[8] = {
	B00000,
	B00000,
	B11100,
	B10100,
	B11100,
	B00000,
	B00000,
	B00000
};
byte one[8] = {
	B00000,
	B00000,
	B00001,
	B00001,
	B00001,
	B00001,
	B00001,
	B00000
};
byte two[8] = {
	B00000,
	B00000,
	B11111,
	B00001,
	B11111,
	B10000,
	B11111,
	B00000
};
byte three[8] = {
	B00000,
	B00000,
	B11111,
	B00001,
	B11111,
	B00001,
	B11111,
	B00000
};
byte four[8] = {
	B00000,
	B00000,
	B10010,
	B10010,
	B11111,
	B00010,
	B00010,
	B00000
};
byte five[8] = {
	B00000,
	B00000,
	B11111,
	B10000,
	B11111,
	B00001,
	B11111,
	B00000
};
byte six[8] = {
	B00000,
	B00000,
	B11111,
	B10000,
	B11111,
	B10001,
	B11111,
	B00000
};
byte seven[8] = {
	B00000,
	B00000,
	B11111,
	B00001,
	B00001,
	B00001,
	B00001,
	B00000
};
byte eight[8] = {
	B00000,
	B00000,
	B11111,
	B10001,
	B11111,
	B10001,
	B11111,
	B00000
};
byte smile[8] = {
	B00000,
	B00000,
	B01010,
	B01010,
	B00000,
	B10001,
	B01110,
	B00000
};
byte nine[8] = {
	B00000,
	B00000,
	B11111,
	B10001,
	B11111,
	B00001,
	B11111,
	B00000
};
void setup() {
  // Vytvorime znaky.
  lcd.createChar(0, degree);
  lcd.createChar(1, one);
  lcd.createChar(2, two);
  lcd.createChar(3, three);
  lcd.createChar(4, four);
  lcd.createChar(5, five);
  lcd.createChar(6, six);
  lcd.createChar(7, seven);  

  // Nastavime rozmer lcd - 16 znakov, 2 riadky.
  lcd.begin(16, 2);

  // Zobrazenie znakov, zacneme na pozicii znak 0, riadok 0.
  lcd.setCursor(0,0);
  lcd.write("arduino.sk");

  lcd.setCursor(0,1);
  lcd.write((byte)1);
  lcd.write((byte)2);
  lcd.write((byte)3);
  lcd.write((byte)4);
  lcd.write((byte)5);
  lcd.write((byte)6);
  lcd.write((byte)7);
  lcd.write("12345");

  lcd.setCursor(13,0);
  lcd.write((byte)2);
  lcd.write((byte)7);
  lcd.write((byte)0);

  lcd.setCursor(13,1);
  lcd.write((byte)1);
  lcd.write((byte)2);
  lcd.write((byte)0);
}

void loop() {
}

Vlastný znak môže byť čokoľvek od srdiečok až po indikátor stavu vybitia batérie. Nakoniec prikladám zopár inšpirácií – pozrite si tu, tiež tu a tu.