Sari la conținut
ELFORUM - Forumul electronistilor

Pic16f84a buton impuls help


jurevycius3

Postări Recomandate

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

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 de core
Link spre comentariu

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 de svi67
Link spre comentariu

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

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

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 de svi67
Link spre comentariu

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

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări