Grafik LCD de Menü oluşturma ve Ekranda butonlar yapma

Başlatan Mucit23, 03 Haziran 2011, 07:10:21

Mucit23

Arkadaşlar 12x64 grafik lcd de menü için ekranda butonlar yapaya çalışıyorum. Sizlerin fikirlerine ihtiyacım var.  Yapmak istediğim şeyin çalışması kısaca şöyle olmalı. Menüdeyken ekranın çeşitli yerlerine yerleştirdiğimiz dikdörgen şeklindeki butonlar olsun. Bu botonların içinde butonun görevini yazıracağım. Yön tuşları ile hangi butonu seçtiysem eğer butonun seçildiğini anlamak için içindeki yazı invert olabilir. Çokmu şey istedim bilmiyorum ama aklımdakileri ancak anlatabildim. :)
Protonda çalışıyorum. Aslında tamda yapmak istediğime benzer internette bir uygulama var.
Aynı aşağıdaki resimdeki gibi olacak

Tek fark bu kadar büyük olmaması lazım. Bu konuda sizlerin fikir önerilerinize ve algoritma desteğinize ihitiyacım var.
Sağa, Sola, Yukarı, Aşağı ve Ok olmak üzere ayar butonlarım var.

Birde arkadaşlar proton komutlarını ve ne işe yaradığını yazan bir kaynak arıyorum. Protonda ne işe yaradığını bilmediğim birsürü komut var. Mesela birtanesi CIRCLE komutu. Bu komut ne işe yarıyor. Protonun help menüsünden baktım anladığım kadarıyla ekranda daire, çember oluşturmak için kullanılıyor. Ama ayrıntılarını bilmiyorum. Nasıl kullanılır. Üzerindeki parametreler ne işe yarar Bunun gibi bilgilere ihtiyacım var

M_B

merhaba hocam;
Ekranda ki menuyu gorunce aklıma bankamatıklerdeki menu sistemı geldi.
Ekranın sagında ve solunda tuslar oluyor ( dokunmatık olmayan tip )
Hocam sizin bu uygulamada da olabilir kanısındayım.

Kolay gelsin.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Mucit23

Aslında benim yapmak istediğim daha küçük çaplı. Ekranın en altında sadece iki adet buton olacak. Ben sadece nasıl oluşturabileceğimi hangi mantıkla gitmem gerektiğini bilmiyorum. Yani diyelim ekrandaki verileri görüntüyü bozmadan bunu nasıl yapmam gerekiyor. Dediğim gibi biraz algoritma desteğine ihtiyacım var

M_B

Merhaba Hocam biraz bildiğim kadarıyla anlatmaya calışayım.

Oncelikle bir tane menuNo diye bir değişken olacak ve degeri ilk basta default olarak 1 olsun diyelim.
sonra tusa bastıkca degeri değisecek ve ilgili menuye gelecek.
burda ben 3 buton kullandım
ileri geri ve OK butunu ( onaylamak ıcın )

Umarım anlatabilmişimdir.


  

menuNo=1;

if(ileri==1)
    {
    menuNo++; // menuno su bir artırıldı. )    
    if(menuNo==5)menuNo=0;
    if(menuNo==2) { Print "alarm"  invertli yazısı ; }  Protonda nasıl ekrana yazı yazılır bılmedıgım ıcın bu sekılde yazdım ornek olması acısından 
    if(menuNo==3) { Print "tarih"  invertli yazısı; } 
    if(menuNo==4) { Print "ayar"  invertli yazısı; } 
    while(ileri);
    }

if(geri==1)
    {
    menuNo--; // menuno su bir azalt    
    if(menuNo==0)menuNo=1;
    if(menuNo==2) { Print "alarm"  invertli yazısı ; }  Protonda nasıl ekrana yazı yazılır bılmedıgım ıcın bu sekılde yazdım ornek olması acısından 
    if(menuNo==3) { Print "tarih"  invertli yazısı; } 
    if(menuNo==4) { Print "ayar"  invertli yazısı; } 
    while(geri);
    }

		if(OK==1)
					{
					if(MenuNo==1)  // Saat ayarlama 
							{
							Saat();
							}
					if(MenuNo==2)  // alarm ayarlama 
							{	
							alarm();
							}
					if(MenuNo==3)  // ayar fonksiyonu
							{	
							ayar();
							}
					} // OK tus sonu

İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Mucit23

Hocam Teşekkür ederim.
Daha önce Pic basicde çok çeşitli menüler yapmıştım. Fakat hepsinde karakter lcd kullanmıştım. Bu sefer GLCD kullanınca işler biraz farklılaştı. Menüler arası geçiş yaparken Aynende sizin dediğiniz gibi olması lazım. Bir tane değişkenimiz olacak. Menüler arası geçiş yapmak için değişken değeriyle oynayacağım(daha öncede hep böylede yapıyordum.) Sonra Değişkenin değerine bakarak ilgili değere eş olan menü görüntüsünü ekrana basıcağız. Teoride böyle olması gerek. Şimdi benim aklıma takıla durum ise şudur. Aklınıza yatması için şöyle bir örnek vereyim.(aslında yapmaya çalıştığım şeyde tam anlamıyla budur. ) Bir saat ayarlama menüsü olsun LCD de aşağıdakine benzer bir görüntü olsun

            ZAMAN AYARI

SAAT: 00:00:00
TARİH: GG/AA/YY
GÜN: PAZARTESİ(SALI, ÇARŞAMBA, PERŞEMBE....)

KAYDET         İPTAL

