Hirdetés

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

  • don_peter
    senior tag

    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.

    Ez akkor most vissza tér egy char típusú karakterrel ami 1-16-ig van, gombnyomástól függően.
    Ez eddig szép és jó. Mellesleg köszönöm, hogy tisztába raktad a dolgot és leegyszerűsítetted, sokat fogok belőle tanulni.
    A fő kérdés viszont az, hogy miként kivitelezhető az, hogy mint a telefonnál alfanumerikus módon is írhassak?
    Tehát van egy 4x4-es mátrix nyomó gombsorom, az rá van csatlakoztatva a mikrovezérlőmre és szépen, ha megnyomom valamelyik gombot akkor 1-től 16-ig vissza adja nekem a benyomott gomb értékét.
    4x4 keypad
    Ezt nem tudom tovább gondolni, hogy miként lehetne megoldani, hogy egy-egy gomb többszöri megnyomásánál már alfanumerikus értékként a gombonkénti eltárolt 3 betű egyikét adja vissza.
    Arra gondoltam, hogy valami ciklusban ciklust kellene futtatni és mivel egy gombot megnyomok és várakoztatnom kellene legalább 1-2mp-et, és vizsgálnom, hogy van e ugyan azon a gombon közvetlen, további nyomás és az szerint váltani a betűket, hogy hány további nyomás történik.

    Legalább is erre felé gondolkodom, persze ez lehet nem jó irány.
    Gyakorlatilag mint a telefon gombsora úgy működne a dolog annyi kivétellel, hogy nem lenne annyi karakter.
    Csak az angol nagy betűs A-Z-ig és 0-9-ig számok kellenek.
    Illetve egy BACK és SPACE gomb, hogy vissza törölhető és léptethető legyen a dolog.
    Ez természetesen csak a gombsor egy részét foglalná le ami 4sorból és 3oszlopból állna.
    A 4. oszlop 4sora külön funkció gombok lennének.
    Szóval ezen a dolgon rágom magam már lassan 1 hete, de túlnő rajtam ez a globális gondolkodás.
    Tudsz ebben segíteni?
    Ha csak elméletben azt is megköszönöm.
    Természetesen az eddig megírt és leegyszerűsített kódot kellene kiegészíteni ezzel a nem kis résszel :D
    Előre is köszi a segítséget. (Ha valamit nem világosan írtam, csak kérdezz bele bátran)

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