本文へジャンプ 2010年6月13日  

1>キャラクタ文字の表示

2>ドットの自由位置表示 (点、線など)

SG12864  (128×64)

アセンブラ言語で書かれたサンプルが少ないので、表示させるのに苦労した。
キャラクタはネットで掲載されていたサンプルを使用
ドット表示は、リードモデファイライトで表示、

リードモデファイライトは、わかってみれば簡単だったが、資料がなく苦労した。
最終的には、 英文の資料のなかで、DUMMY read があることで完成した。





10MHzの水晶なので 1クロック 0.1uS
nop 命令 100nS

下記にコマンド送出ルーチン、 表示ルーチン、 読み込みルーチンを掲載した。

;********************************************
; GLCDのコマンド  W=R16に コマンドを入れて RCALL
CMDGLCD:
    OUT PORTD,W ;data set
    CBI PORTC,G_A0 ;RS=0 CMD
    CBI PORTC,G_RW ;RW=0
    nop
    nop
    SBI PORTC,G_E ;E=1
    nop
    nop
    nop
    nop
    nop
    CBI PORTC,G_E ;E=0 H-->L
    rcall t10us
    RET
;-----------------------------
; 縦ライン D0-D7 表示   W=R16 に データを入れて RCALL
PUTGLCD:
    OUT PORTD,W
    SBI PORTC,G_A0 ;RS=1 DATA
    CBI PORTC,G_RW ;RW=0
    nop
    nop
    SBI PORTC,G_E ;E=1
    nop
    nop
    nop
    nop
    nop
    CBI PORTC,G_E ;E=0
    rcall t10us
    RET

;-----------------------------
; 縦ライン D0-D7 読み込み CARADAT とOR
 SRAM=caradat と W= IN portD をORして  SRAMに戻している
 これを表示させることで 1ドット表示させる。


READGLCD:
    LDI w,0x00 ;入力モード
    OUT DDRD,R16
    LDI w,0xFF ;プルアップ
    OUT PORTD,w

    SBI PORTC,G_A0 ;チップセレクトRS=1
    SBI PORTC,G_RW ;リードモード
    nop ;400ns
    nop
    nop
    nop
    SBI PORTC,G_E ;E=1 on
    nop
    nop
    nop ;300ns deley
    IN W1,PIND ;読み捨て dummy
    nop
    nop
    nop
    CBI PORTC,G_E ;E=0
    nop
    CBI PORTC,G_RW ;wite mode
    CBI PORTC,G_A0 ;RS=0 OFF
    rcall t10us ;1uS以上あける
   ;再度 読み込み
    nop
    SBI PORTC,G_RW ;Read mode
    SBI PORTC,G_A0 ;RS=1 ON
    nop
    nop
    nop
    nop
    SBI PORTC,G_E ;E=1
    nop
    nop
    nop
    IN W1,PIND
    LDS w,caradat
    or w1,w
    STS caradat,w1

    CBI PORTC,G_E ;E=0
    LDI W,0xFF ;portD = 出力
    OUT DDRD,W
    CBI PORTC,G_RW ;Write mode
    rcall t10us
    RET



***サンプルプログラムは後日

グラフィックLCDの活用