1>キャラクタ文字の表示
2>ドットの自由位置表示 (点、線など)
アセンブラ言語で書かれたサンプルが少ないので、表示させるのに苦労した。
キャラクタはネットで掲載されていたサンプルを使用
ドット表示は、リードモデファイライトで表示、
リードモデファイライトは、わかってみれば簡単だったが、資料がなく苦労した。
最終的には、 英文の資料のなかで、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
***サンプルプログラムは後日
|