ホームホーム

STM32 で LCD モジュール AQM0802A-RN-GBW を使う

はじめに

AQM0802A-RN-GBW は I2C 接続の 2 行 8 桁キャラクタ表示液晶(LCD)モジュールです。 今回は STM32 マイコン(STM32F031K6)と接続して文字列を表示してみます。

AQM0802A
川内 康雄 (著)

接続

マイコンとの接続は I2C なので,SCL と SDA の 2 本を接続するだけです。ただし,プルアップ用の抵抗器が必要です。

電源は 3.3 V を供給します。また,CAP1P,CAP1N 端子の間に,内部の昇圧回路用のコンデンサを付ける必要があります。

秋月電子からピッチ変換キット(AE-AQM0802,通販コード K-06795)が出ており,こちらにはプルアップ抵抗や昇圧回路用のコンデンサも実装されていて便利です。

I2C のスレーブアドレスは固定で 0x7c です。

初期化

表示に先立って,モジュールを初期化する必要があります。 初期化は,データシートに記載されているインストラクションを順次送信することで行います。 インストラクションを送信する際は,0x00 に続けて 1 バイトのインストラクションコードを送ります。

ソースコードは以下のようになります。

// インストラクションの送信
int LCD_WriteInstraction(uint8_t data)
{
    uint8_t buf[] = { 0x00, data };
    int status = HAL_I2C_Master_Transmit(&hi2c1, 0x7c, buf, 2, 1000);
    HAL_Delay(1);
    return status == HAL_OK;
}

// LCD の初期化
void LCD_Init()
{
    LCD_WriteInstraction(0x38);     // Function set
    LCD_WriteInstraction(0x39);     // Function set
    LCD_WriteInstraction(0x14);     // Internal OSC frequency
    LCD_WriteInstraction(0x70);     // Contrast set
    LCD_WriteInstraction(0x56);     // Power/ICON/Contrast set
    LCD_WriteInstraction(0x6c);     // Follower control
    HAL_Delay(200);                 
    LCD_WriteInstraction(0x38);     // Function set
    LCD_WriteInstraction(0x0c);     // Display ON/OFF control
    LCD_WriteInstraction(0x01);     // Clear Display
    HAL_Delay(1);
}

文字の表示

内蔵の DDRAM に文字コードを書き込むと対応する文字が表示されます。 このときは 0x40 に続けて,文字コードを送ります。

ここでは,お約束の Hello, world! を表示してみます。

// DDRAM への書き込み
int LCD_WriteData(uint8_t data)
{
    uint8_t buf[] = { 0x40, data };
    int status = HAL_I2C_Master_Transmit(&hi2c1, 0x7c, buf, 2, 1000);
    HAL_Delay(1);
    return status == HAL_OK;
}

// 文字列の出力
void Puts(const char *p)
{
    for ( ; *p ; p++)
    {
        LCD_WriteData(*p);
    }
}

// Hello, world! の表示
void HelloWorld()
{
    LCD_Init();
    Puts("Hello,");
    LCD_WriteInstraction(0x80 + 0x40);  // 2 行目の先頭に移動
    Puts("world!");
}

以下のように表示できました。

Hello, world! - AQM0802A

川内 康雄 (著)