Új hozzászólás Aktív témák
-
Domonkos
addikt
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 aread_row()
fuggveny helyes erteket ad vissza, akkor nincs mas dolgunk, mint azt a billentyuzet poziciojanak megfelelo helyre "tolni" akeys_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"
#endifKenyelmes, mert nincs 64 billentyunel tobb billentyunk. Mondjuk kinek is kellhet annyi?
Új hozzászólás Aktív témák
- A fociról könnyedén, egy baráti társaságban
- Elemlámpa, zseblámpa
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- OLED TV topic
- Autós topik
- Kerékpárosok, bringások ide!
- Autós kamerák
- Házimozi belépő szinten
- CURVE - "All your cards in one." Minden bankkártyád egyben.
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- További aktív témák...
- BESZÁMÍTÁS! Gigabyte AORUS B550M R7 5700X 32GB DDR4 1TB SSD RX 6800 16GB Zalman i3 NEO Gigabyte 850W
- Samsung Galaxy S24 Ultra / Kártyafüggetlen / 12/1024GB
- Vivo V40 SE 256GB, Kártyafüggetlen, 1 Év Garanciával
- Új ASUS VivoBook 15 X1504VA - 15,6"FHD IPS - i5-1335U - 16GB - 512GB - Win11 - 1,5 év gari - MAGYAR
- Telefon felvásárlás!! Apple Watch SE/Apple Watch SE 2 (2022)
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest