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]pętla FOR. Zapalanie i gaszenie wszystkich diod.

xamrex 12 Lut 2011 10:34 3407 3
REKLAMA
  • #1 9139484
    xamrex
    Poziom 28  
    Chciałem sobie napisać program, który zaświecałby po kolei diody, i gdy będą już zaświecone wszystkie, to zaświecał po kolei od nowa.
    Diody mam połączone do portuD1-D6 (stan niski powoduje świecenie)
    Napisałem coś takiego:
    
    #include <avr/io.h>
    #include <util/delay.h> 
    
    int main(void){
    int i;
    DDRD = 0xFF; //wszystkie piny d jako wyjscie
    PORTD = 0xFF; //wszystkie na stanie wysokim
    
    
    
    
    
    while(1){
    
    	for (i=1;i<=6;i++)
    	{
    		PORTD &= ~(1<<i);
    		_delay_ms(500);
    
    	}
    
    	
    		}
    } 
    


    Lecz program zapala po kolei wszystkie i potem stoi (wszystkie są zapalone i koniec)
    Dlaczego potem program nie gasi wszystich i od nowa nie zapala po kolei?
  • REKLAMA
  • REKLAMA
  • #3 9139601
    xamrex
    Poziom 28  
    No tak,
    Nie pomyślałem:)
    #include <avr/io.h>
    #include <util/delay.h>
    
    int main(void){
    int i;
    DDRD = 0xFF; //wszystkie piny d jako wyjscie
    PORTD = 0xFF; //wszystkie na stanie wysokim
    
    
    
    
    
    while(1){
    PORTD=0xFF;
       for (i=1;i<=6;i++)
       {
          PORTD &= ~(1<<i);
          _delay_ms(500);
    
       }
    
       
          }
    } 
    
    i wszystko gra :)
  • #4 9141344
    Fredy
    Poziom 27  
    xamrex napisał:
    No tak,
    Nie pomyślałem:)
    #include <avr/io.h>
    #include <util/delay.h>
    
    int main(void){
    int i;
    DDRD = 0xFF; //wszystkie piny d jako wyjscie
    PORTD = 0xFF; //wszystkie na stanie wysokim
    
    
    
    
    
    while(1){
    PORTD=0xFF;
       for (i=1;i<=6;i++)
       {
          PORTD &= ~(1<<i);
          _delay_ms(500);
    
       }
    
       
          }
    } 
    
    i wszystko gra :)


    możesz jeszcze nieco uprościć i zrobić tak:


    
    int main(void){
    int i;
    DDRD = 0xFF; //wszystkie piny d jako wyjscie
    PORTD = 0xFF; //wszystkie na stanie wysokim
    
    while(1){
    
       for (i=1;i<=6;i++)
       {
          PORTD ^= (1<<i);
          _delay_ms(500);
    
       }
    
       
          }
    } 
    


    pozdrawiam
REKLAMA