Şimdi çok uzatmadan yavaş yavaş ekranımızda karakter oluşturmaya başlayalım.
Not:Burdaki bilgiler ccs pic c derleyicisi kullanılarak hazırlanmıştır. Bilgileri uygulamak için pic c tecrübesi gerekir.
Kullandığımız 2×16 sıvı kristal ekranlarda Türkçe karakter desteği yoktur.Üretici firma kullandığımız bu ekranları ascii tablosuna göre kullanım olanağı sağlamıştır. Ascii kodlaması, İngilizce’de kullanılan latin alfabesi üzerinde oluşturulmuş bir karakter kodlama tipidir. Ayrıca bakınız. Projelerimizde örn: ğ,ı,ş,ü,ç,gülücük,çöp adam vs.. gibi karakterleri kullanacağımız durumlar elbette olacaktır. Bu sebeple ekran üreticisi, tanımsız karakter oluşturulabilmesi için en fazla sekizer bayttan 8 karakterin yazılabileceği boyutta kullanıcıya hafıza bırakmıştır. Kullanıcı 5×7 matris yöntemi (aşağıda bahsedeceğim) ile kendi oluşturduğu karakterin kodunu bu hafızaya yazarak istenildiği vakit ekrana yazdırılmak üzere bu hafızada yer alan karakterleri çağırabilir.Kullanıcı isterse bu hafızayı geçici olarak(ram) bilgi saklamak üzere de kullanabilir.Bu yazıda asıl olarak bahsettiğimiz hafızanın(cgram’in) kullanımından bahsedeceğim.
Öncelikle karakter nasıl oluşturulur, bir göz atalım.





#include <16F628A.h>
#use delay(clock=4000000)
#fuses INTRC_IO,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
#define use_portb_lcd TRUE //lcd bilgisi için port b’yi kullanıyoruz
#include <lcd.c> // lcd için gerekecek fonksiyonların bulunduğu dosya lcd.c
void main()
{
lcd_init();//ekranımızı kuruyoruz
lcd_gotoxy(1,1);//1.satırın 1.karakterine gidiyoruz
lcd_putc(“Şirin Dünya”);//ekranda ” irin D nya” şeklinde görülecektir, yani tanımsız karakterler elbette görülmeyecektir.
for(;;) {} //Sonsuz döngü
}
#include <16F628A.h>
#use delay(clock=4000000)
#fuses INTRC_IO,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
#define use_portb_lcd TRUE //lcd bilgisi için port b’yi kullanıyoruz
#include <lcd.c>// lcd için gerekecek fonksiyonların bulunduğu dosya lcd.c
void main()
{
lcd_init();//ekranımızı kuruyoruz
lcd_gotoxy(1,1);//1.satırın 1.karakterine gidiyoruz
lcd_send_byte(1,65);//Ekrana “A” yazdırıyoruz.
for(;;){}
}
#include <16F628A.h>
#use delay(clock=4000000)
#fuses INTRC_IO,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
#define use_portb_lcd TRUE //lcd bilgisi için port b’yi kullanıyoruz
#include <lcd.c>// lcd için gerekecek fonksiyonların bulunduğu dosya
byte const karakter_[8]={4,0,14,4,4,4,14,0};//Büyük “İ” harfi için 5×7 matrisine göre kodlanmış bilgi
{
lcd_init();//ekranımızı kuruyoruz
lcd_send_byte(0,64);//hafızanın 64 numaralı adresi
lcd_send_byte(1,karakter_[0]);// cgram’e bayt bayt karakterimizi gönderiyoruz
lcd_send_byte(1,karakter_[1]);
lcd_send_byte(1,karakter_[2]);
lcd_send_byte(1,karakter_[3]);
lcd_send_byte(1,karakter_[4]);
lcd_send_byte(1,karakter_[5]);
lcd_send_byte(1,karakter_[6]);
lcd_send_byte(1,karakter_[7]);//karakter_ dizisinin elemanlarını sırasıyla yolladık.
lcd_gotoxy(1,1);//1.satırın 1.karakterine gidiyoruz
lcd_send_byte(1,1);//kendi oluşturduğumuz 1 numaralı karakteri ekrana basıyoruz.
for(;;){}
}
//program sonu


