3-2. カーソルセット
3-2. カーソルセット
 2つ目のアクション動作を学ぶ前に、ここで「カーソルセット」を覚えます。
 これは「カーソルの位置を好きな場所へ移動させておくコマンド」です。
 アクション動作ではないですが‥‥次のステップで使うので、ぜひ覚えておきましょう!
カーソルが移動できる範囲
 好きな場所と言っても、どこからどこまで移動できるのか?
 これは製品によって異なります。
 今回使用している製品は「GU128X32D-D903S」でしたね。

 製品名で示す通り、ディスプレイ(表示エリア)のドット数が
 x(横)方向=128ドット、y(縦)方向=32ドットの製品です。
 なので、128x32ドットの範囲が「移動できる範囲」だと
 思いがちですが‥‥違います。正解は 512x32 ドットです。
 何故そうなるのでしょう。これは「非表示エリア」というエリアを含んだ範囲なんです。
非表示エリアとは?
 一言で言うと「ユーザーからは見えないエリア(領域)」の事で、表示メモリの領域の1つです。
 以下にまとめました。
| 用語 | 詳細説明 | 
|---|---|
| 表示メモリ (RAM) | コンピュータが処理する表示データを一時的に保存する領域です。表示用メモリとも言います。 これは全てのVFDモジュールに内臓されています。 領域の広さは製品によって様々ですが、何れの製品もメモリの領域が表示画面の領域より広い為、 メモリ内の一部データのみが表示画面に表示される事になります。全ては表示されません。 このように、表示メモリは表示できる領域とそうでない領域‥‥ つまり「表示エリア」と「非表示エリア」の2つに分かれています。 | 
| 非表示エリア | 先述の通り、表示メモリだけど私達の目には見えない領域です。使い道は色々あります。 (例:表示途中のデータをユーザーに見せないよう隠しておく作業領域にする‥‥など) 因みに領域の場所は、表示画面の右側です。こんなイメージですね。  次のステップ「スクロールアクション表示」で使うコマンドです。 | 
 表示されない領域があるという事が分かりました。次に、コマンドセットを見ていきましょう。
 
コマンドセット
| 動作名 | コマンド | 機能 | 
|---|---|---|
| カーソルセット | 1Fh 24h xL xH yL yH | カーソルの位置を、表示メモリの x、y の位置に移動します。 | 
 以下、各記号(赤字部分)の説明です。
 
| コード | 機能 | 詳細説明 | 
|---|---|---|
| xL (下位バイト) xH (上位バイト) | カーソル位置 x (1ドット単位) | x(横)方向の移動位置を指定します。 コードは「下位バイト/上位バイト」の2つ(2バイト)です。 指定できる範囲は以下の通りです。 0000h ≦ (xL + xH × 100h) ≦ Max_Xdot | 
| yL (下位バイト) yH (上位バイト) | カーソル位置 y (8ドット単位) | y(縦)方向の移動位置を指定します。考え方は上記と同じです。 指定範囲は以下となります。 0000h ≦ (yL + yH × 100h) ≦ Max_Ybyte (用語の意味は後ほど説明) また、xの値が1ドット単位であるのに対し、yの値は8ドット単位です。 この理由も‥‥後ほど説明します。 | 
 因みに、XやYの値が指定の範囲を超えると、コマンドが無効となりカーソルが移動しません。
 ご注意ください。
表示メモリ構成
 先ほど「Max_dot」や「Max_Ybyte」など、色んな用語が出てきました。
 これは表示メモリサイズや構成の事です。詳細は以下をご覧ください。
| 用語 | 説明 | 表示メモリ数 | 
|---|---|---|
| Xdots | 全体(表示メモリ)の、X(横)方向のドット数 | 512 (200h) | 
| Ydots | 全体(表示メモリ)の、Y(縦)方向のドット数 | 32 (20h) | 
| Ybytes | 全体(表示メモリ)の、Y(縦)方向のバイト数 「Ydots ÷ 8」※1バイト=8ビット(ドット)の為。 先ほどのコマンドセット項目で「カーソル位置 y(8ドット単位)」という 記載があった通り、Y方向の値は「8ドットで1つの固まり」です。 その為、8の倍数である4つの値(8、16、24、32)から選び、指定しましょう。 | 4 (4h) | 
| Max_Xdot | 全体(表示メモリ)の、X(横)方向のドット単位での最大値 [Xdots - 1] これはドット数ではなく、ドット値の事です。値は0から始まります。 1ドット目がドット値0で、2ドット目がドット値1‥‥なので 512ドット目がドット値511となります。Y方向の値についても同じです。 | 511 (1FFh) | 
| Max_Ydot | 全体(表示メモリ)の、Y(縦)方向のドット単位での最大値 [Ydots - 1] | 31 (1Fh) | 
| Max_Ybyte | 全体(表示メモリ)の、Y(縦)方向のバイト単位での最大値 [Ybytes - 1] | 3 (3h) | 
| 用語/式 | 説明 | ドット数 | 
|---|---|---|
| DispXdots | 表示エリアの、X(横)方向のドット数 | 128 | 
| DispYdots | 表示エリアの、Y(縦)方向のドット数 | 32 | 
| [DispXdots × DispYdots] | 表示エリアドット数 | 128x32 | 
| [Xdots - DispXdots × Ydots] | 非表示エリアドット数 | 384x32 | 
| [Xdots × Ydots] | 全エリアドット数 | 512x32 | 
 リスト右端の「表示メモリ数」や「ドット数」は、製品によって異なります。
 上記は今回使用している「GU128X32D-D903S」の値です。
 他のGU-D製品の値も併せて知りたい場合は、 GU-Dソフトウェア仕様書 をご覧ください。
 (仕様書の4ページに、上記の様な構成表を記載しています)
 いよいよ課題&スケッチしていきましょう!
課題
カーソル移動し、表示エリアの右下位置に「Hello!」という文字を1回だけ表示させる。
スケッチ
カーソル位置は、x=0056h、y=0003h になります。
 void loop()
 {
 //ここから カーソル移動
       Serial.write(0x1F);
       Serial.write(0x24);
       Serial.write(0x56);    //x(横)位置 86ドットの位置
       Serial.write(0x00);    //同上
       Serial.write(0x03);    //y(縦)位置 4列目の位置
       Serial.write(0x00);    //同上
 //ここまで カーソル移動 
       Serial.print("Hello!"); //文字表示
 }
上位バイトは x y 何れも00ですが、きちんと記載しましょう。
表示画面
無事、カーソル移動できましたね!
今回はいつも以上に色んな情報が出てきて疲れました‥‥。
これらの内容を、次のステップで活かしていきましょう。
さて次回は「スクロール表示」です!
カーソルを表示するコマンドセットというのもあります。
コードは「1Fh 43h 01h」の3つ。お試しください。



 
                         
                         
                         
                     
                    