CCS DE LCD LM016L MENÜ SORUNU (alt menü de takılıyor hiç bir işlem yapamıyorum)

Başlatan husam685, 15 Aralık 2011, 17:09:06

husam685

selam arkadaşlar ben switch-case kullanarak lcd ye menü yapmakla uğrasıyorum ama ccs c de yeni oldugum için biraz zorlanıyorum.

anlamadığım yer 3 tane buton var 1. buton RA0, 2. buton RA1, 3.buton RA2 baglı 1. butonla menuleri dolaşıyorum mesela 1. butona basında menu1 bir daha basınca menu2 , oluyor 1. buton menu2 deyken 2. butona bastıgımda menu2 içindesin de oluyor ama 3. butona basınca çıkış yapmıyor takılıyor nasıl çözebilirim. yani olay 1 butonla menuleri dolaşırken 2 butonla menunun içine girince takılıyor tuşlar devre dışı kalıyor lve tuşlarla hiç bir işlem yapamıyorum lütfen yardım edin elinizde basit bir örnek varsada rica etsem paylaşabilirmsiniz. şimdiden herkese teşekkürler

justice_for_all

Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

husam685

programı silip yeniden yazmaya başladım cünkü deli oldum :D

kısa sekilde söyle anlatayım:

void main()
{
while (true)
{
ust_menu();

alt_menu();

}
}

void ust_menu()
{

while(true)
{

if (input(buton))
{
sayac++;
}

while(input(buton));
{
delay_ms(20);
}

if (input(buton1))

{
sayac1++;
}

while(input(buton1))

{
delay_ms(20);
}

switch(sayac)

{

case 1: lcd_gotoxy(1,1) ;// tüm caselere de basta var.
printf(lcd_putc" MENU1);

if(sayac1=1)
{
alt_menu();
}

if(input(buton_cikis)
{
sayac=0;

}
break;

case 2: lcd_gotoxy(1,1) ;// tüm caselere de basta var.
printf(lcd_putc" MENU2);
break;

}
}

void alt_menu()

{
while (true)
{

if (input(buton1))
{
sayac1++;
}

while(input(buton1));
{
delay_ms(20);
}

switch(sayac1)
{

case 1: lcd_gotoxy(1,1) ;// tüm caselere de basta var.
printf(lcd_putc" MENU1 ici");

if(input(buton_cikis)
{
sayac=0;
sayac1=0;
}

break;

case 2: lcd_gotoxy(1,1) ;// tüm caselere de basta var.
printf(lcd_putc" MENU2 ici");

break;
}
}

kardeş böyleydi cunku iyice sinir olunca programın c dosyasını sildim yeniden yazarım diye ama böyle suan burda yazdıgım için bazı yerlerde noktalı virgul felan eksk olabilir.

justice_for_all

programında ikitane ustmenu var hangsi alt menu ayrıca program yazarken if gibi while gibi ifadelerin hepsini aynı sutunda yazma bi kac sutun ileri yazki hangisi hangisinin farkedilsin
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

husam685

en altta ki alt menu :D düzeltmemisim direk burdan yazdıgım için

justice_for_all

ustmenudeki while(true) neden ???hangi pici kullanıyosun devreni yaptn mı similasyon mu yapıyosun
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

husam685

ust menu deki while(true) komple sistemi test etsin diye while(true)  , alt menudede var

justice_for_all

hocam sayacı sadce cıkıs butonuna basınca sıfırlamıssın menunun basına donmek icinde sayacları nedn sıfırlamıyosunuz
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

husam685

merak etmeyin sıfırlayınca da olmuyor. direk menu1 icte takılıyor başa dönmüyor ve hem alt hem ust menunun orda
if(sayac>3)
{sayac=0;}
if(sayac1>3)
{sayac1=0;}
bunlar var ben size söylemiştim burda yazdıgım için noktalı virgul fean eksiktir. siz sadece full olarak dusunun ve tekrar ust menuye dönmedigini farz edin

justice_for_all

hocam ya menu fonksiyonlarndaki while(true) ları kaldırın yada sayac ve sayac1 i sıfırladıktan snra ustmenu fonksiyonunu cagırt     edit: ayrıca altmenu fonksiyonunda buton cıkıs sadce case 1 demi var yoksa digerlerindede varmı?
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

eraygil

if(input(pin_a0))  //a0 butonuna basıldımı sorgulanıyor a0 girişi lojik 1 ise
{
delay_ms(20);  //buton arkı söndürülüyor
menu=menu+1;  //mune değişkeni 1 artırılıyor
while(input(pin_a0))  // eğer a0 butonuna halaa basılıyorsa  programı kısır döngüye alıyoruz ki  butona her basışta  menu değişkeninin içeri 1 artsın
{   //kısır döngü baslangıç
}  //kısır döngü bitiş
}  // if buton sorgulama bitiş parantezi


while(menu==1)  menu değişkeninin içeriği 1 ise yapılacak işlemler
{

//buton sorgulama her menü içinde olmalı aksi taktirde ilk mebüde takılı kalırsınız  bu işlemi alt program kullanarak yaparsan programın biraz daha sadeleşir
if(input(pin_a0))  //a0 butonuna basıldımı sorgulanıyor a0 girişi lojik 1 ise
{
delay_ms(20);  //buton arkı söndürülüyor
menu=menu+1;  //mune değişkeni 1 artırılıyor
while(input(pin_a0))  // eğer a0 butonuna halaa basılıyorsa  programı kısır döngüye alıyoruz ki  butona her basışta  menu değişkeninin içeri 1 artsın
{   //kısır döngü baslangıç
}  //kısır döngü bitiş
}  // if buton sorgulama bitiş parantezi
//buton sorgulama işlemi  burda son buluyor

printf(lcd_putc,"\f menu 1",);  ///lcd de 1. satıra menu 1 yazdırıldı

//
//
//
//
//
//bu alanda istediğini  yazabilirsin
} ilk menunun sonu


while(menu==2)  menu değişkeninin içeriği 1 ise yapılacak işlemler
{

//buton sorgulama her menü içinde olmalı aksi taktirde ilk mebüde takılı kalırsınız  bu işlemi alt program kullanarak yaparsan programın biraz daha sadeleşir
if(input(pin_a0))  //a0 butonuna basıldımı sorgulanıyor a0 girişi lojik 1 ise
{
delay_ms(20);  //buton arkı söndürülüyor
menu=menu+1;  //mune değişkeni 1 artırılıyor
while(input(pin_a0))  // eğer a0 butonuna halaa basılıyorsa  programı kısır döngüye alıyoruz ki  butona her basışta  menu değişkeninin içeri 1 artsın
{   //kısır döngü baslangıç
}  //kısır döngü bitiş
}  // if buton sorgulama bitiş parantezi
//buton sorgulama işlemi  burda son buluyor

printf(lcd_putc,"\f menu 2",);  ///lcd de 1. satıra menu 2 yazdırıldı

//
//
//
//
//
//bu alanda istediğini  yazabilirsin
} ikinci menümüzün menunun sonu bu şekilde menüler artırabilirsin ve aynı mantıkla  menülere de alt menü akleyebilirsin  ancak en son menüden sonra menu değişkeninin içerğini 0 yapmalısın aksi taktirde menüleri 1 kez görebilirsin   bu programda  bir butona her bastığında menülerin ileri doğru sürekli değişir  eğer bu programa bir buton daha eklersen ve onuda menu değişkenini  menu =menu-1; şeklinde yaparsan menuler arasında yukarı aşağı hareket edebilirsin