キーボードのしくみ

普段使っているキーボードについて誰にでもわかりやすく解説

はじめに

 PCを使っている方なら、おそらくキーボードを使わない日は無いと思います。キーボードは文字を入力するという重要な役割を果たしていますが、どのようにして実現しているのでしょうか。「どのボタン(スイッチ)が押されたか、状態をみているだけじゃないの?」と思われるかも知れません。確かにその通り、スイッチの状態をみているのですが、PCのキーボードだとスイッチの数が100個以上もあります。そんなに多くのスイッチをどうやってみているのでしょうか。

キーボードマトリクス

 スイッチの数が少なければ一度にみることができるのですが、さすがに100個を超えると一度にみることはできません。(※)そのような場合、一般的には下図のようなキーボードマトリクスという方法で行います。

 この例では、5×5=25個のスイッチの状態をみることができます。出力ポートO1~O5に順番に信号を出しながら、その都度入力ポートI1~I5の状態を5回にわけて確認します。これをゆっくりやると、短時間のタッチを取りこぼす可能性がありますが、通常は人間のスピードとは比較にならないほど高速にスキャンしますので、短時間のタッチでも取りこぼす心配はありません。

 このようにして、スイッチが100個のときは、10×10のマトリクスを構成すれば全てのスイッチの状態を知ることができるというしかけになっているのです。

※ 一般的に出力ポートや入力ポートの数は8の倍数になっており、8/16/32が多くなっています。従って、100を超えるスイッチの状態を一度にみることはできないため、キーボードマトリクスの手法が使われます。

文字コードとは

 ご存じのように、キーボードから文字を入力するときは様々な入力方法の切り替えが必要で、初めてキーボードを使う人は戸惑うかも知れませんが、頻繁に利用するのは半角と全角の切り替えと思われます。

入力モード概要
半角主にアルファベットや数字を入力するときに使用する
全角主にひらがなやカタカナ、漢字を入力するときに使用する

 では、半角と全角って何のことなのでしょうか?実は、コンピュータが出来た頃はこのような区別は無く、1種類(半角)のみでした。その後、漢字など様々な文字が必要になったため、文字コードが拡張され全角が誕生したという経緯になっています。

文字コードはコンピュータにそれぞれの文字を認識させるために固有のコード(番号)を割り振ったものですが、最初の頃はアルファベットと数字、記号が有れば良かったので文字コードはシンプルなものでした。アルファベットや数字などが0 ~ 127(16進数:7F)の中に割り振られています。

 なお、0 ~ 31(16進数:1F)の部分は文字ではなく特殊なコードが割り振られています。例えば、10(16進数:0A)は改行(LF: Line Feed)が割り振られています。また、32(16進数:20)のSPはSpace(空白)となっており、127(16進数:7F)のDELはDelete(削除)を意味するコードとなっています。

 このように、0 ~ 127(16進数:7F)の中に割り振られているのですが、これを2進数で表現すると、

0000000 ~ 1111111(7ビット)であり1バイト(8ビット)に収まることから1バイトコードとも呼ばれます。なお、このコードは米国の規格協会(ANSI)で規格化されており、ASCII(アスキー)コードとも呼ばれています。

※ASCII: American Standard Code for Information Interchange

1016ASCII1016ASCII1016ASCII1016ASCII
00 3220SP6440@9660`
11 3321!6541A9761a
22 34226642B9862b
33 3523#6743C9963c
44 3624$6844D10064d
55 3725%6945E10165e
66 3826&7046F10266f
77 39277147G10367g
88 4028(7248H10468h
99 4129)7349I10569i
10A 422A*744AJ1066Aj
11B 432B+754BK1076Bk
12C 442C,764CL1086Cl
13D 452D774DM1096Dm
14E 462E.784EN1106En
15F 472F/794FO1116Fo
1610 483008050P11270p
1711 493118151Q11371q
1812 503228252R11472r
1913 513338353S11573s
2014 523448454T11674t
2115 533558555U11775u
2216 543668656V11876v
2317 553778757W11977w
2418 563888858X12078x
2519 573998959Y12179y
261A 583A:905AZ1227Az
271B 593B;915B[1237B{
281C 603C925C\1247C|
291D 613D=935D]1257D}
301E 623E945E^1267E~
311F 633F?955F_1277FDEL

文字コードの拡張

 すでにお気づきかも知れませんが、さきほどの1バイトコードでは1バイトの中の0 ~ 127(16進数:7F)を使用しており、128(16進数:80)~255(16進数:FF)は空きになっています。日本では、この空いている領域に半角カタカナを割り振っており、当然ながら海外には無い日本独自の仕様となっています。このため、半角カタカナを含むメールを送ると途中のメールサーバで処理できずに「文字化け」を起こすことがありますので注意が必要です。

 次の段階として漢字に対応することが必要となり、1バイトでは対応できませんので次のような2バイト(全角)コードが登場しました。

コード名称  概要
EBCDICIBMにより開発されたメインフレーム用標準コード
JIS日本のJIS規格により規定されたコード
シフトJISMicrosoftなどによって策定されPC用として普及したコード
EUC世界各国の言語に対応することを考慮されたもので、主にUNIX系のOSで普及 文字によっては3バイトコードになる場合もある
UnicodeUnicodeコンソシアムによって世界中の文字をひとつのコード体系で扱えるようにしたもので、WindowsやUNIXなど様々なOSで対応している。 文字によっては3バイトや4バイトになることもある

関連情報

プログラミングって、そもそもナニ? https://www.keisoku.co.jp/pw/u-po/402_prg/