Merhaba, öncelikle aramıza hoş geldiniz.
İlk olarak şunu söylemeliyim ki menü tasarımı ile LCD'de şekil çizme tarafı birbirinden farklı işlerdir. Biraz açıklayacak olursak; menüyü LCD'den bağımsız tasarlamalı, menünün amacı sadece global ya da extern edilmiş değişkenleri değiştirmek olmalıdır.
Değişkenlerin durumlarına göre donanımsal değişiklikler farklı bir fonksiyonda, değişkenlerin durumunu LCD'de gösterme işi de farklı bir fonksiyonda olmalıdır. Butonları okunmalı, ilgili değişkenler belli sınırlar dahilinde değiştirilmeli ve fonksiyondan çıkılmalıdır. Bunun haricinde bir işlem yapmamalısınız. Daha sonra LCD'yi değişkenlerin duruma göre yeniler donanımınızı kontrol edersiniz. Bu şekilde oldukça esnek, değiştirilmesi ve geliştirilmesi kolay bir yapı elde edersiniz. Benim genellikle yapım eğer bir işletim sistemi kullanmıyorsam şu şekilde oluyor.
while(){
butonları_oku();
menu_nav();
do_work();
lcd_yenile();
}
lcd_yenile'yi her seferine çağırmanıza da gerek yok zira LCD'nin saniyede 20 den fazla yenilenmesi gereksiz bir iştir. Bu kadar hızlı bir değişimi kullanıcı zaten göremez. Kendisi de bu kadar hızlı butonlara basamaz. Bu sebeple lcd_yenile fonksiyonunu arada bir çağırsanız yeterlidir hem böylece diğer işler için daha fazla zaman kalacaktır.
menu_nav fonksiyonu da menü işemlerinin yapıldığı fonksiyondur.
do_work de diğer işlemlerin yapıldığ fonksiyondur.
menu_nav fonksiyonu state machine yapısında çalışır. dizin ve parametre olarak genel değişkenler vardır. dizin 0 iken bir menü alt menüler, dizin 1 iken alt menüler ve parametreleri yer alır.
Örneğin ilk cihaz açıldı dizin=0 param=0 dır. Cihazınızın da 5 adet menüsü olsun. Menü tuşuna basıldığında dizin=1 yapılır ve param=0 olduğundan menüde ve ilk seçenek seçilir. Yukarı aşağı tuşuna basıldığında param 0 ile 4 arası gider gelir böylece istenilen menü seçilir. tekrar menü tuşuna basıldığında param hangi menü üzerindeyse dizin=2 olarak ilgili değişkenin yukarı aşağı ile sınırlar dahilinde değiştirilmesi sağlanır. tekrar menü tuşuna basılarak değişiklik onaylanır dizin=1 yapılarak ana menüye çıkılır. vs....
Bu yazdıklarım örnek bir çalışmadır. Kafanıza görede değişiklikler yapabilirsiniz. Burada ana mantık switch case yapısıdır ilgili değişken ayarlanır ve çıkılır başka bir işlem yapılması için beklenmez. Daha sonra tekrar menu_nav çağrıldığında ilgili değişiklik son kalınan yerden yapılır ve tekrar çıkılır.
Tüm bunları yaparken de isterseniz grafik LCD kullanırsınız isterseniz karakter. Artık LCD tarafı menüden bağımsızdır. LCD tarafı işi görselleştirme tarafıdır dolayısıyla da menüden bağımsızdır. Bunun sağladığı esneklikle bir tema gibi tasarımınıza farklı görünümler sağlayabilirsiniz. Farklı farklı temalar dahi oluşturabilirsiniz.
Bunun dışında çok daha farklı teknikler tabii ki mevcut şuan hızlı bir şekilde adapte olabileceğiniz bir teknik olduğunu düşünerek bunu anlatmaya çalıştıım. Zamanım kısıtlı olduğundan hızlı yazdım yazım hatalarım anlatım bozukluklarım olabilir kusuruma bakmayın.
İyi çalışmalar.