LCDディスプレイ関係サンプル

(Mini-c 関数の作成)

 このファイルは、LCDのキャラクターディスプレーで、1行または2行表示で桁数が 16,24,40桁等の物が、ジャンクとして安く売られているものをディスプレーとして 使用するための関数が書いて有ります。ただし、コントロールに日立製のHD44780を 使用している物に限ります。
 HD44780は68系のため、Z80とインターフィスを取ることが少々面倒ですが、 CPUとLCDコントローラの接続は、バスラインに直結してあります、参考の為に コントロール信号の 接続図を、書いておきます。




 次に、各関数の説明を行います。"

"void lcd_reset(int line)"

この関数は、LCDの初期化を行います。引数は、表示行数で "1"または、"2"のみのどちらかとなります。


"void lcd_clear( )"

この関数は、表示をクリアーします。


"void lcd_data_dsp(int dsp_dat)"

この関数は、LCDに1文字表示を行います。ただし、LCDコントロラーの表示メモリーがLCDの桁数に関係無く一定のため、桁数を越えた部分は表示しません。とくに、2行表示のLCDの場合、1行目と2行目で表示がつながら無くなります。ちなみに2行目の最初の桁のカーソルアドレスは、40hとなっています。


"void lcd_str_dsp(char *str)"

この関数は、LCDに文字列を表示します。これも上記の関数と同じ桁数を越えると表示しない事に、注意が必要です。


"void cursor_home( )"

この関数は、カーソルをホームポジションに戻します。

目次に戻る


/*======================================================================*/
/*									*/
/*		HD44780使用LCDユニット用			*/
/*		ドライブ ライブラリー Vr1.00			*/
/*		(クロック8MHz データバス直結用)			*/
/*				lcd_drv.h				*/
/*									*/
/*	void	lcd_reset(int line)	line = 1 or 2			*/
/*	void	lcd_clear( )						*/
/*	void	lcd_data_dsp(int dsp_dat)				*/
/*	void	lcd_str_dsp(char *str)					*/
/*	void	cursor_home( )						*/
/*	void	cursor_adr_w(int c_adr)					*/
/*	int	cursor_adr_r( )						*/
/*	void	display_on( )						*/
/*	void	cursor_on( )						*/
/*	void	brnk_on( )						*/
/*	void	cursor_brnk_on( )					*/
/*	void	display_off( )						*/
/*					96/06/24	Y,Fushimi	*/
/*									*/
/*======================================================================*/
#asm

;	LCD_BUSY	*** LCDビジーチェック ***

LCD_BUSY:	PUSH	AF

LCD_BUSY_1:	IN	A,(IO_LCD_BC)
		BIT	7,A
		JR	NZ,LCD_BUSY_1

		POP	AF
		RET


;	LCD_INST	*** インストラクションデータ出力 ***  (A reg)

LCD_INST:	PUSH	AF
		CALL	LCD_BUSY
		OUT	(IO_LCD_BC),A
		POP	AF
		RET


;	LCD_CRLF	*** キャッジリターン ***

LCD_CRLF:	PUSH	AF
		LD	A,0C0H
		CALL	LCD_INST
		POP	AF
		RET


;	LCD_FUNCTION	*** LCDファンクションセット ***

LCD_FUNCTION:	PUSH	AF		;リセット後一回のみ

		BIT	1,A
		JR	NZ,LCD_FUNCTION1
		LD	A,30H		;8bit I/F,5x7 Disp,1 Line
		JR	LCD_FUNCTION2
LCD_FUNCTION1:	LD	A,38H		;8bit I/F,5x7 Disp,2 Line
LCD_FUNCTION2:	OUT	(IO_LCD_BC),A

		POP	AF
		RET


;		*** 表示用タイマー ***

WAIT_SHORT:	PUSH	AF		;4MHzの場合316μs
		PUSH	BC		;6MHzの場合210μs

		LD	B,93		;8MHzの場合158μs
WAIT_SHORT_1:	DJNZ	WAIT_SHORT_1

		POP	BC
		POP	AF
		RET



WAIT_LONG:	PUSH	AF		;4MHzの場合1.63ms
		PUSH	BC

		LD	B,103		;8MHzの場合103
WAIT_LONG_1:	CALL	WAIT_SHORT
		DJNZ	WAIT_LONG_1

		POP	BC
		POP	AF
		RET



#endasm


/*		*** 電源オンリセット ***	*/
/*			line = 1 or 2			*/

void	lcd_reset(int line)
{
#asm
	ld	hl, 2
	add	hl, sp
	ld	a, (hl)
	ld	b,10
lcd_reset1:
	call	wait_long
	djnz	lcd_reset1
	call	lcd_function
	ld	b,3
lcd_reset2:
	call	wait_long
	djnz	lcd_reset2
	call	lcd_function
	call	wait_short
	call	lcd_function
	call	wait_short
	call	lcd_function
	ld	a,06h
	call	lcd_inst
	ld	a,01h
	call	lcd_inst
	ld	a,0ch
	call	lcd_inst
#endasm
}

/*	*** LCD1文字表示データ出力 ***	*/

void	lcd_data_dsp(int dsp_dat)
{
#asm
	ld	hl, 2
	add	hl, sp
	ld	a, (hl)
	call	lcd_busy
	out	(io_lcd_dt),a
#endasm
}

/*	*** LCD文字列表示データ出力 ***	*/

void	lcd_str_dsp(char *str)

{
#asm
	ld	hl, 2
	add	hl, sp
	ld	a,(hl)
	inc	hl
	ld	h,(hl)
	ld	l,a
print_to_null:
	ld	a,(hl)
	inc	hl
	or	a
	jr	z,print_to_null_1
	call	lcd_busy
	out	(io_lcd_dt),a
	jr	print_to_null
print_to_null_1:

#endasm
}

/*	*** LCD全桁表示消去 ***	*/

void	lcd_clear( )
{
#asm
	ld	a,01h
	call	lcd_inst
#endasm
}

/*	*** カーソルをホームポジションへ ***	*/

void	cursor_home( )
{
#asm
	ld	a,02h
	call	lcd_inst
#endasm
}

/*	*** カーソルを指定位置に ***	*/

void	cursor_adr_w(int c_adr)
{
#asm
	ld	hl, 2
	add	hl, sp
	ld	a, (hl)
	or	80h
	call	lcd_inst
#endasm
}

/*	*** カーソル位置リード ***	*/

int	cursor_adr_r( )
{
#asm
	call	lcd_busy
	in	a,(io_lcd_bc)
	and	7fh
	ld	l, a
	ld	h, 0
#endasm
}

/*	*** 表示ON ***	*/

void	display_on( )
{
#asm
	ld	a,0ch
	call	lcd_inst
#endasm
}

/*	*** カーソル ON ***	*/

void	cursor_on( )
{
#asm
	ld	a,0eh
	call	lcd_inst
#endasm
}

/*	*** ブリンク ON ***	*/

void	brnk_on( )
{
#asm
	ld	a,0dh
	call	lcd_inst
#endasm
}

/*	*** カーソル、ブリンク ON ***	*/

void	cursor_brnk_on( )
{
#asm
	ld	a,0fh
	call	lcd_inst
#endasm
}


/*	*** 表示OFF ***	*/

void	display_off( )
{
#asm
	ld	a,08h
	call	lcd_inst
#endasm
}







目次に戻る