AKI-H8/3052で遊ぶ ~ キャラクタ液晶モジュール

秋月で売られているキャラクタ液晶をH8に繋いでいる人が多いようです. これに文字を出せるようにしましょう.

プログラム

配線がめんどいので,4ビットモードです. P3に接続してください.プログラムを見れば配線はすぐに分かると思います(^^;.


////////////////////////////////////////////////////////////////////////////
//               LCD

#define LCD_PORT P3
#define LCD_SIG_RS 0x10
#define LCD_SIG_E  0x20
#define LCD_CMD_CLEAR 0x01

volatile void lcd_wait(void)
{
	int t = 10000;
	while(t--);
}

// 8ビット出力
void lcd_out(unsigned char d)
{
	LCD_PORT.DR.BYTE = d | LCD_SIG_E; // output and enable E
	//lcd_wait(); // 無いと駄目?
	LCD_PORT.DR.BYTE = d & ~LCD_SIG_E; // output and disable E
	lcd_wait();
}

// LCD初期化
void lcd_init(void)
{
	// 3回 00000011を出力
	lcd_out(0x03);
	lcd_out(0x03);
	lcd_out(0x03);

	// ファンクションセット
	lcd_out(0x02); // 4ビットモードに
	lcd_out(0x2);
	lcd_out(0x8);

	// 00001100 表示オン/カーソルOFF/ブリンクOFF
	lcd_out(0x0);
	lcd_out(0xc);

	// 00000110 エントリーモードセット
	lcd_out(0x0);
	lcd_out(0x6);
}

// データ出力
void lcd_write(unsigned char d)
{
	lcd_out((d >> 4)&0x0f | LCD_SIG_RS);  // 上位4ビット
	lcd_wait();
	lcd_out(d&0x0f | LCD_SIG_RS);       // 下位4ビット
	lcd_wait();
}

// 表示クリア
void lcd_clear(void)
{
	LCD_PORT.DR.BYTE = 0;
	lcd_out(0);
	lcd_out(LCD_CMD_CLEAR);
	lcd_wait();
}


void lcd_setpos(int x,int y)
{
	y &= 0x1; // 2行のみ
	LCD_PORT.DR.BYTE = 0;
	lcd_out(0x08 | (y << 2) );
	lcd_out(x);
	lcd_wait();
}


static int lcd_line = 0;
static int lcd_clearflag = 0;

// char送信
void lcd_putchar(char c) {
	if (c=='\n') {
		lcd_line++;
		lcd_clearflag = 1;
	} else if (c=='\f') {
		lcd_clear();
		lcd_line = 0;
	} else {
		if (lcd_clearflag) {
			lcd_setpos(0,lcd_line);
			lcd_clearflag = 17;
			while (--lcd_clearflag) lcd_write(' ');
			lcd_setpos(0,lcd_line);
		}
		lcd_write((unsigned char)c);
	}
}

// 文字列出力
void lcd_puts(char *s) {
	while (*s) lcd_putchar(*s++);
}

使い方


int main()
{
	P3.DDR = 0xff;  // LCD
	lcd_wait(); // 待ってみる
	lcd_init();

	lcd_putchar('\f'); // clear

	lcd_puts("Stand by ready!\n");
	lcd_puts("Set up.");

	for(;;);
}

終わりに

実は,H8が無い環境でプログラムを微妙に修正してから載せているので, もしかしたら実機で動かないかも….

誰かが買ってきた「C言語による H8マイコン プログラミング入門」という本を教科書に しています. ここの説明も出来る限り本に合わせています.

ただ,この本のプログラムの癖は独特です(特に定数の使い方や関数名の付け方が…). 説明はとても分かりやすいので,H8初心者には良いと思いますが, プログラミングの教科書には向いてないような気もします.

この文書の履歴

Copyright © 瓶詰堂 all rights reserved.