Akvárium CB 21MHz Elektro Hudba Fotky ZX Spectrum +2A Jídlo Rybaření Hlavní stránka Akvárium CB 27MHz Elektro Hudba Fotky ZX Spectrum Jídlo Rybaření
English version

Klávesnice pro PC


Jako základ této stránky jsem použil popis od Daniela Prokopce, kterému tímto děkuji.
Kromě tohoto popisu se také můžete kouknout na stránku Interfacing the PC's Keyboard.

Popis komunikace mezi PC klávesnicí typu AT a PC

Komunikace mezi AT klávesnicí určenou pro PC probíhá po dvou drátech. Jedná se o sériovou komunikaci, kde na vodiči nazvaném DATA (pin 2) jsou data a vodiči nazvaném CLOCK (pin 1) jsou hodiny. Pin 5 je napájení klávesnice 5V, pin 4 je zem a pin 3 je RESET, což je pozůstatek z XT klávesnic. Rychlost hodinového signálu může být v rozsahu 10 az 20 kHz.

Klávesnice Konektor

Když je stisknuta klávesa, klávesnice vyšle do počítače kód klávesy. Po uvolnění klávesy je vyslán řídící znak oznamující uvolnění klávesy a kód uvolněné klávesy.

Průběh signálu klávesnice
Signál CLOCK je vždy řídící a řídí ho sama klávesnice (při vysílání znaku z klávesnice i při příjmu znaku do klávesnice). Příjem znaku z klávesnice probíhá při stisku klávesy a vysílání znaku probíhá při vzniku požadavku zaslání řídícího znaku do klávesnice. Na signálu DATA jsou vždy při sestupné hraně platná data. Při vyslání znaku z klávesnice řídí signál DATA klávesnice, pri vysílaní znaku do klávesnice řídí signál DATA počítač. Při komunikaci se přenáší vždy jedno 8 bitové slovo, 1 start bit, 1 paritní bit (lichá parita) a 1 stop bit.

 s--DATA--PS

 s	= start bit
 DATA	= první bit (LSB bit-nejnižší bit)
 P	= paritní bit - lichá parita
 S	= stop bit

Jako příklad si uvedeme klávesu 'A' (0x1C):

          paritní bit
           |
 start bit |
  |        |
  00011100001
            |
         stop bit
Příklad průběhu pro klávesu A (0x1C)