#if defined(__PCM__)
#include <16F628A.h>
#use delay(clock=4000000)
#fuses INTRC_IO,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
#define use_portb_lcd TRUE //lcd bilgisi için port b’yi kullanıyoruz
#include <lcd.c>// lcd için gerekecek fonksiyonların bulunduğu dosya
byte const karakter_bir[8]={0,14,17,16,17,14,4,0};//”ç” harfi için 5×7 matrisine göre kodlanmış bilgi
byte const karakter_iki[8]={0,10,0,17,17,17,14,0};//”ü” harfi için 5×7 matrisine göre kodlanmış bilgi
int i;
void main()
{
lcd_init();//ekranımızı kuruyoruz
lcd_send_byte(0,64);//cgram’de 1.karakteri göndereceğimiz yolu açıyoruz
for(i=0;i<=7;i++) {
lcd_send_byte(1,karakter_bir[i]); //for döngüsü yardımı ile dizideki bilgileri tek tek yolluyoruz.
}
lcd_send_byte(0,72);//cgram’de 2.karakteri göndereceğimiz yolu açıyoruz
for(i=0;i<=7;i++) {
lcd_send_byte(1,karakter_iki); //for döngüsü yardımı ile dizideki bilgileri tek tek yolluyoruz.
}
lcd_gotoxy(1,1);//1.satırın 1.karakterine gidiyoruz
printf(lcd_putc,”G%czel T%crk%cemiz”,2,2,1);//”Güzel Türkçemiz”
for(;;)
{}
}

{
switch (c) {
case ‘\f’ : lcd_send_byte(0,1);
delay_ms(2); break;
case ‘\n’ : lcd_gotoxy(1,2); break;
case ‘\b’ : lcd_send_byte(0,0×10);break;
default : lcd_send_byte(1,c);break;
}
}
{
switch (c) {
case ‘\f’ : lcd_send_byte(0,1);
delay_ms(2);break;
case ‘\n’ : lcd_gotoxy(1,2);break;
case ‘\b’ : lcd_send_byte(0,0×10);break;
case ‘\1′ : lcd_send_byte(0,0×00);break;//1.karakteri çağırmak için yazılacak(isteğe göre başka birşeyler de yazılabilir)
case ‘\2′ : lcd_send_byte(0,0×01);break;
case ‘\3′ : lcd_send_byte(0,0×02);break;
case ‘\4′ : lcd_send_byte(0,0×03);break;
case ‘\5′ : lcd_send_byte(0,0×04);break;
case ‘\6′ : lcd_send_byte(0,0×05);break;
case ‘\7′ : lcd_send_byte(0,0×06);break;
default : lcd_send_byte(1,c);break;
}
}