Ekran görüntüsünün bu şekilde olduğunu düşünün. Ekranda zaman ayarı yapılıyor. Diyelim saat ayarını seçtik. Anlaşılması için saat ayarı yapılırken ekranda saat bilgisinin terslenmiş durumda çıkmasını istiyorum. Aynı şekilde dakika,gün,ay,yıl içinde geçerli olacak. Seçilen ayar hangisindeyse o terslenmiş halde çıkacak.
En sonda kaydet veya iptale gelinirse yine aynı şekilde olması lazım. Yazılar teslenmiş halde çıkması lazım. Bunu protonda nasıl yapabileceğimi öğrenmeye çalışıyorum.

vitruvius

Böleceğim ama bilmediğim bir kullanım gördüm. Ben C kullanıyorum, şuradaki while(ileri) komudunun işlevi ne acaba? Teşekkürler.

if(ileri==1)
    {
    menuNo++; // menuno su bir artırıldı. )    
    if(menuNo==5)menuNo=0;
    if(menuNo==2) { Print "alarm"  invertli yazısı ; }  Protonda nasıl ekrana yazı yazılır bılmedıgım ıcın bu sekılde yazdım ornek olması acısından 
    if(menuNo==3) { Print "tarih"  invertli yazısı; } 
    if(menuNo==4) { Print "ayar"  invertli yazısı; } 
    while(ileri);
    }

LukeSkywalker

tuştan elini çekene kadar bekletiyor. Yani tuşa birkez bastığında diğer menüye geçmemesi için...

Mucit23

Benim konuya dönecek olursak kimsenin fikri yokmu. ???

Klein

Grafik modülünün katmanları arasında XOR özelliği varsa işin kolay.  KAtmanın birine,  negatif görünecek kısım büyüklüğünde kutu çizip kutunun içini 0xFF doldurursan direk negatif görüntü elde edersin.
5-6 yıl kadar önce yaptığım bir uygulamaya şöyle bir göz attım. Aslında tam senin istediğin şey.  Ama aradan uzun zaman geçtiği için  ayıklama yapamadım.  Eğer grafik modülün 320x240 ise , kod ayıklamasını yapabilirsem kodu göndermeye çalışırım.

ekleme:
Protonla çalıştığını şimdi farkettim. Benim kodlar C.

Mucit23

Hocam katmanlarda XOR özelliği varmı bilmiyorum. Kullandığım LCD WG12864B. Aslında aşağıdaki kaydet ve iptal butonunu dikdörgen içine almayı düşünüyordum. İş zorlaşacak gibi görünüyor. Nasıl çözerim hala kara kara düşünmekteyim  ??? ??? ???

muhittin_kaplan

Güzel proje kolay gelsin.
Hocam önce grafik çizdirmekle başlayın bence. yani invert bir image nasıl oluşturulur kare yada çember (circle) nasıl çizdirilir gibi. sonrası çorap söküğü gibi gelir.
çizimle ilgili kodlar
Plot:istenen koordinata (pixel) nokta koyar
Unplot:noktayı siler
circle 1,Xpos,Ypos,Radius (xpos ve ypos a radius kadar açılı çember çizer (eğer 0 olursa siler))


Mucit23

Hocamaynen dediğiniz gibi yapıyorum. Protondadaki Grafik lcd ile ilgili komutları sadece kullanarak nasıl çalıştıklarını anlamaya çalışıyorum. Daha protonda yeniyim. Şimdilik LCDWrite komutuile ekrana çizgiler çizip içi boş dikdörgenler çerçeveler oluşturuyorum. (Projemin temelinde bu aşamalarda var) Ondan sonra circle ve box komutlarını ineleyeceğim. Bunların çalışmasını iyice anlamalıyım.

KONYALI

@Mucit23
Hocam resimdeki devreyi ben yapmıştım burada görmek ve birilerinin işine yaraması beni çok sevindirdi.320volt ta kodlarını vs paylaşmıştım. Sanırım kodları C dilinde yazıldığı için içinden çıkamadınız. Aslında karakter LCD de menü oluşturmaktan pek de farklı bi algoritması yok. Sadece menu_id adlı bir değişkenle hangi seçenekde olduğunuzu takip ediyorsunuz ve ona göre kutunun içini doldurup yazıyı tersliyorsunuz. Sadece protonda dikdörtgen çizme ve yazı tersleme gibi komutları kullanarak halledebilirsiniz.

Mucit23

Aslında şunu öğrensem işi çözecek gibiyim. Protonda herhangi bir noktadaki görüntüyü nasıl tersleyeceğimi bilemiyorum.Böyle bir komut varmı

Maxim

öncelikle help içerisindeki print açıklamalarına bakmalısın
göreceksinki grafik lcd komutları 2 tipe ayrılıyor
bunu zaten kodun en başında tanımlıyorsun
bunları biliyorda olabilirsin genede yazayım

declare graphic veya samsung (KS0108 çipli ekranlar)
declare toshiba (T6963 çipli ekranlar)

T6963 ekranlar kendi özellikleri bakımından çok daha üstünler
istediğin şeyi direk tek komutla bu ekranlarda yapabiliyor olman lazım, emin değilim .

ks0108 ekranlar piyasada çok bilinen tipler

her iki ekran için en başta komple ekranı invert yani negatif yapabilirsin
her iki ekranda da istediğin satırdaki yazıları invert edebilirsin

pixel komutunada bakmanı isterim
pixel komutu ile ekranda istediğin noktayı yakabilir veya söndürebilirsin .