Witam..mam kłopot z obsługą a właściwie ze zdefiniowaniem obsługi klawiszy w menu na LCD i szczerze mówiąc nie wiem jak to zrobić...w poszczególne sekcje potrafię wejść i wyjść ale w danym poziomie nie umiem zdefiniować obsługi klawiszy i wykonać określonych czynności...sugestie jak to "ugryść' mile widziane a może da się to zrobić prościej niż ja wymyśliłem....
//----- MENU LCD cztery wiersze po 20 znaków
unsigned char key;
for(key=4; key<8; key++)
if(!(PIND & _BV(key)))
{
switch(key)
{
case 4://przełączenie do menu ustawień czasu i daty zegara
LCD_GoTo(0,0);
LCD_WriteText(" ");//czysczenie LCD
LCD_GoTo(0,1);
LCD_WriteText(" ");
while(1)
{
LCD_GoTo(0,0); LCD_WriteText("USTAW CZAS");
LCD_GoTo(10,1); LCD_WriteText("18:00");//ustaw czas
LCD_GoTo(20,0); LCD_WriteText("USTAW DATE");
LCD_GoTo(30,1); LCD_WriteText("10/10.10");//ustaw date
{
if(!(PIND & _BV(7)))
{
goto exit;
}
}
}
break;
case 5://przełączenie do menu nastaw zegara sterującego
LCD_GoTo(0,0);
LCD_WriteText(" ");//czyszczenie LCD
LCD_GoTo(0,1);
LCD_WriteText(" ");
while(1)
{
LCD_GoTo(0,0); LCD_WriteText("K-1");
LCD_GoTo(6,0); LCD_WriteText("01:00");//ustaw czas k-1 wł poniedziałek-piątk
LCD_GoTo(13,0); LCD_WriteText("11:00");//ustaw czas k-1 wył
LCD_GoTo(0,1); LCD_WriteText("K-2");
LCD_GoTo(6,1); LCD_WriteText("02:00");//ustaw czas k-2 wł
LCD_GoTo(13,1); LCD_WriteText("12:00");//ustaw czas k-2 wył
LCD_GoTo(20,0); LCD_WriteText("K-3");
LCD_GoTo(26,0); LCD_WriteText("03:00");//ustaw czas k-1 wł sob,niedziela
LCD_GoTo(33,0); LCD_WriteText("13:00");//ustaw czas k-1 wył
LCD_GoTo(20,1); LCD_WriteText("K-4");
LCD_GoTo(26,1); LCD_WriteText("04:00");//ustaw czas k-2 wł
LCD_GoTo(33,1); LCD_WriteText("14:00");//ustaw czas k-2 wył
{
if(!(PIND & _BV(7)))
{
goto exit;
}
}
}
break;
case 6://przełączenie do menu sterowania kanałami 1-2-3-4 (230V) PORTC piny 8,7,6,5
//wybór oraz załączenie lub wyłączenie danego kanału
//dostępne klawisze PIND 6,5,4
LCD_GoTo(0,0);
LCD_WriteText(" ");//czyszczenie LCD
LCD_GoTo(0,1);
LCD_WriteText(" ");
LCD_GoTo(0,0); LCD_WriteText("OBW-1");
LCD_GoTo(0,1); LCD_WriteText("OBW-2");
LCD_GoTo(20,0); LCD_WriteText("OBW-3");
LCD_GoTo(20,1); LCD_WriteText("OBW-4");
while(1)
{
int set;
char *k=" ";
char k1="wlaczony";
char k2="wylaczony";
if(!(PIND & _BV(4)))
{
set=(set+1);
}
if(!(PIND & _BV(5))
{
set=(set-1)
}
if(set=1)
// LCD_GoTo(11,1); LCD_WriteText("zalaczony"); //obwód nr1 230V
// LCD_GoTo(11,1); LCD_WriteText("zalaczony"); //obwód nr2 230V
// LCD_GoTo(31,0); LCD_WriteText("zalaczony"); //obwód nr3 230V
// LCD_GoTo(31,1); LCD_WriteText("załączony"); //obwód nr4 230V
set=0
if(!(PIND & _BV(7)))//jeżeli naciśnięty to wyjście z petli
{
goto exit;
}
}
}
break;
case 7://podświetlenie LCD
PORTB ^=_BV(0); //podświetlenie LCD PORTB pin 1
_delay_ms(200);
break;
{}exit:
default:
LCD_GoTo(0,0);
LCD_WriteText(" ");
LCD_GoTo(0,1);
LCD_WriteText(" ");
break;
}
}