HD44780 kontrolcülü karakter lcd displayler kullanıcıya görsel çıktı veren bir çok gömülü sistem uygulamasında kullanılmaktadır. Kullanımları kolaydır ve çok az yer işgal ettikleri için 7 segment displaylere  nispeten daha çok tercih edilirler. Bu tür displayler pek çok boyutta buluabilir. Piyasada en çok kullanılanları 1×8, 1×16, 2×8,2×16, 4×16,4×20 boyutunda olanlarıdır. Mesela 2×16 ebatlarındaki bir displayin 2 satırı ve 16 sütunu bulunmaktadır ve aynı anda maksimun 32 karakter gösterebilir. LCD displaylerin veri iletişimi için 8 adet pini bulunmaktadır. Bunlar D0….D7 arsasında isimlendirilirler fakat ister 8 bit ister 4 bit veri iletişimi ile çalıştırılabilirler. Bu iki tür iletişimin birbirinden tek farkı hızdır. Ayrıca 4 bit iletişimde mikrodenetleyiciden kullanılacak olan pin sayısı azaldığından bir avantaj sağlamaktadır. LCD displayin diğer uçları ise RW,RS ve EN uçlarıdır. RW ucu LCD’ye veri yazılacağını mı yoksa LCD’den veri okunacağını mı belirler. Register Select (RS) ise adından da anlaşılacağı gibi register seçme ucudur. Register Select (RS). Bu uca 0 gönderildiği zaman LCD’ye komut gönderileceği, 1 gönderildiği zaman ise veri gönderileceği anlaşılır.  EN ucu ise LCD’yi aktif etmek için kullanılır ve düşen kenar tetiklemesi ile çalışır. Pinlerle ilgili daha detaylı bilgiye buradan ulaşabilirsiniz.

Bu kadar teorik bilgi verdikten sonra ise biraz pratiğe geçelim. MikroC derleyicisi LCD kullanımı için iki adet kütüphane bulundurur. Bir tanesi LCD’yi mikrodenetleyicinin istediğimiz pinlerine bağlamamızı sağlayan LCD Custom Library, diğeri ise pinlerin daha önceden belirlendiği LCD Library’sidir. MikroC’nin yardım bölümüne F1 tuşu ile ulaşıp buradan bütün kütüphanelerin komutlarını ve açıklamalarını görebilir farklılıklarına bakabilirsiniz.

Ben 4×20’lik bir LCD display kullandım. İlk olarak devre şemasına bakacak olursak  LCD’nin güç beslemelerini bağladığımızı bir de VEE ucunun  potansiyometreye bağlanmış olduğunu görürsünüz. Vee ucundaki voltaj değişimi LCD’nin kontrastını ayarlamaktadır. Bu uçtaki voltajı 0-5V arasında değiştirerek istediğiniz kontrast oranını yakalayabilirsiniz.

Büyütmek için tıklayın.

Şemadan görüldüğü üzere LCD’nin 4 bit iletişim modu kullanılmaktadır ve data pinleri PORTB’nin 4,5,6 ve 7. pinlerine bağlanmıştır. “LCD_init(&PORTB);” komutu ile LCD’nin PORTB’ye bağlanacağı belirtilmektedir. Kütüphanede bu komut yazıldıktan sonra LCD’nin pinlerinin nasıl bağlanması gerektiği şöyle gösterilmiştir;

D7 → port.7

D6 → port.6

D5 → port.5

D4 → port.4

E → port.3

RS → port.2

RW → port.0

Bağlantımızı yukarıdaki gibi yaparsak LCD artık kullanıma hazır hale gelmiş demektir.

Kodlarımızı inceleyelim;

char dizi[77]="                    C ILE PIC PROGRAMLAMA OGRENIYORUZ!..                    ";
char i,j,boy;
void kurulum()
{
LCD_Init(&PORTB);             //PORTB'ye LCD kuruluyor...
LCD_Cmd(LCD_CURSOR_OFF);      //Cursor'ın yanıp sönmesi kapatılıyor...
}

