Witam...z powodu awarii dysku twardego w moim laptopie napisany i działający już program diabli wzięli i obecnie jestem na etapie jego odtwarzania...główne procedury już działają ale mam kłopot z odtworzeniem kodu menu i tu moja prośba do bardziej zaawansowanych w programowaniu kolegów...jak napisać obsługę klawiszy aby nie powtarzać kilkanaście razy np;przejścia do kolejnego ekranu ustawień , obsługi klawisza dodaj 1 do zmiennej X , zatwierdź ustawioną zmienną X , wyjdź z ustawień danego ekranu...w wersji którą utraciłem te procedury powielałem co jednak miało wpływ na wielkość pliku hex..aby zobrazować moją niezbyt jednak udaną koncepcję wklejam zalążek kodu..
//-----koniec odczytu daty i czasu
}
}
if(!(PIND & _BV(4))) //jeżeli "0" to ustaw znacznik na "0"
{
_delay_ms(20);
PORTA |=_BV(6); //znacznik zezwolenia na wejście do menu
PORTB |=_BV(0); //podświetlenie LCD PORTB pin 1
}
//-----LCD menu
if(!(PINA & _BV(6))) //jeżeli nie ustawiony to ominięcie menu
{
//-----WYŚWIETLANIE-----DANYCH
LCD_GoTo(1,0); LCD_WriteText(itoa(data_dd,buffer_t,10)); //dziesiątki dni
LCD_GoTo(2,0); LCD_WriteText(itoa(data_jd,buffer_t,10)); //jednostki dni
LCD_GoTo(3,0); LCD_WriteText("-");
LCD_GoTo(4,0); LCD_WriteText(itoa(data_dm,buffer_t,10)); //dziesiątki miesięcy
LCD_GoTo(5,0); LCD_WriteText(itoa(data_jm,buffer_t,10)); //jednostki miesięcy
LCD_GoTo(6,0); LCD_WriteText("-");
LCD_GoTo(7,0); LCD_WriteText("10");
LCD_GoTo(11,0); LCD_WriteText(itoa(czas_hh,buffer_t,10)); //jednostki godzin
LCD_GoTo(12,0); LCD_WriteText(itoa(czas_h,buffer_t,10)); //dziesiatki godzin
LCD_GoTo(13,0); LCD_WriteText(":"); //dwukropek
LCD_GoTo(14,0); LCD_WriteText(itoa(czas_mm,buffer_t,10)); //jednostki minut
LCD_GoTo(15,0); LCD_WriteText(itoa(czas_m,buffer_t,10)); //dziesiatki minut
LCD_GoTo(16,0); LCD_WriteText(":"); //dwukropek
LCD_GoTo(17,0); LCD_WriteText(itoa(czas_ss,buffer_t,10)); //jednostki sekund
LCD_GoTo(18,0); LCD_WriteText(itoa(czas_s,buffer_t,10)); //dziesiatki sekund
LCD_GoTo(0,1); LCD_WriteText("AKU");
LCD_GoTo(4,1); LCD_WriteText(dtostrf(aku=aku,4,1,buffer_n));//napięcie akumulatora
LCD_GoTo(8,1); LCD_WriteText("V");
LCD_GoTo(10,1); LCD_WriteText("SOL");
LCD_GoTo(14,1); LCD_WriteText(dtostrf(sol=sol,4,1,buffer_n));//napięcie solara
LCD_GoTo(18,1); LCD_WriteText("V");
LCD_GoTo(21,0); LCD_WriteText(status);
LCD_GoTo(20,1); LCD_WriteText(dtostrf(lad=lad,4,1,buffer_n));//prąd ładowania
LCD_GoTo(24,1); LCD_WriteText("A");
LCD_GoTo(28,0); LCD_WriteText("AKUM");
LCD_GoTo(27,1); LCD_WriteText(dtostrf(inpower=inpower,4,1,buffer_n));//prąd akumulatora
LCD_GoTo(31,1); LCD_WriteText("A");
LCD_GoTo(35,0); LCD_WriteText("OBCI");
LCD_GoTo(34,1); LCD_WriteText(dtostrf(out=out,4,1,buffer_n));//prąd obciążenia(obwody 12V)
LCD_GoTo(38,1); LCD_WriteText("A");
goto end;
}
unsigned char key;
if(!(PIND & _BV(4)))
{
_delay_ms(200);
LCD_GoTo(0,0); LCD_WriteText(info[0]);
LCD_GoTo(0,1); LCD_WriteText(info[0]);
key++;
if(key>6)
{
key=0;
}
switch(key)
{
case 0://------------------------------------0
while(1)
{
LCD_GoTo(0,0); LCD_WriteText("EKRAN 0");
if(!(PIND & _BV(4))) //jeżeli ustawiony to następny ekran
{
key=1;
goto exit_1;
}
if(!(PIND & _BV(4))) //jeżeli ustawiony to wejście do ustawię ekran 0
_delay_ms(30);
{
while(1)
{
LCD_GoTo(0,0); LCD_WriteText("USTAWIENIA ");
if(!(PIND & _BV(5)))
{
set_hh++;
LCD_GoTo(10,1); LCD_WriteText(dtostrf(set_hh,2,0,buffer_t));//wyś nastawę
if(set_hh>23)
{
set_hh=0;
}
}
if(!(PIND & _BV(6)))
{
set_mm++;
LCD_GoTo(13,1); LCD_WriteText(dtostrf(set_mm,2,0,buffer_t));//wyś nastawę
if(set_hh>59)
{
set_mm=0;
}
}
if(!(PIND & _BV(7)))
_delay_ms(30);
{
while(!(PIND & _BV(7)))
_delay_ms(30);
{
LCD_GoTo(20,1); LCD_WriteText("WYJSCIE / ZAPIS ");
//zapis np; scalaka zegarka lub pamięć zewnętrzna
_delay_ms(2000);
key=1;
goto exit_1;//wyjście z pętli
}
}
}
}
}
{}exit_1:
break;
case 1://------------------------------------1
LCD_GoTo(0,0); LCD_WriteText("EKRAN 1");
break;
case 2://------------------------------------2
LCD_GoTo(0,0); LCD_WriteText("EKRAN 2");
break;
case 3://------------------------------------3
LCD_GoTo(0,0); LCD_WriteText("EKRAN 3");
break;
case 4://------------------------------------4
LCD_GoTo(0,0); LCD_WriteText("EKRAN 4");
break;
case 5://------------------------------------5
LCD_GoTo(0,0); LCD_WriteText("EKRAN 5");
break;
case 6://------------------------------------6
LCD_GoTo(0,0); LCD_WriteText("EKRAN 6");
break;
//------------------------------------------------end
}
{}end:
}
}
return;
}//end main
//********** END MAIN **********