V případě požadavku na vyslání řídícího znaku do klávesnice je nutné signál DATA stáhnout na úroveň logické nuly a klávesnice si sama začne generovat hodinové pulsy na signálu CLOCK. Potom stačí tento řídící signál CLOCK sledovat a poslat mu data jako při příjmu (1 start bit, 8 bitové slovo a 1 paritní bit (lichá parita).


Řídící kódy vyslané z PC do klávesnice

(všechny řídící kódy jsou v hexadecimálním formátu)

0xFF 	- reset klávesnice - spustí se power-on test
0xFE 	- žádost o zaslání posledního zaslaného scan kódu klávesy
0xFA	- potvrzení - ACK
0xF6	- obnovení implicitního nastavení klávesnice
0xF5 	- implicitní zablokování klávesnice - provede reset klávesnice,
          vrací kód ACK (0xFA), provede prerušení scanovaní klávesnice
          a ceka na dalsi prikaz, nema zadny vliv na LED indikator
0xF4 	- odblokovani klávesnice - nuluje vystupni buffer, odblokuje
          klavesnici a vraci kod (0xFA)
0xEE 	- echo - klávesnice odpovi zpet take 0xEE jako echo - pro test
0xF2 	- čtení ID klávesnice - klavensice odpovi ACK se dvemi ID byty
          (0x83,0xAB) a pokracuje ve scanovani po predchazejicim
          zablokovani klávesnice
0xED 	- zapnuti nebo vypnuti LED indikatoru klávesnice
	  b0     - Scrollock - 1 zapnuto/0 vypnuto
	  b1     - Numlock   - 1 zapnuto/0 vypnuto
	  b2     - Capslock  - 1 zapnuto/0 vypnuto
	  b3..b7 - 0

Řídící kódy vyslané z klávesnice do PC

(všechny řídící kódy jsou v hexadecimálním formátu)

0xFF	- preteceni bufferum klávesnice detekuje chybu
0xFE 	- zadost o zaslani posledniho zaslaneho znaku, spatne prijaty
          prikaz, parita apod.
0xFA	- potvrzeni - ACK
0xF0 k  - uvolneni klavesy - k -> kod uvolnene klavesy
0xAA	- uspesny power-on test
0xEE 	- echo - klávesnice odpovi zpet take 0xEE jako echo - pro test
0x00	- preteceni bufferum klávesnice detekuje chybu

Skanovací kódy standardní 101 tlačítkové klávesnice

                     ** Hlavní klávesy **
-----------------------------------------------------------------------
  Klávesa        Vyslaný kód při stisku        Vyslaný kód při uvolnění
-----------------------------------------------------------------------
  `              0x0E                          0xF0 0x0E
  1              0x16                          0xF0 0x16
  2              0x1E                          0xF0 0x1E
  3              0x26                          0xF0 0x26
  4              0x25                          0xF0 0x25
  5              0x2E                          0xF0 0x2E
  6              0x36                          0xF0 0x36
  7              0x3D                          0xF0 0x3D
  8              0x3E                          0xF0 0x3E
  9              0x46                          0xF0 0x46
  0              0x45                          0xF0 0x45
  -              0x4E                          0xF0 0x4E
  =              0x55                          0xF0 0x55
  Backspace      0x66                          0xF0 0x66

  Tabelátor      0x0D                          0xF0 0x0D
  Q              0x15                          0xF0 0x15
  W              0x1D                          0xF0 0x1D
  E              0x24                          0xF0 0x24
  R              0x2D                          0xF0 0x2D
  T              0x2C                          0xF0 0x2C
  Y              0x35                          0xF0 0x35
  U              0x3C                          0xF0 0x3C
  I              0x43                          0xF0 0x43
  O              0x44                          0xF0 0x44
  P              0x4D                          0xF0 0x4D
  [              0x54                          0xF0 0x54
  ]              0x5B                          0xF0 0x5B
  \              0x5D                          0xF0 0x5D

  Caps Lock      0x58                          0xF0 0x58
  A              0x1C                          0xF0 0x1C
  S              0x1B                          0xF0 0x1B
  D              0x23                          0xF0 0x23
  F              0x2B                          0xF0 0x2B
  G              0x34                          0xF0 0x34
  H              0x33                          0xF0 0x33
  J              0x3B                          0xF0 0x3B
  K              0x42                          0xF0 0x42
  L              0x4B                          0xF0 0x4B
  ;              0x4C                          0xF0 0x4C
  '              0x52                          0xF0 0x52
  Enter          0x5A                          0xF0 0x5A

  Levý Shift     0x12                          0xF0 0x12
  Z              0x1A                          0xF0 0x1A
  X              0x22                          0xF0 0x22
  C              0x21                          0xF0 0x21
  V              0x2A                          0xF0 0x2A
  B              0x32                          0xF0 0x32
  N              0x31                          0xF0 0x31
  M              0x3A                          0xF0 0x3A
  ,              0x41                          0xF0 0x41
  .              0x49                          0xF0 0x49
  /              0x4A                          0xF0 0x4A
  Pravý Shift    0x59                          0xF0 0x59

  Levý Ctrl      0x14                          0xF0 0x14
  Levý Alt       0x11                          0xF0 0x11
  Mezera         0x29                          0xF0 0x29
  Pravý Alt      0xE0 0x11                     0xE0 0xF0 0x11
  Pravý Ctrl     0xE0 0x14                     0xE0 0xF0 0x14
  ESC            0x76                          0xF0 0x76
-----------------------------------------------------------------------


                         ** Funkční klávesy **
-----------------------------------------------------------------------
  Klávesa        Vyslaný kód při stisku        Vyslaný kód při uvolnění
-----------------------------------------------------------------------
  F1             0x05                           0xF0 0x05
  F2             0x06                           0xF0 0x06
  F3             0x04                           0xF0 0x04
  F4             0x0C                           0xF0 0x0C
  F5             0x03                           0xF0 0x03
  F6             0x0B                           0xF0 0x0B
  F7             0x83                           0xF0 0x83
  F8             0x0A                           0xF0 0x0A
  F9             0x01                           0xF0 0x01
  F10            0x09                           0xF0 0x09
  F11            0x78                           0xF0 0x78
  F12            0x07                           0xF0 0x07
-----------------------------------------------------------------------


                            ** Numerická část **
-----------------------------------------------------------------------
  Klávesa        Vyslaný kód při stisku        Vyslaný kód při uvolnění
-----------------------------------------------------------------------
  NumLock        0x77                           0xF0 0x77
  -              0x7B                           0xF0 0x7B
  /              0xE0 0x4A                      0xE0 0xF0 0x4A Pozn.1,2
  .              0x71                           0xF0 0x71
  *              0x7C                           0xF0 0x7C
  +              0x79                           0xF0 0x79
  Enter          0xE0 0x5A                      0xE0 0xF0 0x5A

  0              0x70                           0xF0 0x70
  1              0x69                           0xF0 0x69
  2              0x72                           0xF0 0x72
  3              0x7A                           0xF0 0x7A
  4              0x6B                           0xF0 0x6B
  5              0x73                           0xF0 0x73
  6              0x74                           0xF0 0x74
  7              0x6C                           0xF0 0x6C
  8              0x75                           0xF0 0x75
  9              0x7D                           0xF0 0x7D
-----------------------------------------------------------------------


                           ** Pomocná část **
-----------------------------------------------------------------------
  Klávesa        Vyslaný kód při stisku        Vyslaný kód při uvolnění
-----------------------------------------------------------------------
  Ins            0xE0 0x70                       0xE0 0xF0 0x70 Pozn.1,2,3
  Home           0xE0 0x6C                       0xE0 0xF0 0x6C Pozn.1,2,3
  Pg Up          0xE0 0x7D                       0xE0 0xF0 0x7D Pozn.1,2,3
  Del            0xE0 0x71                       0xE0 0xF0 0x71 Pozn.1,2,3
  End            0xE0 0x69                       0xE0 0xF0 0x69 Pozn.1,2,3
  Pg Dn          0xE0 0x7A                       0xE0 0xF0 0x7A Pozn.1,2,3

  Šipka nahoru   0xE0 0x75                       0xE0 0xF0 0x75 Pozn.1,2,3
  Šipka doleva   0xE0 0x6B                       0xE0 0xF0 0x6B Pozn.1,2,3
  Šipka doprava  0xE0 0x74                       0xE0 0xF0 0x74 Pozn.1,2,3
  Šipka dolů     0xE0 0x72                       0xE0 0xF0 0x72 Pozn.1,2,3

  PrtSc          0xE0 0x12 0xE0 0x7C             0xE0 0xF0 0x7C 0xE0 0xF0 0x12
  Ctl-PrtSc      0xE0 0x7C                       0xE0 0xF0 0x7C
  Alt-PrtSc      0x84                            0xE0 0x84
  ScrLk          0x7E                            0xF0 0x7E
  Ctrl-Break     0xE0 0x7E 0xE0 0xF0 0x7E        nic

-----------------------------------------------------------------------


                              ** Poznámky **
-----------------------------------------------------------------------

  Poznámka 1
     Při stiknutém levém shiftu :
        Vyslaný kód při stisku    - 0xE0 0xF0 0x12 0x** 0x**
        Vyslaný kód při uvolnění  - 0x** 0x** 0x** 0xE0 0x12

  Poznámka 2
     Při stisknutém pravém shiftu :
        Vyslaný kód při stisku    - 0xE0 0xF0 0x59 0x** 0x**
        Vyslaný kód při uvolnění  - 0x** 0x** 0x** 0xE0 0x59

  Poznámka 3
     Při stiknutém Num Locku :
        Vyslaný kód při stisku    - 0xE0 0x12 0x** 0x**
        Vyslaný kód při uvolnění  - 0x** 0x** 0x** 0xE0 0xF0 0x12

  '0x** 0x**'       - normálně vysílané sekvence při stiknuté klávese
  '0x** 0x** 0x**'  - normálně vysílané sekvence při uvolnění klávesy

Daniel Prokopec, email.: prokopec@login.cz
Větrná 678/IV. Vysoké Mýto 56601

Hodně úspěchů Vám přeje Petr Simandl
p21s@hotmail.com
Hlavní stránka

datum poslední změny : 3.6.1999