Vizitator zneic Postat Martie 26, 2010 Partajează Postat Martie 26, 2010 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
Liviu M Postat Martie 27, 2010 Partajează Postat Martie 27, 2010 Poate te ajuta [ur=http://www.elforum.info/viewtopic.php?f=11&t=26285&p=220109&hilit=tastatura#p220109l]postul asta[/url]. Link spre comentariu
Vizitator zneic Postat Martie 27, 2010 Partajează Postat Martie 27, 2010 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
nooob64 Postat Martie 28, 2010 Partajează Postat Martie 28, 2010 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
Liviu M Postat Martie 28, 2010 Partajează Postat Martie 28, 2010 @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
Vizitator zneic Postat Aprilie 1, 2010 Partajează Postat Aprilie 1, 2010 Gata, aseara i-am dat de cap. Va multumesc ! 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