Struktura

Realizace a obsluha klávesnice

Realizace a obsluha klávesnice

     V lekci Čtení vstupů, obsluha tlačítek jsme se naučili používat tlačítka pro zadávání potřebných informací mikropočítači. V řadě úloh však potřebujeme zadávat informací více a potom se tlačítka sdružují do tzv. klávesnic. Pokud vyvedeme každé tlačítko samostatně, potřebujeme stejný počet vstupů jako počet tlačítek na klávesnici. Takové řešení je vzhledem k využití vstupů mikropočítače „neekonomické“ (každé tlačítko potřebuje jeden bit portu) a používá se zcela výjimečně u nejmenších klávesnic, např. s 12 tlačítky. Taková klávesnice má potom 12 + 1 vývodů – viz. fotografie.

obrazekObr. 1: Klávesnice se 13 vývody

     Výhodnějším a častějším řešením malých klávesnic je propojení jednotlivých tlačítek do tzv. matice. Tlačítka jsou vzájemně zapojena do sloupců a řádků, čímž se sníží počet potřebných vývodů a také počet potřebných bitů portu. U předcházející klávesnice 4x3 bude stačit jen 7 bitů, u klávesnice 4x4 podle schématu vlevo bude stačit jen 8 bitů, což se rovná jednomu celému portu. Programová obsluha takové klávesnice je složitější než obsluha jednotlivých 16 tlačítek, ale úspora pinů mikropočítače je výrazná. Základem programové obsluhy maticové klávesnice je to, že sloupce jsou zapojeny na výstupy a řádky na vstupy mikropočítače. Na výstup 0.sloupce je vyslána log.1 a testuje se, na kterém řádku se log.1 objeví – na tom řádku je tlačítko stlačené. To se opakuje pro všechny další sloupce. Tímto opakovaným postupem lze zjistit, která tlačítka byla stlačena.

obrazekObr. 2: Schéma zapojení maticové klávesnice

    Výhodou jazyka Bascom je, že má k dispozici funkci Getbrd( ) umožňující snadné naprogramování obsluhy maticové klávesnice 4x4. Tento příkaz v nekonečné smyčce skenuje připojenou klávesnici a vrací do mikropočítače celočíselnou proměnnou v rozmezí hodnot 0 až 16. Každá klávesa má přiřazeno číslo 0, 1,…15 a je-li stisknuta, můžeme její kód jako hexaznak zobrazovat třeba na displeji. Je-li hodnota proměnné rovna 16, není stisknuta žádná klávesa.

DOPORUČENÍ:

Abychom mohli provádět pokusy s klávesnicí, je vhodné v tomto místě přejít na lekci Inteligentní LCD displeje a jejich řízení a naučit se je používat.

Pokud nemáme maticovou klávesnici k dispozici, můžeme si ji vytvořit na nepájivém poli např. z 12 tlačítek, která zapojíme do 3 sloupců a 4 řádků. Pro první seznámení nám to bude stačit a ušetříme za klávesnici.

obrazekObr. 3: Realizace klávesnice pomocí tlačítek na nepájivém poli

(Na fotografii jsou tlačítka uspořádána za sebou, ale tvoří 3 sloupce.)

obrazekObr. 4: Schéma připojení klávesnice a LCD  displeje

obrazekObr. 5: Realizace úlohyobrazekObr. 6: Zobrazení stisku klávesy na LCD displeji 

’---------------------------------------------------------------------------------------------------

’ PROGRAM KLAVESNICE_4X4+LCD.bas

’ Program, kterým posíláme na dvouřádkový LCD displej text

’ a podle stisku tlačítka na klávesnici 4x4 jej zobrazujeme.

’---------------------------------------------------------------------------------------------------

$regfile = “m8def.dat”                                        ‘soubor s deklaracemi

$crystal = 12000000                                          ‘kmitočet vnějšího oscilátoru v Hz

Dim A As Byte                                                    ‘nadefinování proměnné, do které se bude zapisovat kód klávesy

‘nadefinování LCD jsme provedli v Options-Compiler-LCD, nemusíme tak použít Config LCD

‘Config Lcd = 16 * 2

‘Config Lcdpin = Pin , Db7 = Portb.0 , Db6 = Portd.7 , Db5 = Portd.6 , Db4 = Portd.5 , E = Portb.1 , Rs = Portb.2

Config Kbd = Portd                                             ‘nadefinování portu, na která je připojena klávesnice 4x4 - má 8 vývodů

Cls                                                                      ‘po restartu je diplej vynulován

Locate 1 , 2                                                        ‘a na 1. řádek a 2. znak je uměn

Lcd “klavesnice 4x4”                                           ‘nápis “klávesnice 4x4”

Wait 1

Cursor Off                                                          ‘vypnutí kurzoru

’----------------------------------- HLAVNI PROGRAM ------------------------------------------

Do                                                                      'nekonečná smyčka

A = Getkbd()

If A = &H10 Then                                                ‘když není nic stisknuté,

Locate 2 , 1                                                        ‘vypíše se na 2.řádek

Lcd “ NENI STISK”                                              ‘nápis “NENI STISK”

Else

Locate 2 , 2                                                       'pokud je nějaká klávesa stisknutá,

Lcd "klavesa: "                                                  'vypíše se její hexakód

Locate 2 , 12

Lcd " "                                                               'mezery - prázdné znaky

Locate 2 , 10

Lcd Hex(a)

End If

Waitms 20

Loop

’—————- KONEC HLAVNIHO PROGRAMU ———————-

End

‘Návrh na pokusy: Na 2.řádku od 12. znaku jsou prázdné znaky k zakrytí textu.

’ Jak se musí upravit program, abychom nemuseli používat tyto znaky?

Pro další pokusy s klávesnicí si můžeme zkusit napsat program, kterým budeme podle stisku určité klávesy zapínat, nebo vypínat LED diodu.

Zdroje

Obrázky: 

  • Obr. 1-6: Archiv autora.
Logolink