LCD’ler
elektronikte karakterlerin gösterilmesinde kullanılırlar.LCD’lerin üstünde ekran
kartları gibi ekrana yazılan bilgilerin sürekli görünebilmeleri için tarama
işlemini yapan entegrelerle birlikte üretilip satılırlar.Bu entegreler ekranın
her yanını tarayarak kendini sürekli günceller.Neyse bu kadar elektronik bize
yeter.Elektronik demişken yapacağımız uygulamanın lcd’ye bağlayıpta yapacağımız
birebir uygulama değil(ama onuda yapacam.ilk önce 20$ bulup bir lcd aldıktan
sonra:)).Lcd’yi bir anlamda simule edeceğiz.LCD’lerin yapısını tam anlamak için
bir kareli defteri düşünün.Bu defter içindeki kareler LCD içindeki her noktayı
yani bir led’i (noktayı)temsil etsin.Karakterlerde bellirli bir binary dağılım
göstererek ledleri yakar ve ortaya insanların anlayabileceği bir şekil gelirki
bunlar karakter olarak isimlendirilir.
Programın
Amacı: Yapacağımız programla textboxtan girilen bir yazı sanki bir Lcd
üzerindeymiş gibi bitlerine ayrışacak ve biz insanlara anlaşır bir karakter
sunacak.Gireceğimiz string veri haliyle karakterlere ayrılacak ve ayrılan her
karakter binary olarak sanal Lcd’mize yayılacak ve bize güzel bir sonuç ile
dönecek.
ALGORİTMA:
Ve
programıza başlıyoruz.LCD’ye yaz butonuna basınca yaz() isimli master metotu
çağırıyoruz. Butonlara ne kadar az kod yazarsak o kadar iyi olacağı
inancındayım. yaz() metotuna gelirsek burda şöyle bir yapı söz konusu: Karakter
dizisine ayrılan string verimizin her karakteri kodlama için harfyaz() metotuna
gider. Kodları incelersek bu rahatlıkla gözükecektir. Birde gonder isimli değişken
var. Bu "gonder"in anlamı ise aşadaki şekille pekiştirilmeye çalışılmıştır.
Ve
yukarıda geçen yaz() metotu aşada verilmiştir....
public void yaz()
{
int gonder=0;
int i,j;
char[]gelen=textBox1.Text.ToUpper().ToCharArray();
for(i=0,j=0;i<gelen.Length && j<gelen.Length;i++,j++)
{
harfyaz(gonder,gelen[j]);
gonder+=8;
}
} |
yaz()
metodunun istediği harfyaz metodunda ise temel mantık yaz() metotundan gelen
karakter dizisinin elemanlarını alarak harfsec isimli metota yollar. Harfsec ise;
genel bildirim yaptıdığımız A isimli iki boyutlu karakterlerimizin binary
formatının tutulacağı matrisi harfe göre doldurmaktır. Harfyaz metotu gelen A
matrisindeki verileri 8’li gruplar halinde kaydırarak ekransatir[8,80]isimli LCD
ekran kabul ettiğimiz matrisin bulunduğu satir ve sutuna göre ledleri
yakar. Ledler yandığı zaman led1.image, söndüğünde ise led0.image
gözükecektir.Aşadaki yapıyı dikkatle incelerseniz neler olup bittiğini daha iyi
anlayacaksınız.
public void harfyaz(int a,char c)
{
int x=a;
harfsec(c);
for(int i=0;i<8;i++)
{
x=a;
for(int j=0;j<8;j++)
{
if(A[i,j]==1)
{
ekransatir[i,x].Image=led1.Image;
}
else
if(A[i,j]==0)
{
ekransatir[i,x].Image=led0.Image;
}
x++;
}
}
matristemizle();//A matrisinin tüm elemanlarını sıfırlayan metotdur.
} |
harfsec()
metotuna kısaca değinirsek:Gelen karaktere göre A matrisini 1 ve 0 ile
doldurur. Geriye dönüş değeri yoktur ve olmamasıda çok doğaldır. Bu metotta bütün
karakterler binary olarak kodlandığı için sadece birini inceleyim...
int[,]A;
public void harfsec(char karakter)
{
switch(karakter)
{
case ’
’:
A=new
int[8,8];
break;
case ’A’:
A=new
int[8,8]{{0,0,1,1,1,1,0,0},
{0,1,0,0,0,0,1,0},
{0,1,0,0,0,0,1,0},
{0,1,0,0,0,0,1,0},
{0,1,1,1,1,1,1,0},
{0,1,0,0,0,0,1,0},
{0,1,0,0,0,0,1,0},
{0,1,0,0,0,0,1,0}};
break;
|
NOT: Rakamlar ve bazı özel karakterleri ben koymadım.isterseniz
koyabilirsiniz.Sadece temel alfabe ve ünlem işaretleri var.
Evet nerde
kaldık. Birde sağa sola kaydırma işlemleri var. Bu işlemleri kontrol altında
tutmak için timer controlüne koymak daha anlamlı. Örnek olarak sola kaydırma
işlemini ele alalım.Bu işlemle iki döngü ile tüm sanal Lcd ekranını tarayarak sola
doğru bir öteleme yapıyoruz. ekransatir[i,j].Image=ekransatir[i,j+1].Image; bu
kadar basit.....
private void timer1_Tick(object sender,
System.EventArgs e)
{
for(int i=0;i<8;i++)
{
for(int j=0;j<79;j++)
{
ekransatir[i,j].Image=ekransatir[i,j+1].Image;
}
}
}
|
Son olarak
formun load event’ ına bakmakta yarar var. Burada ekransatir isimli sanal Lcd panel
belirtiliyor ve dizi olarak formun kontollerine ekleniyor ve düzenli artışla
formda gösteriliyor. Birde programda her defasında textbox’ tan veri yollamadan önce
Lcd temizle butonu ile matrisleri boşaltmamız gerekir.
PictureBox[,]ekransatir;
private void Form1_Load(object sender, System.EventArgs e)
{
ekransatir=new PictureBox[8,80];
int xpos=0;
int ypos=20;
int width=8;
int height=8;
for(int i=0;i<8;i++)
{
for(int j=0;j<80;j++)
{
ekransatir[i,j]=new PictureBox();
this.Controls.Add(ekransatir[i,j]);
ekransatir[i,j].Image=led0.Image;
ekransatir[i,j].SetBounds(xpos,ypos,width,height);
ekransatir[i,j].Show();
xpos+=8;
}
xpos=0;
ypos+=8;
}
} |
SON
SÖZ: Bazılarınız makaleyi okuduktan sonra bu olayın GDI+ ile yapılabileceğini
fark etmişsinizdir heralde. Ama bu yapı elektronikle tam olarak örtüşmediği için
tercih edilmemiştir. Nede olsa Elektronik her zaman 1-0 ların dünyası değil
mi? Umarım yararlı olmuştur.
Caner ŞAHAN
University of Istanbul Dep. Electronic Engineering
[email protected]
kaynak kodlar için>>>>
Makale:
C# ile Yapılmış Bir Çeşit LCD Simulatorü... C#, Visual C# ve .NET Caner Şahan
|