超ミニBASIC キャラクタ液晶モジュールサポート

(H8/3664版)

Copyright (C)2003 A.Hiramatsu (03/06/18)

 この文章は超ミニBASIC for H8/3664 の、キャラクタ液晶モジュールサポートのために拡張された部分についての説明です。

・概要

 超ミニBASIC for H8/3664 はキャラクタ液晶モジュールをサポートしています。液晶モジュールはH8/3664の内蔵I/Oポートのほとんどどこにでも接続できます。また、現在出まわっているいろいろな桁数、行数の液晶モジュールに対応しています。接続したポートと液晶モジュールのタイプを指定すると、以後はハードウエアの細かい違いを意識することなく、LPRINT文などで簡単に文字や数値を表示することが可能です。

・対応する液晶モジュール

 対応するキャラクタ液晶モジュールは日立のHD44780相当のLCDコントローラを搭載しているキャラクタ液晶モジュール(秋葉原などで普通に出まわっているものは大抵これに該当します。LM0××相当、と書いてあったらまず間違いありません。が、中には違うもののあるかもしれないので注意してください)で、以下の桁数、行数のタイプに対応しています。
2行タイプ
16桁、20桁、24桁、32桁、40桁
4行タイプ
16桁、20桁

 世の中には1行タイプの液晶モジュールもあるらしいのですが、ほとんど見かけたことがないので正式には対応していません。ただし、全く使えないということではなく、同じ桁数の2行タイプを指定すれば1行目だけは表示されるはずですので、1行目だけ使うようなプログラムを組めば十分使い物になると思います。

・指定可能なポート

 以下の、CPU内蔵ポートを液晶モジュール接続用として指定可能です。コントロールポートは液晶モジュールの制御線(E、RS、R/W)を接続するポート、データポートはデータ線(DB4〜DB7)を接続するポートです。
コントロールポート
データポート
&PDR1
&PDR5
&PDR7
&PDR8
&PDR5
&PDR8


 上記の表に載っているポートでも、他のH8内蔵周辺モジュールを使用する場合、そのモジュール用に端子が割り当てられてしまうI/Oポートのビットは液晶モジュール用としては使用できなくなります。他のH8内蔵周辺モジュールと競合するI/Oポートのビットは使用しないようにしてください。

※指定可能と使用可能の違い

 INITLCD文は、ポートやビットの指定があきらかにおかしいときはエラーを出しますが、他のH8内蔵周辺モジュールとの競合などは検出しません。したがってINITLCD文がエラーを出さない(指定可能)にもかかわらず実際には使用できないケースもありえます。ユーザーのほうで自分が使用したい内蔵周辺モジュールと競合していないかどうかを確認してください。
INITLCD文が検出する「あきらかにおかしい」指定

・データディレクションマスクの下位4ビットが$Fでない
・コントロールポートとデータポートが同じで、コントロールディレクションマスクとデータディレクションマスクが違う
・E、RS、R/Wが接続されているビットの、コントロールディレクションマスクが0になっている


・液晶モジュールとH8CPUの接続

一般的な液晶モジュールのピン配置

ピン番号
略称
区分
説明

Vss(Vdd)
電源
電源−側。GND(0V)に接続する。※こちらが+側の製品もあるので注意!

Vdd(Vss)
電源+側。5Vに接続する。※こちらが−側の製品もあるので注意!

Vo
コントラスト調整電圧。0〜5Vの電圧を与える。

RS
制御線
レジスタセレクト、0でコマンド、1でデータ

R/W
リード/ライト、0で書きこみ(CPU→液晶)、1で読み出し(CPU←液晶)


イネーブル、1で有効

DB0
データ線
(不使用)
データ線下位(液晶から見て)4ビット
H8/3664版では使用しません。GND(0V)に接続すること

DB1

DB2
10
DB3
11
DB4
データ線
データ線上位(液晶から見て)4ビット
データ用ポートの下位4ビットに接続すること
12
DB5
13
DB6
14
DB7

制御線の接続

・E、RS、R/Wを使う場合

・E、RSのみ使う場合

データ線の接続

電源等の接続

 使用する液晶モジュールの、1番ピン、2番ピンのどちらが+なのかよく確認してから接続してください。3番ピンには片方を+5V、片方をGND(0V)に接続した10KΩ〜20KΩの半固定抵抗の中点を接続します。

液晶モジュール関連の文・関数

《 INITLCD文 》

書式:


 上の書式は見づらいですが、コントロールポートディレクションマスクとデータポートディレクションマスクは省略可能であり、省略しない場合は[](角カッコ)でくくって書く、ということを意味しています。

 液晶モジュールを接続するポートを指定し、液晶モジュールを初期化します。この文を実行しないと液晶モジュール関連の文、関数は一切使用できません。パラメータは以下のような意味を持っています。

<コントロールポートアドレス>

[<コントロールポートデータディレクションマスク>]

<データポートアドレス>

[<データポートデータディレクションマスク>]

<Eビット>

<RSビット>

<R/Wビット>

