たまりば

  パソコン・インターネット パソコン・インターネット  三鷹市 三鷹市

HD44780文字コード解説
2012年06月09日 15:21

電子工作やその辺のちょっとした機械などでよく見かけるキャラクタ液晶。
SC1602BS*B
これにはドライバICとしてたいていHD44780かあるいはその互換品が使われている。
これの文字コードがなかなか面白かったのでまとめてみた。

データシートを見るとこのICの文字コードには日本語版と欧米版(とオーダーメイド)がある。
まずこちらが日本語版。これはデータシートではなく秋月電子で買った実物(SC1602BS*B・上写真)から写し取ったものだ。データシートとは微妙なミス程度の違いがあった。
HD44780文字コード(日本語)
コンピュータ上で扱いやすいように表にまとめてみた。
x0x1x2x3x4x5x6x7x8x9xAxBxCxDxExF
x0


0 @P`p αp
x1!1 AQaq äq
x2"2 BRbr βΘ
x3#3 CScs ε
x4$4 DTdt μΩ
x5%5 EUeu σü
x6&6 FVfv ρΣ
x7'7 GWgw gπ
x8(8 HXhx
x9)9 IYiy ⁻¹y
xA*:JZjz j
xB+;K[k{ ˟
xC,<L¥l|
xD-=M]m} ÷
xE.>N^n ñ
xF/?O_o ö
注:
・「˟」とか「x̄」とかうまく表示されない環境も多いだろうが気にしない。
・ñは実際にはnに‾が付いた文字だが、それらしい文字が見つからなかったのでñのことかなと思ってそう書いた。
・同様に、Lに二本線の入った「Ⱡ」は£のことだと思う。2本線の入った「₤」の形もありうるらしいし。以降£として扱うことにする。
・このICは文字のサイズが5×7ドットモード(最下段に空白があるので実際は5×8ドット)と5×10ドットモード(同様に5×11ドット)から選べる。ExとFxの文字の一部は5×10ドットモードを意図しているが、5×7ドットモードでも5×8ドット分しか表示されないだけで使うこと自体はできる。
・私用領域は自由にドットパターンを描ける。コード領域は16文字分あるが、5×7ドットモードでは8文字分が2回ミラー、5×10ドットモードでは4文字分が4回ミラーされている。

基本的にASCII+半角カナなのは分かると思うので、特筆すべきところを抜き出してみる。
  • 5Cは日本語流の円記号「¥」だ。(なので細かいことを言うとASCIIではなくJISX0201英字)
  • 7E,7Fに矢印が入っている。これにより7Eの「~」(あるいはJISX0201で言えば「‾」)は無くなっている。なかなか思い切ったことをしたものだ。
  • ExとFxに色々と入っている。
    分類すると
    • ä, g, j, ñ, ö, p, q, ü, x̄, y
      アクセント付き英字とディセンダ付き英字
      これらは対応する普通の文字のASCIIコードに80を足した場所に置かれており、扱いやすさも考えられているようだ。
      ディセンダ付き英字は、ASCII領域に入っているものが5×8ドットでデザインした都合上ベースラインの上に詰め込まれた汚い字形になっているのを縦10ドットモードで綺麗に表示するための物だろう。縦10ドットモードを使っているものを見たことはないが、心遣いは嬉しい。
      アクセント付き英字はあまり実用になると思えない少なさ。
    • α, β, ε, μ, σ, ρ, Θ, Ω, Σ, π
      ギリシャ文字。まあ何かと使いそうなあたり…ではあるけど、表示機として使う時に要るかというと別問題な気が。
      Σの総和とかπの円周率とか表示する機会はあまり思いつかない。
    • √, ⁻¹, ˟, ¢, £, ∞, ÷
      その他記号。後述の欧米版と似てるようなそうでもないような。使い道はやっぱり微妙。
      ÷だけあって×が無いのはxで代用しろということだろう。よく見ると+-は中央なのに÷はベースライン合わせで、xに合う。
    • (sp), ■
      黒四角の方はいいとして、スペースは20とA0に加えて3つ目だ。さらに文字の無い場所もスペースが出るから、こんなにスペースばかりなくてもいいだろうに。
      まあ最下位ビットをON/OFFすると点滅できるのは少し便利かもしれないが…。
    • 千, 万, 円
      金額の表示に便利そうな漢字。これはなかなか嬉しい。あと漢字系では年月日もあっても良かったのでは。

続いて欧米版。こちらはデータシートから書き写した。
HD44780文字コード(欧米)※日本語版と同じ文字で字形が違うものには色を付けた。
0x1x2x3x4x5x6x7x8x9xAxBxCxDxExFx
x0


0 @P`pБα▮▮ÀÐàð
x1!1 AQaqД¡±ÁÑáñ
x2"2 BRbrЖΓ¢² ÂÒâò
x3#3 CScsЗπ£³ ÃÓãó
x4$4 DTdtИΣ¤ÄÔäô
x5%5 EUeuЙσ¥µÅÕåõ
x6&6 FVfvЛ¦ÆÖæö
x7'7 GWgwПτ§·Ç×ç÷
x8(8 HXhxУƒωÈΦèφ
x9)9 IYiyЦΘ©¹ ÉÙéù
xA*:JZjzЧΩªºÊÚêú
xB+;K[k{Шδ«»ËÛëû
xC,<Ll|ЩЮ¼ÌÜìü
xD-=M]m}ЪЯ½ÍÝíý
xE.>N^n~Ыε®¾ÎÞîþ
xF/?O_oЭ¿Ïßïÿ
比べて分かるのが、文字数が多い。ギリギリまで詰め込んだ感じだ。
データシートを読むと5×10ドットの文字は2文字分のデータ量を使うらしいのでそれを使っていない分というのもあるが、それにしても日本語版はあと16文字分丸々空いているはずなのだが。
また、ベースラインが1ドット下がっている。
アクセント付き文字を使う関係で7ドットでは足りなかったのだろう。日本語版では一番下の列はカーソル用という扱いなのだが、カーソルが重なってもよければこういうこともできるわけだ。
iのセリフが変わっているのはïとÏなどアクセント付き文字の大小文字の違いを分かりやすくするためだろうか。日本語版と同じ形だと1ドットの違いになってしまう。
ñは1ドット下がったおかげで~がちゃんとした形になった。μとβは縦8ドットに減ったせいで字形が変わっている。もっともβとßの違いとも考えられるが。
他にもいくつか変わっているが大したことはないので省略。

