Elektronik / Elektronik Kaynakları/

Türkçe nokia 3310 lcd kullanım kılavuz proteus model

Sponsorlu Bağlantılar

Bir zamanlar pic ile nokia 3310 lcd kullanımı populerdi uzun sürede güncel kalacağı kesin bu konu hakkında detaylı Türkçe kaynak 3310-lcd bağlantı özellik bilgileri C dili ile örnek açıklamalı kodlar proteus model, library dosyaları ve nokia 3310 lcd üzerinde şekil oluşturmak için kullanılan FastLCD programının kullanımı….

Hazırlayan: Fırat Deveci (FxDev) – İyi hazırlanmış değerli bir kaynak emeği geçen kişilere teşekkürler

Nokia 3310 LCD Kullanımı

3310-lcd

Nokia 3310 ekranı aslında Philips firmasının PCD8544 tabanlı 48×84 pixellik bir grafik lcd’dir. Seri iletişim protokolü kullandığı için zaman problemleri yaşanması giderilmiştir.

Pin Tanımlamaları

nokia3310-lcd-pin-tanimlamalari

1) VDD : +2,7V’tan +3.3V değerleri arasında voltaj uygulanmalıdır. Yüksek voltaj değerleri LCD’nin kolaylıkla yanmasına neden olabilir.

Voltaj devresi için aşağıdaki devre kullanılabilir;

nokia-lcd-voltaj-devresi

2) SCLK : SCE pini sıfırken, seri iletişimin saat darbeleri buradan alınır.

3) SDIN : Seri data giriş ucudur, datalar SCLK’nin yükselen kenarlarında işlenir.

3) D/C’ : Kontrol pinidir, bilgi data mı yoksa komut mu onu anlamaya yarar. Alınan bilgi bu pin ‘0’ iken komut, ‘1’ iken veridir.

4) SCE : Seri iletişimi aktif etme ucudur, herhangi bir bilgi gönderilmek istendiğinde ‘0’ yapılmalıdır.

5) GND : Toprak ucudur.

6) Vout : Kontrast ucudur, toprak ucuna 1-10 mikro farad arasında kondansöterle bağlanmalı.

7) RES : Reset ucudur, başlangıçta o yapılmalıdır, yoksa LCD zarar görebilir.

Zaman Diyagramları ve İletişim

3310lcd-zaman-diyagramlari-iletisim

Seri iletişim diyagramda da görüleceği üzere oldukça basittir.

-Öncelikle SCE pini ‘0’ yapılmalı.

-D/C’ pininden gönderilecek bilginin komut ya da data mı olduğu seçilmeli (data için ‘1’, komut için ‘0’ olmalı)

-Daha sonra SCLK’nın her yükselen kenarında 1 bit bilgi gönderilmelidir.

Aşağıdaki C rutini bu işlemi yapmaktadır;

void nokia_write_byte(char bytefornokia)	// Seri veri gönderme rutini, datasheet'ten bire bir alıntı.
{
	char i;
	for(i=8;i>0;i--)
	{
		nok_sclk=0;
		DelayUs(2);
		if((bytefornokia & 0x80)==0)
			nok_sdin=0;
		else
			nok_sdin=1;
		nok_sclk=1;
		DelayUs(2);
   		bytefornokia = bytefornokia << 1;
   	}
}

Komut göndermek için

void nokia_write_command(char nokia_command)
{
	nok_dc	= 0;	// Komut gönderimi için D/C=0;
	nok_sce = 0;	// Chip aktif
	nokia_write_byte(nokia_command);
	nok_sce = 1;	// Chip pasif
}

Veri göndermek için

void nokia_write_data(char nokia_data)
{
	nok_dc	= 1;	// Data gönderimi için D/C=1
	nok_sce = 0;	// Chip aktif
	nokia_write_byte(nokia_data);
	nok_sce = 1;	// Chip pasif
}

Bu fonksiyonlar kullanılabilir.

Hafıza Yapısı ve Komutlar

LCD’nin hafıza yapısı 6x8x84 bit şeklindedir. (48x84) X ekseninde 0’dan 83’e kadar adresleme yapılabilirken, Y ekseninde 0’dan 5’e kadar adresleme yapılabilir. (Kaynak: Datasheet)

Komutlar:

48-84-pixels-matrix-lcd-controller-driver

İlk yükleme değerleri için aşağıdaki işlemler yapılmalıdır;

1) İlk önce LCD pasif yapılmalı. Bunun için SCE=1 olmalı.

2) Daha sonra LCD’ye zarar vermemek için 10ms kadar RES=0 olmalı ve daha sonra RES=1 yapılmalı.

3) Sonra sırayla aşağıdaki işlemler uygulanır

  • 0x21: Tanımlanmış komutlara erişim açılıyor
  • 0xC8: Kontrast voltajı ayarlanıyor.(Direk VSS’e bağlı)
  • 0x13: LCD bias ayarlanıyor (1:48 modunda)
  • 0x20: Yatay mod, X otomatik artacak, komutlara erişilmiyor.
  • 0x09: LCD açılıyor
  • DDRAM temizleniyor, böylece önceden kaydedilmiş kayıtlar siliniyor.
  • 0x08: Tüm LCD segmentleri açılıyor.
  • 0x0C: LCD normal moda çalıştırılıyor.

Bu işlemler aşağıdaki fonksiyon kullanılarak yapılabilir.

void nokia_init(void)
{
	nok_dc=1;			// Bilgiler DDRAM'de tutuluyor, Address counter ise otomatik artacak
	nok_sce=1;			// Chip pasif
	DelayUs(200);

	nok_res=0;			//Başlangıçta res=0 olmak zoruna, aksi halde LCD'ye zarar gelebilir
	DelayMs(10);
	nok_res=1;

	nokia_write_command(0x21);	// LCD'ye komut yazılıyor.
	nokia_write_command(0xC8);	// Vop  V: 0xC8 (for 3V)
	nokia_write_command(0x13);	// LCD (1:48) modunda (bias)
	nokia_write_command(0x20);	// Soldan sağa x birer artırılarak yazılıyor
								// 0x22 kullanılsaydı, yukarıdan aşağı yazıcaktı.
	nokia_write_command(0x09);	// Displayi aktif hale getir
	DelayMs(50);

	nokia_clean_ddram();		// DDRAM temizleniyor, aksi halde eski yazılmış karekterlerle karıştırılabilinir
	DelayMs(10);

	nokia_write_command(0x08);	// Display temizleniyor
	DelayMs(10);

	nokia_write_command(0x0C);	// Display normal moda dönüyor
}

LCD’ye Yazı Yazmak

6x8x84bit büyüklüğünde DDRAM’i istediğimiz verilerle doldurursak, doluluk oranına göre ekranda şekiller oluşur. Örneğin ilk ayarları yaptıktan sonra 0xFF değerini LCD’ye veri olarak gönderdiğimizde ekranın 0x8 lik alanında düz bir çizgi görürüz. Aynı şekilde 0x9F gönderdiğimizde de bir pixel genişliğinde İ harfi görürüz.

LCD’de yazı yazdırmak için önceden ASCII dizisi tanımlayıp, istediğimiz şekilde harfleri çağırıp kolaylıkla yazdırabiliriz. (Bunun için sonda verilen 3310 kütüphane kodlarına bakmak yeterlidir)

LCD’de Şekil Oluşturmak

Bunun için yine aynı şekilde diziler oluşturulmalı ve bu dizinin boyutu 84x6=504 bit boyutunu geçmemelidir. Bu tanımlamayı yapmak teker teker elle çok zor olacağı için FastLCD gibi programları kullanmak işinizi daha da kolaylaştıracaktır.

FastLCD Kullanımı

Programın ara yüzü aşağıdaki gibidir ve öncelikle boyut ayarından genişlik 84, yükseklik ise 48 yapılmalıdır.

fastlcd-kullanimi

Memory yapısı 6x8x84 olduğu için karakterlerimizin boyutunu 6x8’lik seçmek uygun olacaktır.

fastlcd-memory

Ayarlar yapıldıktan sonra istenilen şekili çizebilirsiniz.

fastlcd-fxdev

Daha sonra bunu yukarıdaki menüde yazan BAS seçeneğine basıp, nokia3310’u seçip özellikle save as kısmından image seçilmelerek kaydedilir.

fastlcd-nokia-3310-save

Daha sonra kaydedilen dosya notepad++ gibi bir programla açılır ve &h olan kısımlar 0x ile değiştirilir.

lcd-duzenleme

Değiştirilen dizi aşağıdaki gibi tanımlanır;

