122*32グラフィック液晶

  1. グラフィック液晶の構造
    1. SG12232
      SG12232は 122*32 ドットのグラフィック液晶表示装置です。横長の表示ですから、文字やグラフの表示などに向いています。





    2. データ書き込み
      表示制御には61ビット用のコントロールが2個搭載されています。各コントローラは縦方向に各8ビットの4ページ(合計32ビット)から構成されています。各縦方向の位置はコラムアドレス(0-61)で指定できます。したがって、縦8ビットのデータを送るには次のようにします。

      左右のコントローラを指定する(信号)
      表示行(ページ)を指定する(コマンド)
      表示コラムを指定する(コマンド)
      表示データを送る(データ)

      ビット列 意味
      10101111b b=1で表示オン
      101110pp ppで表示ページを指定
      0ccccccc cccccccで表示コラム指定
      11100010 制御回路リセット
      1010100d 液晶表示のdutyを設定、d=のとき1/32、0のとき1/28
      11100000 ReadModifyWriteモードに入る
      11100110 ReadModifyWriteモードを終了

      表示用のコラムアドレスは、データを書き込むと内部で自動的に増加します。したがって連続したコラムアドレスに書き込む場合、コラムアドレスの設定は最初の一回だけ必要です。

  2. ハード設計

    1. 接続



  3. プログラム

    1. ビット定義
       I2C、RS232C、AD、ICSP、機能などを利用すると、まとめて8ビット確保できるポートがありません。そこで、各信号線を次のようにビット定義し、すべてビット単位で処理をします。
      #define DB0 PIN_A0//10:databit0
      #define DB1 PIN_A1
      #define DB2 PIN_A3
      #define DB3 PIN_A2
      #define DB4 PIN_B0//14:databit4
      #define DB5 PIN_B1
      #define DB6 PIN_B2
      #define DB7 PIN_B3
      
      #define E PIN_C5//8:Enable
      #define RW PIN_C6//9:Read/Write
      #define RES PIN_C7//18:reset
      #define A0 PIN_C0//4:comond/data
      #define CS1 PIN_C1//5:chip1select
      #define CS2 PIN_B4//6:chip2select
      //clk PIN_C2 7
      //GND 1 
      //VCC 2   電源
      //Vo 3 Contrast
      これで、CS1の信号をLにするには output_bit(CS1,0) とプログラムできます。接続を変更した場合、#define定義の変更ですみます。

    2. コマンド
      コラムやページアドレスの設定には以下のようなコマンドを利用します。

      コマンド表

    3. コマンドを送る
      コマンドを送る関数は、次のようになります。col は現在の表示コラムアドレスで、61以下の場合CS1、以上の時CS2を有効にします。ただし、clear(クリア処理)のときは、CS1,CS2同時に有効にします。
      void gLCD_Cmnd(int cmd)
      {//コマンドライト
        output_bit(E,0);  // (E=0)
        output_bit(RW,0);  // (R/W=0)
        output_bit(A0,0);  // A0=0
         if (col<61) {  gCS1(); }
           else { gCS2(); };
         if(clear){gCS12();};
      
        delay_us(1);
        output_bit(E,1);  // (E=1)
        
        output_bit(DB7,bit_test(cmd,7));
        output_bit(DB6,bit_test(cmd,6));
        output_bit(DB5,bit_test(cmd,5));
        output_bit(DB4,bit_test(cmd,4));
         
        output_bit(DB3,bit_test(cmd,3));
        output_bit(DB2,bit_test(cmd,2));
        output_bit(DB1,bit_test(cmd,1));
        output_bit(DB0,bit_test(cmd,0));
                          
         delay_us(1);           // 
         output_bit(E,0);  // (E=0)
         //output_bit(RW,1);  // (WR=1)  
         delay_us(1); 
         output_bit(CS1,1);  //cs 
         output_bit(CS2,1);
         output_bit(A0,1);  // A0=1
         output_bit(E,1);  // E=1
         delay_us(3); 
      
      }

    4. 文字(英数字、記号)表示
      文字表示を行うには、予め、文字パターンを用意しておく必要があります。文字は8*8ビットパターンで用意します。以下は、文字コード20-2Fに対応するもじパターンの例です。
      int8 const Font20[128]=
         {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x5F,0x00,0x00,0x00,0x00,
          0x00,0x00,0x02,0x01,0x02,0x01,0x00,0x00, 0x3E,0x41,0x41,0x41,0x22,0x00,0x00,0x00,
          0x10,0x74,0x1C,0x17,0x74,0x1C,0x17,0x04, 0x42,0x25,0x12,0x08,0x24,0x52,0x21,0x00,
          0x60,0x56,0x49,0x4E,0x30,0x30,0x40,0x00, 0x00,0x00,0x00,0x04,0x03,0x01,0x00,0x00,
          0x00,0x00,0x3E,0x41,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x41,0x3E,0x00,0x00,0x00,
          0x00,0x22,0x14,0x7F,0x14,0x22,0x00,0x00, 0x08,0x08,0x08,0x7F,0x08,0x08,0x08,0x00,
          0x00,0x00,0x80,0x60,0x20,0x00,0x00,0x00, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,
          0x00,0x00,0x00,0x66,0x66,0x00,0x00,0x00, 0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x00 };
      文字コードに対応する文字パターン8バイトが、pat[] 配列にある場合、これを rowページのcolアドレスから表示するには以下のようにします。
            for (j=0;j<8;j++)
            {  gLCD_Cmnd((0b10111000) | row); /* ページアドレスx */
               gLCD_Cmnd(i); /* カラムアドレス */
               gLCD_Data(pat[j]); /* pattern data  */
               col++; i++;
            if (col==61) { i=0; gCS2(); }
            }

    5. 関数

      以下のような関数を利用します。gLCD_Cmnd(int cmnd)、gLCD_Data(int data)、g_putD() は、予め、コマンドでページとコラム位置を設定しておく必要があります。

      gcs1() CS1を有効にする
      gcs2() CS2を有効にする
      gcs12() CS1,Cs2を有効にする
      gLCD_Clear() クリアする
      gLCD_Cmnd(int cmnd) コマンドを送る
      gLCD_Data(int data) データを送る
      gLCD_INIT() 初期化をする
      gLCD_Home() カーソルを先頭にする
      g_putD() 1文字を表示する