Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C]Zmiana zmiennych przyciskami

-nobile- 27 Mar 2010 23:01 974 9
  • #1 27 Mar 2010 23:01
    -nobile-
    Poziom 16  

    Mam problem bo nie wiem jak mam napisać obsługę zmiennych przyciskami (3)
    przycisk + przycisk - i przycisk zmiany regulowanej zmiennej. Coś takiego napisałem ale nie chce działać.. proszę o pomoc. (jest to układ odliczający czas pracy i przerwy i odpowiednio zliczający wyjście)

    Code:

    #include<avr/io.h>
    #include<delay.h>
    #include "HD44780.h"
    #include "HD44780.c"
    #include "itoa.h"

    int main()
    {
       DDRB = 0x00;
       PORTB = 0xFF;

       TCCR1B |= (1 << WGM12);            //tryb CTC Timera
       OCR1A = 15625;                      //flaga co 1Hz
       TCCR1B |= (1 << CS10) | (1 << CS11);   //preskaler 64
       
       LCD_Initalize();
       LCD_Home();
       LCD_WriteText("PRACA:");
       LCD_GoTo(0,1);
       LCD_WriteText("PRZERWA:");
       
       int licznik = 0;
       int praca = 2;
       int przerwa = 10;
       int czasy = przerwa + praca;
       int pomocnicza = 0;
       char bufor[16];
       char bufor1[16];
       
       while(1)
       {
          LCD_GoTo(10,0);
          itoa(praca, bufor,10);
             LCD_WriteText(bufor);
          LCD_GoTo(10,1);   
          itoa(przerwa, bufor1,10);
             LCD_WriteText(bufor1);

       if((!(PINB & 0x00)) && (pomocnicza == 0))
       {
          praca++;
          _delay_ms(20);
       
       
       }
       
       else if((!(PINB & 0x01)) && (pomocnicza == 0))
       {
          praca--;
          _delay_ms(20);
       
       
       }
       else if((!(PINB & 0x00)) && (pomocnicza == 1))
       {
          przerwa++;
          _delay_ms(20);
       
       
       }
       else if((!(PINB & 0x01)) && (pomocnicza == 1))
       {
          przerwa--;
          _delay_ms(20);
       
       
       }
       
       else if(!(PINB & 0x04))
       {
          ~pomocnicza;
          _delay_ms(20);
       
       
       }


          


       
       if(licznik <= praca)
       {
       
       
       }
       
       else if((licznik > praca) && (licznik <= czasy))
       {
       
       
       }
       
       else if(licznik > czasy)
       {
          licznik = 0;
       
       
       }
       
          if(TIFR & (1 << OCF1A))
       
          {
             licznik++;
       
             TIFR = (1 << OCF1A);
          }
       }


    }

    0 9
  • #2 28 Mar 2010 00:10
    michalko12
    Specjalista - Mikrokontrolery

    Code:
       pomocnicza=(PINB & 0x04) ? 0:1;
    

       if((!(PINB & 0x00)) && (pomocnicza == 0))
       {
          praca++;
          _delay_ms(20);
       }
       else if((!(PINB & 0x01)) && (pomocnicza == 0))
       {
          praca--;
          _delay_ms(20);
       }
       else if((!(PINB & 0x00)) && (pomocnicza == 1))
       {
          przerwa++;
          _delay_ms(20);
       }
       else if((!(PINB & 0x01)) && (pomocnicza == 1))
       {
          przerwa--;
          _delay_ms(20);
       }

    }

    0
  • #3 28 Mar 2010 00:28
    rusala
    Poziom 22  

    na początek proponuje przemyśleć jaki sens ma operacja "PINB & 0x00"

    0
  • #4 28 Mar 2010 01:06
    michalko12
    Specjalista - Mikrokontrolery

    Dobre, nawet nie zauważyłem tego ;)

    0
  • #5 28 Mar 2010 10:14
    omicronNs
    Poziom 21  

    No i przede wszystkim czekaj na zwolnienie przycisku bo w pętli odbierze go kilka razy. I nie zapomnij o drganiach zestyków przycisków.

    0
  • #6 28 Mar 2010 12:43
    zumek
    Poziom 39  

    rusala napisał:
    na początek proponuje przemyśleć jaki sens ma operacja "PINB & 0x00"

    A jaki sens ma ta operacja :?:
    Code:
    ~pomocnicza;

    Chyba trzeba wrócić do podstaw języka :D

    0
  • #7 28 Mar 2010 13:13
    omicronNs
    Poziom 21  

    Ogólnie autory chyba pojmuje o co chodzi, ale prawdopodobnie nie pojmuje konwencji operatora przypisania i jego pochodnych :D . Polecam książkę S. Prata "Szkoła programowania Język C." lepszej chyba nie ma do nauki podstaw. Operatory zaczynają się od strony 635.

    0
  • #8 28 Mar 2010 15:23
    rusala
    Poziom 22  

    zumek napisał:
    A jaki sens ma ta operacja :?:
    Code:
    ~pomocnicza;

    Chyba trzeba wrócić do podstaw języka :D


    tak daleko nawet nie doszedłem w czytaniu tegoż kodu ;-)

    0
  • #9 28 Mar 2010 16:38
    -nobile-
    Poziom 16  

    Ja nadal jestem w podstawach jeżyka C (nie mam za bardzo czasu ma naukę (szkoła)) A potrzebuje wykonać układ więc próbuje wykorzystać to co wiem, a z jakim skutkiem to widać.. dlatego prosiłem o pomoc. Dzięki za rady, spróbuje to inaczej zrealizować.

    0
  • #10 01 Kwi 2010 16:10
    -nobile-
    Poziom 16  

    Już wszystko ok, przede wszystkim nie działało bo podałem zły adres pinu PINB & 0x00 bo przecież zaczyna się od 0x01 .. (przez pospiech)

    0
  Szukaj w 5mln produktów