const int fxdev[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xF0,0xF8,0x78,
0x38,0x78,0xF8,0xF0,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,
0xFF,0x07,0x01,0x00,0x00,0x00,0xC0,0xFB,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,
0xE0,0xE0,0xFF,0xFF,0xFF,0x78,0x78,0x3C,0x3E,0x1F,0x1F,0x0F,0x07,0x00,0x00,0x00,
0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0x00,0x00,0x00,
0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xF0,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xC0,
0xF0,0xF0,0xF0,0x70,0x70,0xF0,0xF0,0xF0,0x00,0x00,0xF0,0xF0,0xF0,0xC0,0x00,0x00,
0x00,0x00,0x00,0xE0,0xFC,0xFE,0x7E,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x81,0xC1,0xC1,0xE1,0xFF,0xFF,0xFF,0x70,0x78,0x78,0x78,0x38,0x3C,0x3C,
0x3C,0x00,0x00,0x00,0x07,0x0F,0x3F,0xFF,0xFC,0xF0,0xF8,0xFC,0x7F,0x1F,0x0F,0x07,
0x01,0x00,0xFE,0xFF,0xFF,0x07,0x03,0x83,0xF3,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,
0x00,0x00,0xFF,0xFF,0xFF,0xFB,0x79,0x3E,0x3F,0x1F,0x0F,0x07,0x00,0x00,0x01,0x0F,
0x3F,0xFF,0xFE,0xF0,0x80,0xF0,0xFE,0xFF,0x3F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xE0,0xF8,0xFC,0x7E,0x3F,0x0F,0x87,0xC3,0xF1,0xFF,0xFF,0x7F,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF8,0xFC,0x7F,0x3F,0x1F,0x07,0x0F,0x1F,
0x7F,0x7E,0x78,0x70,0x00,0x00,0x7F,0x7F,0x7F,0x3E,0x1F,0x1F,0x0F,0x07,0x1F,0x7F,
0x7F,0x7C,0xF0,0xF0,0xF0,0xE0,0x01,0x03,0x07,0x0F,0x1F,0x1E,0x1E,0x3C,0x3C,0x3C,
0x78,0x78,0x78,0x70,0x00,0x01,0x0F,0x3F,0x7F,0x7F,0x7F,0x1F,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x1F,0x1F,0x1E,0x1F,0x1F,0x0F,0x07,0x03,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

Daha sonra yapılması gereken ise bu diziyi DDRAM’e yazmaktan ibarettir. Onu da mainde aşağıdaki gibi yapabilirsiniz;

for(i=0;504>i;i++)
nokia_write_data(fxdev[i]);

3310-lcd-proteus-test-demo

Proteus simülasyon görüntüsü şekildeki gibidir. İletişimde zamanlama problemi olmadığı için, gerçekte de sorunsuz çalışmaktadır Bu şekilde ekranınıza istediğiniz her şeyi yazdırabilirsiniz…

3310.h Dosyası

/*					www.FxDev.org
 * 				3310 LCD Kullanım Klavuzu
 * nokia_init(); ile LCD'nin ilk ayarlarını yap.
 * nokia_clean_ddram(); ile LCD nin DDRAM'i silinir.
 * nokia_write_command(0x20); şeklinde komut gönderilir.
 * nokia_write_data(0x01); şeklinde data gönderilir.
 * nokia_write_byte(0xFE); ile bir byte'lık bilgi gönderilir.
 * nokia_gotoxy(2,3); ile lcd'de belirli bölgelere gidilebilir. Sınır: (0,0) dan (83,5) tir.
 * nokia_contrast(0x0F); ile kontrast ayarı yapılır.
 * nokia_printchar("Deneme"); şeklinde yazı yazdırılır.
 * nokia_print(i+48); şeklinde sayı yazdırılır.
 * lcdpixel (3,4); şeklinde pixe belirtilir.
 *					www.FxDev.org 
*/

#define nok_res  RD0
#define nok_sce	 RD1
#define nok_dc	 RD2
#define nok_sdin RD3
#define nok_sclk RD4

extern void nokia_init(void);
extern void nokia_clean_ddram(void);
extern void nokia_write_command(char nokia_command);
extern void nokia_write_data(char nokia_data);
extern void nokia_write_byte(char bytefornokia);
extern void nokia_gotoxy(char ynokia, char xnokia);
extern void nokia_contrast(char contrast);
extern void nokia_printchar(const char *s);
extern void nokia_print(char charsel);
extern void lcdpixel (char x, char y) ;

Tüm dosyalar : Türkçe nokia 3310 lcd kullanım kılavuz proteus model

Dosya indirme linkleri (TXT formatında) link-7377.zip şifre-pass: 320volt.com

  • FxDev

    7110’da tamam, onun için bir kullanım kılavuzu hazırlamadım ama iletişim kısmı dahil neredeyse her şey aynı…
    Onunla ilgili bir .gif dosyası hazırladım, onu yarın ilgili sitelerde görebilirsiniz ;)

  • mehmet

    benim elimde siemens a70 telefonun ekranı var bacak bağlantılarını vs buldum ama lcd ye ne şekilde görüntü aktaraccağımı bilmiyorum. kullanım bakımından 3310 ekranından çok daha iyi bir ekran kendi içinde backlight ı var. acaba burdaki yöntemlerle o lcd ye de görüntü aktarabilirmiyim. bu konuda bana yardımcı olabilirmmisiniz şimdiden teşekkürler.

  • FxDev

    Eğer datasheet’i verirseniz bir göz atma şansımız olabilir…

  • Muhittin KAPLAN

    Güzel Paylaşım. Ellerine Sağlık.

  • ONAL

    İyi günler
    bende 7110 ekranı var ama onu 89c51 ile kontrol etmek istiyorum keil c ile yardımcı olabilirmisiniz ?

  • alp erkan

    yazınızdan yararlanarak assembly ile ekranı çalıştırdım. ancak kontrast fazla ayarlamayı yapamadım vout da 1 uF kondansatör var bias ve kontrast ayarını nasıl yapacağım ??

  • metaltrrocker

    Güzel paylaşım olmuş merak edip denedim.Xc8 e uyarladım baya zamanımı aldı yolun başındayım daha :D breadboardda denemek kaldı bir tek.

  • safak

    merhaba simülasyon dosyaları library v3. olduğundan proteus 7.10 da library v4 olduğundan çevirmen gerekir diyor. nasıl çevirebilirim. proteus başka bir çevirici ile çevirin diyor yardımcı olmuyor. bu konuda yardım edebilir misiniz. Teşekkürler.