Keresés

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

  • Domonkos

    Ármester

    válasz Domonkos #39 üzenetére

    Learning the DATAHAND SYSTEM Makes You a Winner!

    A billentyuk allapotat beolvasni egyszeru:

    static void
    read_keyboard(void)
    {
    keys_down = 0;

    for (uint8_t row = 0; row < N_ROWS; row++) {
    const uint8_t b = read_row(row);
    const uint64_t b64 = b;
    const uint8_t offset = row * N_COLUMNS;

    keys_down |= b64 << offset;
    }
    }

    Ennek a fuggvenynek a celja az az, hogy a keys_down valtozo erteket egy olyan allapotba hozza, ami a billentyuzet billentyuinek tenyleges allapotanak megfeleltetheto. A kesobb meghivott fuggvenyek ennek a valtozonak az erteke alapjan fognak mukodni.

    A billentyuk azok vagy lenyomva, vagy felengedve vannak - egyszerre a ket allapot egyikeben - szoval azok reprezentalasahoz egy-egy bit is elegendo.
    Korabban kideritettuk, hogy a billentyuzet matrixa az 14x2-es mindket oldalon. - bar oldalankent csak 26 billentyuvel - Hogy ezt mind beolvassuk, vegig kell iteralnunk az osszes soron, es soronkent ket-ket billentyut (vagy 4-et, ha a ket felet egyszerre olvassuk) kell elraknunk a valtozoba.
    Mivel egy sor beolvasasa onmagaban egy kulon lepesnek tekintheto, ezert azt kiszerveztem egy kulon fuggvenybe.
    Szoval ha megelolegezzuk, hogy a read_row() fuggveny helyes erteket ad vissza, akkor nincs mas dolgunk, mint azt a billentyuzet poziciojanak megfelelo helyre "tolni" a keys_down valtozoba.
    A fenti kod pont ezt teszi.

    Magat a valtozot pedig definialhatjuk a megfelelo scope-ban mondjuk igy:
    typedef uint64_t kb_state_t;
    kb_state_t keys_down = 0;
    #if ( N_KEYS > 64 )
    #error "Too many keys on the keyboard"
    #endif

    Kenyelmes, mert nincs 64 billentyunel tobb billentyunk. Mondjuk kinek is kellhet annyi? :U

    [ Szerkesztve ]

    Gender of electrical connectors is defined by the pins.

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