Jump to content
ELFORUM - Forumul electronistilor

Citire cu keypad


Guest zneic

Recommended Posts

Guest 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 to comment
  • Replies 5
  • Created
  • Last Reply

Top Posters In This Topic

  • Liviu M

    2

  • nooob64

    1

Top Posters In This Topic

Poate te ajuta [ur=http://www.elforum.info/viewtopic.php?f=11&t=26285&p=220109&hilit=tastatura#p220109l]postul asta[/url].

Link to comment
Guest 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 to comment

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 to comment

@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 to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines