Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1

    [C - PIC16F877] Keypad 4x4 a matrice

    Ho un dubbio nel scrivere il codice per il controllo di un tastierino alfanumerico 4x4 a matrice.
    Devo visualizzare attraverso un software in C, utilizzando la suite MikroC di MikroElektronica, su un display i tasti che premo nel tastierino (0 1 2 3 4 5 6 7 8 9 A B C D * #).
    Il codice che ho scritto è il seguente:

    codice:
    void main() {
    
    unsigned int kp;
    
    portb= 0;
    trisb= 00001111;
    portc= 0;
    
    kp = 0;
    
    Keypad_Init(&PORTB);
      
    Lcd_Init(&PORTC);         // Initialize LCD on PORTC
    Lcd_Cmd(LCD_CLEAR);       // Clear display
    Lcd_Cmd(LCD_CURSOR_OFF);  // Cursor off
    
    Lcd_Out(1, 1, "Premuto:" );
    Lcd_Out(3, 1, "A=10 B=20 C=30 D=40" );
    
    ciclo:
    
    //--- preparazione valori out
    
    if(portb.F3=1, portb.F4=1) kp=1;    //tasto 1
    if(portb.F3=1, portb.F6=1) kp=2;    //tasto 2
    //stringa per tasto seguente;
    //stringa per tasto seguente;
    //stringa per tasto seguente;
    //stringa per tasto seguente;
    //stringa per tasto seguente;
    //stringa per tasto seguente;
    //stringa per tasto seguente;
    //stringa per tasto seguente;
    //stringa per tasto seguente;
    //stringa per tasto seguente;
    //stringa per tasto seguente;
    //stringa per tasto seguente;
    
    //--- preparazione valori out
    
    goto ciclo;
    
    kp = Keypad_Read(); //questa stringa forse non serve
    
    Lcd_Chr(1, 10, kp); //stampa su LCD
    
    }//fine
    Questo codice però non mi funziona.
    On-line non riesco a trovare niente.
    Tempo addietro avevo fatto una cosa simile e andava, ora non riesco a capire...

  2. #2

    Re: [C - PIC16F877] Keypad 4x4 a matrice

    if(portb.F3=1, portb.F4=1) kp=1; //tasto 1
    if(portb.F3=1, portb.F6=1) kp=2; //tasto 2

    Questo codice però non mi funziona.
    Che significa "non mi funziona"? Non compila? Non esce nulla?

    Quegli if mi sembrano strani, come vengono interpretati?

    Niente antirimbalzo?

    E poi la visualizzazione del tasto premuto è fuori dal ciclo infinito...

    HTH,

  3. #3

    Re: Re: [C - PIC16F877] Keypad 4x4 a matrice

    Originariamente inviato da ESSE-EFFE
    Che significa "non mi funziona"? Non compila? Non esce nulla?

    Quegli if mi sembrano strani, come vengono interpretati?

    Niente antirimbalzo?

    E poi la visualizzazione del tasto premuto è fuori dal ciclo infinito...

    HTH,
    Viene compilato perfettamente.
    Sul display esce la scritta "Premuto:" con sotto l'altra scritta, ma al nel posto carattere n. 10 non esce il dato relativo il tasto premuto...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,304
    Quelle if sono sbagliate ... cosa vorrebbero dire? Il confronto si fa con == e la virgola in mezzo non ha senso ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5

    Re: Re: Re: [C - PIC16F877] Keypad 4x4 a matrice

    Viene compilato perfettamente.
    Sul display esce la scritta "Premuto:" con sotto l'altra scritta, ma al nel posto carattere n. 10 non esce il dato relativo il tasto premuto...
    Sì... e quindi? Sulle altre cose che ho scritto che mi dici?

  6. #6
    devo fare un test tra due pin della porta del PIC per vedere quale tasto del testierino vado a premere...

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,304
    E ti ho detto che le if sono sbagliate ... ma tu conosci la sintassi del C ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    poco...senò non chiedevo "aiuto", senò avrei saputo farlo da solo...

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,304
    Originariamente inviato da deluxpc
    poco...senò non chiedevo "aiuto", senò avrei saputo farlo da solo...
    Non è così logico come vorresti farci credere ... qui c'è chi chiede aiuto, ma conosce le basi sintattiche del linguaggio ... quindi, se hai scritto qui perchè vuoi un aiuto, devi anche dire che non sai come si scrive una if ... (ovvero che non conosci il linguaggio con cui realizzi il programma) ...

    Ad esempio potresti scrivere

    if (portb.F3 == 1) kp=1;

    ma questo solo da un punto di vista sintattico ...

    Per capire se quello che vuoi fare è corretto, dovresti dirci, ad esempio, perchè controlli i pin della porta F (F3, F4 ...) che non mi risulta esserci in quel micro.

    La goto non ha senso, la funzione Keypad_Read non si sa a cosa serva nè come funzioni ...

    A questo punto, non si puo' dare nessun aiuto che abbia senso ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    guarda che la porta da controllare è la B (portb) e i pin sui quali agire sono, in qst caso, il 3 e il 4 (F3, F4).

    portb.F3, agisco sul pin 3 della porta B.

    Io devo fare un test di due pin differenti, quindi nell'espressione devo inserire entrambi i pin per sapere quando entrambi vanno a livello logico alto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.