3310 LCD Kullanımı
Nokia 3310'un LCD'sini kullanarak ekrana yazı yazmak istemez miydiniz?
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ı
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;
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
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. (48×84)
-X ekseninde 0'dan 83'e kadar adresleme yapılabilirken, Y ekseninde 0'dan 5'e kadar adresleme yapılabilir. (Kaynak: Datasheet)
İ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
}
DDRAM'i silmek için ise aşağıdaki fonksiyon kullanılabilir;
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);
}
LCD'de istenilen yere X'te 0'dan 83'e, Y'de 0'dan 5'e kadar gidebilirsiniz. Komut sistemindeki tanımlama şeklinden dolayı aşağıdaki fonksiyon kullanılır;
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
}
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 84×6=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.
Memory yapısı 6x8x84 olduğu için karakterlerimizin boyutunu 6×8'lik seçmek uygun olacaktır.
Ayarlar yapıldıktan sonra istenilen şekili çizebilirsiniz.
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.
Daha sonra kaydedilen dosya notepad++ gibi bir programla açılır ve &h olan kısımlar 0x ile değiştirilir.
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]);
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…
Kütüphane Dosyaları
a) 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 pixel 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);
b) 3310.c Dosyası
#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);
}