Longan Nanoを使ってみる 6 ～文字出力～

# 前の記事

[Longan Nanoを使ってみる 5 ～ゲームのプロジェクトを作成～](https://qiita.com/BUBUBB/items/98d9c25120c0955d5200)

# 全体の目次
[Longan Nanoを使ってみる 1 ～ビルド環境の構築～](https://qiita.com/BUBUBB/items/7ce85ada67a3f6d1944d)
[Longan Nanoを使ってみる 2 ～デバッガの環境設定～](https://qiita.com/BUBUBB/items/864b2ef9404453810d5f)
　[Sipeed RISC-V Debugger](https://qiita.com/BUBUBB/items/61316a4df1d9f81e2864)
[Longan Nanoを使ってみる 3 ～デバッガの使用方法～](https://qiita.com/BUBUBB/items/8efa5989e7f16f67672e)
[Longan Nanoを使ってみる 4 ～printfを使ったデバッグ～](https://qiita.com/BUBUBB/items/b607a3eedc4b66e7a74f)
[Longan Nanoを使ってみる 5 ～ゲームのプロジェクトを作成～](https://qiita.com/BUBUBB/items/98d9c25120c0955d5200)
[Longan Nanoを使ってみる 6 ～文字出力～](https://qiita.com/BUBUBB/items/8dee2eabe78f38364674)
　[Longan Nanoを使ってみる ～FONTX2ファイルを作る～](https://qiita.com/BUBUBB/items/8760ac886423bf06be68)
[Longan Nanoを使ってみる 7 ～外枠とブロックを書く～](https://qiita.com/BUBUBB/items/96abb1158b413c9efd27)
　[Longan Nanoを使ってみる ～謎の画像表示関数～](https://qiita.com/BUBUBB/items/40b99468839e1daeebfb)
[Longan Nanoを使ってみる 8 ～ボールを動かす～](https://qiita.com/BUBUBB/items/92f4816af3c41ea13b9e)
[Longan Nanoを使ってみる 9 ～A/Dコンバータから入力～](https://qiita.com/BUBUBB/items/311c179f7d3a0e30495d)
[Longan Nanoを使ってみる 10 ～パドルを動かす～](https://qiita.com/BUBUBB/items/eb8149c68f6e5456e7ca)
[Longan Nanoを使ってみる 11 ～ボタンの入力](https://qiita.com/BUBUBB/items/2445940a6b0d2110ee04)
[Longan Nanoを使ってみる 12 ～ボールのロス～](https://qiita.com/BUBUBB/items/f8c6ff860de127c93cb9)
[Longan Nanoを使ってみる 13 ～ステージの遷移とゲームオーバー～](https://qiita.com/BUBUBB/items/f1ae81b835f55abe319e)
[Longan Nanoを使ってみる 14 ～PWMとサウンド～](https://qiita.com/BUBUBB/items/3b592078d30cfed0ec53)
[Longan Nanoを使ってみる 15 ～音楽を鳴らす～](https://qiita.com/BUBUBB/items/adb35e02209ad78dfa9b)
[Longan Nanoを使ってみる 16 ～とりあえずのまとめ～](https://qiita.com/BUBUBB/items/ba782ccc80f50b7ab8c3)

# 文字出力とグラフィックのライブラリ

前の記事で追加した、次のファイル群には、グラフィックスライブラリと文字出力に関連するファイルが含まれている。lcd\lcd.cがグラフィックスライブラリで、この関数で文字表示を行う。それ以外のファイルは、lcd.cから呼び出される。

このライブラリについては、すでに[Sipeed Longan NanoでFONTX2形式のフォントを利用する](http://kyoro205.blog.fc2.com/blog-entry-669.html?sp)で詳しく解説されているので、詳細な使用方法はそちらも参照。

ここでは、実際にすべきことを中心に書いていく。

```
LonganNanoLCD-master\src\lcd
LonganNanoLCD-master\src\fatfs
LonganNanoLCD-master\include\lcd
LonganNanoLCD-master\include\fatfs
```
# 注意
このページは、quiita.com で公開されています。URLがqiita.com以外のサイト、例えばjpdebug.comなどのページでご覧になっている場合、悪質な無許可転載サイトで記事を見ています。正しいURLは、https://qiita.com/BUBUBB/items/7ce85ada67a3f6d1944d です。
無許可転載サイトでの権利表記（CC BY SA 2.5、CC BY SA 3.0とCC BY SA 4.0など）は、不当な表示です。
正確な内容は、qiitaのページで参照してください。

# 文字出力

文字出力を行うためには次の手順となる。

1. フォントファイル(FONTX2形式）を用意し、MicroSDカードのルートディレクトリに配置しておく
1. include/lcd/lcd.h を編集し、使用するフォントのファイル名やサイズなどを指定する
1. プログラムから文字を出力する

いる
## フォントファイルの準備

フォントファイルは、FONTX2形式で、全角と半角を用意する。今回は、12ドットフォントを使用するので、例えば、[FONTX2用12/16ドット和文フォント](http://silo.la.coocan.jp/FONTV/) などのページから、[細ゴシック体『小伝馬町12』「VGOL12.LZH」](http://silo.la.coocan.jp/FONTV/VGOL12.LZH)をダウンロードし、解凍する。
※lzh形式は、Windowsの標準機能では解凍できない。[7zip](https://sevenzip.osdn.jp/)などのソフトウェアを使って解凍する。

次の２つのファイルができるので、これをSDカードのルートディレクトリにコピーしておく。

```
GOTHN12X.TLF
GOTZN12X.TLF
```

## フォントのファイル名やサイズなどを設定する
準備したフォントファイルに合わせて、そのファイル名、フォントのサイズ、LCDの方向を調整する。今回、使用するフォントは１２ドットフォント、LCDは縦方向に使用する。（デフォルトは16ドット、横方向）。

lcd.hを、次のように変更する。基本的には、この変更だけでライブラリは使用できるようになる。//#define FONTX2_USELED のコメントアウトは必須ではない。今回、デバッグ用にLEDを使用しているが、文字表示ライブラリでも同じ目的でLEDを使用しているこれがかち合ってしまうとわかりにくくなるのでコメントアウトする。

```
#define USE_HORIZONTAL	1		// 表示向き(0-1:縦、2-3:横)
　：
// FONTX2 の設定
　：
#define USE_FONTX2	2				    // FONTX2の設定(0:不使用 1:2バイト文字のみ 2:1バイト文字も)
#define LCD_AFONT "GOTHN12X.TLF"		// 1バイトフォントファイル名(小伝馬町12)
#define LCD_KFONT "GOTZN12X.TLF"		// 2バイトフォントファイル名(小伝馬町12全角)
　：
#define FONT_HEIGHT 12				// 自動改行時の1行の高さ
　：
//#define FONTX2_USELED				// LEDをステータス表示に使用する場合に定義(赤：フォント読み込みエラー　緑：SDアクセス中)

　：
```

## プログラムから文字を出力する
プログラムから文字を出力するには、最初に一回、LCD_init();を呼び出した後、 LCD_Clear(色);で画面をクリア、LCD_ShowString(x座標,y座標,表示する文字列,色);を使用する。

- 色はlcd.hの中でWHITE,BLACKなどメジャーなものは定義されている。いわゆる、RGB565形式なので、0x1234などと書けば好きな色が使用できる。
- 座標は、LCDの左上を0,0とする。 USE_HORIZONTALで指定した表示向きにより、「左上」の場所は変化する。（当たり前）

これを踏まえて、game.cのvoid Game(void) で画面にテキストを表示させるには、プログラムを次のように変更する。

```
void Game(void) 
{
    // 初期化処理
      :
    LCD_Init();
    LCD_Clear(BLACK);
      :    
    while (TRUE) {
        :
        switch (gameState) {
            case STATE_STARTGAME:{
                 :
                LCD_ShowString(0,0,"スタート",WHITE);
                 :
                break;
            }
            case STATE_INGAME:{
                if ((tick % 100) < 50) {
                    LCD_ShowString(0,12,"LED オン",RED);
                    led_on(LED_R);
                } else {
                    LCD_ShowString(0,12,"LED オフ",WHITE);
                    led_off(LED_R);
                }                
                break;                
            }
         :
         :
```

画面には、スタート、という文字と、LEDオン/オフが表示される。


# ここまででできたこと
本体付属のLCDに文字を出力できた

# 次の記事に進む

[Longan Nanoを使ってみる 7 ～外枠とブロックを書く～](https://qiita.com/BUBUBB/items/96abb1158b413c9efd27)

# 関連記事
[Longan Nanoを使ってみる ～FONTX2ファイルを作る～](https://qiita.com/BUBUBB/items/8760ac886423bf06be68)