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

Co znaczy PINC w tym programie?

malpek 04 Sie 2011 17:10 1540 4
REKLAMA
  • #1 9791303
    malpek
    Poziom 18  
    Właśnie ucze sie jezyka C, koąsytam z ksiażki "Mikrokontrolery AVR Jezyk C podstawy programowania". I nie wiem co oznacza wyrazenie PINC w jwednym z przykładów. Bede wdzieczny za wszelkie wyjasnienia.
    #include <avr/io.h>
    #include <util/delay.h>
    
    //definicje dla preprocesora
    //diody
    #define LED_PIN (1<<PC7)			//definicja pinu diody
    #define LED_ON PORTC &= ~LED_PIN	//właczenie diody
    #define LED_OFF PORTC |=LED_PIN		//wylaczenie diody
    #define LED_TOG PORTC ^=LED_PIN		//zmiana stanu diody
    
    //klawisze
    #define KEY1_PIN (1<<PC6)	//definicja klawiasz 1
    #define KEY2_PIN (1<<PC5)	//definicja klawisza 2
    #define KEY3_PIN (1<<PC2)	//definicaj klawisza 3
    
    uint8_t klawisz_wcisniety(uint8_t klawisz);
    
    int main(void)
    {
    	//inicjalizacja
    	DDRC |=LED_PIN;
    	PORTC |= LED_PIN;
    	//piny klawiszy - WEJSCIA
    	DDRC &= ~(KEY1_PIN | KEY2_PIN | KEY3_PIN);
    	//podciagniecie pinów do VCC
    	PORTC |= KEY1_PIN |KEY2_PIN | KEY3_PIN;
    	//petla głowna
    	while(1)
    	{
    		if( klawisz_wcisniety( KEY1_PIN) ) LED_ON;
    		if( klawisz_wcisniety( KEY2_PIN) ) LED_OFF;
    		if( klawisz_wcisniety( KEY3_PIN) ) LED_TOG;
    	}
    }
    
    uint8_t klawisz_wcisniety(uint8_t klawisz)
    {
    	if( ! (PINC & klawisz))	//klawisz wcisniety
    	{
    		_delay_ms(80);	//czas drgania styków
    		if( ! (PINC & klawisz))return 1;
    	}
    	return 0;
    }
  • REKLAMA
  • #2 9791310
    Fredy
    Poziom 27  
    To jest rejestr w którym masz przechowywane stany pinów.PINC to stan portu C.
  • REKLAMA
  • #3 9791365
    malpek
    Poziom 18  
    Mozesz mi jeszcze wytłumaczyc jak działa ta funkcja:
    uint8_t klawisz_wcisniety(uint8_t klawisz) 
    { 
       if( ! (PINC & klawisz))   //klawisz wcisniety 
       { 
          _delay_ms(80);   //czas drgania styków 
          if( ! (PINC & klawisz))return 1; 
       } 
       return 0; 
    }
  • REKLAMA
  • Pomocny post
    #4 9791385
    Fredy
    Poziom 27  
    malpek napisał:
    Mozesz mi jeszcze wytłumaczyc jak działa ta funkcja:
    uint8_t klawisz_wcisniety(uint8_t klawisz) 
    { 
       if( ! (PINC & klawisz))   //klawisz wcisniety 
       { 
          _delay_ms(80);   //czas drgania styków 
          if( ! (PINC & klawisz))return 1; 
       } 
       return 0; 
    }



    PINC & klawisz - to ma wartość 1 jeśli na porcie C pin "klawisz" ma wartość 1.
    ! na początku neguje ten warunek. Więc tak naprawdę to sprawdzasz kiedy pin numer "klawisz" będzie mieć wartość 0.
    Potem masz delaya 80ms i ponownie robisz sprawdzenie. Chodzi o to aby zlikwidować drgania styków.

    Jeśli funkcję to wywołasz tak jak niżej masz w programie - czyli if( klawisz_wcisniety( KEY1_PIN) ) LED_ON;

    To dioda się zaświeci jeśli na Porcie C ,pin numer 6 zostanie zwarty do masy.
  • #5 9791410
    malpek
    Poziom 18  
    Dziekuje za pomoc.
REKLAMA