#include <16F628A.h>
#use delay(clock=4000000)
#fuses INTRC_IO,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
#define use_portb_lcd TRUE //lcd bilgisi için port b’yi kullanıyoruz
#include <lcd.c>// lcd için gerekecek fonksiyonların bulunduğu dosya
byte const karakter_bir[8]={0,10,0,0,17,14,0,0};//gülücük için 5×7 matrisine göre kodlanmış bilgi
int i;
void main()
{
lcd_init();//ekranımızı kuruyoruz
lcd_send_byte(0,64);//cgram’de 1.karakteri göndereceğimiz yolu açıyoruz
for(i=0;i<=7;i++){
lcd_send_byte(1,karakter_bir);
lcd_gotoxy(1,1);//1.satırın 1.karakterine gidiyoruz
printf(lcd_putc,”elektronik \1″);//elektronik yazısının ardından gülücük karakterini ekrana yazıyoruz
for(;;)
{}
}
{
int i,s,adres=64;
const byte karakter_[8][8]=
{
{ 0,14,16,16,17,14, 4, 0},//ç
{14, 0,15,17,15, 1,14, 0},//ğ
{ 0, 0,12, 4, 4, 4,14, 0},//i
{10, 0,14,17,17,17,14, 0},//ö
{ 0,15,16,14, 1,30, 4, 0},//ş
{10, 0,17,17,17,17,14, 0},//ü
{ 0, 0, 0, 0, 0, 0, 0, 0},//boş
{ 0, 0, 0, 0, 0, 0, 0, 0} //boş
};
//değişkenin önüne const yazarak onun sabit bir ifade olmasını sağlarız.
//program akışında artık değiştirilemez.
//bu ifade ile bilgi, program belleğinde saklanır.
//kapasitesi sınırlı olan geçici(ram) bellek çok kullanılmamış olur.
//——-
//rs=0 => komut kaydedicisi
//rs=1 => veri kaydedicisi
for(i=0;i<=7;i++)
{
lcd_send_byte(0,adres);// 1.değerdeki 0 ile rs=0 komut(cgram) kaydedicisi seçildi.
for(s=0;s<=7;s++) {
lcd_send_byte(1,karakter_[i][s]);
adres=adres+8;
}
}
void buyuk_turkce_karakterler()
{
int i,s,adres=64;
const byte karakter_[8][8]=
{
{14,17,16,16,17,14, 4, 0},//Ç
{ 6, 0,15,16,23,17,15, 0},//Ğ
{ 4, 0,14, 4, 4, 4,14, 0},//İ
{10, 0,14,17,17,17,14, 0},//Ö
{15,16,16,14, 1,30, 4, 0},//Ş
{10, 0,17,17,17,17,14, 0},//Ü
{ 0, 0, 0, 0, 0, 0, 0, 0},//boş
{ 0, 0, 0, 0, 0, 0, 0, 0} //boş
};
//değişkenin önüne const yazarak onun sabit bir ifade olmasını sağlarız.
//program akışında artık değiştirilemez.
//bu ifade ile bilgi, program belleğinde saklanır.
//kapasitesi sınırlı olan geçici(ram) bellek çok kullanılmamış olur.
//——-
//rs=0 => komut kaydedicisi
//rs=1 => veri kaydedicisi
for(i=0;i<=7;i++)
{
lcd_send_byte(0,adres); // 1.değerdeki 0 ile rs=0 komut(cgram) kaydedicisi seçildi.
for(s=0;s<=7;s++)
lcd_send_byte(1,karakter_[s]);// cgram’e bayt bayt karakterimizi gönderiyoruz
adres=adres+8;
}
{
switch (c) {
case ‘\f’ : lcd_send_byte(0,1);
delay_ms(2); break;
case ‘\n’ : lcd_gotoxy(1,2); break;
case ‘\b’ : lcd_send_byte(0,0×10); break;
case ‘Ç’ : lcd_send_byte(1,0×00); break;//64 adresinden gelen
case ‘Ğ’ : lcd_send_byte(1,0×01); break;//72
case ‘İ’ : lcd_send_byte(1,0×02); break;//80
case ‘Ö’ : lcd_send_byte(1,0×03); break;//88
case ‘Ş’ : lcd_send_byte(1,0×04); break;//96
case ‘Ü’ : lcd_send_byte(1,0×05); break;//104
case ‘ç’ : lcd_send_byte(1,0×00); break;//112
case ‘ğ’ : lcd_send_byte(1,0×01); break;//120
case ‘ı’ : lcd_send_byte(1,0×02); break;//
case ‘ö’ : lcd_send_byte(1,0×03); break;
case ‘ş’ : lcd_send_byte(1,0×04); break;
case ‘ü’ : lcd_send_byte(1,0×05); break;
case ‘\1′ : lcd_send_byte(1,0×00); break;
case ‘\2′ : lcd_send_byte(1,0×01); break;
case ‘\3′ : lcd_send_byte(1,0×02); break;
case ‘\4′ : lcd_send_byte(1,0×03); break;
case ‘\5′ : lcd_send_byte(1,0×04); break;
case ‘\6′ : lcd_send_byte(1,0×05); break;
case ‘\7′ : lcd_send_byte(1,0×06); break;
case ‘\8′ : lcd_send_byte(1,0×07); break;
default : lcd_send_byte(1,c); break;
}
}
#include <16F628A.h>
#use delay(clock=4000000)
#fuses INTRC_IO,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
#define use_portb_lcd TRUE //lcd bilgisi için port b’yi kullanıyoruz
#include <lcd.c>// lcd için gerekecek fonksiyonların bulunduğu dosya
void main()
{
lcd_init();//ekranımızı kuruyoruz
kucuk_turkce_karakterler();//Küçük Türkçe karakterler için fonksiyonumuzu çağırıyoruz.
lcd_gotoxy(1,1);//1.satırın 1.karakterine gidiyoruz
printf(lcd_putc,”Güzel Türkçe“);
for(;;)
{}
}
————————————————————————
#include <16F628A.h>
#use delay(clock=4000000)
#fuses INTRC_IO,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
#define use_portb_lcd TRUE //lcd bilgisi için port b’yi kullanıyoruz
#include <lcd.c>// lcd için gerekecek fonksiyonların bulunduğu dosya
void main()
{
lcd_init();//ekranımızı kuruyoruz
buyuk_turkce_karakterler();//Büyük Türkçe karakterler için fonksiyonumuzu çağırıyoruz.
lcd_gotoxy(1,1);//1.satırın 1.karakterine gidiyoruz
printf(lcd_putc,”DÜNYA’DA UÇMAK“);
for(;;)
{}
}

Değiştirilmiş Lcd.c dosyası (rar)
Bu yazının da artık sonuna geldiğini sanıyorum. Umarım yararlı ve anlaşılır olmuşumdur.Hatalarım varsa lütfen bildiriniz.
İyi Çalışmalar Dilerim.
Sinan GÜMÜŞTEKİN
sinan(güzel a)elektronikmerkezi.org

çok şahane bir konu
ben uzun zaman dır kayuan yazı yapmak istiyorum bana yardımıcı olacak konuları yollarsanız sevinirim
teşekkürler. kayan yazı uygulması için verdiğim adresteki fonksiyonları iyi incelemelisiniz. adresteki fonksiyonlar ve basit döngüler ile yazıyı kaydırabilrsiniz. takıldığınız yerde yardımcı olmaya çalışırım. kolay gelsin.
http://elektronikmerkezi.org/?sg=yazi&no=67
çok güzel bir site olmuş ellerinize saglık
Hocam bu pic basic dilimi nedir anlayamadım # falan var başlarda
Merhaba. Konu başlığında zaten \”pic c\” diye belirttim. # ise c diline has bir özelliktir. iyi günler dilerim.
selamlar herkese
arkadaslar kayan yazı devresı yapmak ıstıyorum aranızda ıllakı butur devre yapan olmustur yada pıc uzerunde devre yapan arkaslar varsa bana yardımcı olabılırlermı
emrekaplan86@hotmail.com mail adresım
BU TÜR YAZILIMLARLA UGRAŞAN BÜTÜN
HOCALARIMA VE BU BİLGİLERİ BİZLERE
AYDINLATTIKLARI İCİN ALLAH BEYİNLERİNE SAGLIK VE TÖBE HAŞA ALLAH SABRI VERSİN.ELİMDEN GELEN ELEKTRONİKLE BİLGİLERİ HERZAMAN PAYLAŞIRIM.SAYGILARBİNLERCE TEŞEKKÜRLER.
biZİ elektroniye teşvik ettikleri için çok teşekkürederiz
ÖZEL KARAKTER PROGRAMINI İNDİRDİM ÇOK PRATİK OLMUŞ ÇOK TEŞEKKÜRLER EMEĞİNİ PAYLAŞTIIN İÇİN.
YHA BEN BİŞİ ANLAYAMADIM. BEN 5. SINIFA GİDOM AMA YHA NESE HİÇ GÖZEL DEĞİLLLÇ…………. UZATMANIN ADABI YOK…
Çok güzel teşşekkürler. Buna bir klavye bağlantısı yaparak drekt olarak yazıyı değiştirebilirmiyiz
@Atilla.
ben de teşekkür ederim. tabi ki klavyeden gelen bilgileri pic ile okuduktan sonra hafızaya alırsınız. Tekrar bilgileri hafızadan çağırarak ekrana yazdırabilirsiniz. Uygun bir zamanda uygulamasını yapabilirsem paylaşmaya çalışacağım.
bu matris kodlayıcıyı yaptığınız için teşekkürler.birde bunun sutun kodlamalı olanı olursa güzel olur.yaparsanız sevinirim
bana ps2 den lcd ye veri aktarımı nasıl olur bunun hakkında döküman lazımmm
yardımcı olursanız sevinirim