2016年12月17日土曜日

LPC1114FN28でグラフィックLCDを使う

最近はLPC1114FN28にいろんなものをつなげて遊んでいるcake tetuです.
Arduinoゲーム機でも使ったSPIグラフィックLCDをLPCにつなげてみたメモ.

使用したのは超小型グラフィックLCD AQM1248a のピッチ変換キット.
750円でグラフィック表示できるんだからすごい.

使うといっても自分はほとんど何もしていません.
ちょうどよいライブラリがあったのでそれをほんの少し書き換えただけで使用できました.
https://developer.mbed.org/users/masato/code/Nucleo_AQM1248A/
非常に簡単かつ,使いやすいです.感謝いたします.
ページにあるとおりaqm1248a_lcd.cppの上のほうのマクロを書き換えました.

#if defined(TARGET_LPC1768)
    //: _spi(p5,NC,p7),_reset(p6),_A0(p8),_CS(p11),GraphicsDisplay(name) // for mbed LPC1768
    : _spi(dp2,NC,dp6),_reset(dp9),_A0(dp10),_CS(dp11),GraphicsDisplay(name) // for mbed LPC1114FN28
#else // defined(TARGET_NUCLEO_L152RE) || defined(TARGET_KL05Z)
    //: _spi(D11,D12,D13),_reset(D9),_A0(D8),_CS(D10),GraphicsDisplay(name) // for nucleo L152RE or other
    : _spi(dp2,NC,dp6),_reset(dp9),_A0(dp10),_CS(dp11),GraphicsDisplay(name) // for mbed LPC1114FN28
#endif

reset,A0,CSはおそらくどのピンでも可能です.今回はそれぞれdp9,dp10,dp11を割り当てました.
よって配線は以下のとおり

LCD        LPC
Vdd       ->       3.3V
CS        ->       dp11
reset     ->       dp9
RS        ->       dp10
SCLK    ->       dp6
SDI       ->       dp2
Gnd      ->       GND



文字の表示と丸が端を回るサンプル

#include "mbed.h"
#include "aqm1248a_lcd.h"
#define TARGET_LPC1768

DigitalOut myled(LED1);
aqm1248a_lcd lcd;   //LCD宣言
int px,py;          //サークル座標

int main() {
    lcd.setmode(NORMAL);
    lcd.set_contrast(25);   //コントラスト調整
    lcd.cls();              //LCDクリア
    lcd.locate(10,15);
    lcd.printf("This is AQM1248A demo");
    lcd.locate(10,25);
    lcd.printf("   for LPC1114FN28   ");
    lcd.rect(8, 13, 118, 35, 1);
    lcd.circle(3, 3, 3, 1);
    while(1) {
        px=3,py=3;
        for(px=3;px<124;px+=3){
            lcd.fillcircle(px-3, py, 3, 0);
            lcd.circle(px, py, 3, 1);
            wait(0.1);
        }
        lcd.fillcircle(px-3, py, 3, 0);
        px=124,py=0;
        for(py=3;py<44;py+=3){
            lcd.fillcircle(px, py-3, 3, 0);
            lcd.circle(px, py, 3, 1);
            wait(0.1);
        }
        lcd.fillcircle(px, py-3, 3, 0);
        px=124,py=44;
        for(px=124;px>3;px-=3){
            lcd.fillcircle(px+3, py, 3, 0);
            lcd.circle(px, py, 3, 1);
            wait(0.1);
        }
        lcd.fillcircle(px+3, py, 3, 0);
        px=3,py=44;
        for(py=44;py>3;py-=3){
            lcd.fillcircle(px, py+3, 3, 0);
            lcd.circle(px, py, 3, 1);
            wait(0.1);
        }
        lcd.fillcircle(px, py+3, 3, 0);
    }
}





さすがmbed.いとも簡単に動かすことができました.
しかし,フォントなどを入れているので Flash 20.8kbyte,RAM 1.1kbyteとります.
できることは非常に多いグラフィック液晶ですが,デバック用途で数字を表示
させるだけであれば,I2c通信のキャラクタ液晶のほうがいいのかもしれません.
そちらのほうもいずれ触れていきたいところです.


0 件のコメント:

コメントを投稿