- Proč potřebujeme klávesnici 4x4:
- Jak funguje maticová klávesnice 4x4:
- Potřebný materiál:
- Kruhový diagram:
- Vysvětlení programování:
Klávesnice jsou široce používaná vstupní zařízení používaná v různých elektronikách a vestavěných projektech. Používají se k přijímání vstupů ve formě čísel a abeced a jejich vkládání do systému pro další zpracování. V tomto tutoriálu budeme propojovat maticovou klávesnici 4x4 s PIC16F877A.
Než se podíváme na podrobnou logiku a naučíme se, jak používat klávesnici, budeme muset vědět několik věcí.
Proč potřebujeme klávesnici 4x4:
Typicky používáme jeden I / O pin mikrokontroléru ke čtení digitálního signálu, jako je spínací vstup. V několika aplikacích, kde je pro vstup zapotřebí 9, 12, 16 klíčů, přidáme-li každý klíč do portu mikrokontroléru, skončíme s použitím 16 I / O portů. Těchto 16 I / O portů není jen pro čtení I / O signálů, ale lze je také použít jako periferní připojení, jako jsou tyto I / O piny podporovány jako ADC, I2C, SPI připojení. Protože jsou tyto piny propojeny s přepínači / klíči, nemůžeme je použít, ale pouze jako I / O porty. To vůbec nedává smysl. Jak tedy snížit počet pinů? Odpověď je pomocí šestihranné nebo maticové klávesnice; můžeme snížit počet pinů, které sdružují maticové klíče 4x4. Bude používat 8 pinů, z toho 4 připojené v řadách a 4 připojené ve sloupcích, čímž ušetří 8 pinů mikrokontroléru.
Jak funguje maticová klávesnice 4x4:
Na horním obrázku je vlevo zobrazen modul maticové klávesnice. Vpravo je zobrazeno interní připojení a připojení portů. Pokud vidíme port, je zde 8 pinů, první 4 zleva doprava jsou X1, X2, X3 a X4 jsou řádky a poslední 4 zleva doprava jsou Y1, Y2, Y3, Y4 jsou čtyři sloupce. Pokud uděláme 4 řádky nebo stranu X jako výstup a uděláme je logicky nízké nebo 0, a uděláme 4 sloupce jako vstup a přečteme klíče, přečteme přepínač, když korespondent Y dostane 0.
Totéž se stane v matici nxn, kde n je číslo. To může být 3x3, 6x6 atd.
Teď si jen myslete, že je stisknuto 1. Pak se 1 nachází na řádku X1 a sloupci Y1. Pokud X1 je 0, pak Y1 bude 0. Stejným způsobem můžeme cítit každý klíč v řádku X1, snímáním sloupců Y1, Y2, Y3 a Y4. Tato věc se stane pro každý přepínač a budeme číst polohu přepínačů v matici.
Každý zelený kruh je přepínač a oba jsou spojeny dohromady stejným způsobem.
V tomto tutoriálu propojíme klávesnici s následujícími specifikacemi -
- Použijeme vnitřní vytažení
- Přidáme klíčovou možnost de-bounce
Ale když spínače nejsou stisknuté, musíme nastavit Y1, Y2, Y3 a Y4 na vysoké nebo 1. Jinak nemůžeme detekovat logické změny při stisknutí spínače. Ale nemohli jsme to udělat pomocí kódů nebo programu, protože tyto piny se používají jako vstup, ne výstup. Použijeme tedy vnitřní operační registr v mikrokontroléru a budeme tyto piny obsluhovat jako režim umožňující slabé vytažení. Při použití tohoto režimu bude režim logické vysoké aktivace, když je ve výchozím stavu.
Také, když stiskneme klávesu, dojde ke vzniku hrotů nebo šumu se spínacími kontakty a díky tomuto vícenásobnému přepnutí se stane, což se neočekává. Nejprve tedy detekujeme stisknutí spínače, počkáme několik milisekund, znovu zkontrolujeme, zda je spínač stále stisknutý nebo ne, a pokud je spínač stále stisknutý, nakonec spínač spínače přijmeme. Tomu se říká odskakování spínačů.
To vše implementujeme do našeho kódu a provedeme připojení na prkénku.
Zkontrolujte také, jak propojit klávesnici 4x4 s jinými mikrokontroléry:
- Rozhraní klávesnice s Arduino Uno
- Rozhraní maticové klávesnice 4x4 s mikrokontrolérem 8051
- Rozhraní klávesnice 4x4 s mikrokontrolérem ATmega32
- Digitální kódový zámek Raspberry Pi na prkénku
Potřebný materiál:
- Nepájivá deska
- Pic-kit 3 a vývojové prostředí ve vašem PC, tj. MPLABX
- Dráty a konektory
- Znakový LCD 16x2
- 20MHz krystal
- 2 ks keramický kryt disku 33pF.
- 4,7k rezistor
- 10k předvolba (variabilní rezistor)
- Maticová klávesnice 4x4
- Adaptér 5 V.
Kruhový diagram:
Spojíme krystaly a rezistor v příslušných kolících. Také připojíme LCD ve 4bitovém režimu přes PORTD. Připojili jsme hexadecimální nebo maticovou klávesnici přes port RB4.
Pokud jste v PIC nováčkem, začněte s Začínáme s mikrokontrolérem PIC: Úvod do PIC a MPLABX
Vysvětlení programování:
Na konci je uveden kompletní kód pro propojení maticové klávesnice s mikrokontrolérem PIC. Kód je snadný a srozumitelný. Knihovna klávesnic je v kódu pouze věcí, které je třeba rozumět. Zde jsme použili rozhraní keypad.h a lcd.h Library k propojení klávesnice a LCD 16x2. Podívejme se tedy, co se uvnitř děje.
Uvnitř keypad.h uvidíme, že jsme použili záhlaví xc.h, což je výchozí knihovna registrů, frekvence krystalu je definována pro použití pro použití zpoždění použitého v souboru kepad.c. Porty klávesnice jsme definovali v registru PORTRB a jednotlivé piny jsme definovali jako řádek (X) a sloupce (Y).
Také jsme použili dvě funkce, jednu pro inicializaci klávesnice, která přesměruje port jako výstup a vstup, a skenování stiskem spínače, který při volání vrátí stav spínače.
#zahrnout
V keypad.c uvidíme, že níže uvedená funkce vrátí stisknutí klávesy, když funkce skeneru klávesnice nevrátí 'n'.
char switch_press_scan (void) // Získat klíč od uživatele { char key = 'n'; // Předpokládejme, že není stisknuta žádná klávesa, zatímco (key == 'n') // Počkejte, dokud nebude stisknuta klávesa key = keypad_scanner (); // Skenování kláves znovu a znovu klávesa Return; // při stisknutí klávesy vrací její hodnotu }
Níže je funkce čtení klávesnice. V každém kroku uděláme řádek X1, X2, X3 a X4 jako 0 a čteme stav Y1, Y2, Y3 a Y4. Zpoždění se používá pro efekt debounce, když je přepínač stále stisknutý, vrátíme hodnotu s ním spojenou. Pokud nestisknete žádný spínač, vrátíme se „n“.
char key_scanner (void) { X_1 = 0; X_2 = 1; X_3 = 1; X_4 = 1; if (Y_1 == 0) {__delay_ms (100); while (Y_1 == 0); návrat '1'; } if (Y_2 == 0) {__delay_ms (100); while (Y_2 == 0); návrat '2'; } if (Y_3 == 0) {__delay_ms (100); while (Y_3 == 0); návrat '3'; } if (Y_4 == 0) {__delay_ms (100); while (Y_4 == 0); návrat 'A'; } X_1 = 1; X_2 = 0; X_3 = 1; X_4 = 1; if (Y_1 == 0) {__delay_ms (100); while (Y_1 == 0); návrat '4'; } if (Y_2 == 0) {__delay_ms (100); while (Y_2 == 0); návrat '5'; } if (Y_3 == 0) {__delay_ms (100); while (Y_3 == 0); návrat '6'; } if (Y_4 == 0) {__delay_ms (100); while (Y_4 == 0); návrat 'B'; } X_1 = 1; X_2 = 1; X_3 = 0; X_4 = 1; if (Y_1 == 0) {__delay_ms (100); while (Y_1 == 0); návrat '7'; } if (Y_2 == 0) {__delay_ms (100); while (Y_2 == 0); návrat '8'; } if (Y_3 == 0) {__delay_ms (100); while (Y_3 == 0); návrat '9'; } if (Y_4 == 0) {__delay_ms (100); while (Y_4 == 0); návrat 'C'; } X_1 = 1; X_2 = 1; X_3 = 1; X_4 = 0; if (Y_1 == 0) {__delay_ms (100); while (Y_1 == 0); vrátit se '*'; } if (Y_2 == 0) {__delay_ms (100); while (Y_2 == 0); návrat '0'; } if (Y_3 == 0) {__delay_ms (100); while (Y_3 == 0); vrátit se '#'; } if (Y_4 == 0) {__delay_ms (100); while (Y_4 == 0); návrat 'D'; } návrat 'n'; }
Nastavíme také slabé vytažení na poslední čtyři bity a také nastavíme směr portů jako poslední 4 vstup a první 4 jako výstup. OPTION_REG & = 0x7F; se používá k nastavení režimu slabého vytažení na posledních pinech.
void InitKeypad (void) { Keypad_PORT = 0x00; // Nastavit hodnoty pinů portu klávesnice nula Keypad_PORT_Direction = 0xF0; // Poslední 4 piny vstup, První 4 piny výstup OPTION_REG & = 0x7F; }
V hlavním programu PIC (uvedeném níže) jsme nejprve nastavili konfigurační bity a zahrnovali několik potřebných knihoven. Poté ve funkcích void system_init inicializujeme klávesnici a LCD. A konečně v roce v hlavní funkci jsme četli klávesnice voláním switch_press_scan () funkci a vrací hodnotu LCD.
Stáhněte si kompletní kód s hlavičkovými soubory odtud a podívejte se na ukázkové video níže.