Gönderen Konu: Nokia 3310 Kütüphane Dosyası  (Okunma sayısı 3746 defa)

FxDev

  • Ziyaretçi
Nokia 3310 Kütüphane Dosyası
« : 29 Haziran 2009, 20:42:53 »
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
Kod: [Seç]
/* 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
Kod: [Seç]
#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);
}

Çevrimiçi M_B

  • Profesyonel Üye
  • *****
  • İleti: 1349
Ynt: Nokia 3310 Kütüphane Dosyası
« Yanıtla #1 : 24 Eylül 2010, 13:37:54 »
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:
Kod: [Seç]
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

Çevrimiçi M_B

  • Profesyonel Üye
  • *****
  • İleti: 1349
Ynt: Nokia 3310 Kütüphane Dosyası
« Yanıtla #2 : 24 Eylül 2010, 14:14:57 »
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.


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

Çevrimdışı jabbathehutt

  • Yeni Üye
  • *
  • İleti: 15
Ynt: Nokia 3310 Kütüphane Dosyası
« Yanıtla #3 : 20 Aralık 2014, 13:22:54 »
lcdpixel fonksiyonunu test ettiniz mi acaba?

Çevrimdışı muhittin_kaplan

  • Global Moderator
  • Profesyonel Üye
  • *****
  • İleti: 8054
  • Üretirsen var olursun. Üretmezsen yok.
    • Olmaz dediğimiz iş bitmek üzere.
Ynt: Nokia 3310 Kütüphane Dosyası
« Yanıtla #4 : 20 Aralık 2014, 15:28:29 »
Hocam Tam4 yıl olmuş muhtemelen tozlu raftadır.

Çevrimdışı jabbathehutt

  • Yeni Üye
  • *
  • İleti: 15
Ynt: Nokia 3310 Kütüphane Dosyası
« Yanıtla #5 : 21 Aralık 2014, 00:32:39 »
Evet öyledir. Fakat yine de bir hata varsa düzeltmek gerekir. Sonuçta bu konuyu arama moturundan bulup gelen insanlara faydalı olabilir.

"lcdpixel" fonksiyonundaki
Kod: [Seç]
nokia_gotoxy(x, (y/6));

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

Kod: [Seç]
nokia_gotoxy(x, (y/8));

Tabi burası böyle olunca, "nokia_gotoxy" fonksiyonu da şu şekilde olmalı diye düşünüyorum:
Kod: [Seç]
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.



Çevrimdışı yarenler42

  • Yeni Üye
  • *
  • İleti: 16
Ynt: Nokia 3310 Kütüphane Dosyası
« Yanıtla #6 : 19 Kasım 2017, 15:37:18 »
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

Çevrimdışı sigmoid

  • Emektar
  • *****
  • İleti: 809
Ynt: Nokia 3310 Kütüphane Dosyası
« Yanıtla #7 : 20 Kasım 2017, 12:43:07 »

Çevrimdışı yarenler42

  • Yeni Üye
  • *
  • İleti: 16
Ynt: Nokia 3310 Kütüphane Dosyası
« Yanıtla #8 : 20 Kasım 2017, 12:58:40 »
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.