グラフィックLCDにキャラクター文字を表示する

2016年9月20日

液晶に半角英数字を表示してみましょう。

フォント情報は、PICといえばここ。のHPから拝借しました。ダウンロードしたプログラムのASCII12dot.hです。

SSD1963で使用するには、ダウンロードしたプログラムで表示するのではく、以下のプログラムで表示すると高速で、超簡単です。

書き込みWindowを設定できるコントローラなら全対応です。

というか、ダウンロードした表示プログラムは複雑すぎて解析不能でした。。。

// ----------------------------------------------------------------------------
//
// ----------------------------------------------------------------------------
void SSD1963_WindowSet(int x1, int x2, int y1, int y2)
{
    x2--;
    y2--;
    
    // Setup the frame buffer vertical addressing range
    SSD1963_Command(0x2A);
    SSD1963_Parameter(x1 >> 8);
    SSD1963_Parameter(0x00FF & x1);
    SSD1963_Parameter(x2 >> 8);
    SSD1963_Parameter(0x00FF & x2);
    
    // Setup the frame buffer horizontal address
    SSD1963_Command(0x2B);
    SSD1963_Parameter(y1 >> 8);
    SSD1963_Parameter(0x00FF & y1);
    SSD1963_Parameter(y2 >> 8);
    SSD1963_Parameter(0x00FF & y2);
}

// ----------------------------------------------------------------------------
//
// ----------------------------------------------------------------------------
void SSD1963_WriteAnk12BitmapFont(int x, int y, uint8_t letter,
        uint16_t Color1, uint16_t Color2)
{
    uint8_t mask;
    int y1, x1;
    
    SSD1963_WindowSet(x, x + 12, y, y + 12);
    
    SSD1963_Command(0x2C);      // write memory start
    
    for(y1 = 0; y1 < ((12 * 12) /8); y1++) {
        for(x1 = 0, mask = 0x80; x1 < 8; x1++, mask >>= 1) {
            SSD1963_Parameter((ANKFont[letter][y1] & mask) ? Color1 : Color2);
        }
    }
}

// ----------------------------------------------------------------------------
//
// ----------------------------------------------------------------------------
int SSD1963_Write12dotString(int x, int y, uint8_t *pString, 
        uint16_t Color1, uint16_t Color2)
{
    int i;
    
    SSD1963_Command(0xF0);      // Set Pixel Data Interface
    SSD1963_Parameter(0b011);   // 011 16-bit (565 format)
    
    for(i = 0; i < 128; i++, x += 12) {
        if(*(pString + i) == '\0') {
            break;
        }
        SSD1963_WriteAnk12BitmapFont(x, y, *(pString+i), Color1, Color2);
    }
    return i;
}

まずピクセルを連続で書けるように、SSD1963_WindowSetで連続で四角形に書き込める領域を設定をします。こうするといちいちdotを書き込む位置を設定する手間が省けます。

この画像の「Hello World!!」がそれです。C言語ソースコードがUTF-8でもASCIIコードは同じなので気にする必要はありません。

CIMG1065