Tastiera a matrice

  • elpablito
  • Platino Utente
  • Platino Utente
Di più
10 Anni 1 Mese fa #11 da elpablito
Risposta da elpablito al topic Tastiera a matrice
In quella settimana che ho giocato con il pic o letto quella differenza che però non ricordo, ma credo che nel caso specifico poco gli importi, correggimi se sbaglio, a lui serve leggere la porta per di più dopo un ritardo di anti rimbalzo, quindi dopo un ulteriore serie di cicli della CPU.
Vediamo di fargli scrivere la routine
Paolo

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • elpablito
  • Platino Utente
  • Platino Utente
Di più
10 Anni 1 Mese fa #12 da elpablito
Risposta da elpablito al topic Tastiera a matrice
questa sera faccio c.... non importa
TRISB= 0b11110000; // Imposto PORTB RB0..RB3 Colonne -> in uscta
Correggetemi se sbaglio, ci sarà un
PortB = 0b11110000; // colonne a zero
delay(1ms)
Pippo = PortB // salvi la porta
TRISB = 0b00001111; //inverti entrate e uscite
PortB = Pippo
Delay (10us)
Poldo = PortB
i due zeri di pippo e poldo ti danno le coordinate x e y
Scrivi correttamente le istruzioni e vedrai che te la cavi
Domani ti cerco una routin completa e te la mando se vuoi ma non per il PiC.
Comunque c'e li nascosto Alfa75 digli che metta in bella il tutto.
Paolo

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Guido
  • Autore della discussione
  • Platino Utente
  • Platino Utente
Di più
10 Anni 1 Mese fa #13 da Guido
Risposta da Guido al topic Tastiera a matrice
Ciao, ho provato a scrivere un codice, purtroppo non posso provarlo dopo il default, mplab mi segnala due errori,per cortesia come posso ovviare?
Code:
#include <xc.h> #include "PIC18F4550_config.h" #define LCD_DEFAULT #include "LCD_44780.h" #include "LCD_44780.c" #include "delay.h" #include "delay.c" #define colonna1 0b00000001//PORTBbits.RB0 #define colonna2 0b00000010//PORTBbits.RB1 #define colonna3 0b00000100//PORTBbits.RB2 #define colonna4 0b00001000//PORTBbits.RB3 #define riga1 PORTBbits.RB4 #define riga2 PORTBbits.RB5 #define riga3 PORTBbits.RB6 #define riga4 PORTBbits.RB7 unsigned int i; // Variabile per la lettura delle colonne. unsigned char col; //************************************* // Prototipo di funzione //************************************* void board_initialization (void) { // Imposto PORTA tutti ingressi LATA = 0x00; TRISA = 0xFF; LATB = 0x00; // Imposto RB4..RB7 Righe -> 0 Uscita TRISB= 0b00001111;// Imposto RB0..RB3 Colonne -> 1 Ingresso PORTB= 0b00001111; // Imposto PORTC tutti ingressi, RC1 come output LATC = 0x00; TRISC = 0b11111101; // Imposto PORTD tutte uscite, RD0 come ingresso LATD = 0x00; TRISD = 0b00000001; // Imposto PORTE tutti ingressi LATE = 0x00; TRISE = 0xFF; }//void board_initialization (void) // Programma principale //************************************* int main (void){ // Abilita i resistori di pull-up sulla PORTB INTCON2bits.RBPU = 0x00; board_initialization (); // Inizializzo il display LCD con quarzo a 20MHz LCD_initialize (20); LCD_backlight (TURN_ON_LED_LCD); //Questa funzione scrive il messaggio da visualizzare sulla prima riga. LCD_write_message ("Hello World 1"); while (1) { col = PORTB; // Maschera per i bit d'interesse //col = col & 0x0F; switch (col) { case colonna4: riga4 = 0x1; LCD_goto_line(2); //Questa funzione permette di posizionare il cursore sulla seconda riga. LCD_write_char (68); //Scrive un carattere sul display. break; case colonna3: riga4 = 0x1; LCD_goto_line(2); //Questa funzione permette di posizionare il cursore sulla seconda riga. LCD_write_char (70); //Scrive un carattere sul display. default: * // Il pulsante è aperto, non visualizzo nulla. LCD_goto_line(2); LCD_write_message (" "); }//switch }//while }//main

Tastierino a matrice.c:82: error: (981) pointer required
Tastierino a matrice.c:82: error: (981) pointer required
(908) exit status = 1
make[2]: *** [build/default/production/Tastierino a matrice.p1] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • elpablito
  • Platino Utente
  • Platino Utente
Di più
10 Anni 1 Mese fa #14 da elpablito
Risposta da elpablito al topic Tastiera a matrice
se hai pull-up sulla porta devi lavorare con gli 0 non con gli 1 ti mando un codice che avevo fatto per un aggegio e fatto in un altro modo però è ancora la stessa zuppa . prova a decifrarlo, non è difficile, in caso mi domandi, poi lo porti sul pic.

/******************* TASTIERA **************************************
* TASTIERA 3 COLONNE 4 RIGHE connessa come segue: *
* R1 = PTBD_PTBD4 C1 = PTBD_PTBD0 *
* R2 = PTBD_PTBD5 C2 = PTBD_PTBD1 *
* R3 = PTBD_PTBD5 C3 = PTBD_PTBD2 *
* R4 = PTBD_PTBD7 *
*********************************************************************/

byte colMask[] =
{ 0b11111110,
0b11111101,
0b11111011
};

byte num_col = 0;

byte rigaMask[] =
{ 0b00010000,
0b00100000,
0b01000000,
0b10000000
};

byte num_riga = 0;
byte key_pressed ;
byte key_ok;
const byte key[] = {"147c2580369eabdf"};








void read_key(void){
key_ok = 0;

do{
for (num_col=0; num_col<3; num_col++) // a 0 una colonna alla volta
{
PTBD = 0xFF; // tutte le colonne a 1
PTBD &= colMask[num_col]; // a zero la colonna attuale

for (num_riga=0; num_riga<4; num_riga++) // Scansione righe
{
if (!(PTBD & rigaMask[num_riga])) // Riga trovata a 0
{
volte=5; // ritardo antirimbalzo
while(volte>0){}; // finchè non scade il tempo

if (!(PTBD & rigaMask[num_riga])) //Se la mask ancora OK
{
while((PTBD | 0x0F)!=0xFF); // finchè non toglie dito
key_pressed=num_riga+(4*num_col); // n. pulsante premuto
key_ok=1; // è stato premuto un pulsante
k2=key[key_pressed]; // Valore del pulsante premuto
}
}
} // fine scansione righe
} // fine scansione colonne
}while(key_ok == 0); // finchè non trova un tasto
}

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Guido
  • Autore della discussione
  • Platino Utente
  • Platino Utente
Di più
10 Anni 1 Mese fa #15 da Guido
Risposta da Guido al topic Tastiera a matrice
Ringrazio tutti, si ho sbagliato a inizializzare le colonne, ho corretto cosi:


#define colonna1 0b11111110//PORTBbits.RB0
#define colonna2 0b11111101//PORTBbits.RB1
#define colonna3 0b11111011//PORTBbits.RB2
#define colonna4 0b11110111//PORTBbits.RB3
#define riga1 PORTBbits.RB4
#define riga2 PORTBbits.RB5
#define riga3 PORTBbits.RB6
#define riga4 PORTBbits.RB7

Si prega Accesso o Crea un account a partecipare alla conversazione.

Moderatori: Mauro LaurentiPinnaMatteo Gariadoc83

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Forum - Ultimi messaggi