jurevycius3 Postat Februarie 27, 2015 Partajează Postat Februarie 27, 2015 Ma poate ajuta si pe mine cineva ? La o singura apasare a unui buton ( impuls ), vreau sa imi aprinda pe rand 4 leduri, dupa care sa ramane stinse. Va multumesc! void main(){ TRISA.F0 = 1; //Configure 1st bit of PORTD as input TRISB.F0 = 0; //Configure 1st bit of PORTB as output PORTB.F0 = 0; //LED OFF do { if(RA0.F0 == 0)//If the switch is still pressed { PORTB.F0 = 1; //LED ON Delay_ms(1000); //1 Second Delay PORTB.F0 = 0; //LED OFF Delay_ms(1000); //1 Second Delay PORTB.F1 = 1; //LED ON Delay_ms(1000); //1 Second Delay PORTB.F1 = 0; //LED OFF Delay_ms(1000); //1 Second Delay PORTB.F2 = 0; //LED OFF Delay_ms(1000); //1 Second Delay PORTB.F2 = 1; //LED ON Delay_ms(1000); //1 Second Delay PORTB.F3 = 0; //LED OFF Delay_ms(1000); //1 Second Delay PORTB.F3 = 0; //LED OFF Delay_ms(1000); //1 Second Delay PORTB.F4 = 1; //LED ON Delay_ms(1000); //1 Second Delay PORTB.F4 = 0; //LED OFF Delay_ms(1000); //1 Second Delay } }while(1);} Link spre comentariu
djvas Postat Februarie 27, 2015 Partajează Postat Februarie 27, 2015 (editat) Codul de mai sus nu fuctioneaza ? Configurarea ar fi mai logica asha : TRISB=0 // tot portul b out Editat Februarie 27, 2015 de djvas 1 Link spre comentariu
core Postat Februarie 27, 2015 Partajează Postat Februarie 27, 2015 (editat) cand testezi butoane, in general se verifica starea portului de doua ori pentru a elimina impulsuri parazite ceva de genu: if ( 0 == RA0 ) //e apasat? { Delay_ms( 20 ); if ( 0 == RA0 ) // e sigur apasat si nu e un zgomot? { //aprind ledurile aici // verific eliberarea butonului sa evit reintrarea imediata a unei noi comenzi (posibil sa nu ai nevoie la delay-uri de secunde bune) while ( 0 == RA0 ) continue; } } P.S. Compilatorul nu mi se pare cunoscut, deci nu te pot corecta la sintaxa, insa ca logica pare destul de ok, cu exceptia lipsei directiilor setate pe toate ledurile, chestie spusa mai sus. Si TRISA sau RAx nu tin de portul D din cate stiu. Editat Februarie 27, 2015 de core Link spre comentariu
Mircea Postat Februarie 27, 2015 Partajează Postat Februarie 27, 2015 Daca acel cod e scris in MikroC, mai indicat e sa folosesti functia Button. Are ea grija de debouncing. Link spre comentariu
svi67 Postat Februarie 28, 2015 Partajează Postat Februarie 28, 2015 (editat) sbit LED_1 at RB0_bit;sbit LED_2 at RB1_bit;sbit LED_3 at RB2_bit;sbit LED_4 at RB3_bit;void main() {PORTA = 0x00;PORTB = 0x00;TRISA = 0x01;TRISB = 0x00;LED_1=0;LED_2=0;LED_3=0;LED_4=0; do { if(Button(&PORTA, 0, 1, 0)){ LED_1=1;Delay_ms(1000);LED_1=0; LED_2=1;Delay_ms(1000);LED_2=0; LED_3=1;Delay_ms(1000);LED_3=0; LED_4=1;Delay_ms(1000);LED_4=0; } } while(1); //Sfarsit ciclu} //Sfarsit Program principal Editat Februarie 28, 2015 de svi67 1 Link spre comentariu
jurevycius3 Postat Martie 2, 2015 Autor Partajează Postat Martie 2, 2015 Va multumesc din suflet tuturor pentru ajutor, in special lui svi67 pentru programul facut, am modificat doar "if(Button(&PORTA, 0, 1, 0)){" cu "if(Button(&PORTA, 0, 1, 1)){" deoarece functia se executa fara ca butonul sa fie actionat, iar la apasarea acestuia se stingeau toate. Multumesc inca o data si multa bafta ! Link spre comentariu
cosmin1986 Postat Martie 2, 2015 Partajează Postat Martie 2, 2015 Buna,si ma adresez tuturor colegilor cu o mica problema.As dori sa ma ajute mai bine spus un coleg care se pricepe la pic sa imi conceapa un program pt pic16f84a care sa imi aprinda 4 leduri pe rand si in ordine la apasare unui buton push. exp cand apas odata pe buton sa imi aprinda ledul 1(sa ramana si aprins),daca mai apas odata sa imi aprinda urmatorul led(sa ramana aprins) si tot asa pana la ledul 4. Multumesc mult de tot!!!! Link spre comentariu
svi67 Postat Martie 3, 2015 Partajează Postat Martie 3, 2015 (editat) Cu placere userului "jurevycius3" iar pentru userul "cosmin1986": sbit LED_1 at RB0_bit;sbit LED_2 at RB1_bit;sbit LED_3 at RB2_bit;sbit LED_4 at RB3_bit;short n=0;void main() {PORTA = 0x00;PORTB = 0x00;TRISA = 0x01;TRISB = 0x00;LED_1=0;LED_2=0;LED_3=0;LED_4=0; do { if(Button(&PORTA, 0, 1, 0)){ n++; } if(n==1){LED_1=1;} if(n==2){LED_2=1;} if(n==3){LED_3=1;} if(n==4){LED_4=1;} Delay_ms(750); } while(1); //Sfarsit ciclu} Editat Martie 3, 2015 de svi67 Link spre comentariu
cosmin1986 Postat Martie 4, 2015 Partajează Postat Martie 4, 2015 Este ok,dar o modificare de exp cand apas pe buton sa imi aprinda ledul 1 si sa ramana aprins pana apas iar butonul,cand am apasat butonul sa se stinga ledul nr1 si sa se aprinda nr 2,si sa ramana aprins,cand apas iar butonul sa se aprinda nr3 si sa se stinga nr 2 si tot asa pana la nr 4.si ciclul sa se repete cand s-a ajuns la ultimul led. Multumesc mult svi67 daca se poate add ym: [email protected] sa iti explic mai in detaliu! Link spre comentariu
Liviu M Postat Martie 4, 2015 Partajează Postat Martie 4, 2015 @cosmin1986: incearca sa nu mai pui aceeasi intrebare in doua topicuri diferite. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum