強火で進め

このブログではプログラム関連の記事を中心に書いてます。

StarBoard OrangeのLCDに文字を表示をもう少し突っ込んで使ってみる

LCDに文字を表示するライブラリ「TextLCD」のリファレンスはこちら。

Text LCD - Cookbook | mbed
http://mbed.org/cookbook/Text-LCD

こちらを確認すると cls() は画面をクリアしてカーソルを(0, 0)の位置に移動する。
locate() は指定の位置に移動する命令の様です。

検証(1)

そこでこの様なプログラムを書いてみました。

#include "mbed.h"
#include "TextLCD.h"

TextLCD lcd(p24, p26, p27, p28, p29, p30);

int main(void) {
    lcd.cls();          // (1)
    lcd.printf("A");    // (2)
    lcd.locate(2, 0);   // (3)
    lcd.printf("B");    // (4)
    
    lcd.locate(1, 1);   // (5)
    lcd.printf("C");    // (6)
    lcd.locate(3, 1);
    lcd.printf("D");
    return 0;
}

(1) 画面をクリアしてカーソルを(0,0)の位置に
(2) カーソル位置に A を表示。
(3) カーソル位置を(2, 0)に移動(0からのカウントになるので実際の位置はLCDの3列目、1行目となる)。
(4) カーソル位置 B を表示。
(5) カーソル位置を(1, 1)に移動(0からのカウントになるので実際の位置はLCDの2列目、2行目となる)。
(6) カーソル位置 C を表示。

結果はこの様になります。

検証(2)

次のプログラム。

#include "mbed.h"
#include "TextLCD.h"

TextLCD lcd(p24, p26, p27, p28, p29, p30);

int main(void) {
    lcd.cls();
    lcd.printf("A");
    lcd.printf("B");
    lcd.printf("C");
    lcd.locate(15, 0);
    lcd.printf("DEF");
    return 0;
}
  • lcd.locate()を使わずにlcd.printf()を何回も実行した場合、カーソルは進むのか
  • 1行目最後の位置にカーソルを移動し、3文字のテキストを表示した場合、切れるのかそれとも2行目に表示されるのか。

の2点を検証。結果はこちら。

  • lcd.printf()を実行した場合、カーソル進む
  • 1行目最後で3文字のテキストを表示しようとすると1文字は1行目に2文字目以降は2行目の先頭から表示される。

検証(3)

StarBoard Orangeに同封されていたLCDの説明が書かれた紙に「文字コード表」が有ったがこれはmbedのプログラムでも使えるのか?半角文字で記述した文字列で指定は可能か?を検証。

#include "mbed.h"
#include "TextLCD.h"

TextLCD lcd(p24, p26, p27, p28, p29, p30);

int main(void) {
    lcd.cls();
    char c[2];
    c[1] = 0;

    c[0] = 0xB1;
    lcd.printf(c);
    c[0] = 0xF7;
    lcd.printf(c);
    
    lcd.printf("%c%c", 0xFB, 0xFF);

    lcd.locate(0, 1);
    lcd.printf("アカサタナ");
    
    return 0;
}

0xB1→半角のア
0xF7→π
0xFB→万
0xFF→塗りつぶし

"アカサタナ"→半角文字での指定

結果。

紙に書かれていた文字コードを指定するとちゃんとその文字が表示出来ました。
"アカサタナ"の部分についてはコンパイル後に警告が表示されましたがコンパイル自体は成功。動作にも問題無し。