2 Eylül 2026 Çarşamba

 Arduino 16x2 Karakter LCD Özel Karakter Uygulaması

16x2 karakter LCD’de özel karakterler oluşturmak ve görüntülemek mümkündür. Bu, özellikle standart ASCII karakter kümesinin parçası olmayan bir karakteri görüntülemek istiyorsanız kullanışlıdır. Hitachi HD44780 LCD kontrol cihazını temel alan LCD’ler iki tür belleğe sahiptir: CGROM ve CGRAM (Karakter Üretici ROM ve RAM). CGROM’da önceden tanımlı, 5x8 nokta veya 5x10 nokta ASCII karakter desenleri üretilir. CGRAM ise özel karakterler oluşturmak için programlanabilir. Oluşturulan özel karakterler LCD’nin CGRAM’ine kaydedilip daha sonra oradan çekilebilir. Ancak özel karakter hafızası 8 karakter ile sınırlıdır. 9. karakteri kaydetmeye çalışırsanız 1. karakterin üzerine yazacaktır. 


Özel Karakter Oluşturma




16x2 LCD de her karakterin yerleşebileceği 5×8 birimlik toplam 40 adet nokta vardır. Resmi inceleyecek olursak “Ç” harfinin üretilmesi için hangi noktaların açık, hangi noktaların kapalı olduğu belirtilmiştir. Bu sayıları dizi halinde LCD hafızasına göndereceğiz.

NOT: Proteus’taki simülasyonda son satıra ait veri LCD’de gözükmedi.


Komutlar

  1. byte karakter[8] = {satir1, satir2, satir3, satir4, satir5, satir6, satir7, satir8};

byte komutumuz ile karakter adında 8 elemanlı bir dizi tanımladık. Bu komut bizim bir karakterimiz için satır bilgilerini tutacaktır. Daha önceden aldığımız “Ç” harfi için kodları diziye aktaracak olursak;

byte karakter[8] = {B01110, B10001, B10000, B10000, B10001, B01110, B00100, B00000};

Şimdi tanımlanan bu diziyi LCD özel hafızasına atmak için;


  1. lcd.createChar(hafiza_no, karakter_dizi);

Bu komut karakter dizisini belirlediğiniz hafıza adresine gönderir. Hafıza no 0’dan başlayıp 7’ye kadar gider. Konu başında dediğimiz gibi hafıza 8 karakter ile sınırlıdır. Oluşturduğumuz “Ç” harfini hafızaya atmak için;

lcd.createChar(0, karakter);

Sıfırıncı adrese karakter dizisini yani “Ç” harfini atamış olduk. Şimdi bunu ekranda göstermek için;


  1. lcd.write(byte(hafiza_no));

lcd.write() komutu o an imleç nerede bulunuyor ise o konuma gönderdiğimiz hafıza_no’da ki özel karakteri ekrana yazdırır.


NOT: https://maxpromer.github.io/LCD-Character-Creator/ web sayfasında karakter üreteci bulunur. İstediğimiz karakteri görsel olarak tasarlayarak binary kodunu elde edebiliriz.




Program Kodları

#include<Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x20, 16, 2); //adres kısmına PCF8574'ün adresi olan 0x20 girilmiştir.
//16 sütun 2 satır girildi
//karakterler üretildi
byte ozel_1[8] = {B01110, B10001, B10000, B10000, B10001, B01110, B00100, B00000};  //Ç karakteri. Karakteri oluşturduğumuz karakter matrisinde son satır noktasındaki veri Proteus simülasyonunda çıkmıyor. Yani bu dizideki 7. eleman.
byte ozel_2[8] = {B01110, B10001, B10000, B01110, B00001, B10101, B01110, B00100};  //Ş karakteri. Karakteri oluşturduğumuz karakter matrisinde son satır noktasındaki veri Proteus simülasyonunda çıkmıyor. Yani bu dizideki 7. eleman.
byte ozel_3[8] = {B01010, B00000, B10001, B10001, B10001, B10001, B01110, B00000};  //Ü karakteri. Karakteri oluşturduğumuz karakter matrisinde son satı noktasındaki veri Proteus simülasyonunda çıkmıyor. Yani bu dizideki 7. eleman.

void setup()
{
  lcd.init();
  //LCD'nin hafızasına diziler gönderiliyor. LCD'nin max. 8 adet hafızası var
  lcd.createChar(0, ozel_1);  //LCD'nin 0 nolu hafıza adresine diziyi gönder
  lcd.createChar(1, ozel_2);  //LCD'nin 1 nolu hafıza adresine diziyi gönder
  lcd.createChar(2, ozel_3);  //LCD'nin 2 nolu hafıza adresine diziyi gönder
  lcd.clear();
  lcd.print("_ozel__karakter_");
}

//özel karakteri görüntüle
void loop()
{
  lcd.setCursor(0, 1);  //sütun:0 satır:1
  lcd.write(0);         //0 nolu hafızadaki bilgiyi ekrana yazdır
  lcd.setCursor(1, 1);  //sütun:1 satır:1
  lcd.write(1);         //0 nolu hafızadaki bilgiyi ekrana yazdır
  lcd.setCursor(2, 1);  //sütun:2 satır:1
  lcd.write(2);         //0 nolu hafızadaki bilgiyi ekrana yazdır
  delay(1000);
}



Devre Şeması





0 comments:

Yorum Gönder

Arduino Eğitimi Konu - 7

Toplam Sayfa Görüntüleme Sayısı

Sensörlerin Arduino İle Kullanımı

Popular Posts

Yararlanılan Kaynaklar

İletişim

gokdag17@gmail.com