logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C]Zmiana zmiennych przyciskami

-nobile- 27 Mar 2010 23:01 1157 9
REKLAMA
  • #1 7888626
    -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)

    
    #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);
    		}
    	}
    
    
    }
  • REKLAMA
  • #2 7888845
    michalko12
    Specjalista - Mikrokontrolery
    	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);
    	}
    
    }
  • REKLAMA
  • #3 7888893
    rusala
    Poziom 22  
    na początek proponuje przemyśleć jaki sens ma operacja "PINB & 0x00"
  • REKLAMA
  • #4 7888947
    michalko12
    Specjalista - Mikrokontrolery
    Dobre, nawet nie zauważyłem tego ;)
  • REKLAMA
  • #5 7889259
    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.
  • #6 7889835
    zumek
    Poziom 39  
    rusala napisał:
    na początek proponuje przemyśleć jaki sens ma operacja "PINB & 0x00"

    A jaki sens ma ta operacja :?:

    Chyba trzeba wrócić do podstaw języka :D
  • #7 7889981
    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.
  • #9 7890939
    -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ć.
  • #10 7907511
    -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)
REKLAMA