Sari la conținut
ELFORUM - Forumul electronistilor

Citire cu keypad


Vizitator zneic

Postări Recomandate

Vizitator zneic

Ceau, va rog daca puteti sa imi explicati cum pot citi intr-un pic o valoare data de la un keypad 4x4. Am inteles ca 4 porti sunt iesiri si 4 intrari. Nu am nevoie de cod doar vreau o explicatie buna. Va multumesc.

Link spre comentariu
  • Răspunsuri 5
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Liviu M

    2

  • nooob64

    1

Top autori în acest subiect

Vizitator zneic

Am selectat din cod secventa de decodare a keypad-ului. Am facut un program sa testez si nu mi-a mers.Va rog frumos daca puteti sa ma ajutati0->3 iesiri din pic si 4-7 intrariPORTA=0; PORTB=0;TRISA=0b11110000;TRISB=0; //mai sus am deschis portile Iar de aici incepe codulPORTA.F0=1; if(PORTA.F4==1) n=4; if(PORTA.F5==1) n=3; if(PORTA.F6==1) n=2; if(PORTA.F7==1) n=1; PORTA.F0=0; PORTA.F1=0; if(PORTA.F4==1) n=8; if(PORTA.F5==1) n=7; if(PORTA.F6==1) n=6; if(PORTA.F7==1) n=5; PORTA.F1=0; PORTA.F2=1; if(PORTA.F4==1) n=12; if(PORTA.F5==1) n=11; if(PORTA.F6==1) n=10; if(PORTA.F7==1) n=9; PORTA.F2=0; PORTA.F3=1; if(PORTA.F4==1) n=16; if(PORTA.F5==1) n=15; if(PORTA.F6==1) n=14; if(PORTA.F7==1) n=13; PORTA.F3=0;

Link spre comentariu

Daca compilatorul tau e MikroC nu te mai chinuii scriind codul pentru detectatea tasatelor , MikroC are functie care iti citeste fiecare tasta in parte :

unsigned short kp, cnt;char txt[5];void main() {  cnt = 0;  Keypad_Init(&PORTC); //initializare keypad la portC  Lcd_Init(&PORTB);         // Initialize LCD on PORTC  Lcd_Cmd(LCD_CLEAR);       // Clear display  Lcd_Cmd(LCD_CURSOR_OFF);  // Cursor off  Lcd_Out(1, 1, "Key  :");  Lcd_Out(2, 1, "Times:");  do {    kp = 0;    //--- Wait for key to be pressed    do      //--- un-comment one of the keypad reading functions      kp = Keypad_Released();      //kp = Keypad_Read();    while (!kp);    cnt++;    //--- prepare value for output    if (kp > 10)      kp += 54;    else      kp += 47;    //--- print it on LCD    Lcd_Chr(1, 10, kp);    WordToStr(cnt, txt);    Lcd_Out(2, 10, txt);  } while (1);}//~!

Pinii de la keypad sunt conectati in aceasta ordine(X e portul setat din init): incepind de jos prima linie la RX0 apoi a 2'a RX1 etc , apoi prima coloana din stinga la RX4 apoi a 2'a RX5 etc.Toata explicatia asta este si in helpul compilatorului.

Link spre comentariu

@nooob64: Uneori, ca sa pricepi cum merg unele lucruri, e bine sa le faci cu mana ta. Daca zneic vrea sa inteleaga putin functionarea, cred ca cea mai buna metoda e sa scrie singur codul. Sau sa se ute in biblioteci (daca are si codul sursa).

@zneic: poate ar fi bine sa pui tot codul/schema de legare. Codul pentru ca s-ar putea sa nu fi initializat bine porturile; la multe picuri portul A e multiplexat cu ADC-ul si trebuie configurat ca digital inainte de a putea fi folosit pentru ce vrei tu. Schema ca sa vedem daca electric e bine.

 

In rest, la o prima vedere, in cod ai o greseala - nu faci niciodata PORTA.F1=1.

La a doua vedere, nu faci nici un debouncing. Asta inseamna ca datorita oscilatiilor mecanice ale tastelor o sa ai multe citiri false. Ca sa faci debouncing, cand detectezi 1 pe o tasta astepti ~100 ms si rescanezi tasta respecitva. Daca 1 se mentine 0> ai intr-adevar 1, daca nu, ai 0.

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