Advertisement
Guest User

06

a guest
May 26th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.17 KB | None | 0 0
  1.  
  2. int main(void)
  3. {
  4.     key.byte = 0xFF;   //inicjalizacja flag stanami nieaktywnymi
  5.     falling_slope.word = 0x0000; //inicjalizacja flag stanami nieaktywnymi
  6.     PORTHEX = 0xFF;              //wyłączenie wszystkich segmentów
  7.     PORTHEXA |= (_BV(HEXA0) | _BV(HEXA1) | _BV(HEXA2) | _BV(HEXA3)); //wyłączenie wszystkich wyświetlaczy
  8.     init_pins();                //inicjalizacja kierunkowości wyprowadzeń
  9.     init_TIMER0();              //inicjalizacja Timera0
  10.     sei();                      //globalne zezwolenie na przerwania
  11.     int licznik = 0; // licznik wcisnięć klawisza ENTER
  12.     int index = 0; // indeks edytowanej cyfry w tablicy
  13.     signed char save[4]; // zapis poprzedniego stanu tablicy
  14.     int edycja = 0; // zmienna zezwalająca na edycję cyfry
  15.     signed char pom; // zmienna pomocnicza do wykonania animacji
  16.     while (1)                   //nieskończona pętla
  17.     {
  18.         //modyfikacje poszczególnych cyfr pod wpływem wciśnięcia danego przycisku  
  19.  
  20.         if (kl_ENTER == 1) {
  21.  
  22.             kl_ENTER = 0;
  23.             if (licznik > 0) edycja = 1; // po pierwszym wcisnieciu ENTER zezwala na edycję
  24.             if (licznik > 1) index++; // przesunięcie edycji
  25.  
  26.             licznik++;
  27.         };
  28.         if (licznik >4) // osiągnięcie 5 krotnosci wciśnięcia ENTER
  29.         {
  30.             edycja = 0; // zerowanie liczników
  31.             licznik = 0;
  32.             index = 0;
  33.             for (int i = 0; i < 4; i++) // zapisanie stanu tablicy
  34.             {
  35.                 save[i] = cyfry[i];
  36.             }
  37.         };
  38.         if (kl_UP == 1 && edycja) { // warunek edycji musi byc spełniony -> edycja == 1
  39.             cyfry[index]++; //inkrementacja edytowanej cyfry
  40.             if (cyfry[index] > 9) cyfry[index] = 0;
  41.             kl_UP = 0;
  42.         };
  43.         if (kl_DOWN == 1 && edycja) {
  44.             cyfry[index]--;
  45.             if (cyfry[index] > 9) cyfry[index] = 0;
  46.             kl_DOWN = 0;
  47.         };
  48.         if (kl_CANCEL == 1) {
  49.             for (int i = 0; i < 4; i++) // wczytanie poprzedniego stanu tablicy
  50.             {
  51.                 cyfry[i] = save[i];
  52.             }
  53.             edycja = 0; // zerowanie liczników
  54.             licznik = 0;
  55.             index = 0;
  56.             kl_CANCEL = 0;
  57.         };
  58.  
  59.         if (edycja) {
  60.             pom = cyfry[index]; // animacja edycji -> wykorzystanie zmiennej pomocniczej
  61.             cyfry[index] = ' '; // czysta komórka
  62.             display_7seg(); //wizualizacja cyfr
  63.             _delay_ms(0.5);
  64.             cyfry[index] = pom;
  65.         }
  66.         else
  67.         {
  68.             display_7seg(); //wizualizacja cyfr
  69.         }
  70.  
  71.  
  72.     };
  73.  
  74.     return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement