Grafik LCD (KS0108 / HD61202 Tabanlı)

Bu projede popüler KS0108 / HD61202 tabanlı Grafik LCD 'lerin nasıl kontrol edileceğini göreceğiz. C dilinin kütüphane sistemi sayesinde Fabian Maximilian Thiele tarafından yazılmış olan KS0108 kütüphanesini sadece bir kaç satırla projemize ekledik. KS0108 kütüphanesinde başka hangi fonksiyonlar olduğunu ve bunların nasıl kullanıldıklarını görmek için ks0108.h isimli başlık dosyasına bakın. Burada ks0108DrawCircle (xcenter, ycenter, raius, color) gibi bir çok faydalı fonksiyon olduğunu göreceksiniz. Bu fonksiyondaki xcenter ve ycenter parametreleri çemberin merkezinin x ve y koordinatlarını; radius çemberin çapını; color ise çemberin hangi renkte çizileceğini belirtir. Tabii ki, bu LCD 'lerde sadece iki renk söz konusudur, başlık dosyasında renk seçimi için BLACK ve WHITE ifadeleri tanımlanmıştır. Bu tanımlamalar elinizdeki ekranın koyu ve açık renklerini ifade etmektedir, benim ekranım için BLACK mavi; WHITE ise beyaz anlamına gelir (Resim1, Resim2).

Ekranı işlemciye bağlarken her zamanki gibi dikkat etmeniz gereken bir kaç nokta var: Resim 3'de göreceğiniz gibi veri iletişimi için 8 bitlik data bağlantısı (D0..D7) ve 5 adet de komut bağlantısı (CS1, CS2, R/W, D/I, E) bulunmaktadır. (Uyarı: Sizin elinizdeki LCD ekranın bağlantıları farklı olabilir). Aslında bu 128x64 piksellik LCD iki adet 64x64 piksellik birleştirilmesinden oluşmuştur ve her bir ekran ayrı bir ks0108 işlemci tarafından yönetilmektedir (Resim5). Eğer yaptığınız projede ekranın sağ ve sol yarıları olmaları gereken yerde değillerse, ks0108.h başlık dosyasında CS1 ve CS2 tanımlarını yer değiştirerek sorunu çözebilirsiniz. Bu bağlantıların ne anlama geldiğini ve ekranın nasıl çalıştığını merak ediyorsanız Dinçer Aydın tarafından hazırlanmış olan mükemmel sunum ve simülatörü incelemenizi tavsiye ederim. Link: Dinçer Aydın 'ın web sitesi.

Projemizde D0..D7 veri bağlantıları işlemcimizin D Portuna; komut bağlantıları ise işlemcimizin C Portuna başlanmıştır. Eğer siz projenizde farkı portlar kullanacaksanız, ks0108.h başlık dosyasındaki

#define LCD_CMD_PORT PORTC
#define LCD_CMD_DIR DDRC

#define LCD_DATA_IN PIND
#define LCD_DATA_OUT PORTD
#define LCD_DATA_DIR DDRD

ifadelerinde gerekli değişiklikleri yapmalısınız.

/*
* Cem Berik
* www.berik.net
*/

#include <inttypes.h>
#include <avr/io.h>
#include <avr/pgmspace.h>

#include "globals.h"
#include "ks0108.h"
#include "tahoma.h"
#include "comic.h"

//yazi adli karakter katarini program hafizasina yerlestirir
const prog_char yazi[] = "www.berik.net";

int main(void) { //ana fonksiyon
Font=comic; //comis sans fontunu sec
ks0108Init(0); //LCD 'yi hazirla
ks0108GotoXY(32,2); //x=32, y=2 koondinatina git
ks0108Puts("Grafik LCD"); //metni ekrana yaz
Font=tahoma; //tahoma fontunu sec
ks0108GotoXY(32,28); //x=32,y=28 koordinatina git
ks0108Puts_P(yazi); //yazi degiskenin icerigini ekrana yaz

//x=5,y=0 nokasindan baslayip 117 pixel eninde ve 20 pixel
//yuksekliginde kenarlari 8 derece yuvarlatilmis bir dikdortgen ciz
ks0108DrawRoundRect(5, 0, 117, 20, 8, BLACK);

while(1); //sonsuz dongü
}

Entegrenin RESET bacağı bu projede kullanılmamaktadır, devrenizin sağlıklı çalışması için RESET bacağını devrenin artı ucuna (VDD +5V) bağlamanız gerekir. LCD ekranların doğru çalışabilmeleri için negatif gerilime ihtiyaçları vardır. Ekranın Vee bacağı negatif gerilim üretir; Vee bacağını bir 10-20 Kohm 'luk ayarlı dirençle Vo 'a Resim4 'deki gibi bağladıktan sonra ekran kontrastını bu ayarlı dirençle ayarlayın. LCD 'nin arka plan ışığına ait anot (A) ve katot (K) uçları bağlanırken, katot ucunun doğrudan toprağa, anot ucunun ise 100Ohm 'luk bir dirençle artıya bağlandığına dikkat edin (Resim4).

Proje Dosyaları

Proje Dosyaları