Hirdetés

Keresés

Új hozzászólás Aktív témák

  • dabadab

    titán

    válasz don_peter #4577 üzenetére

    Ja, igen, get_key() helyett konzekvensen getchar()-t irtam, felig mar autopiloton volt az agyam :)

    ""PORT_B4" egyenlő a következővel : PORTBbits.RB4"

    Ja, akkor az egy bitfield lesz, azon meg meg sokkal egyszerubb vegigmenni, tomb se kell hozza:

    #define SOROK_SZAMA 4
    #define NO_KEY 0
    #define FIRST_ROW_BIT_POSITION 4

    #define FIRST_COL_BIT_POSITION 4
    #define NO_OF_COLS 4

    int oszlopok[] = { PORT_B4, PORT_B5, PORT_B6, PORT_B7 };

    unsigned char get_key()
    {
    unsigned int i, k=0;
    for( i=0; i < SOROK_SZAMA ; i++ )
    {
    SOROK = (1 >> ( FIRST_ROW_BIT_POSITION + i ) ); //Léptetjük a sorok szintjét
    for ( j = FIRST_COL_BIT_POSITION ; j < FIRST_COL_BIT_POSITION + NO_OF_COLS ; j++ )
    {
    k++;
    if( PORTBbits & (1 << j) )
    {
    while( PORTBbits & (1 << j) ); //Várakozunk a gomb felengedéséig
    return k;
    }
    }
    }
    return NO_KEY;
    }

    "Ha igen akkor ő nem a bit állással kell vissza jöjjön hanem a beolvasott karakterrel ami 1,2,3...16-ig."

    Igen, pont ezert mondtam, hogy ott nem jo az, hogy azt adod vissza, hogy ALACSONY, mert az nem karakter :)

    "Ez egy végtelen ciklus nem?"

    De, ez az, errol irtam, hogy ez nem szamit, mert a k-t ezen belul inicializaljuk.

Új hozzászólás Aktív témák