“lcdturkce.c”
dosyası (Ana
dosyamız)
==================================================
// Durali Kiraz 2015
==================================================
// Durali Kiraz 2015
//
PIC16F877A için hazırlanmıştır.
#include
"ayarlar.h"
#include
"bizim_lcd.h" // LCD kütüphanesi tanımlanıyor
#include
"delay.h"
void
TurkceKarakterleriHazirla(void)
{
//
CGRAM'de 1. Adrese "Ç" Karakteri Kaydediliyor
lcd_komut(0x40);veri_yolla(14);
lcd_komut(0x41);veri_yolla(17);
lcd_komut(0x42);veri_yolla(16);
lcd_komut(0x43);veri_yolla(16);
lcd_komut(0x44);veri_yolla(16);
lcd_komut(0x45);veri_yolla(21);
lcd_komut(0x46);veri_yolla(14);
lcd_komut(0x47);veri_yolla(0);
//
CGRAM'de 1. Adrese "Ğ" Karakteri Kaydediliyor
lcd_komut(0x48);veri_yolla(14);
lcd_komut(0x49);veri_yolla(0);
lcd_komut(0x4A);veri_yolla(15);
lcd_komut(0x4B);veri_yolla(16);
lcd_komut(0x4C);veri_yolla(19);
lcd_komut(0x4D);veri_yolla(17);
lcd_komut(0x4E);veri_yolla(15);
lcd_komut(0x4F);veri_yolla(0);
//
CGRAM'de 2. Adrese "İ" Karakteri Kaydediliyor
lcd_komut(0x50);veri_yolla(4);
lcd_komut(0x51);veri_yolla(0);
lcd_komut(0x52);veri_yolla(4);
lcd_komut(0x53);veri_yolla(4);
lcd_komut(0x54);veri_yolla(4);
lcd_komut(0x55);veri_yolla(4);
lcd_komut(0x56);veri_yolla(4);
lcd_komut(0x57);veri_yolla(0);
//
CGRAM'de 3. Adrese "Ö" Karakteri Kaydediliyor
lcd_komut(0x58);veri_yolla(10);
lcd_komut(0x59);veri_yolla(0);
lcd_komut(0x5A);veri_yolla(14);
lcd_komut(0x5B);veri_yolla(17);
lcd_komut(0x5C);veri_yolla(17);
lcd_komut(0x5D);veri_yolla(17);
lcd_komut(0x5E);veri_yolla(14);
lcd_komut(0x5F);veri_yolla(0);
//
CGRAM'de 4. Adrese "Ş" Karakteri Kaydediliyor
lcd_komut(0x60);veri_yolla(14);
lcd_komut(0x61);veri_yolla(17);
lcd_komut(0x62);veri_yolla(16);
lcd_komut(0x63);veri_yolla(14);
lcd_komut(0x64);veri_yolla(1);
lcd_komut(0x65);veri_yolla(21);
lcd_komut(0x66);veri_yolla(14);
lcd_komut(0x67);veri_yolla(0);
//
CGRAM'de 5. Adrese "Ü" Karakteri Kaydediliyor
lcd_komut(0x68);veri_yolla(10);
lcd_komut(0x69);veri_yolla(0);
lcd_komut(0x6A);veri_yolla(17);
lcd_komut(0x6B);veri_yolla(17);
lcd_komut(0x6C);veri_yolla(17);
lcd_komut(0x6D);veri_yolla(17);
lcd_komut(0x6E);veri_yolla(14);
lcd_komut(0x6F);veri_yolla(0);
//
CGRAM'de 6. Adrese "I" Karakteri Kaydediliyor
lcd_komut(0x70);veri_yolla(4);
lcd_komut(0x71);veri_yolla(4);
lcd_komut(0x72);veri_yolla(4);
lcd_komut(0x73);veri_yolla(4);
lcd_komut(0x74);veri_yolla(4);
lcd_komut(0x75);veri_yolla(4);
lcd_komut(0x76);veri_yolla(4);
lcd_komut(0x77);veri_yolla(0);
//
CGRAM'de 7. Adrese "'" Karakteri Kaydediliyor
lcd_komut(0x78);veri_yolla(12);
lcd_komut(0x79);veri_yolla(18);
lcd_komut(0x7A);veri_yolla(18);
lcd_komut(0x7B);veri_yolla(12);
lcd_komut(0x7C);veri_yolla(0);
lcd_komut(0x7D);veri_yolla(0);
lcd_komut(0x7E);veri_yolla(0);
lcd_komut(0x7F);veri_yolla(0);
lcd_komut(BirinciSatir);
}
void
main(void) // Ana fonksiyon alanı
{
TRISB=0x00; //
LCD'ye bağlı portlar çıkış yapılıyor
TRISC=0x00;
PORTB=0x00;
PORTC=0x00;
lcd_baslat(); //
LCD ilk ayarları yapılıyor
TurkceKarakterleriHazirla();
for(;;) //Sonsuz
döngüye giriliyor
{
//veri_yolla(0); //
1. karekter yazdırılıyor
lcd_yaz("ME");
veri_yolla(4); //Ş
harfi yazdır
lcd_yaz("HUR
");
veri_yolla(0); //Ç
harfi yazdır
lcd_yaz("UBUK");
ms_delay(1000);
lcd_konumlanxy(2,1); //
İkinci satıra geçiliyor
lcd_yaz("TUR");
veri_yolla(4); //Ş
harfi yazdır
lcd_yaz("USU
Y");
veri_yolla(2); //İ
harfi yazdır
lcd_yaz("Y");
veri_yolla(2); //İ
harfi yazdır
lcd_yaz("N");
ms_delay(1000);
lcd_ekranisil();
ms_delay(500);
}
}
==================================================
Bu dersimizde Ders11
den farklı olan tek dosyamız yukardaki ana dosymızdır. Diğer
bizim_lcd.c, bizim_lcd.h, delay.c, delay.h, ayarlar.h dosyalarında
herhangi bir değişiklik yoktur. Önceki dersten bu dosyaları
isterseniz inceleyebilirsiniz.
Bilindiği üzere
16x2 karakter lcd lerin hafizasında bizim kullandığımız türkçe
karakterler yoktur. Ancak 8 karakterin sığabileceği boş hafıza
alanı mevcuttur. İşte biz kendi tanımladığımız Türkçe
karakterleri yada özel karakterleri bu alanlara pic programımızı
başlatırken tanımlıyor ve ardından kullanıyoruz. Burada önemli
olan hususlardan biride bu tanımlanan özel karakterlerin pic
mikrodenetleyicimizin elektriği kesildiği anda hafızadan
kaybolmasıdır. Mikrodenetleyicimiz her elektriklenip çalışmaya
başladığında bizim yazılımsal olarak bu özel karakterleri
başlatmamızın gerekli olmasıdır. Peki özel karakter lcd ye
nasıl tanımlanır isterseniz biraz bundan bahsedelim.
Örnek olarak “Ç”
harfinin tanımlanmasını ele alalım. CGRAM hafızasının boş
karakter alanlarının ilkinin başlangıç adresi 0x40 adresidir.
Bizim her karakterimiz için 8 satır tanımlama alanı vardır. En
alttaki alan genelde boş bırakılır kullanılmaz. Bu yüzden en
alt satırı sıfırla tamamlayacağız. Sırayla Ç harfine ait 8
satırı oluşturalim
Hafıza adresi |
Gönderilen Değer - Ondalık
|
Gönderilen Değer – İkilik |
0x40 |
14 |
00001110 |
0x41 |
17 |
00010001 |
0x42 |
16 |
00010000 |
0x43 |
16 |
00010000 |
0x44 |
16 |
00010000 |
0x45 |
21 |
00010101 |
0x46 |
14 |
00001110 |
0x47 |
0 |
00000000 |
Biz “Ç” harfini
CGRAM hafıza da sırayla yukardaki satırları hafıza adresi ile
belirtilen adrese göndererek oluştururuz. Şu durumda “Ç”
harfinin nasıl oluştuğunu gözlerinden canlandıramayanlar için
ikilik değerlerdeki “1” sayılarını koyulaştırıp aşağıda
görmeniz sunuyoruz.
0
0 0 0 1 1 1 0
0
0 0 1 0 0 0 1
0
0 0 1 0 0 0 0
0
0 0 1 0 0 0 0
0
0 0 1 0 0 0 0
0
0 0 1 0 1 0 1
0
0 0 0 1 1 1 0
0
0 0 0 0 0 0 0
Şu
anda artık “Ç” harfini görüyor olmalısınız. Şayet halâ
göremiyorsanız en yakın arkadaşınızdan yardım almanızı
öneririm. :) Dilerseniz kendi hayâlinizdeki “Ç” yatık
harfide bu mantığı kullanarak oluşturabilirsiniz. Hatta karakter
lcd için özel karakterleri oluşturan programcıklarda internette
mevcuttur. Bunlarla rahatlıkla kendi özel karakterlerinizi
oluşturabilirsiniz.
Bu
derste TurkceKarakterleriHazirla
isimli
fonksiyonu oluşturduk. İsminden anlaşılacağı gibi yukarda
anlattığımız mantıkla 8 adet Türkçe karakteri CGRAM
hafızasında geçici olarak oluşturduk. Main
isimli ana fonksiyonumuzda lcd_baslat();
isimli
fonksiyonun çağrılmasından sonra Türkçe karakterlerimizi
oluşturan fonksiyonu çağırdık. Sonrasında Yazdırmak
istediğimiz Türkçe karakterlerden oluşan iki satırlık mesajı
parçalar halinde Lcd ye gönderdik. Bu kodda biz biraz
kullanışlılığı az olan bir yöntemle Türkçe karakterleri
parça parça gönderip diğer normal ingilizce karakterleri lcd_yaz
fonksiyonu ile gönderdik. Bu şekilde programın çalışmasını
engelleyecek bir sıkıntı yoktur. Eğer siz kodunuzda internette
bulunan flex_lcd.c dosyasında olduğu gibi doğrudan lcd_yaz(“ÇUBUK
TURŞUSU”) şeklinde tek bir fonksiyonda derli toplu bir şekilde
bu işi yapmak isterseniz bizim_lcd.c dosyasındaki lcd_yaz() isimli
fonksiyonda basit bir iki değişiklik yapabilirsiniz. Örnek verecek
olursak
if
(GelenKarakter == 'Ç')
veri_yolla(0); //Ç
harfi
:
:
şeklinde
kod düzeltmesiyle fonksiyonunuzu daha işlevsel yapabilirsiniz.
Kodumuzun
derle aşaları Ders11 de anlatıldığının aynı şekildedir. Biz
yine burada nasıl derleme yapılacağını tekrar verelim :
sdcc
--use-non-free -mpic14 -p16f877a -I path/to/pic14/includes -c
bizim_lcd.c
sdcc --use-non-free -mpic14 -p16f877a -I path/to/pic14/includes -c delay.c
sdcc --use-non-free -mpic14 -p16f877a -I path/to/pic14/includes -L path/to/pic14/libraries -Wl, lcdturkce.c bizim_lcd.o delay.o
sdcc --use-non-free -mpic14 -p16f877a -I path/to/pic14/includes -c delay.c
sdcc --use-non-free -mpic14 -p16f877a -I path/to/pic14/includes -L path/to/pic14/libraries -Wl, lcdturkce.c bizim_lcd.o delay.o
(En
alt satır sığmadığı için aşağıya kaymıştır. Bir üstteki
satırın devamıdır)
Bu
derleme adımlarının açıklamalarını Ders 11 de ayrıntılı
bir şekilde bulabilirsiniz. Bir sonraki derste görüşmek üzere
hoşçakalın.
duralikiraz.blogspot.com
02
Ağustos 2015
“Muvaffakiyet
Allahtandır”
Hiç yorum yok:
Yorum Gönder