C#'ın pratik olarak kullanıldığı örnek bir
windows uygulaması yapacağız.
LCD
nedir? Çalışması nasıldır?
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,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; } } |
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. |
int[,]A;
case ’ ’:public void harfsec(char karakter) { switch(karakter) { 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; |
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ı 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; } } } |
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?
Hiç yorum yok:
Yorum Gönder