void main()
{
kurulum();
LCD_Out(1,5,"Merhaba Dunya!");
Delay_ms(2000);
Lcd_Cmd(LCD_CLEAR);
lcd_out(1,6,"MikroC LCD");
lcd_out(2,6,"Uygulamasi");
lcd_out(3,6,"27.11.2011");
lcd_out(4,8,"PAZAR");
Delay_ms(2000);
lcd_cmd(lcd_clear);

while(1)
{
for(i=0;i<76;i++)                        //Yazıyı kaydırmak için... { lcd_chr(1,1,dizi[i]);  // Tek karakter yazmak için. boy=i+20;              // Yazıyı kaydırmak için.. if(boy>75)boy=76;
for(j=(1+i);j<boy;j++)
{
lcd_chr_cp(dizi[j]);
}
Delay_ms(80);
}

}
}

“LCD_CMD(LCD_CURSOR_OFF);” satırında LCD_CMD kısmı ile LCD’ye komut göndereceğimiz belirtilmiştir. parantez içerisindeki “(LCD_CURSOR_OFF)” ise yanıp sönen imlecin ekranda görünmemesi için verilen bir komuttur. “LCD_CLEAR” komutu ise ekranı silmek için kullanılır. “LCD_out” komutu ekrandaki istediğimiz satır ve sütundan başlamak üzere string bir veri yazdırmamızı sağlar. “LCD_out(1,2,”Mikro”);” komutu 1. satır , 2. sütundan itibaren “Mikro” yazısını ekrana yazdırmaktadır. “lcd_chr(1,5,’M’);”komutu ise ekranın istenilen yerine yalnızca bir karakter veri yazmak için kullanılır. Bu örnekte ekranın 1. satır ,5. sütununa M harfi yazılmıştır. Dikkat edecek olursanız string veriler çift tırnak arasına (“Mikro”) karakterler ise tek tırnak arasına yazılırlar (‘M’).  “lcd_chr_cp(dizi[3]);” komutu imlecin en son kaldığı koordinata istenilen karakterin yazılmasını sağlar. Örnek komutumuz “dizi” dizisinin 3. elemanını imlec’in kaldığı noktaya yazıyor.

Bu arada

MikroC’ de  proje oluştururken yapmamız gereken ayarları tekrar hatırlatmak için proje oluşturma penceresinde karşımıza gelen seçenekleri nasıl işretlememiz gerektiğini paylaşıyorum.

LCD’ kullanımı ile ilgili örneğimiz şimdilik bu kadar. İleride yayınlayacağım notlarda daha detaylı LCD kullanımına değineceğiz.

Notlarla alakalı her türlü sorunuzu aşağıdan iletebilirsiniz.

Bu notta kullanılan kodlara ve simülasyon dosyalarına buradan ulaşabilirsiniz.

