Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Nokia 3310 Kütüphane Dosyası

Başlatan FxDev, 29 Haziran 2009, 05:42:53

FxDev

Pic Basic ve CCS için yazılmışlarını gördüm, Hi-Tech için oturup yazdım...
Kullanmak isteyen arkadaşlara faydalı olur umarım ;)




3310.h
/*					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);


3310.c
#include <pic.h>
#include "delay.h"
#include "3310.h"

const unsigned char tablo1 [240] = {	
						0x00,0x00,0x00,0x00,0x00,	// 20 bosluk
						0x00,0x00,0x5f,0x00,0x00,	// 21 !
						0x00,0x07,0x00,0x07,0x00,	// 22 "
						0x14,0x7f,0x14,0x7f,0x14,	// 23 #
						0x24,0x2a,0x7f,0x2a,0x12,	// 24 $
						0x23,0x13,0x08,0x64,0x62,	// 25 %
						0x36,0x49,0x55,0x22,0x50,	// 26 &
						0x00,0x05,0x03,0x00,0x00,	// 27 '
						0x00,0x1c,0x22,0x41,0x00,	// 28 (
						0x00,0x41,0x22,0x1c,0x00,	// 29 )
						0x14,0x08,0x3e,0x08,0x14,	// 2a *
						0x08,0x08,0x3e,0x08,0x08,	// 2b +
						0x00,0x50,0x30,0x00,0x00,	// 2c ,
						0x08,0x08,0x08,0x08,0x08,	// 2d -
						0x00,0x60,0x60,0x00,0x00,	// 2e .
						0x20,0x10,0x08,0x04,0x02,	// 2f /
						0x3e,0x51,0x49,0x45,0x3e,	// 30 0
						0x00,0x42,0x7f,0x40,0x00,	// 31 1
						0x42,0x61,0x51,0x49,0x46,	// 32 2
						0x21,0x41,0x45,0x4b,0x31,	// 33 3
						0x18,0x14,0x12,0x7f,0x10,	// 34 4
						0x27,0x45,0x45,0x45,0x39,	// 35 5
						0x3c,0x4a,0x49,0x49,0x30,	// 36 6
						0x01,0x71,0x09,0x05,0x03,	// 37 7
						0x36,0x49,0x49,0x49,0x36,	// 38 8
						0x06,0x49,0x49,0x29,0x1e,	// 39 9
						0x00,0x36,0x36,0x00,0x00,	// 3a :
						0x00,0x56,0x36,0x00,0x00,	// 3b ;
						0x08,0x14,0x22,0x41,0x00,	// 3c <
						0x14,0x14,0x14,0x14,0x14,	// 3d =
						0x00,0x41,0x22,0x14,0x08,	// 3e >
						0x02,0x01,0x51,0x09,0x06,	// 3f ?
						0x32,0x49,0x79,0x41,0x3e,	// 40 @
						0x7e,0x11,0x11,0x11,0x7e,	// 41 A
						0x7f,0x49,0x49,0x49,0x36,	// 42 B
						0x3e,0x41,0x41,0x41,0x22,	// 43 C
						0x7f,0x41,0x41,0x22,0x1c,	// 44 D
						0x7f,0x49,0x49,0x49,0x41,	// 45 E
						0x7f,0x09,0x09,0x09,0x01,	// 46 F
						0x3e,0x41,0x49,0x49,0x7a,	// 47 G
						0x7f,0x08,0x08,0x08,0x7f,	// 48 H
						0x00,0x41,0x7f,0x41,0x00,	// 49 I
						0x20,0x40,0x41,0x3f,0x01,	// 4a J
						0x7f,0x08,0x14,0x22,0x41,	// 4b K
						0x7f,0x40,0x40,0x40,0x40,	// 4c L
						0x7f,0x02,0x0c,0x02,0x7f,	// 4d M
						0x7f,0x04,0x08,0x10,0x7f,	// 4e N
						0x3e,0x41,0x41,0x41,0x3e};	// 4f O

const unsigned char tablo2 [240] = {
                  		0x7f,0x09,0x09,0x09,0x06,	// 50 P
						0x3e,0x41,0x51,0x21,0x5e,	// 51 Q
						0x7f,0x09,0x19,0x29,0x46,	// 52 R
						0x46,0x49,0x49,0x49,0x31,	// 53 S
						0x01,0x01,0x7f,0x01,0x01,	// 54 T
						0x3f,0x40,0x40,0x40,0x3f,	// 55 U
						0x1f,0x20,0x40,0x20,0x1f,	// 56 V
						0x3f,0x40,0x38,0x40,0x3f,	// 57 W
						0x63,0x14,0x08,0x14,0x63,	// 58 X
						0x07,0x08,0x70,0x08,0x07,	// 59 Y
						0x61,0x51,0x49,0x45,0x43,	// 5a Z
						0x00,0x7f,0x41,0x41,0x00,	// 5b [
						0x02,0x04,0x08,0x10,0x20,	// 5c \\
						0x00,0x41,0x41,0x7f,0x00,	// 5d ñ
						0x04,0x02,0x01,0x02,0x04,	// 5e ^
						0x40,0x40,0x40,0x40,0x40,	// 5f _
						0x00,0x01,0x02,0x04,0x00,	// 60 `
						0x20,0x54,0x54,0x54,0x78,	// 61 a
						0x7f,0x48,0x44,0x44,0x38,	// 62 b
						0x38,0x44,0x44,0x44,0x20,	// 63 c
						0x38,0x44,0x44,0x48,0x7f,	// 64 d
						0x38,0x54,0x54,0x54,0x18,	// 65 e
						0x08,0x7e,0x09,0x01,0x02,	// 66 f
						0x0c,0x52,0x52,0x52,0x3e,	// 67 g
						0x7f,0x08,0x04,0x04,0x78,	// 68 h
						0x00,0x44,0x7d,0x40,0x00,	// 69 i
						0x20,0x40,0x44,0x3d,0x00,	// 6a j
						0x7f,0x10,0x28,0x44,0x00,	// 6b k
						0x00,0x41,0x7f,0x40,0x00,	// 6c l
						0x7c,0x04,0x18,0x04,0x78,	// 6d m
						0x7c,0x08,0x04,0x04,0x78,	// 6e n
						0x38,0x44,0x44,0x44,0x38,	// 6f o
						0x7c,0x14,0x14,0x14,0x08,	// 70 p
						0x08,0x14,0x14,0x18,0x7c,	// 71 q
						0x7c,0x08,0x04,0x04,0x08,	// 72 r
						0x48,0x54,0x54,0x54,0x20,	// 73 s
						0x04,0x3f,0x44,0x40,0x20,	// 74 t
						0x3c,0x40,0x40,0x20,0x7c,	// 75 u
						0x1c,0x20,0x40,0x20,0x1c,	// 76 v
						0x3c,0x40,0x30,0x40,0x3c,	// 77 w
						0x44,0x28,0x10,0x28,0x44,	// 78 x
						0x0c,0x50,0x50,0x50,0x3c,	// 79 y
						0x44,0x64,0x54,0x4c,0x44,	// 7a z
						0x00,0x08,0x36,0x41,0x00,	// 7b {
						0x00,0x00,0x7f,0x00,0x00,	// 7c |
						0x00,0x41,0x36,0x08,0x00,	// 7d }
						0x10,0x08,0x08,0x10,0x08,	// 7e ~
						0x78,0x46,0x41,0x46,0x78};	// 7f ¦

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
}

void nokia_clean_ddram(void) 
{
	int ddram;
	nokia_gotoxy(0,0);					// 84*6=504bit Dram alanı temizleniyor
	for(ddram=0; ddram<504; ddram++)
		nokia_write_data(0x00);
}

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
}

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
}

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;
   	}
}

void nokia_gotoxy(char xnokia,char ynokia)			// İstenilen bölgeye ulaşma fonksiyonu 
{
	nokia_write_command(0x40|(ynokia & 0x07));		// Y bu şekilde hareket ediyor: 0100 0yyy
	nokia_write_command(0x80|(xnokia & 0x7F));		// X bu şekilde hareket ediyor: 1xxx xxxx
}

void nokia_contrast(char contrast) 
{
	nokia_write_command(0x21);                  // LCD'ye komut veriliyor
    nokia_write_command(0x80 | contrast);       // Kontrast ayarı
    nokia_write_command(0x20);                  // Yatay adresleme modu, X birer otomatik artar.
}

void nokia_printchar(const char *s)
{
	while(*s)
		nokia_print(*s++);
}

void nokia_print(char charsel) 			// ASCII tablosunu kullanarak yazı yazdırmaya yarayan fonksiyon
{
	char char_row,charpos,chardata;
	
	if (charsel<0x20) return;
	if (charsel>0x7f) return;

	for(char_row=0;char_row<5;char_row++)
	{
		if(charsel<0x50)		// Seçilen karekterin ASCII kodu 50h'tan ufaksa
		{
			charpos=(((charsel&0xff)-0x20)*5);
			chardata=tablo1[(charpos+char_row)];
		}
		if(charsel>0x4f)		// Seçilen karekterin ASCII kodu 50h'tan büyükse
		{
			charpos=(((charsel&0xff)-0x50)*5);
			chardata=tablo2[(charpos+char_row)];
		}

		nokia_write_data(chardata);	// Datayı gönder
	}
	nokia_write_data(0x00);			// Her zaman 1 bytelık son alan boş olacak
}

void lcdpixel (char x, char y) 
{
	char offset, data;

	if (x > 84) return;
	if (y > 48) return;

	offset = y - ((y / 8) * 8);
	data = (0x01 << offset);

	nokia_gotoxy(x, (y/6));
	nokia_write_data(data);
}

M_B

Merhaba arkadaslar yeni bir baslık acmadan sorumu burdan sormak istiyorum.
Oncelikle FxDev hocaya bu kutuphaneyi paylaştıgı ıcın tesekkurler.
Şu an bu kutuphaneyi bir uygulama için kullanıyorum. 

Sorum ise 
Ekranda yazıyı nasıl kaydırabilirim.
Bir takım mantıklar dusundum ama olmadı.
Ornek olarak:
void LcdYaziKay(void)
{
unsigned char kay;
nokia_gotoxy(0,2);
for(kay=83;0<kay;kay--)
	{
	nokia_gotoxy(kay,2);
	nokia_printchar(test);
	DelayMs(75);
	}

}

Seklinde denediğimde test icerisindeki yazi 2. satırının basına geldımı duruyor.
Ben ise test icindeki yazının tamamen harf harf kayarak soldan cıkmasını ıstıyorum.
Yani 83. sutundan yazının ilk harfı cıkacak 0. sutuna geldimi ise yazının en son harfı gececek.
Bir bakıma LED tabeladakiler gibi.
Ama bir turlu mantıgını fonksiyonunu kuramadım.
Nasıl yapmam lazım.

Teşekkürler
Mehmet



Not: kay 83 ten baslattıgımda ise mesajın ilk harfi 83 ten baslamıyor. bir alt satırın basından baslayıp sola dogru devam edıyor.

İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

M_B

Evet FxDev Hocam
Cok guzel calısıyor. Su an bir sorun gormedım. Yaşamadım.
Not: resim kaliteli değil. Daha sonra tekrar yukleyecem.
[IMG]http://img823.imageshack.us/img823/9355/grnt0156.jpg[/img]

İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

jabbathehutt

lcdpixel fonksiyonunu test ettiniz mi acaba?

muhittin_kaplan

Hocam Tam4 yıl olmuş muhtemelen tozlu raftadır.

jabbathehutt

Evet öyledir. Fakat yine de bir hata varsa düzeltmek gerekir. Sonuçta bu konuyu arama moturundan bulup gelen insanlara faydalı olabilir.

"lcdpixel" fonksiyonundaki
nokia_gotoxy(x, (y/6));


satırı şöyle olmalı diye düşünüyorum. Hatam varsa düzeltir konu sahibi.

nokia_gotoxy(x, (y/8));


Tabi burası böyle olunca, "nokia_gotoxy" fonksiyonu da şu şekilde olmalı diye düşünüyorum:
void nokia_gotoxy(char xnokia,char ynokia)			// İstenilen bölgeye ulaşma fonksiyonu 
{
    nokia_write_command(0x40|(xnokia & 0x07));		// Y bu şekilde hareket ediyor: 0100 0yyy
    nokia_write_command(0x80|(ynokia & 0x7F));		// X bu şekilde hareket ediyor: 1xxx xxxx
}


Saygılar.



yarenler42

arkadaşlar 3310 ekranı için derlenmiş bir c dosyasını 16f877 entegrelisini buldum fakat yazılımda biraz değişiklik yaptım ve 877 nin ram i çok düşük kaldı. 18f44k22 nin ram de yeterli fakat 3310 simulasyonunu yapamıyorum. 3310.c dosyasında veya f44k22 için yazılımda ne gibi değişiklik yapmalıyım yardımcı olabilecek varmı ? teşekkürler

sigmoid


yarenler42

Sigmoid paylaşımın için teşekkür ederim. 5110 lcd sini de paylaşımın sayesinde öğrenirim. benim sorunum lcd ile pic uyumsuzluğu idi. ve problemi datasheet ten buldum. 16f877 de b portu için tris ayarı 0x06 iken 18f44k22 de ise tris ayarı 0xf93 olarak düzenledim ve uyumsuzluğu giderdim. tekrar teşekkürler.