こちらは欧米では有名なLatin-1(別名ISO 8859-1、Windows-1252もほぼ同じ)という文字コードが元になっている。
が、それだけではない。
まずこちらがWindows-1252のコード表である。左半分はASCIIと同じなので省略した。正式なISO 8859-1は8xと9xが制御文字になっているだけの違いである。
8x9xAxBxCxDxExFx
x0 NBSP°ÀÐàð
x1 ¡±ÁÑáñ
x2¢² ÂÒâò
x3ƒ£³ ÃÓãó
x4¤´ÄÔäô
x5¥µÅÕåõ
x6¦ÆÖæö
x7§·Ç×ç÷
x8ˆ˜¨¸ÈØèø
x9©¹ ÉÙéù
xAŠšªºÊÚêú
xB«»ËÛëû
xCŒœ¬¼ÌÜìü
xD SHY½ÍÝíý
xEŽž®¾ÎÞîþ
xF Ÿ¯¿Ïßïÿ

HD44780のコードとLatin-1の違いを示すとこうなる。
HD44780文字コード_Latin-1との差
まず目に付くのが緑で示したキリル文字だ。他にもLatin-1の隙間に色々文字が埋まっているほか、Latin-1の文字から変更されているものもいくつかある。
変更は主にアクセント記号が別の文字に代わっている。単体のアクセントを使う機会はそうそう無いという判断だろう。¬もアクセント記号ではないが使わなそうな記号である。
面白いのが、スラッシュ付きO「Øø」がギリシャ文字のファイ「Φφ」に代わっている。
まあファイはわりと使いそうだし、似た字だから代わってもギリギリ読めるし、大文字の方はゼロがスラッシュ付きだからそれで代用できる。
またB0の文字は微妙だが、本来「° (角度の度)」なのが縦長に作られていてどちらかというと「⁰ (上付きのゼロ)」に見える。

加えられた文字を見ていこう。
まず先ほども言ったキリル文字。これは8xに並んだ16文字とAC、AD合わせて18文字がある。
一般的なキリル文字(JISに入っているあたり)は33文字なので一見足りないように見えるが、
まず18文字がこれ。
АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
加えてこの11文字はASCIIに同じ形がある。
АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
残り4文字は
Г(ゲー) : ギリシャ文字のΓ(ガンマ)がある
Ё(ヨー) : Latin-1にË(Eウムラウト)がある
Ф(エフ) : Latin-1のØの代わりにギリシャ文字のΦ(ファイ)がある
Ь(軟音) : 無いが、小文字bで代用しろということだろう
というわけで一応ちゃんと揃っている。これはなかなか面白い。

ところでこれでギリシャ文字もほとんど揃っている。
英字と同形の物を除いたΓΔΘΛΞΠΣΦΨΩの10文字のうち、ΓΘΣΦΩはギリシャ文字として入っており、Πはキリル文字のПがある。
無いのはΔΛΞΨの4文字だけである。
ギリシャ語を書く需要が無いのは分かるのだが、たった4文字くらい入れてもいいと思うんだけどなあ…。

さて残りの追加文字を見ると、主に1xと9xに集中している。
これが何なのかしばらく考えたが、コードページ437(CP437)に由来しているようだ。
CP437というのはMS-DOS時代に作られた文字コードなのだが、英語版Windowsのコマンドプロンプトでは今だに(多分。少なくともXPでは)標準の文字コードである。
0x1x7x8x9xAxBxCxDxExFx
x0ÇÉáα
x1üæíß±
x2éÆóΓ
x3âôúπ
x4äöñΣ
x5§àòÑσ
x6åûªµ÷
x7çùºτ
x8êÿ¿Φ°
x9ëÖΘ
xAèÜ¬Ω·
xBδ
xC
xD쥡φ²
xEÄ«ε
xFѻNBSP
・ASCII領域は省略した。

HD44780の1xとExの文字はCP437の1xと9xにそれぞれおおむね対応していることが分かる。
その中でLatin-1の方にもともとある字などを除いて、その隙間にさらにCP437やWindows-1252から文字を入れているようだ。色分けして示してみる。
HD44780文字コード_CP437と比較
緑 : CP437の文字で、位置も対応
青 : CP437の文字で、位置は全く別
赤 : Windows-1252の文字

最後に残った、完全にHD44780オリジナルと思われる字は8文字となった。
⏫⏬は▲▼に加えて描けたから入れた感じか。●はオリジナル扱いをしたが、cp437の07(=Windows-1252の95)「•」かもしれない。↵はまああってもいいよね。
そしてアラーム設定に使えそうなベルのマーク。定番の♥。〓の縦向きのようなものは何だろう、〓のように使うのだろうか。ω、そういえばWindows-1252にもCP437にも無いのにいつの間にか入っているなあ。

以上、文字コードの由来を考察した。
さらに文字の選定基準について思う事(自分ならこれを入れるとか)を書こうと思っていたが、既に予想外に長くなったので次回(あれば)に回すことにする。  
タグ :文字コード