yorum
  1. Veysel dedi ki:

    Elinize Sağlık Hocam 🙂

  2. guner dedi ki:

    merhaba
    dosyaları indirdim
    lcd.DNS uzantılı proteus dosyası hata veriyo benim versiyon 7.2 sp6 acaba

  3. onur öztürk dedi ki:

    İyi günler ben aynı devreyi kurup anynı kodu yükledim fakat micro c de derlerken hata veriyor ,ben başkabir yöntemle çözdüm,bilginize

  4. pertev dedi ki:

    hocam derslerin devemını bekleriz birde , ayarlanabilir saat uygulaması örnegi verebilirseniz cok memnun uluruz bu uygulama 128×64 glcd de olursa cok makbule gecer teşekkür ederim emeginize saglık aklınza bereket işlerinizde başarılar dilerim.

    • mikrodunya dedi ki:

      Müsait olduğum bir zamanda böyle bir uygulama paylaşmayı düşünüyorum.
      Saygılar.

      • muratpolata dedi ki:

        Hocam ayarlanabilir saat uygulaması yapmayı hala düşünüyor musunuz? Çok Çok Çok makbule geçer hele de dokunmatik ekran olursa olmazsa grafik LCD de olur…STM32F407 ye harici saat osilatörü bağlanarak dahili RTC kullanılırsa mükemmel olur 🙂 Boşa RTC entegresine para vermemiş oluruz hemde donanımsal dahili RTC kullanmasını öğreniriz…

  5. pertev dedi ki:

    hocam cevabınız için cok teşekkür ederim degerli bilgilerinizin ışıgında inşallah bizde ,az da olsa aydınlanabiliriz. hocam birde 128×64 glcd de karakterleri yatay olarak degilde ,dikey olarak nasıl glcd ye yazabiliriz bununla ilgili kücük bir kod parcası verebilirbisiniz. şimdiden teşekkür ederim
    salamlar.

    • mikrodunya dedi ki:

      MikroC’nin grafik lcd kütüphanesinde bunu yapan bir komut bulunmuyor. Bu isteğinizi dikey yazı yazabilen bir kütüphaneyi mikroC’ye uyarlayarak gerçekleştirebilirsiniz. Fakat resimleri dikey olarak hex koda dönüştürürseniz basabilirsiniz LCD’ye dikey olarak.

  6. pertev dedi ki:

    hocam münkünse dikey yazı icin kücük bir örnek verebilirmisin daha sonra kütüphane hazırlaması yapabilmem için teşekkür ederim selamlar.

    • mikrodunya dedi ki:

      Ben şu ana kadar öyle bir çalışma yapmadım. Dikey yazı yazmak için ya yeni bir kütüphane oluşturacaksınız ya da bu özelliğin mevcut olduğu bir kütüphane bulup mikroc’ye uyarlayacaksınız.

  7. pertev dedi ki:

    hocam konunun acemisiyim bu konuda yardımcı olursanız sevinirim teşekkürler
    selamlar

  8. erdinc dedi ki:

    merhaba,
    LCD ekranda menü yaratmak istiyorum bu konu ile alakalı algorithim veya kod örneği olan varmı ??

  9. özkan dedi ki:

    Hocam tekrardan merhaba, sizden özür dileyerek bu konu altına yazacağım sorumu, Hocam MikroC ile bir program yazıyorum ve demo yapmaya çalışıyorum, bunuda eeprom kullanarak yapmaya çalışıyorum; fakat bir türlü çalıştıramadım. Programın amacı 5. çalışmadan itibaren A portunun 7.biti lojik 1 olsun istiyorum. LCD için uyguladığım zamanda amacım lcd de tam sürüm sona ermiştir yazdıracaktım. Program aşağıdaki gibidir. Sizce nerede yanlışlık yapıyorum? EEPRON editor den 0x00 değerini 00 yaptıktan sonra deniyorum;fakat sonuc yok… Program çalışır çalışmaz RA7 aktif oluyor. 16f628a için;

    void main()
    {

    unsigned short yaz,oku=0;
    trisb=0xff;
    portb=0x00;
    trisa=0x00;
    porta=0x00;
    yaz=yaz+1;
    EEPROM_Write(0x00,yaz);

    while(1)
    {
    oku=EEPROM_Read(0x00);
    if(oku>=5)
    porta.b7=1;

    }
    }

    • mikrodunya dedi ki:

      cmcon=7 yazın kurulum kısmına, ayrıca yaz değişkenine ilk değer olarak 0 yükleyin. Her açılışta eepromdan veriyi okutup daha sora değerini 1 arttırın.

  10. özkan dedi ki:

    Hocam Allah razı olsun. Denedim çalıştı, sizin sayenizde çok şey öğrendim, böyle faydalı bir site kurduğunuz için ve zamanınızı öğrenmek isteyenlere ayırdığınız için Allah sizden razı olsun. Çok teşekkür ederim.

  11. nuh çakır dedi ki:

    Hocam 18f4550 ile proteusta çalışan basit bir uygulama gerçek bir devrede çalıştıramadım bir türlü. 16f877 ile çalışan 4×20 LCD yi 4550 ile çalıştıramıyorum. 1. ve 3. satırlar fll kare oluyor.Yardım edebilirseniz sevinirim. Teşekkürler..

  12. thehighvoltage dedi ki:

    hocam build yapamıyorum bu tür sorunlar çıkıyor ne yapmalıyım ?

  13. vgbudakoglu dedi ki:

    Merhaba lcd ye yazı yazdırmadan önce lcd ile pic arasında pin bağlantısı yapılıyor diye biliyorum ve microc library manager kısmında da o şekilde gösterilmiş. Sizin gösterdiğiniz örnekte ise LCD_Init(&PORTB); yazarak lcd kuruyorsunuz ben yanlış anlamadım değil mi? Bu nasıl oluyor?

  14. vgbudakoglu dedi ki:

    Butona basıldığında lcd’ye sayı yazdırmak için bir çalışma yaptım fakat yazdıramadım yardımcı olabilirmisiniz nerede yanlış yaptım.

    https://1drv.ms/f/s!AsXIJngWzcOzg2CRf_yrqq5lCbyg

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s