PIC 08:LCDのコントロール


LCDのコントロール
 液晶コントロールは2行16文字表示が最も普及しています。このタイプは安価で手に入り易く、消費電力もわずかでアマチュアにとってすこぶる便利なデバイス(モジュール)です。
 秋葉原で最も安価な物は1000円程度で売られており、ジャンク屋をのぞくと驚きの値段で出回っています。ただ半田付けを外した物で、古い物は視野角度の狭い物もあるのであまり安いのはどうかと思います。

 消費電流はノーマル5V動作で0.35mA程度です。PICの節電効果と組み合わせるとかなり使い道の広いデバイスです。
 このLCDをコントロールするプログラムは定番化され出回っていますが、モジュールからDATAを読み出さなければI/O線を1本節約出来ます。下のプログラムがR/W線を常時[L]として動作させている物です。
 ビジー信号は通常40μSの待ち時間なので、これを入れれば動作します(クリアなど1.64mSecと多いので注意)。

PICの18ピン系
 I/Oが少ないので使い難いのですが、LCDのコントロールで1本でも減ればその分余裕が出来ます(わずか一本ですが!)。
 [Enable]をLにすればDATAの4本は使え、また[RS]さえ共用出来ます。
 他に、LCDのDATA入力線のインピーダンスが高いのを利用すると、併用して別の事にも利用可能です。あまり複合的に利用すると後で解り難くなるので、28ピンや40ピンを考えた方がベターかも知れません。

 テクニックに頼るのよりメモリの量で処理した方がFBな時代になっています。特定の人以外は解らないプログラムはあっても使えません・・・。
 ここで使った考え方はavrでも同じように作動しています、今回の物はそちらから移植しました。
 当初このプログラムは動かず慌てました。後でわかったことですが「LCDへの結線ミス」と単純ミスが原因でした。
 2007/FEB/7 

 LCDのE信号は220nSの幅が必要です。10MHzでは1サイクル400nSで問題はないのですが、20MHzのICでは1サイクル200nSになるのでWAITが必要です、このパルスの間にNOPコマンドの追加が必要になります。
 当然4MHz・1MHzでも時間調整すれば作動するはずです、念の為。
 2007/FEB/10 

-----  プログラム  -----

;----------------------------------------
;    液晶表示器
; 	PORTA=LCD_RS,LCD_E
;	PORTB=B4-B7
; sub:	TIME100=100mSec
;	TIME1M=1mSec	TIME5M=5mSec
;----------------------------------------

;****  データ表示 ****
LCD_DATA
	MOVWF	TEMP		;
	ANDLW	0F0H		;上位4ビット取出し
	MOVWF	PORTB
	BSF	PORTA,LCD_RS	;RS
	GOTO	LCD_C2

;****  コマンド *****
LCD_CMD
	MOVWF	TEMP
	ANDLW	0F0H		;上位4ビット
	MOVWF	PORTB
	BCF	PORTA,LCD_RS
LCD_C2
	BSF	PORTA,LCD_E
	BCF	PORTA,LCD_E
	SWAPF	TEMP,W		;下位4ビット
	ANDLW	0F0H
	MOVWF	PORTB		;出力
	BSF	PORTA,LCD_E
	BCF	PORTA,LCD_E
	CALL	TIME100		;Wait 40uS over
	BCF	PORTA,LCD_RS
	RETURN

;****  表示クリア ****
LCD_CLR
	MOVLW	0x01		;clear command
	CALL	LCD_CMD
	call	TIME1M		;*1.64mS over
	call	TIME1M		;
	RETURN

;****  LCD 初期化  *****
LCD_INI
	CALL	TIME5M		;5m sec*3
	CALL	TIME5M
	CALL	TIME5M
	MOVLW	030H		;Function set 8bits mode
	MOVWF	PORTB
	BCF	PORTA,LCD_RS
	BSF	PORTA,LCD_E	;E 220nSec over
	BCF	PORTA,LCD_E
	CALL	TIME5M
	MOVLW	020H		;Function set 4bits mode
	MOVWF	PORTB		;
	BCF	PORTA,LCD_RS	;RS
	BSF	PORTA,LCD_E
	BCF	PORTA,LCD_E
	CALL	TIME100
	MOVLW	28H		;*2 Lines
	CALL	LCD_CMD
	MOVLW	0CH		;Display on D=1 C=B=0
	CALL	LCD_CMD
	MOVLW	06H		;Entry I/D=1 S=0
	CALL	LCD_CMD
	RETURN

[もどる]もどる  [MAIN MENU

inserted by FC2 system