電子工作をエンジョイする!
イーフェローズ

     
  グラフィックLCD SG12864ASLB-GB-R01を試す
 
     
 

マイコンでテキスト文字以外のデータを表示したいときももちろんあります。しかしPIC16FマイコンでのグラフィックLCDの取り扱いは少々難がありメモリーを多く必要とします。サンプルのソースでは画面半分のデータを用意し、同じデータをもう半分にも表示させています。よって、実際には画面データを作りながら表示させたり、EEPROMに文字などのキャラクタを登録しておき、読み込みながら表示させるなどの工夫が必要です。

 
     
  SG12864A  
  クリックで拡大できます。配線図  
   
  SG12864A SG12864A  
   
  SG12864A SG12864A  
     
  ■□使用機器□■  
  使用機器は下記のとおり。他、パソコンや電源、PICKIT2も当然ながら必要です。  
     
 
バックライト付グラフィック液晶表示器 Sunlike Display Tech. Corp. SG12864A
マイコンボード(PIC16F1947搭載) ZEATEC co.,ltd. ZT-PIC16F194701(5V仕様)
 
     
     
  プロジェクトファイルも含めたサンプル zt-pic16f194701_sg12864a.zip  
  開発環境:MPLAB_IDE_8_92 + CCS-C PCMコンパイラVer.4.132  
     
  ちょっと解説・・・  
  sg12864a_outの関数にデータと表示CS番号、データかコマンドかの識別番号を用意して実行すると事前に指定した場所に表示されます。場所の指定はページと列と行があり、ページは8までの数字、行や列は0〜63までの数字を加算する事で任意の場所を指定することが出来ます。  
 
//表示データ送信
void sg12864a_write(int *display_data){

    int tmp_cs = 1;
    int tmp_x = 0;
    long tmp_y = 0;

    for(tmp_cs=1;tmp_cs<3;tmp_cs++){
        for(tmp_y=0;tmp_y<8;tmp_y++){
            sg12864a_out((0xb8+tmp_y),tmp_cs,0);//Page set plus 0 to 7
            sg12864a_out(0x40,tmp_cs,0);//Start column 0. plus 0 to 63
            sg12864a_out(0xc0,tmp_cs,0);//Start line 0. plus 0 to 63
            for(tmp_x=0;tmp_x<8;tmp_x++){
                sg12864a_out(display_data[(tmp_x*8)+(tmp_y*64)],tmp_cs,1);
                sg12864a_out(display_data[(tmp_x*8)+(tmp_y*64)+1],tmp_cs,1);
                sg12864a_out(display_data[(tmp_x*8)+(tmp_y*64)+2],tmp_cs,1);
                sg12864a_out(display_data[(tmp_x*8)+(tmp_y*64)+3],tmp_cs,1);
                sg12864a_out(display_data[(tmp_x*8)+(tmp_y*64)+4],tmp_cs,1);
                sg12864a_out(display_data[(tmp_x*8)+(tmp_y*64)+5],tmp_cs,1);
                sg12864a_out(display_data[(tmp_x*8)+(tmp_y*64)+6],tmp_cs,1);
                sg12864a_out(display_data[(tmp_x*8)+(tmp_y*64)+7],tmp_cs,1);
            }
        }
    }
}
 
     
 

「sg12864a.c」ファイルの一部 

 
 
//LCDを初期化
void sg12864a_ini(){

    //初期値
    output_bit(PIN_E4,0);// D/I Hで表示データ Lで制御コード
    output_bit(PIN_E5,1);// E 立下りでコードの読み込み
    output_bit(PIN_E6,1);// CS1 Hレベルで左半分を選択
    output_bit(PIN_E7,0);// CS2 Hレベルで右半分を選択
    sg12864a_out(0x3f,1,0);//Display1 on.
    sg12864a_out(0x3f,2,0);//Display2 on.

    delay_us(10);
}

//LCDへデータ・コマンド送信
void sg12864a_out(int data,int chip,int flag){

    if(flag == 0){
        //コマンドの場合
        output_bit(PIN_E4,0);
    }else{
        //データの場合
        output_bit(PIN_E4,1);
    }

    if(chip == 1){
        //CS1を有効
        output_bit(PIN_E6,1);
        output_bit(PIN_E7,0);
    }else{
        //CS2を有効
        output_bit(PIN_E6,0);
        output_bit(PIN_E7,1);
    }

    //データ出力
    output_f(data);

    //H→Lでデータ適用
    output_bit(PIN_E5,1);
    output_bit(PIN_E5,0);
    output_bit(PIN_E5,1);
    delay_us(1);
}
 
     
 


 
個人情報の取り扱いについて | 特定商取引法に関する表示
Copyright (C) 2011 E-Fellows All Rights Reserved.