設定例:

 ポート5に、以下のように液晶モジュールを接続した場合(R/Wは使用しない)
    P5-7 (未使用)
    P5-6 (未使用)
    P5-5 E
    P5-4 RS
    P5-3 DB7
    P5-2 DB6
    P5-1 DB5
    P5-0 DB4

    INITLCD &PDR5,&PDR5,5,4
と設定する。

 上記の接続で、さらにビット7、6をなんらかの入力として使用したい場合は
    INITLCD &PDR5[$3F],&PDR5[$3F],5,4
と、コントロールポートデータディレクションマスクおよびデータポートデータディレクションマスクを指定する。

 ポート5のビット6に液晶モジュールのR/Wを接続し、R/Wを使用する場合
    INITLCD &PDR5,&PDR5,5,4,6
と設定する。


《 LCLEAR文 》

書式:

 画面をクリヤします。また、画面のサイズ、自動スクロールの有無を設定します。<画面のサイズ>、<自動スクロールの有無>を省略すると画面クリヤのみ行います。

 <画面のサイズ>には、使用する液晶モジュールの桁数、行数に合わせて以下の値を指定します。
桁数×行数
<画面のサイズ>の値
16桁×2行(デフォルト)

20桁×2行

24桁×2行

32桁×2行

40桁×2行

16桁×4行

20桁×4行



 <自動スクロールの有無>には、「画面右下隅に文字を表示したあと、さらに文字を表示しようとしたときの挙動」を指定します。1が指定されていると、そのような状況では画面全体が1行上にスクロールし、カーソルは画面左下隅に移動します。0が指定されているとスクロールせず、カーソルはラップアラウンド(画面左上隅に移動)します。デフォルトは0の、自動スクロールしない動作に設定されています。

例:

16桁×2行の液晶で、

100 LPRINT "0123456789ABCDEF",
110 LPRINT "GHIJKLMNOPQRSTUV",

を実行した後、さらに

120 LPRINT "####",

を実行しようとした場合、<自動スクロールの有無>が0なら
####456789ABCDEF
GHIJKLMNOPQRSTUV

となり、<自動スクロールの有無>が1なら
GHIJKLMNOPQRSTUV
####

となります。


《 LCURSOR文 》

書式:

 カーソルを指定の位置に移動します。また、カーソル形状の変更も行います。

 <パラメータ並び>には<形状指定>、または<位置指定>を ,(コンマ)で区切って書きます。

 <形状指定>には数式を1つ書きます。数式の値によりカーソルの形状は以下のように変化します。
カーソル形状
<形状指定>の値
カーソルを表示しない(デフォルト)

四角形点滅

下線

下線+四角形点滅


 <位置指定>は、@(アットマーク)に続けてX位置、Y位置を表す数式を , (コンマ)で区切って書きます。設定可能な値は、X位置は0〜画面の幅−1、Y位置は0〜画面の高さ−1です。

例:

カーソル形状を下線+四角形点滅に変更
    LCURSOR 3
カーソルを8,1の位置に移動
    LCURSOR @8,1
カーソルを8,1の位置に移動し、カーソル形状を下線に変更(どちらも同じ効果)
    LCURSOR @8,1,2
    LCURSOR 2,@8,1

※注意 カーソル位置指定の場合は@(アットマーク)を忘れないでください。たとえばカーソルを0,0に移動するつもりで@を忘れて LCURSOR 0,0 なんてやると、カーソル形状を二度0に指定したことになり、カーソルは移動しません。

《 LPRINT文 》

書式1:

書式2:

 液晶画面に数値、文字列などを表示します。使い方はシリアルターミナルに表示を行なうPRINT文とほぼ同じです。PRINT文キャストなどもPRINT文と同じものが使えます。

《 PUTLCD文 》

書式:

 液晶モジュールに直接コマンドまたはデータを送ります。<RS>が0なら<式>の値はコマンドとして、1なら<式>の値はデータとして送られます。

 この文は、普通にプログラムを組むぶんにはまず使うことはないと思います。この文で不適切なコマンドを送ると、以後LPRINT文などによる表示が正しく行なわれなくなることがありますので注意して使用してください。

《 LCHR関数 》

書式:

液晶ディスプレイ上の、<X位置>、<Y位置>で指定される位置に現在表示されている文字コードを返します。

《 LCPOS関数 》

書式:

現在のカーソル位置を返します。式の値が0ならX位置、1ならY位置を返します。返ってくる値は、X位置は0〜画面の幅−1、Y位置は0〜画面の高さです。

普通はY位置として0〜画面の高さ−1が返ってくるのですが、画面の高さと等しい値が返ってきた場合は、「次になにか文字が表示されるとスクロールまたはカーソルのラップアラウンドが行なわれる」という状態を表しています。

液晶モジュール関連のエラーメッセージ

LCD BAD CONFIG
INITLCD文のパラメータが不適切
LCD NOT INITIALIZED
INITLCD文による液晶モジュールの初期化が成功していないのにLCD関連の文・関数を使おうとした

その他、式の値の範囲が正しくない場合(たとえばビット番号に0〜7以外の値を指定した場合など)には ILLEGAL FUNCTION CALL がでます。